JEI building, Gradle building
- Refactor JEI category building - Fix placard item requirement not checking NBT - Use AddPackFindersEvent instead of ShippedResourcePacks - Remove unused config values - Provide separate resource and data formats in pack.mcmeta - Compress all images - Update to latest Flywheel - Disable jarJar inclusion of Flywheel - Use ${file.jarVersion} instead of ${version} - Add workaround for SpongePowered/MixinGradle#38
28
build.gradle
|
@ -133,19 +133,20 @@ repositories {
|
||||||
dependencies {
|
dependencies {
|
||||||
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
|
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
|
||||||
|
|
||||||
jarJar(group: 'com.tterrag.registrate', name: 'Registrate', version: '[MC1.18.2-1.1.3]') {
|
jarJar(group: 'com.tterrag.registrate', name: 'Registrate', version: '[MC1.18.2-1.1.3,)') {
|
||||||
jarJar.pin(it, project.registrate_version)
|
jarJar.pin(it, project.registrate_version)
|
||||||
}
|
}
|
||||||
jarJar(group: 'com.jozufozu.flywheel', name: 'Flywheel-Forge', version: '[1.18-0.6.4,1.18-0.6.5)') {
|
// Uncomment once Forge fixes mixins for included jars
|
||||||
jarJar.pin(it, project.flywheel_version)
|
//jarJar(group: 'com.jozufozu.flywheel', name: "flywheel-forge-${flywheel_minecraft_version}", version: '[0.6.4,0.6.5)') {
|
||||||
}
|
// jarJar.pin(it, project.flywheel_version)
|
||||||
|
//}
|
||||||
|
|
||||||
implementation fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}")
|
implementation fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}")
|
||||||
|
|
||||||
if (inWorkspace) {
|
if (inWorkspace) {
|
||||||
implementation project(':Flywheel')
|
implementation project(':Flywheel')
|
||||||
} else {
|
} else {
|
||||||
implementation fg.deobf("com.jozufozu.flywheel:Flywheel-Forge:${flywheel_version}")
|
implementation fg.deobf("com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}")
|
||||||
}
|
}
|
||||||
|
|
||||||
compileOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}:${jei_version}:api")
|
compileOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}:${jei_version}:api")
|
||||||
|
@ -169,14 +170,6 @@ dependencies {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
processResources {
|
|
||||||
inputs.property 'version', mod_version
|
|
||||||
|
|
||||||
filesMatching('META-INF/mods.toml') {
|
|
||||||
expand 'version': mod_version
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sourceSets.main.resources {
|
sourceSets.main.resources {
|
||||||
srcDir 'src/generated/resources'
|
srcDir 'src/generated/resources'
|
||||||
exclude '.cache/'
|
exclude '.cache/'
|
||||||
|
@ -186,6 +179,12 @@ mixin {
|
||||||
add sourceSets.main, 'create.refmap.json'
|
add sourceSets.main, 'create.refmap.json'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Workaround for SpongePowered/MixinGradle#38
|
||||||
|
afterEvaluate {
|
||||||
|
tasks.configureReobfTaskForReobfJar.mustRunAfter(tasks.compileJava)
|
||||||
|
tasks.configureReobfTaskForReobfJarJar.mustRunAfter(tasks.compileJava)
|
||||||
|
}
|
||||||
|
|
||||||
tasks.withType(JavaCompile).configureEach {
|
tasks.withType(JavaCompile).configureEach {
|
||||||
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
|
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
|
||||||
}
|
}
|
||||||
|
@ -201,7 +200,7 @@ jar {
|
||||||
'Specification-Title': 'create',
|
'Specification-Title': 'create',
|
||||||
'Specification-Vendor': 'simibubi',
|
'Specification-Vendor': 'simibubi',
|
||||||
'Specification-Version': '1',
|
'Specification-Version': '1',
|
||||||
'Implementation-Title': project.name,
|
'Implementation-Title': project.jar.baseName,
|
||||||
'Implementation-Version': project.jar.archiveVersion,
|
'Implementation-Version': project.jar.archiveVersion,
|
||||||
'Implementation-Vendor': 'simibubi',
|
'Implementation-Vendor': 'simibubi',
|
||||||
'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
|
'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
|
||||||
|
@ -233,6 +232,7 @@ publishing {
|
||||||
artifactId = archivesBaseName
|
artifactId = archivesBaseName
|
||||||
|
|
||||||
from components.java
|
from components.java
|
||||||
|
fg.component(it)
|
||||||
jarJar.component(it)
|
jarJar.component(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,9 +20,10 @@ parchment_version = 2022.07.10
|
||||||
|
|
||||||
# dependency versions
|
# dependency versions
|
||||||
registrate_version = MC1.18.2-1.1.3
|
registrate_version = MC1.18.2-1.1.3
|
||||||
flywheel_version = 1.18-0.6.4.86
|
flywheel_minecraft_version = 1.18.2
|
||||||
|
flywheel_version = 0.6.4-90
|
||||||
jei_minecraft_version = 1.18.2
|
jei_minecraft_version = 1.18.2
|
||||||
jei_version = 9.5.3.143
|
jei_version = 9.7.0.209
|
||||||
curios_minecraft_version = 1.18.2
|
curios_minecraft_version = 1.18.2
|
||||||
curios_version = 5.0.7.0
|
curios_version = 5.0.7.0
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,6 @@ import com.simibubi.create.foundation.render.CachedBufferer;
|
||||||
import com.simibubi.create.foundation.render.CreateContexts;
|
import com.simibubi.create.foundation.render.CreateContexts;
|
||||||
import com.simibubi.create.foundation.render.SuperByteBufferCache;
|
import com.simibubi.create.foundation.render.SuperByteBufferCache;
|
||||||
import com.simibubi.create.foundation.utility.ModelSwapper;
|
import com.simibubi.create.foundation.utility.ModelSwapper;
|
||||||
import com.simibubi.create.foundation.utility.ShippedResourcePacks;
|
|
||||||
import com.simibubi.create.foundation.utility.ghost.GhostBlocks;
|
import com.simibubi.create.foundation.utility.ghost.GhostBlocks;
|
||||||
import com.simibubi.create.foundation.utility.outliner.Outliner;
|
import com.simibubi.create.foundation.utility.outliner.Outliner;
|
||||||
|
|
||||||
|
@ -85,8 +84,6 @@ public class CreateClient {
|
||||||
BUFFER_CACHE.registerCompartment(SBBContraptionManager.CONTRAPTION, 20);
|
BUFFER_CACHE.registerCompartment(SBBContraptionManager.CONTRAPTION, 20);
|
||||||
BUFFER_CACHE.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20);
|
BUFFER_CACHE.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20);
|
||||||
|
|
||||||
ShippedResourcePacks.extractFiles("Copper Legacy Pack");
|
|
||||||
|
|
||||||
AllKeys.register();
|
AllKeys.register();
|
||||||
// AllFluids.assignRenderLayers();
|
// AllFluids.assignRenderLayers();
|
||||||
AllBlockPartials.init();
|
AllBlockPartials.init();
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.simibubi.create.compat.jei;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
@ -40,14 +41,24 @@ import com.simibubi.create.compat.jei.category.SawingCategory;
|
||||||
import com.simibubi.create.compat.jei.category.SequencedAssemblyCategory;
|
import com.simibubi.create.compat.jei.category.SequencedAssemblyCategory;
|
||||||
import com.simibubi.create.compat.jei.category.SpoutCategory;
|
import com.simibubi.create.compat.jei.category.SpoutCategory;
|
||||||
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCraftingRecipe;
|
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCraftingRecipe;
|
||||||
|
import com.simibubi.create.content.contraptions.components.crusher.AbstractCrushingRecipe;
|
||||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe;
|
import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe;
|
||||||
import com.simibubi.create.content.contraptions.components.deployer.ManualApplicationRecipe;
|
import com.simibubi.create.content.contraptions.components.deployer.ManualApplicationRecipe;
|
||||||
|
import com.simibubi.create.content.contraptions.components.fan.HauntingRecipe;
|
||||||
|
import com.simibubi.create.content.contraptions.components.fan.SplashingRecipe;
|
||||||
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
|
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.press.PressingRecipe;
|
||||||
|
import com.simibubi.create.content.contraptions.components.saw.CuttingRecipe;
|
||||||
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
|
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.actors.FillingRecipe;
|
||||||
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid;
|
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid;
|
||||||
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipes;
|
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipes;
|
||||||
|
import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipe;
|
||||||
import com.simibubi.create.content.contraptions.processing.BasinRecipe;
|
import com.simibubi.create.content.contraptions.processing.BasinRecipe;
|
||||||
|
import com.simibubi.create.content.contraptions.processing.EmptyingRecipe;
|
||||||
|
import com.simibubi.create.content.contraptions.processing.ItemApplicationRecipe;
|
||||||
import com.simibubi.create.content.curiosities.tools.BlueprintScreen;
|
import com.simibubi.create.content.curiosities.tools.BlueprintScreen;
|
||||||
|
import com.simibubi.create.content.curiosities.tools.SandPaperPolishingRecipe;
|
||||||
import com.simibubi.create.content.logistics.item.LinkedControllerScreen;
|
import com.simibubi.create.content.logistics.item.LinkedControllerScreen;
|
||||||
import com.simibubi.create.content.logistics.item.filter.AbstractFilterScreen;
|
import com.simibubi.create.content.logistics.item.filter.AbstractFilterScreen;
|
||||||
import com.simibubi.create.content.logistics.trains.management.schedule.ScheduleScreen;
|
import com.simibubi.create.content.logistics.trains.management.schedule.ScheduleScreen;
|
||||||
|
@ -56,11 +67,14 @@ import com.simibubi.create.foundation.config.CRecipes;
|
||||||
import com.simibubi.create.foundation.config.ConfigBase.ConfigBool;
|
import com.simibubi.create.foundation.config.ConfigBase.ConfigBool;
|
||||||
import com.simibubi.create.foundation.data.recipe.LogStrippingFakeRecipes;
|
import com.simibubi.create.foundation.data.recipe.LogStrippingFakeRecipes;
|
||||||
import com.simibubi.create.foundation.gui.container.AbstractSimiContainerScreen;
|
import com.simibubi.create.foundation.gui.container.AbstractSimiContainerScreen;
|
||||||
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo;
|
import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo;
|
||||||
|
|
||||||
import mezz.jei.api.IModPlugin;
|
import mezz.jei.api.IModPlugin;
|
||||||
import mezz.jei.api.JeiPlugin;
|
import mezz.jei.api.JeiPlugin;
|
||||||
import mezz.jei.api.constants.RecipeTypes;
|
import mezz.jei.api.constants.RecipeTypes;
|
||||||
|
import mezz.jei.api.forge.ForgeTypes;
|
||||||
|
import mezz.jei.api.gui.drawable.IDrawable;
|
||||||
import mezz.jei.api.recipe.category.IRecipeCategory;
|
import mezz.jei.api.recipe.category.IRecipeCategory;
|
||||||
import mezz.jei.api.registration.IGuiHandlerRegistration;
|
import mezz.jei.api.registration.IGuiHandlerRegistration;
|
||||||
import mezz.jei.api.registration.IRecipeCatalystRegistration;
|
import mezz.jei.api.registration.IRecipeCatalystRegistration;
|
||||||
|
@ -73,10 +87,13 @@ import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Items;
|
import net.minecraft.world.item.Items;
|
||||||
|
import net.minecraft.world.item.crafting.AbstractCookingRecipe;
|
||||||
import net.minecraft.world.item.crafting.CraftingRecipe;
|
import net.minecraft.world.item.crafting.CraftingRecipe;
|
||||||
import net.minecraft.world.item.crafting.Recipe;
|
import net.minecraft.world.item.crafting.Recipe;
|
||||||
import net.minecraft.world.item.crafting.RecipeType;
|
import net.minecraft.world.item.crafting.RecipeType;
|
||||||
|
import net.minecraft.world.item.crafting.SmokingRecipe;
|
||||||
import net.minecraft.world.level.ItemLike;
|
import net.minecraft.world.level.ItemLike;
|
||||||
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraftforge.common.crafting.IShapedRecipe;
|
import net.minecraftforge.common.crafting.IShapedRecipe;
|
||||||
import net.minecraftforge.fml.ModList;
|
import net.minecraftforge.fml.ModList;
|
||||||
|
|
||||||
|
@ -87,161 +104,217 @@ public class CreateJEI implements IModPlugin {
|
||||||
|
|
||||||
private static final ResourceLocation ID = Create.asResource("jei_plugin");
|
private static final ResourceLocation ID = Create.asResource("jei_plugin");
|
||||||
|
|
||||||
public IIngredientManager ingredientManager;
|
|
||||||
private final List<CreateRecipeCategory<?>> allCategories = new ArrayList<>();
|
private final List<CreateRecipeCategory<?>> allCategories = new ArrayList<>();
|
||||||
|
private IIngredientManager ingredientManager;
|
||||||
|
|
||||||
private void loadCategories() {
|
private void loadCategories() {
|
||||||
allCategories.clear();
|
allCategories.clear();
|
||||||
|
|
||||||
CreateRecipeCategory<?>
|
CreateRecipeCategory<?>
|
||||||
|
|
||||||
milling = register("milling", MillingCategory::new)
|
milling = builder(AbstractCrushingRecipe.class)
|
||||||
.addTypedRecipes(AllRecipeTypes.MILLING)
|
.addTypedRecipes(AllRecipeTypes.MILLING)
|
||||||
.catalyst(AllBlocks.MILLSTONE::get)
|
.catalyst(AllBlocks.MILLSTONE::get)
|
||||||
.build(),
|
.doubleItemIcon(AllBlocks.MILLSTONE.get(), AllItems.WHEAT_FLOUR.get())
|
||||||
|
.emptyBackground(177, 53)
|
||||||
|
.build("milling", MillingCategory::new),
|
||||||
|
|
||||||
crushing = register("crushing", CrushingCategory::new)
|
crushing = builder(AbstractCrushingRecipe.class)
|
||||||
.addTypedRecipes(AllRecipeTypes.CRUSHING)
|
.addTypedRecipes(AllRecipeTypes.CRUSHING)
|
||||||
.addTypedRecipesExcluding(AllRecipeTypes.MILLING::getType, AllRecipeTypes.CRUSHING::getType)
|
.addTypedRecipesExcluding(AllRecipeTypes.MILLING::getType, AllRecipeTypes.CRUSHING::getType)
|
||||||
.catalyst(AllBlocks.CRUSHING_WHEEL::get)
|
.catalyst(AllBlocks.CRUSHING_WHEEL::get)
|
||||||
.build(),
|
.doubleItemIcon(AllBlocks.CRUSHING_WHEEL.get(), AllItems.CRUSHED_GOLD.get())
|
||||||
|
.emptyBackground(177, 100)
|
||||||
|
.build("crushing", CrushingCategory::new),
|
||||||
|
|
||||||
pressing = register("pressing", PressingCategory::new)
|
pressing = builder(PressingRecipe.class)
|
||||||
.addTypedRecipes(AllRecipeTypes.PRESSING)
|
.addTypedRecipes(AllRecipeTypes.PRESSING)
|
||||||
.catalyst(AllBlocks.MECHANICAL_PRESS::get)
|
.catalyst(AllBlocks.MECHANICAL_PRESS::get)
|
||||||
.build(),
|
.doubleItemIcon(AllBlocks.MECHANICAL_PRESS.get(), AllItems.IRON_SHEET.get())
|
||||||
|
.emptyBackground(177, 70)
|
||||||
|
.build("pressing", PressingCategory::new),
|
||||||
|
|
||||||
washing = register("fan_washing", FanWashingCategory::new)
|
washing = builder(SplashingRecipe.class)
|
||||||
.addTypedRecipes(AllRecipeTypes.SPLASHING)
|
.addTypedRecipes(AllRecipeTypes.SPLASHING)
|
||||||
.catalystStack(ProcessingViaFanCategory.getFan("fan_washing"))
|
.catalystStack(ProcessingViaFanCategory.getFan("fan_washing"))
|
||||||
.build(),
|
.doubleItemIcon(AllItems.PROPELLER.get(), Items.WATER_BUCKET)
|
||||||
|
.emptyBackground(178, 72)
|
||||||
|
.build("fan_washing", FanWashingCategory::new),
|
||||||
|
|
||||||
smoking = register("fan_smoking", FanSmokingCategory::new)
|
smoking = builder(SmokingRecipe.class)
|
||||||
.addTypedRecipes(() -> RecipeType.SMOKING)
|
.addTypedRecipes(() -> RecipeType.SMOKING)
|
||||||
.catalystStack(ProcessingViaFanCategory.getFan("fan_smoking"))
|
.catalystStack(ProcessingViaFanCategory.getFan("fan_smoking"))
|
||||||
.build(),
|
.doubleItemIcon(AllItems.PROPELLER.get(), Items.CAMPFIRE)
|
||||||
|
.emptyBackground(178, 72)
|
||||||
|
.build("fan_smoking", FanSmokingCategory::new),
|
||||||
|
|
||||||
blasting = register("fan_blasting", FanBlastingCategory::new)
|
blasting = builder(AbstractCookingRecipe.class)
|
||||||
.addTypedRecipesExcluding(() -> RecipeType.SMELTING, () -> RecipeType.BLASTING)
|
.addTypedRecipesExcluding(() -> RecipeType.SMELTING, () -> RecipeType.BLASTING)
|
||||||
.addTypedRecipes(() -> RecipeType.BLASTING)
|
.addTypedRecipes(() -> RecipeType.BLASTING)
|
||||||
.removeRecipes(() -> RecipeType.SMOKING)
|
.removeRecipes(() -> RecipeType.SMOKING)
|
||||||
.catalystStack(ProcessingViaFanCategory.getFan("fan_blasting"))
|
.catalystStack(ProcessingViaFanCategory.getFan("fan_blasting"))
|
||||||
.build(),
|
.doubleItemIcon(AllItems.PROPELLER.get(), Items.LAVA_BUCKET)
|
||||||
|
.emptyBackground(178, 72)
|
||||||
|
.build("fan_blasting", FanBlastingCategory::new),
|
||||||
|
|
||||||
haunting = register("fan_haunting", FanHauntingCategory::new).addTypedRecipes(AllRecipeTypes.HAUNTING)
|
haunting = builder(HauntingRecipe.class)
|
||||||
.catalystStack(ProcessingViaFanCategory.getFan("fan_haunting"))
|
.addTypedRecipes(AllRecipeTypes.HAUNTING)
|
||||||
.build(),
|
.catalystStack(ProcessingViaFanCategory.getFan("fan_haunting"))
|
||||||
|
.doubleItemIcon(AllItems.PROPELLER.get(), Items.SOUL_CAMPFIRE)
|
||||||
|
.emptyBackground(178, 72)
|
||||||
|
.build("fan_haunting", FanHauntingCategory::new),
|
||||||
|
|
||||||
mixing = register("mixing", MixingCategory::standard).addTypedRecipes(AllRecipeTypes.MIXING)
|
mixing = builder(BasinRecipe.class)
|
||||||
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
|
.addTypedRecipes(AllRecipeTypes.MIXING)
|
||||||
.catalyst(AllBlocks.BASIN::get)
|
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
|
||||||
.build(),
|
.catalyst(AllBlocks.BASIN::get)
|
||||||
|
.doubleItemIcon(AllBlocks.MECHANICAL_MIXER.get(), AllBlocks.BASIN.get())
|
||||||
|
.emptyBackground(177, 103)
|
||||||
|
.build("mixing", MixingCategory::standard),
|
||||||
|
|
||||||
seqAssembly = register("sequenced_assembly", SequencedAssemblyCategory::new)
|
autoShapeless = builder(BasinRecipe.class)
|
||||||
.addTypedRecipes(AllRecipeTypes.SEQUENCED_ASSEMBLY)
|
.enableWhen(c -> c.allowShapelessInMixer)
|
||||||
.build(),
|
.addAllRecipesIf(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe<?>)
|
||||||
|
|
||||||
autoShapeless = register("automatic_shapeless", MixingCategory::autoShapeless)
|
|
||||||
.addAllRecipesIf(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe<?>)
|
|
||||||
&& r.getIngredients()
|
|
||||||
.size() > 1
|
|
||||||
&& !MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.shouldIgnoreInAutomation(r),
|
|
||||||
BasinRecipe::convertShapeless)
|
|
||||||
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
|
|
||||||
.catalyst(AllBlocks.BASIN::get)
|
|
||||||
.enableWhen(c -> c.allowShapelessInMixer)
|
|
||||||
.build(),
|
|
||||||
|
|
||||||
brewing = register("automatic_brewing", MixingCategory::autoBrewing).addRecipes(() -> PotionMixingRecipes.ALL)
|
|
||||||
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
|
|
||||||
.catalyst(AllBlocks.BASIN::get)
|
|
||||||
.build(),
|
|
||||||
|
|
||||||
sawing = register("sawing", SawingCategory::new).addTypedRecipes(AllRecipeTypes.CUTTING)
|
|
||||||
.catalyst(AllBlocks.MECHANICAL_SAW::get)
|
|
||||||
.build(),
|
|
||||||
|
|
||||||
blockCutting = register("block_cutting", () -> new BlockCuttingCategory(Items.STONE_BRICK_STAIRS))
|
|
||||||
.addRecipes(() -> CondensedBlockCuttingRecipe.condenseRecipes(getTypedRecipesExcluding(RecipeType.STONECUTTING, AllRecipeTypes::shouldIgnoreInAutomation)))
|
|
||||||
.catalyst(AllBlocks.MECHANICAL_SAW::get)
|
|
||||||
.enableWhen(c -> c.allowStonecuttingOnSaw)
|
|
||||||
.build(),
|
|
||||||
|
|
||||||
woodCutting = register("wood_cutting", () -> new BlockCuttingCategory(Items.OAK_STAIRS))
|
|
||||||
.addRecipes(() -> CondensedBlockCuttingRecipe.condenseRecipes(getTypedRecipesExcluding(SawTileEntity.woodcuttingRecipeType.get(), AllRecipeTypes::shouldIgnoreInAutomation)))
|
|
||||||
.catalyst(AllBlocks.MECHANICAL_SAW::get)
|
|
||||||
.enableWhenBool(c -> c.allowWoodcuttingOnSaw.get() && ModList.get()
|
|
||||||
.isLoaded("druidcraft"))
|
|
||||||
.build(),
|
|
||||||
|
|
||||||
packing = register("packing", PackingCategory::standard).addTypedRecipes(AllRecipeTypes.COMPACTING)
|
|
||||||
.catalyst(AllBlocks.MECHANICAL_PRESS::get)
|
|
||||||
.catalyst(AllBlocks.BASIN::get)
|
|
||||||
.build(),
|
|
||||||
|
|
||||||
autoSquare = register("automatic_packing", PackingCategory::autoSquare)
|
|
||||||
.addAllRecipesIf(
|
|
||||||
r -> (r instanceof CraftingRecipe) && !(r instanceof MechanicalCraftingRecipe)
|
|
||||||
&& MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.shouldIgnoreInAutomation(r),
|
|
||||||
BasinRecipe::convertShapeless)
|
|
||||||
.catalyst(AllBlocks.MECHANICAL_PRESS::get)
|
|
||||||
.catalyst(AllBlocks.BASIN::get)
|
|
||||||
.enableWhen(c -> c.allowShapedSquareInPress)
|
|
||||||
.build(),
|
|
||||||
|
|
||||||
polishing = register("sandpaper_polishing", PolishingCategory::new)
|
|
||||||
.addTypedRecipes(AllRecipeTypes.SANDPAPER_POLISHING)
|
|
||||||
.catalyst(AllItems.SAND_PAPER::get)
|
|
||||||
.catalyst(AllItems.RED_SAND_PAPER::get)
|
|
||||||
.build(),
|
|
||||||
|
|
||||||
item_application = register("item_application", ItemApplicationCategory::new)
|
|
||||||
.addTypedRecipes(AllRecipeTypes.ITEM_APPLICATION)
|
|
||||||
.addRecipes(LogStrippingFakeRecipes::createRecipes)
|
|
||||||
.build(),
|
|
||||||
|
|
||||||
deploying = register("deploying", DeployingCategory::new).addTypedRecipes(AllRecipeTypes.DEPLOYING)
|
|
||||||
.addTypedRecipes(AllRecipeTypes.SANDPAPER_POLISHING::getType, DeployerApplicationRecipe::convert)
|
|
||||||
.addTypedRecipes(AllRecipeTypes.ITEM_APPLICATION::getType, ManualApplicationRecipe::asDeploying)
|
|
||||||
.catalyst(AllBlocks.DEPLOYER::get)
|
|
||||||
.catalyst(AllBlocks.DEPOT::get)
|
|
||||||
.catalyst(AllItems.BELT_CONNECTOR::get)
|
|
||||||
.build(),
|
|
||||||
|
|
||||||
mysteryConversion = register("mystery_conversion", MysteriousItemConversionCategory::new)
|
|
||||||
.addRecipes(() -> MysteriousItemConversionCategory.RECIPES)
|
|
||||||
.build(),
|
|
||||||
|
|
||||||
spoutFilling = register("spout_filling", SpoutCategory::new).addTypedRecipes(AllRecipeTypes.FILLING)
|
|
||||||
.addRecipeListConsumer(recipes -> SpoutCategory.consumeRecipes(recipes::add, ingredientManager))
|
|
||||||
.catalyst(AllBlocks.SPOUT::get)
|
|
||||||
.build(),
|
|
||||||
|
|
||||||
draining = register("draining", ItemDrainCategory::new)
|
|
||||||
.addRecipeListConsumer(recipes -> ItemDrainCategory.consumeRecipes(recipes::add, ingredientManager))
|
|
||||||
.addTypedRecipes(AllRecipeTypes.EMPTYING)
|
|
||||||
.catalyst(AllBlocks.ITEM_DRAIN::get)
|
|
||||||
.build(),
|
|
||||||
|
|
||||||
autoShaped = register("automatic_shaped", MechanicalCraftingCategory::new)
|
|
||||||
.addAllRecipesIf(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe<?>)
|
|
||||||
&& r.getIngredients()
|
&& r.getIngredients()
|
||||||
.size() == 1
|
.size() > 1
|
||||||
&& !AllRecipeTypes.shouldIgnoreInAutomation(r))
|
&& !MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.shouldIgnoreInAutomation(r),
|
||||||
.addTypedRecipesIf(() -> RecipeType.CRAFTING,
|
BasinRecipe::convertShapeless)
|
||||||
recipe -> recipe instanceof IShapedRecipe<?> && !AllRecipeTypes.shouldIgnoreInAutomation(recipe))
|
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
|
||||||
.catalyst(AllBlocks.MECHANICAL_CRAFTER::get)
|
.catalyst(AllBlocks.BASIN::get)
|
||||||
.enableWhen(c -> c.allowRegularCraftingInCrafter)
|
.doubleItemIcon(AllBlocks.MECHANICAL_MIXER.get(), Items.CRAFTING_TABLE)
|
||||||
.build(),
|
.emptyBackground(177, 85)
|
||||||
|
.build("automatic_shapeless", MixingCategory::autoShapeless),
|
||||||
|
|
||||||
mechanicalCrafting = register("mechanical_crafting", MechanicalCraftingCategory::new)
|
brewing = builder(BasinRecipe.class)
|
||||||
.addTypedRecipes(AllRecipeTypes.MECHANICAL_CRAFTING)
|
.addRecipes(() -> PotionMixingRecipes.ALL)
|
||||||
.catalyst(AllBlocks.MECHANICAL_CRAFTER::get)
|
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
|
||||||
.build();
|
.catalyst(AllBlocks.BASIN::get)
|
||||||
|
.doubleItemIcon(AllBlocks.MECHANICAL_MIXER.get(), Blocks.BREWING_STAND)
|
||||||
|
.emptyBackground(177, 103)
|
||||||
|
.build("automatic_brewing", MixingCategory::autoBrewing),
|
||||||
|
|
||||||
|
packing = builder(BasinRecipe.class)
|
||||||
|
.addTypedRecipes(AllRecipeTypes.COMPACTING)
|
||||||
|
.catalyst(AllBlocks.MECHANICAL_PRESS::get)
|
||||||
|
.catalyst(AllBlocks.BASIN::get)
|
||||||
|
.doubleItemIcon(AllBlocks.MECHANICAL_PRESS.get(), AllBlocks.BASIN.get())
|
||||||
|
.emptyBackground(177, 103)
|
||||||
|
.build("packing", PackingCategory::standard),
|
||||||
|
|
||||||
|
autoSquare = builder(BasinRecipe.class)
|
||||||
|
.enableWhen(c -> c.allowShapedSquareInPress)
|
||||||
|
.addAllRecipesIf(
|
||||||
|
r -> (r instanceof CraftingRecipe) && !(r instanceof MechanicalCraftingRecipe)
|
||||||
|
&& MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.shouldIgnoreInAutomation(r),
|
||||||
|
BasinRecipe::convertShapeless)
|
||||||
|
.catalyst(AllBlocks.MECHANICAL_PRESS::get)
|
||||||
|
.catalyst(AllBlocks.BASIN::get)
|
||||||
|
.doubleItemIcon(AllBlocks.MECHANICAL_PRESS.get(), Blocks.CRAFTING_TABLE)
|
||||||
|
.emptyBackground(177, 85)
|
||||||
|
.build("automatic_packing", PackingCategory::autoSquare),
|
||||||
|
|
||||||
|
sawing = builder(CuttingRecipe.class)
|
||||||
|
.addTypedRecipes(AllRecipeTypes.CUTTING)
|
||||||
|
.catalyst(AllBlocks.MECHANICAL_SAW::get)
|
||||||
|
.doubleItemIcon(AllBlocks.MECHANICAL_SAW.get(), Items.OAK_LOG)
|
||||||
|
.emptyBackground(177, 70)
|
||||||
|
.build("sawing", SawingCategory::new),
|
||||||
|
|
||||||
|
blockCutting = builder(CondensedBlockCuttingRecipe.class)
|
||||||
|
.enableWhen(c -> c.allowStonecuttingOnSaw)
|
||||||
|
.addRecipes(() -> CondensedBlockCuttingRecipe.condenseRecipes(getTypedRecipesExcluding(RecipeType.STONECUTTING, AllRecipeTypes::shouldIgnoreInAutomation)))
|
||||||
|
.catalyst(AllBlocks.MECHANICAL_SAW::get)
|
||||||
|
.doubleItemIcon(AllBlocks.MECHANICAL_SAW.get(), Items.STONE_BRICK_STAIRS)
|
||||||
|
.emptyBackground(177, 70)
|
||||||
|
.build("block_cutting", BlockCuttingCategory::new),
|
||||||
|
|
||||||
|
woodCutting = builder(CondensedBlockCuttingRecipe.class)
|
||||||
|
.enableIf(c -> c.allowWoodcuttingOnSaw.get() && ModList.get()
|
||||||
|
.isLoaded("druidcraft"))
|
||||||
|
.addRecipes(() -> CondensedBlockCuttingRecipe.condenseRecipes(getTypedRecipesExcluding(SawTileEntity.woodcuttingRecipeType.get(), AllRecipeTypes::shouldIgnoreInAutomation)))
|
||||||
|
.catalyst(AllBlocks.MECHANICAL_SAW::get)
|
||||||
|
.doubleItemIcon(AllBlocks.MECHANICAL_SAW.get(), Items.OAK_STAIRS)
|
||||||
|
.emptyBackground(177, 70)
|
||||||
|
.build("wood_cutting", BlockCuttingCategory::new),
|
||||||
|
|
||||||
|
polishing = builder(SandPaperPolishingRecipe.class)
|
||||||
|
.addTypedRecipes(AllRecipeTypes.SANDPAPER_POLISHING)
|
||||||
|
.catalyst(AllItems.SAND_PAPER::get)
|
||||||
|
.catalyst(AllItems.RED_SAND_PAPER::get)
|
||||||
|
.itemIcon(AllItems.SAND_PAPER.get())
|
||||||
|
.emptyBackground(177, 55)
|
||||||
|
.build("sandpaper_polishing", PolishingCategory::new),
|
||||||
|
|
||||||
|
item_application = builder(ItemApplicationRecipe.class)
|
||||||
|
.addTypedRecipes(AllRecipeTypes.ITEM_APPLICATION)
|
||||||
|
.addRecipes(LogStrippingFakeRecipes::createRecipes)
|
||||||
|
.itemIcon(AllItems.BRASS_HAND.get())
|
||||||
|
.emptyBackground(177, 60)
|
||||||
|
.build("item_application", ItemApplicationCategory::new),
|
||||||
|
|
||||||
|
deploying = builder(DeployerApplicationRecipe.class)
|
||||||
|
.addTypedRecipes(AllRecipeTypes.DEPLOYING)
|
||||||
|
.addTypedRecipes(AllRecipeTypes.SANDPAPER_POLISHING::getType, DeployerApplicationRecipe::convert)
|
||||||
|
.addTypedRecipes(AllRecipeTypes.ITEM_APPLICATION::getType, ManualApplicationRecipe::asDeploying)
|
||||||
|
.catalyst(AllBlocks.DEPLOYER::get)
|
||||||
|
.catalyst(AllBlocks.DEPOT::get)
|
||||||
|
.catalyst(AllItems.BELT_CONNECTOR::get)
|
||||||
|
.itemIcon(AllBlocks.DEPLOYER.get())
|
||||||
|
.emptyBackground(177, 70)
|
||||||
|
.build("deploying", DeployingCategory::new),
|
||||||
|
|
||||||
|
spoutFilling = builder(FillingRecipe.class)
|
||||||
|
.addTypedRecipes(AllRecipeTypes.FILLING)
|
||||||
|
.addRecipeListConsumer(recipes -> SpoutCategory.consumeRecipes(recipes::add, ingredientManager))
|
||||||
|
.catalyst(AllBlocks.SPOUT::get)
|
||||||
|
.doubleItemIcon(AllBlocks.SPOUT.get(), Items.WATER_BUCKET)
|
||||||
|
.emptyBackground(177, 70)
|
||||||
|
.build("spout_filling", SpoutCategory::new),
|
||||||
|
|
||||||
|
draining = builder(EmptyingRecipe.class)
|
||||||
|
.addRecipeListConsumer(recipes -> ItemDrainCategory.consumeRecipes(recipes::add, ingredientManager))
|
||||||
|
.addTypedRecipes(AllRecipeTypes.EMPTYING)
|
||||||
|
.catalyst(AllBlocks.ITEM_DRAIN::get)
|
||||||
|
.doubleItemIcon(AllBlocks.ITEM_DRAIN.get(), Items.WATER_BUCKET)
|
||||||
|
.emptyBackground(177, 50)
|
||||||
|
.build("draining", ItemDrainCategory::new),
|
||||||
|
|
||||||
|
autoShaped = builder(CraftingRecipe.class)
|
||||||
|
.enableWhen(c -> c.allowRegularCraftingInCrafter)
|
||||||
|
.addAllRecipesIf(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe<?>)
|
||||||
|
&& r.getIngredients()
|
||||||
|
.size() == 1
|
||||||
|
&& !AllRecipeTypes.shouldIgnoreInAutomation(r))
|
||||||
|
.addTypedRecipesIf(() -> RecipeType.CRAFTING,
|
||||||
|
recipe -> recipe instanceof IShapedRecipe<?> && !AllRecipeTypes.shouldIgnoreInAutomation(recipe))
|
||||||
|
.catalyst(AllBlocks.MECHANICAL_CRAFTER::get)
|
||||||
|
.itemIcon(AllBlocks.MECHANICAL_CRAFTER.get())
|
||||||
|
.emptyBackground(177, 107)
|
||||||
|
.build("automatic_shaped", MechanicalCraftingCategory::new),
|
||||||
|
|
||||||
|
mechanicalCrafting = builder(CraftingRecipe.class)
|
||||||
|
.addTypedRecipes(AllRecipeTypes.MECHANICAL_CRAFTING)
|
||||||
|
.catalyst(AllBlocks.MECHANICAL_CRAFTER::get)
|
||||||
|
.itemIcon(AllBlocks.MECHANICAL_CRAFTER.get())
|
||||||
|
.emptyBackground(177, 107)
|
||||||
|
.build("mechanical_crafting", MechanicalCraftingCategory::new),
|
||||||
|
|
||||||
|
seqAssembly = builder(SequencedAssemblyRecipe.class)
|
||||||
|
.addTypedRecipes(AllRecipeTypes.SEQUENCED_ASSEMBLY)
|
||||||
|
.itemIcon(AllItems.PRECISION_MECHANISM.get())
|
||||||
|
.emptyBackground(180, 115)
|
||||||
|
.build("sequenced_assembly", SequencedAssemblyCategory::new),
|
||||||
|
|
||||||
|
mysteryConversion = builder(ConversionRecipe.class)
|
||||||
|
.addRecipes(() -> MysteriousItemConversionCategory.RECIPES)
|
||||||
|
.itemIcon(AllItems.CHROMATIC_COMPOUND.get())
|
||||||
|
.emptyBackground(177, 50)
|
||||||
|
.build("mystery_conversion", MysteriousItemConversionCategory::new);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T extends Recipe<?>> CategoryBuilder<T> register(String name, Supplier<CreateRecipeCategory<T>> supplier) {
|
private <T extends Recipe<?>> CategoryBuilder<T> builder(Class<? extends T> recipeClass) {
|
||||||
return new CategoryBuilder<>(name, supplier);
|
return new CategoryBuilder<>(recipeClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -250,25 +323,12 @@ public class CreateJEI implements IModPlugin {
|
||||||
return ID;
|
return ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerRecipeTransferHandlers(IRecipeTransferRegistration registration) {
|
|
||||||
registration.addRecipeTransferHandler(new BlueprintTransferHandler(), RecipeTypes.CRAFTING);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerCategories(IRecipeCategoryRegistration registration) {
|
public void registerCategories(IRecipeCategoryRegistration registration) {
|
||||||
loadCategories();
|
loadCategories();
|
||||||
registration.addRecipeCategories(allCategories.toArray(IRecipeCategory[]::new));
|
registration.addRecipeCategories(allCategories.toArray(IRecipeCategory[]::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerFluidSubtypes(ISubtypeRegistration registration) {
|
|
||||||
PotionFluidSubtypeInterpreter interpreter = new PotionFluidSubtypeInterpreter();
|
|
||||||
PotionFluid potionFluid = AllFluids.POTION.get();
|
|
||||||
registration.registerSubtypeInterpreter(potionFluid.getSource(), interpreter);
|
|
||||||
registration.registerSubtypeInterpreter(potionFluid.getFlowing(), interpreter);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerRecipes(IRecipeRegistration registration) {
|
public void registerRecipes(IRecipeRegistration registration) {
|
||||||
ingredientManager = registration.getIngredientManager();
|
ingredientManager = registration.getIngredientManager();
|
||||||
|
@ -280,7 +340,20 @@ public class CreateJEI implements IModPlugin {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) {
|
public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) {
|
||||||
allCategories.forEach(c -> c.recipeCatalysts.forEach(s -> registration.addRecipeCatalyst(s.get(), c.getRecipeType())));
|
allCategories.forEach(c -> c.registerCatalysts(registration));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerRecipeTransferHandlers(IRecipeTransferRegistration registration) {
|
||||||
|
registration.addRecipeTransferHandler(new BlueprintTransferHandler(), RecipeTypes.CRAFTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerFluidSubtypes(ISubtypeRegistration registration) {
|
||||||
|
PotionFluidSubtypeInterpreter interpreter = new PotionFluidSubtypeInterpreter();
|
||||||
|
PotionFluid potionFluid = AllFluids.POTION.get();
|
||||||
|
registration.registerSubtypeInterpreter(ForgeTypes.FLUID_STACK, potionFluid.getSource(), interpreter);
|
||||||
|
registration.registerSubtypeInterpreter(ForgeTypes.FLUID_STACK, potionFluid.getFlowing(), interpreter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||||
|
@ -295,15 +368,27 @@ public class CreateJEI implements IModPlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
private class CategoryBuilder<T extends Recipe<?>> {
|
private class CategoryBuilder<T extends Recipe<?>> {
|
||||||
private final CreateRecipeCategory<T> category;
|
private final Class<? extends T> recipeClass;
|
||||||
private final List<Consumer<List<T>>> recipeListConsumers = new ArrayList<>();
|
private Predicate<CRecipes> predicate = cRecipes -> true;
|
||||||
private Predicate<CRecipes> predicate;
|
|
||||||
|
|
||||||
public CategoryBuilder(String name, Supplier<CreateRecipeCategory<T>> category) {
|
private IDrawable background;
|
||||||
this.category = category.get();
|
private IDrawable icon;
|
||||||
this.category.setCategoryId(name);
|
|
||||||
mezz.jei.api.recipe.RecipeType<T> recipeType = this.category.getRecipeType();
|
private final List<Consumer<List<T>>> recipeListConsumers = new ArrayList<>();
|
||||||
predicate = cRecipes -> true;
|
private final List<Supplier<? extends ItemStack>> catalysts = new ArrayList<>();
|
||||||
|
|
||||||
|
public CategoryBuilder(Class<? extends T> recipeClass) {
|
||||||
|
this.recipeClass = recipeClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CategoryBuilder<T> enableIf(Predicate<CRecipes> predicate) {
|
||||||
|
this.predicate = predicate;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CategoryBuilder<T> enableWhen(Function<CRecipes, ConfigBool> configValue) {
|
||||||
|
predicate = c -> configValue.apply(c).get();
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CategoryBuilder<T> addRecipeListConsumer(Consumer<List<T>> consumer) {
|
public CategoryBuilder<T> addRecipeListConsumer(Consumer<List<T>> consumer) {
|
||||||
|
@ -380,38 +465,61 @@ public class CreateJEI implements IModPlugin {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CategoryBuilder<T> catalystStack(Supplier<ItemStack> supplier) {
|
||||||
|
catalysts.add(supplier);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public CategoryBuilder<T> catalyst(Supplier<ItemLike> supplier) {
|
public CategoryBuilder<T> catalyst(Supplier<ItemLike> supplier) {
|
||||||
return catalystStack(() -> new ItemStack(supplier.get()
|
return catalystStack(() -> new ItemStack(supplier.get()
|
||||||
.asItem()));
|
.asItem()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public CategoryBuilder<T> catalystStack(Supplier<ItemStack> supplier) {
|
public CategoryBuilder<T> icon(IDrawable icon) {
|
||||||
category.recipeCatalysts.add(supplier);
|
this.icon = icon;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CategoryBuilder<T> enableWhen(Function<CRecipes, ConfigBool> configValue) {
|
public CategoryBuilder<T> itemIcon(ItemLike item) {
|
||||||
predicate = c -> configValue.apply(c).get();
|
icon(new ItemIcon(() -> new ItemStack(item)));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CategoryBuilder<T> enableWhenBool(Function<CRecipes, Boolean> configValue) {
|
public CategoryBuilder<T> doubleItemIcon(ItemLike item1, ItemLike item2) {
|
||||||
predicate = configValue::apply;
|
icon(new DoubleItemIcon(() -> new ItemStack(item1), () -> new ItemStack(item2)));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CreateRecipeCategory<T> build() {
|
public CategoryBuilder<T> background(IDrawable background) {
|
||||||
if (predicate.test(AllConfigs.SERVER.recipes))
|
this.background = background;
|
||||||
category.recipes.add(() -> {
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CategoryBuilder<T> emptyBackground(int width, int height) {
|
||||||
|
background(new EmptyBackground(width, height));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CreateRecipeCategory<T> build(String name, CreateRecipeCategory.Factory<T> factory) {
|
||||||
|
Supplier<List<T>> recipesSupplier;
|
||||||
|
if (predicate.test(AllConfigs.SERVER.recipes)) {
|
||||||
|
recipesSupplier = () -> {
|
||||||
List<T> recipes = new ArrayList<>();
|
List<T> recipes = new ArrayList<>();
|
||||||
for (Consumer<List<T>> consumer : recipeListConsumers)
|
for (Consumer<List<T>> consumer : recipeListConsumers)
|
||||||
consumer.accept(recipes);
|
consumer.accept(recipes);
|
||||||
return recipes;
|
return recipes;
|
||||||
});
|
};
|
||||||
|
} else {
|
||||||
|
recipesSupplier = () -> Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateRecipeCategory.Info<T> info = new CreateRecipeCategory.Info<>(
|
||||||
|
new mezz.jei.api.recipe.RecipeType<>(Create.asResource(name), recipeClass),
|
||||||
|
Lang.translateDirect("recipe." + name), background, icon, recipesSupplier, catalysts);
|
||||||
|
CreateRecipeCategory<T> category = factory.create(info);
|
||||||
allCategories.add(category);
|
allCategories.add(category);
|
||||||
return category;
|
return category;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void consumeAllRecipes(Consumer<Recipe<?>> consumer) {
|
public static void consumeAllRecipes(Consumer<Recipe<?>> consumer) {
|
||||||
|
|
|
@ -56,7 +56,6 @@ public class DoubleItemIcon implements IDrawable {
|
||||||
matrixStack.popPose();
|
matrixStack.popPose();
|
||||||
|
|
||||||
matrixStack.popPose();
|
matrixStack.popPose();
|
||||||
RenderSystem.enableBlend();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
48
src/main/java/com/simibubi/create/compat/jei/ItemIcon.java
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
package com.simibubi.create.compat.jei;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
|
import com.simibubi.create.foundation.gui.element.GuiGameElement;
|
||||||
|
|
||||||
|
import mezz.jei.api.gui.drawable.IDrawable;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
|
||||||
|
public class ItemIcon implements IDrawable {
|
||||||
|
|
||||||
|
private Supplier<ItemStack> supplier;
|
||||||
|
private ItemStack stack;
|
||||||
|
|
||||||
|
public ItemIcon(Supplier<ItemStack> stack) {
|
||||||
|
this.supplier = stack;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getWidth() {
|
||||||
|
return 18;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getHeight() {
|
||||||
|
return 18;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(PoseStack matrixStack, int xOffset, int yOffset) {
|
||||||
|
if (stack == null) {
|
||||||
|
stack = supplier.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
RenderSystem.enableDepthTest();
|
||||||
|
matrixStack.pushPose();
|
||||||
|
matrixStack.translate(xOffset + 1, yOffset + 1, 0);
|
||||||
|
|
||||||
|
GuiGameElement.of(stack)
|
||||||
|
.render(matrixStack);
|
||||||
|
|
||||||
|
matrixStack.popPose();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -20,9 +20,8 @@ import com.simibubi.create.foundation.item.ItemHelper;
|
||||||
import com.simibubi.create.foundation.utility.Lang;
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
import com.simibubi.create.foundation.utility.Pair;
|
import com.simibubi.create.foundation.utility.Pair;
|
||||||
|
|
||||||
import mezz.jei.api.constants.VanillaTypes;
|
import mezz.jei.api.forge.ForgeTypes;
|
||||||
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
|
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
|
||||||
import mezz.jei.api.gui.drawable.IDrawable;
|
|
||||||
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
|
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
|
||||||
import mezz.jei.api.recipe.IFocusGroup;
|
import mezz.jei.api.recipe.IFocusGroup;
|
||||||
import mezz.jei.api.recipe.RecipeIngredientRole;
|
import mezz.jei.api.recipe.RecipeIngredientRole;
|
||||||
|
@ -36,16 +35,11 @@ public class BasinCategory extends CreateRecipeCategory<BasinRecipe> {
|
||||||
|
|
||||||
private final boolean needsHeating;
|
private final boolean needsHeating;
|
||||||
|
|
||||||
public BasinCategory(boolean needsHeating, IDrawable icon, IDrawable background) {
|
public BasinCategory(Info<BasinRecipe> info, boolean needsHeating) {
|
||||||
super(icon, background);
|
super(info);
|
||||||
this.needsHeating = needsHeating;
|
this.needsHeating = needsHeating;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends BasinRecipe> getRecipeClass() {
|
|
||||||
return BasinRecipe.class;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRecipe(IRecipeLayoutBuilder builder, BasinRecipe recipe, IFocusGroup focuses) {
|
public void setRecipe(IRecipeLayoutBuilder builder, BasinRecipe recipe, IFocusGroup focuses) {
|
||||||
List<Pair<Ingredient, MutableInt>> condensedIngredients = ItemHelper.condenseIngredients(recipe.getIngredients());
|
List<Pair<Ingredient, MutableInt>> condensedIngredients = ItemHelper.condenseIngredients(recipe.getIngredients());
|
||||||
|
@ -72,7 +66,7 @@ public class BasinCategory extends CreateRecipeCategory<BasinRecipe> {
|
||||||
builder
|
builder
|
||||||
.addSlot(RecipeIngredientRole.INPUT, 17 + xOffset + (i % 3) * 19, 51 - (i / 3) * 19)
|
.addSlot(RecipeIngredientRole.INPUT, 17 + xOffset + (i % 3) * 19, 51 - (i / 3) * 19)
|
||||||
.setBackground(getRenderedSlot(), -1, -1)
|
.setBackground(getRenderedSlot(), -1, -1)
|
||||||
.addIngredients(VanillaTypes.FLUID, withImprovedVisibility(fluidIngredient.getMatchingFluidStacks()))
|
.addIngredients(ForgeTypes.FLUID_STACK, withImprovedVisibility(fluidIngredient.getMatchingFluidStacks()))
|
||||||
.addTooltipCallback(addFluidTooltip(fluidIngredient.getRequiredAmount()));
|
.addTooltipCallback(addFluidTooltip(fluidIngredient.getRequiredAmount()));
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
@ -99,7 +93,7 @@ public class BasinCategory extends CreateRecipeCategory<BasinRecipe> {
|
||||||
builder
|
builder
|
||||||
.addSlot(RecipeIngredientRole.OUTPUT, xPosition, yPosition)
|
.addSlot(RecipeIngredientRole.OUTPUT, xPosition, yPosition)
|
||||||
.setBackground(getRenderedSlot(), -1, -1)
|
.setBackground(getRenderedSlot(), -1, -1)
|
||||||
.addIngredient(VanillaTypes.FLUID, withImprovedVisibility(fluidResult))
|
.addIngredient(ForgeTypes.FLUID_STACK, withImprovedVisibility(fluidResult))
|
||||||
.addTooltipCallback(addFluidTooltip(fluidResult.getAmount()));
|
.addTooltipCallback(addFluidTooltip(fluidResult.getAmount()));
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@ import java.util.List;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllBlocks;
|
|
||||||
import com.simibubi.create.compat.jei.category.BlockCuttingCategory.CondensedBlockCuttingRecipe;
|
import com.simibubi.create.compat.jei.category.BlockCuttingCategory.CondensedBlockCuttingRecipe;
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedSaw;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedSaw;
|
||||||
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
||||||
|
@ -18,7 +17,6 @@ import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
|
||||||
import mezz.jei.api.recipe.IFocusGroup;
|
import mezz.jei.api.recipe.IFocusGroup;
|
||||||
import mezz.jei.api.recipe.RecipeIngredientRole;
|
import mezz.jei.api.recipe.RecipeIngredientRole;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.item.Item;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.crafting.Ingredient;
|
import net.minecraft.world.item.crafting.Ingredient;
|
||||||
import net.minecraft.world.item.crafting.Recipe;
|
import net.minecraft.world.item.crafting.Recipe;
|
||||||
|
@ -29,13 +27,8 @@ public class BlockCuttingCategory extends CreateRecipeCategory<CondensedBlockCut
|
||||||
|
|
||||||
private final AnimatedSaw saw = new AnimatedSaw();
|
private final AnimatedSaw saw = new AnimatedSaw();
|
||||||
|
|
||||||
public BlockCuttingCategory(Item symbol) {
|
public BlockCuttingCategory(Info<CondensedBlockCuttingRecipe> info) {
|
||||||
super(doubleItemIcon(AllBlocks.MECHANICAL_SAW.get(), symbol), emptyBackground(177, 70)); // Items.STONE_BRICK_STAIRS
|
super(info);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends CondensedBlockCuttingRecipe> getRecipeClass() {
|
|
||||||
return CondensedBlockCuttingRecipe.class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -12,19 +12,17 @@ import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllFluids;
|
import com.simibubi.create.AllFluids;
|
||||||
import com.simibubi.create.Create;
|
|
||||||
import com.simibubi.create.compat.jei.DoubleItemIcon;
|
|
||||||
import com.simibubi.create.compat.jei.EmptyBackground;
|
|
||||||
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler;
|
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler;
|
||||||
import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
|
import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
|
||||||
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
||||||
import com.simibubi.create.foundation.utility.Lang;
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
|
|
||||||
import mezz.jei.api.constants.VanillaTypes;
|
import mezz.jei.api.forge.ForgeTypes;
|
||||||
import mezz.jei.api.gui.drawable.IDrawable;
|
import mezz.jei.api.gui.drawable.IDrawable;
|
||||||
import mezz.jei.api.gui.ingredient.IRecipeSlotTooltipCallback;
|
import mezz.jei.api.gui.ingredient.IRecipeSlotTooltipCallback;
|
||||||
import mezz.jei.api.recipe.RecipeType;
|
import mezz.jei.api.recipe.RecipeType;
|
||||||
import mezz.jei.api.recipe.category.IRecipeCategory;
|
import mezz.jei.api.recipe.category.IRecipeCategory;
|
||||||
|
import mezz.jei.api.registration.IRecipeCatalystRegistration;
|
||||||
import mezz.jei.api.registration.IRecipeRegistration;
|
import mezz.jei.api.registration.IRecipeRegistration;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.MethodsReturnNonnullByDefault;
|
import net.minecraft.MethodsReturnNonnullByDefault;
|
||||||
|
@ -33,42 +31,31 @@ import net.minecraft.network.chat.TextComponent;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.crafting.Recipe;
|
import net.minecraft.world.item.crafting.Recipe;
|
||||||
import net.minecraft.world.level.ItemLike;
|
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
|
|
||||||
@ParametersAreNonnullByDefault
|
@ParametersAreNonnullByDefault
|
||||||
@MethodsReturnNonnullByDefault
|
@MethodsReturnNonnullByDefault
|
||||||
public abstract class CreateRecipeCategory<T extends Recipe<?>> implements IRecipeCategory<T> {
|
public abstract class CreateRecipeCategory<T extends Recipe<?>> implements IRecipeCategory<T> {
|
||||||
|
private static final IDrawable BASIC_SLOT = asDrawable(AllGuiTextures.JEI_SLOT);
|
||||||
|
private static final IDrawable CHANCE_SLOT = asDrawable(AllGuiTextures.JEI_CHANCE_SLOT);
|
||||||
|
|
||||||
public final List<Supplier<List<T>>> recipes = new ArrayList<>();
|
protected final RecipeType<T> type;
|
||||||
public final List<Supplier<? extends ItemStack>> recipeCatalysts = new ArrayList<>();
|
protected final Component title;
|
||||||
|
protected final IDrawable background;
|
||||||
|
protected final IDrawable icon;
|
||||||
|
|
||||||
protected String name;
|
private final Supplier<List<T>> recipes;
|
||||||
protected RecipeType<T> type;
|
private final List<Supplier<? extends ItemStack>> catalysts;
|
||||||
private final IDrawable background;
|
|
||||||
private final IDrawable icon;
|
|
||||||
|
|
||||||
private static final IDrawable basicSlot = asDrawable(AllGuiTextures.JEI_SLOT);
|
public CreateRecipeCategory(Info<T> info) {
|
||||||
private static final IDrawable chanceSlot = asDrawable(AllGuiTextures.JEI_CHANCE_SLOT);
|
this.type = info.recipeType();
|
||||||
|
this.title = info.title();
|
||||||
public CreateRecipeCategory(IDrawable icon, IDrawable background) {
|
this.background = info.background();
|
||||||
this.background = background;
|
this.icon = info.icon();
|
||||||
this.icon = icon;
|
this.recipes = info.recipes();
|
||||||
|
this.catalysts = info.catalysts();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCategoryId(String name) {
|
|
||||||
this.name = name;
|
|
||||||
this.type = RecipeType.create(Create.ID, name, getRecipeClass());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ResourceLocation getUid() {
|
|
||||||
return getRecipeType().getUid();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public abstract Class<? extends T> getRecipeClass();
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public RecipeType<T> getRecipeType() {
|
public RecipeType<T> getRecipeType() {
|
||||||
|
@ -77,7 +64,7 @@ public abstract class CreateRecipeCategory<T extends Recipe<?>> implements IReci
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getTitle() {
|
public Component getTitle() {
|
||||||
return Lang.translateDirect("recipe." + name);
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -90,12 +77,28 @@ public abstract class CreateRecipeCategory<T extends Recipe<?>> implements IReci
|
||||||
return icon;
|
return icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Deprecated
|
||||||
|
public final ResourceLocation getUid() {
|
||||||
|
return type.getUid();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Deprecated
|
||||||
|
public final Class<? extends T> getRecipeClass() {
|
||||||
|
return type.getRecipeClass();
|
||||||
|
}
|
||||||
|
|
||||||
public void registerRecipes(IRecipeRegistration registration) {
|
public void registerRecipes(IRecipeRegistration registration) {
|
||||||
recipes.forEach(s -> registration.addRecipes(getRecipeType(), s.get()));
|
registration.addRecipes(type, recipes.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerCatalysts(IRecipeCatalystRegistration registration) {
|
||||||
|
catalysts.forEach(s -> registration.addRecipeCatalyst(s.get(), type));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IDrawable getRenderedSlot() {
|
public static IDrawable getRenderedSlot() {
|
||||||
return basicSlot;
|
return BASIC_SLOT;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IDrawable getRenderedSlot(ProcessingOutput output) {
|
public static IDrawable getRenderedSlot(ProcessingOutput output) {
|
||||||
|
@ -104,21 +107,9 @@ public abstract class CreateRecipeCategory<T extends Recipe<?>> implements IReci
|
||||||
|
|
||||||
public static IDrawable getRenderedSlot(float chance) {
|
public static IDrawable getRenderedSlot(float chance) {
|
||||||
if (chance == 1)
|
if (chance == 1)
|
||||||
return basicSlot;
|
return BASIC_SLOT;
|
||||||
|
|
||||||
return chanceSlot;
|
return CHANCE_SLOT;
|
||||||
}
|
|
||||||
|
|
||||||
public static IDrawable emptyBackground(int width, int height) {
|
|
||||||
return new EmptyBackground(width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IDrawable doubleItemIcon(ItemLike item1, ItemLike item2) {
|
|
||||||
return new DoubleItemIcon(() -> new ItemStack(item1), () -> new ItemStack(item2));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IDrawable itemIcon(ItemLike item) {
|
|
||||||
return new DoubleItemIcon(() -> new ItemStack(item), () -> ItemStack.EMPTY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IRecipeSlotTooltipCallback addStochasticTooltip(ProcessingOutput output) {
|
public static IRecipeSlotTooltipCallback addStochasticTooltip(ProcessingOutput output) {
|
||||||
|
@ -149,7 +140,7 @@ public abstract class CreateRecipeCategory<T extends Recipe<?>> implements IReci
|
||||||
|
|
||||||
public static IRecipeSlotTooltipCallback addFluidTooltip(int mbAmount) {
|
public static IRecipeSlotTooltipCallback addFluidTooltip(int mbAmount) {
|
||||||
return (view, tooltip) -> {
|
return (view, tooltip) -> {
|
||||||
Optional<FluidStack> displayed = view.getDisplayedIngredient(VanillaTypes.FLUID);
|
Optional<FluidStack> displayed = view.getDisplayedIngredient(ForgeTypes.FLUID_STACK);
|
||||||
if (displayed.isEmpty())
|
if (displayed.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -179,7 +170,7 @@ public abstract class CreateRecipeCategory<T extends Recipe<?>> implements IReci
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IDrawable asDrawable(AllGuiTextures texture) {
|
protected static IDrawable asDrawable(AllGuiTextures texture) {
|
||||||
return new IDrawable() {
|
return new IDrawable() {
|
||||||
@Override
|
@Override
|
||||||
public int getWidth() {
|
public int getWidth() {
|
||||||
|
@ -198,4 +189,10 @@ public abstract class CreateRecipeCategory<T extends Recipe<?>> implements IReci
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public record Info<T extends Recipe<?>>(RecipeType<T> recipeType, Component title, IDrawable background, IDrawable icon, Supplier<List<T>> recipes, List<Supplier<? extends ItemStack>> catalysts) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface Factory<T extends Recipe<?>> {
|
||||||
|
CreateRecipeCategory<T> create(Info<T> info);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,6 @@ import java.util.List;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllBlocks;
|
|
||||||
import com.simibubi.create.AllItems;
|
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedCrushingWheels;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedCrushingWheels;
|
||||||
import com.simibubi.create.content.contraptions.components.crusher.AbstractCrushingRecipe;
|
import com.simibubi.create.content.contraptions.components.crusher.AbstractCrushingRecipe;
|
||||||
import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
|
import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
|
||||||
|
@ -25,13 +23,8 @@ public class CrushingCategory extends CreateRecipeCategory<AbstractCrushingRecip
|
||||||
|
|
||||||
private final AnimatedCrushingWheels crushingWheels = new AnimatedCrushingWheels();
|
private final AnimatedCrushingWheels crushingWheels = new AnimatedCrushingWheels();
|
||||||
|
|
||||||
public CrushingCategory() {
|
public CrushingCategory(Info<AbstractCrushingRecipe> info) {
|
||||||
super(doubleItemIcon(AllBlocks.CRUSHING_WHEEL.get(), AllItems.CRUSHED_GOLD.get()), emptyBackground(177, 100));
|
super(info);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends AbstractCrushingRecipe> getRecipeClass() {
|
|
||||||
return AbstractCrushingRecipe.class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -3,7 +3,6 @@ package com.simibubi.create.compat.jei.category;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllBlocks;
|
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedDeployer;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedDeployer;
|
||||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe;
|
import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe;
|
||||||
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
||||||
|
@ -21,13 +20,8 @@ public class DeployingCategory extends CreateRecipeCategory<DeployerApplicationR
|
||||||
|
|
||||||
private final AnimatedDeployer deployer = new AnimatedDeployer();
|
private final AnimatedDeployer deployer = new AnimatedDeployer();
|
||||||
|
|
||||||
public DeployingCategory() {
|
public DeployingCategory(Info<DeployerApplicationRecipe> info) {
|
||||||
super(itemIcon(AllBlocks.DEPLOYER.get()), emptyBackground(177, 70));
|
super(info);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<DeployerApplicationRecipe> getRecipeClass() {
|
|
||||||
return DeployerApplicationRecipe.class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -3,24 +3,17 @@ package com.simibubi.create.compat.jei.category;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllItems;
|
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics;
|
||||||
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
||||||
import com.simibubi.create.foundation.gui.element.GuiGameElement;
|
import com.simibubi.create.foundation.gui.element.GuiGameElement;
|
||||||
|
|
||||||
import net.minecraft.world.item.Items;
|
|
||||||
import net.minecraft.world.item.crafting.AbstractCookingRecipe;
|
import net.minecraft.world.item.crafting.AbstractCookingRecipe;
|
||||||
import net.minecraft.world.level.material.Fluids;
|
import net.minecraft.world.level.material.Fluids;
|
||||||
|
|
||||||
public class FanBlastingCategory extends ProcessingViaFanCategory<AbstractCookingRecipe> {
|
public class FanBlastingCategory extends ProcessingViaFanCategory<AbstractCookingRecipe> {
|
||||||
|
|
||||||
public FanBlastingCategory() {
|
public FanBlastingCategory(Info<AbstractCookingRecipe> info) {
|
||||||
super(doubleItemIcon(AllItems.PROPELLER.get(), Items.LAVA_BUCKET));
|
super(info);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends AbstractCookingRecipe> getRecipeClass() {
|
|
||||||
return AbstractCookingRecipe.class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -3,24 +3,17 @@ package com.simibubi.create.compat.jei.category;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllItems;
|
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics;
|
||||||
import com.simibubi.create.content.contraptions.components.fan.HauntingRecipe;
|
import com.simibubi.create.content.contraptions.components.fan.HauntingRecipe;
|
||||||
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
||||||
import com.simibubi.create.foundation.gui.element.GuiGameElement;
|
import com.simibubi.create.foundation.gui.element.GuiGameElement;
|
||||||
|
|
||||||
import net.minecraft.world.item.Items;
|
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
|
|
||||||
public class FanHauntingCategory extends ProcessingViaFanCategory.MultiOutput<HauntingRecipe> {
|
public class FanHauntingCategory extends ProcessingViaFanCategory.MultiOutput<HauntingRecipe> {
|
||||||
|
|
||||||
public FanHauntingCategory() {
|
public FanHauntingCategory(Info<HauntingRecipe> info) {
|
||||||
super(doubleItemIcon(AllItems.PROPELLER.get(), Items.SOUL_CAMPFIRE));
|
super(info);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends HauntingRecipe> getRecipeClass() {
|
|
||||||
return HauntingRecipe.class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -3,24 +3,17 @@ package com.simibubi.create.compat.jei.category;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllItems;
|
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics;
|
||||||
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
||||||
import com.simibubi.create.foundation.gui.element.GuiGameElement;
|
import com.simibubi.create.foundation.gui.element.GuiGameElement;
|
||||||
|
|
||||||
import net.minecraft.world.item.Items;
|
|
||||||
import net.minecraft.world.item.crafting.SmokingRecipe;
|
import net.minecraft.world.item.crafting.SmokingRecipe;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
|
|
||||||
public class FanSmokingCategory extends ProcessingViaFanCategory<SmokingRecipe> {
|
public class FanSmokingCategory extends ProcessingViaFanCategory<SmokingRecipe> {
|
||||||
|
|
||||||
public FanSmokingCategory() {
|
public FanSmokingCategory(Info<SmokingRecipe> info) {
|
||||||
super(doubleItemIcon(AllItems.PROPELLER.get(), Items.CAMPFIRE));
|
super(info);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends SmokingRecipe> getRecipeClass() {
|
|
||||||
return SmokingRecipe.class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -3,23 +3,16 @@ package com.simibubi.create.compat.jei.category;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllItems;
|
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics;
|
||||||
import com.simibubi.create.content.contraptions.components.fan.SplashingRecipe;
|
import com.simibubi.create.content.contraptions.components.fan.SplashingRecipe;
|
||||||
import com.simibubi.create.foundation.gui.element.GuiGameElement;
|
import com.simibubi.create.foundation.gui.element.GuiGameElement;
|
||||||
|
|
||||||
import net.minecraft.world.item.Items;
|
|
||||||
import net.minecraft.world.level.material.Fluids;
|
import net.minecraft.world.level.material.Fluids;
|
||||||
|
|
||||||
public class FanWashingCategory extends ProcessingViaFanCategory.MultiOutput<SplashingRecipe> {
|
public class FanWashingCategory extends ProcessingViaFanCategory.MultiOutput<SplashingRecipe> {
|
||||||
|
|
||||||
public FanWashingCategory() {
|
public FanWashingCategory(Info<SplashingRecipe> info) {
|
||||||
super(doubleItemIcon(AllItems.PROPELLER.get(), Items.WATER_BUCKET));
|
super(info);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends SplashingRecipe> getRecipeClass() {
|
|
||||||
return SplashingRecipe.class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -6,7 +6,6 @@ import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.mojang.math.Vector3f;
|
import com.mojang.math.Vector3f;
|
||||||
import com.simibubi.create.AllItems;
|
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics;
|
||||||
import com.simibubi.create.content.contraptions.processing.ItemApplicationRecipe;
|
import com.simibubi.create.content.contraptions.processing.ItemApplicationRecipe;
|
||||||
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
||||||
|
@ -27,13 +26,8 @@ import net.minecraft.world.level.block.state.BlockState;
|
||||||
@ParametersAreNonnullByDefault
|
@ParametersAreNonnullByDefault
|
||||||
public class ItemApplicationCategory extends CreateRecipeCategory<ItemApplicationRecipe> {
|
public class ItemApplicationCategory extends CreateRecipeCategory<ItemApplicationRecipe> {
|
||||||
|
|
||||||
public ItemApplicationCategory() {
|
public ItemApplicationCategory(Info<ItemApplicationRecipe> info) {
|
||||||
super(itemIcon(AllItems.BRASS_HAND.get()), emptyBackground(177, 60));
|
super(info);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<ItemApplicationRecipe> getRecipeClass() {
|
|
||||||
return ItemApplicationRecipe.class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -65,7 +59,7 @@ public class ItemApplicationCategory extends CreateRecipeCategory<ItemApplicatio
|
||||||
|
|
||||||
Optional<ItemStack> displayedIngredient = recipeSlotsView.getSlotViews()
|
Optional<ItemStack> displayedIngredient = recipeSlotsView.getSlotViews()
|
||||||
.get(0)
|
.get(0)
|
||||||
.getDisplayedIngredient(VanillaTypes.ITEM);
|
.getDisplayedIngredient(VanillaTypes.ITEM_STACK);
|
||||||
if (displayedIngredient.isEmpty())
|
if (displayedIngredient.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ import java.util.function.Consumer;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllBlocks;
|
|
||||||
import com.simibubi.create.Create;
|
import com.simibubi.create.Create;
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedItemDrain;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedItemDrain;
|
||||||
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler;
|
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler;
|
||||||
|
@ -14,6 +13,7 @@ import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuild
|
||||||
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
||||||
|
|
||||||
import mezz.jei.api.constants.VanillaTypes;
|
import mezz.jei.api.constants.VanillaTypes;
|
||||||
|
import mezz.jei.api.forge.ForgeTypes;
|
||||||
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
|
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
|
||||||
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
|
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
|
||||||
import mezz.jei.api.recipe.IFocusGroup;
|
import mezz.jei.api.recipe.IFocusGroup;
|
||||||
|
@ -33,15 +33,14 @@ import net.minecraftforge.fluids.capability.IFluidHandlerItem;
|
||||||
@ParametersAreNonnullByDefault
|
@ParametersAreNonnullByDefault
|
||||||
public class ItemDrainCategory extends CreateRecipeCategory<EmptyingRecipe> {
|
public class ItemDrainCategory extends CreateRecipeCategory<EmptyingRecipe> {
|
||||||
|
|
||||||
AnimatedItemDrain drain;
|
private final AnimatedItemDrain drain = new AnimatedItemDrain();
|
||||||
|
|
||||||
public ItemDrainCategory() {
|
public ItemDrainCategory(Info<EmptyingRecipe> info) {
|
||||||
super(doubleItemIcon(AllBlocks.ITEM_DRAIN.get(), Items.WATER_BUCKET), emptyBackground(177, 50));
|
super(info);
|
||||||
drain = new AnimatedItemDrain();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void consumeRecipes(Consumer<EmptyingRecipe> consumer, IIngredientManager ingredientManager) {
|
public static void consumeRecipes(Consumer<EmptyingRecipe> consumer, IIngredientManager ingredientManager) {
|
||||||
for (ItemStack stack : ingredientManager.getAllIngredients(VanillaTypes.ITEM)) {
|
for (ItemStack stack : ingredientManager.getAllIngredients(VanillaTypes.ITEM_STACK)) {
|
||||||
if (stack.getItem() instanceof PotionItem) {
|
if (stack.getItem() instanceof PotionItem) {
|
||||||
FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack);
|
FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack);
|
||||||
Ingredient potion = Ingredient.of(stack);
|
Ingredient potion = Ingredient.of(stack);
|
||||||
|
@ -83,11 +82,6 @@ public class ItemDrainCategory extends CreateRecipeCategory<EmptyingRecipe> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends EmptyingRecipe> getRecipeClass() {
|
|
||||||
return EmptyingRecipe.class;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRecipe(IRecipeLayoutBuilder builder, EmptyingRecipe recipe, IFocusGroup focuses) {
|
public void setRecipe(IRecipeLayoutBuilder builder, EmptyingRecipe recipe, IFocusGroup focuses) {
|
||||||
builder
|
builder
|
||||||
|
@ -97,7 +91,7 @@ public class ItemDrainCategory extends CreateRecipeCategory<EmptyingRecipe> {
|
||||||
builder
|
builder
|
||||||
.addSlot(RecipeIngredientRole.OUTPUT, 132, 8)
|
.addSlot(RecipeIngredientRole.OUTPUT, 132, 8)
|
||||||
.setBackground(getRenderedSlot(), -1, -1)
|
.setBackground(getRenderedSlot(), -1, -1)
|
||||||
.addIngredient(VanillaTypes.FLUID, withImprovedVisibility(recipe.getResultingFluid()))
|
.addIngredient(ForgeTypes.FLUID_STACK, withImprovedVisibility(recipe.getResultingFluid()))
|
||||||
.addTooltipCallback(addFluidTooltip(recipe.getResultingFluid().getAmount()));
|
.addTooltipCallback(addFluidTooltip(recipe.getResultingFluid().getAmount()));
|
||||||
builder
|
builder
|
||||||
.addSlot(RecipeIngredientRole.OUTPUT, 132, 27)
|
.addSlot(RecipeIngredientRole.OUTPUT, 132, 27)
|
||||||
|
|
|
@ -9,7 +9,6 @@ import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllBlocks;
|
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedCrafter;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedCrafter;
|
||||||
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
||||||
|
|
||||||
|
@ -37,8 +36,8 @@ public class MechanicalCraftingCategory extends CreateRecipeCategory<CraftingRec
|
||||||
|
|
||||||
private final AnimatedCrafter crafter = new AnimatedCrafter();
|
private final AnimatedCrafter crafter = new AnimatedCrafter();
|
||||||
|
|
||||||
public MechanicalCraftingCategory() {
|
public MechanicalCraftingCategory(Info<CraftingRecipe> info) {
|
||||||
super(itemIcon(AllBlocks.MECHANICAL_CRAFTER.get()), emptyBackground(177, 107));
|
super(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -59,7 +58,7 @@ public class MechanicalCraftingCategory extends CreateRecipeCategory<CraftingRec
|
||||||
int yPosition = (int) (y + 1 + (i / getWidth(recipe)) * f);
|
int yPosition = (int) (y + 1 + (i / getWidth(recipe)) * f);
|
||||||
|
|
||||||
builder.addSlot(RecipeIngredientRole.INPUT, xPosition, yPosition)
|
builder.addSlot(RecipeIngredientRole.INPUT, xPosition, yPosition)
|
||||||
.setCustomRenderer(VanillaTypes.ITEM, renderer)
|
.setCustomRenderer(VanillaTypes.ITEM_STACK, renderer)
|
||||||
.addIngredients(ingredient);
|
.addIngredients(ingredient);
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
|
@ -130,11 +129,6 @@ public class MechanicalCraftingCategory extends CreateRecipeCategory<CraftingRec
|
||||||
matrixStack.popPose();
|
matrixStack.popPose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends CraftingRecipe> getRecipeClass() {
|
|
||||||
return CraftingRecipe.class;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final class CrafterIngredientRenderer implements IIngredientRenderer<ItemStack> {
|
private static final class CrafterIngredientRenderer implements IIngredientRenderer<ItemStack> {
|
||||||
|
|
||||||
private final CraftingRecipe recipe;
|
private final CraftingRecipe recipe;
|
||||||
|
|
|
@ -5,8 +5,6 @@ import java.util.List;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllBlocks;
|
|
||||||
import com.simibubi.create.AllItems;
|
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedMillstone;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedMillstone;
|
||||||
import com.simibubi.create.content.contraptions.components.crusher.AbstractCrushingRecipe;
|
import com.simibubi.create.content.contraptions.components.crusher.AbstractCrushingRecipe;
|
||||||
import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
|
import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
|
||||||
|
@ -22,13 +20,8 @@ public class MillingCategory extends CreateRecipeCategory<AbstractCrushingRecipe
|
||||||
|
|
||||||
private final AnimatedMillstone millstone = new AnimatedMillstone();
|
private final AnimatedMillstone millstone = new AnimatedMillstone();
|
||||||
|
|
||||||
public MillingCategory() {
|
public MillingCategory(Info<AbstractCrushingRecipe> info) {
|
||||||
super(doubleItemIcon(AllBlocks.MILLSTONE.get(), AllItems.WHEAT_FLOUR.get()), emptyBackground(177, 53));
|
super(info);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends AbstractCrushingRecipe> getRecipeClass() {
|
|
||||||
return AbstractCrushingRecipe.class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -3,16 +3,12 @@ package com.simibubi.create.compat.jei.category;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllBlocks;
|
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedBlazeBurner;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedBlazeBurner;
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedMixer;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedMixer;
|
||||||
import com.simibubi.create.content.contraptions.processing.BasinRecipe;
|
import com.simibubi.create.content.contraptions.processing.BasinRecipe;
|
||||||
import com.simibubi.create.content.contraptions.processing.HeatCondition;
|
import com.simibubi.create.content.contraptions.processing.HeatCondition;
|
||||||
|
|
||||||
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
|
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
|
||||||
import net.minecraft.world.item.Items;
|
|
||||||
import net.minecraft.world.level.ItemLike;
|
|
||||||
import net.minecraft.world.level.block.Blocks;
|
|
||||||
|
|
||||||
@ParametersAreNonnullByDefault
|
@ParametersAreNonnullByDefault
|
||||||
public class MixingCategory extends BasinCategory {
|
public class MixingCategory extends BasinCategory {
|
||||||
|
@ -22,24 +18,23 @@ public class MixingCategory extends BasinCategory {
|
||||||
MixingType type;
|
MixingType type;
|
||||||
|
|
||||||
enum MixingType {
|
enum MixingType {
|
||||||
AUTO_SHAPELESS, MIXING, AUTO_BREWING
|
MIXING, AUTO_SHAPELESS, AUTO_BREWING
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MixingCategory autoShapeless() {
|
public static MixingCategory standard(Info<BasinRecipe> info) {
|
||||||
return new MixingCategory(MixingType.AUTO_SHAPELESS, Items.CRAFTING_TABLE, 85);
|
return new MixingCategory(info, MixingType.MIXING);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MixingCategory standard() {
|
public static MixingCategory autoShapeless(Info<BasinRecipe> info) {
|
||||||
return new MixingCategory(MixingType.MIXING, AllBlocks.BASIN.get(), 103);
|
return new MixingCategory(info, MixingType.AUTO_SHAPELESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MixingCategory autoBrewing() {
|
public static MixingCategory autoBrewing(Info<BasinRecipe> info) {
|
||||||
return new MixingCategory(MixingType.AUTO_BREWING, Blocks.BREWING_STAND, 103);
|
return new MixingCategory(info, MixingType.AUTO_BREWING);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected MixingCategory(MixingType type, ItemLike secondaryItem, int height) {
|
protected MixingCategory(Info<BasinRecipe> info, MixingType type) {
|
||||||
super(type != MixingType.AUTO_SHAPELESS, doubleItemIcon(AllBlocks.MECHANICAL_MIXER.get(), secondaryItem),
|
super(info, type != MixingType.AUTO_SHAPELESS);
|
||||||
emptyBackground(177, height));
|
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,13 +28,8 @@ public class MysteriousItemConversionCategory extends CreateRecipeCategory<Conve
|
||||||
RECIPES.add(ConversionRecipe.create(AllItems.CHROMATIC_COMPOUND.asStack(), AllItems.REFINED_RADIANCE.asStack()));
|
RECIPES.add(ConversionRecipe.create(AllItems.CHROMATIC_COMPOUND.asStack(), AllItems.REFINED_RADIANCE.asStack()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public MysteriousItemConversionCategory() {
|
public MysteriousItemConversionCategory(Info<ConversionRecipe> info) {
|
||||||
super(itemIcon(AllItems.CHROMATIC_COMPOUND.get()), emptyBackground(177, 50));
|
super(info);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends ConversionRecipe> getRecipeClass() {
|
|
||||||
return ConversionRecipe.class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -3,7 +3,6 @@ package com.simibubi.create.compat.jei.category;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllBlocks;
|
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedBlazeBurner;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedBlazeBurner;
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedPress;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedPress;
|
||||||
import com.simibubi.create.content.contraptions.processing.BasinRecipe;
|
import com.simibubi.create.content.contraptions.processing.BasinRecipe;
|
||||||
|
@ -16,8 +15,6 @@ import mezz.jei.api.recipe.IFocusGroup;
|
||||||
import mezz.jei.api.recipe.RecipeIngredientRole;
|
import mezz.jei.api.recipe.RecipeIngredientRole;
|
||||||
import net.minecraft.core.NonNullList;
|
import net.minecraft.core.NonNullList;
|
||||||
import net.minecraft.world.item.crafting.Ingredient;
|
import net.minecraft.world.item.crafting.Ingredient;
|
||||||
import net.minecraft.world.level.ItemLike;
|
|
||||||
import net.minecraft.world.level.block.Blocks;
|
|
||||||
|
|
||||||
@ParametersAreNonnullByDefault
|
@ParametersAreNonnullByDefault
|
||||||
public class PackingCategory extends BasinCategory {
|
public class PackingCategory extends BasinCategory {
|
||||||
|
@ -27,20 +24,19 @@ public class PackingCategory extends BasinCategory {
|
||||||
private final PackingType type;
|
private final PackingType type;
|
||||||
|
|
||||||
enum PackingType {
|
enum PackingType {
|
||||||
AUTO_SQUARE, COMPACTING
|
COMPACTING, AUTO_SQUARE
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PackingCategory standard() {
|
public static PackingCategory standard(Info<BasinRecipe> info) {
|
||||||
return new PackingCategory(PackingType.COMPACTING, AllBlocks.BASIN.get(), 103);
|
return new PackingCategory(info, PackingType.COMPACTING);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PackingCategory autoSquare() {
|
public static PackingCategory autoSquare(Info<BasinRecipe> info) {
|
||||||
return new PackingCategory(PackingType.AUTO_SQUARE, Blocks.CRAFTING_TABLE, 85);
|
return new PackingCategory(info, PackingType.AUTO_SQUARE);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected PackingCategory(PackingType type, ItemLike icon, int height) {
|
protected PackingCategory(Info<BasinRecipe> info, PackingType type) {
|
||||||
super(type != PackingType.AUTO_SQUARE, doubleItemIcon(AllBlocks.MECHANICAL_PRESS.get(), icon),
|
super(info, type != PackingType.AUTO_SQUARE);
|
||||||
emptyBackground(177, height));
|
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,16 +23,11 @@ public class PolishingCategory extends CreateRecipeCategory<SandPaperPolishingRe
|
||||||
|
|
||||||
private final ItemStack renderedSandpaper;
|
private final ItemStack renderedSandpaper;
|
||||||
|
|
||||||
public PolishingCategory() {
|
public PolishingCategory(Info<SandPaperPolishingRecipe> info) {
|
||||||
super(itemIcon(AllItems.SAND_PAPER.get()), emptyBackground(177, 55));
|
super(info);
|
||||||
renderedSandpaper = AllItems.SAND_PAPER.asStack();
|
renderedSandpaper = AllItems.SAND_PAPER.asStack();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends SandPaperPolishingRecipe> getRecipeClass() {
|
|
||||||
return SandPaperPolishingRecipe.class;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRecipe(IRecipeLayoutBuilder builder, SandPaperPolishingRecipe recipe, IFocusGroup focuses) {
|
public void setRecipe(IRecipeLayoutBuilder builder, SandPaperPolishingRecipe recipe, IFocusGroup focuses) {
|
||||||
builder
|
builder
|
||||||
|
|
|
@ -5,8 +5,6 @@ import java.util.List;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllBlocks;
|
|
||||||
import com.simibubi.create.AllItems;
|
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedPress;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedPress;
|
||||||
import com.simibubi.create.content.contraptions.components.press.PressingRecipe;
|
import com.simibubi.create.content.contraptions.components.press.PressingRecipe;
|
||||||
import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
|
import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
|
||||||
|
@ -22,13 +20,8 @@ public class PressingCategory extends CreateRecipeCategory<PressingRecipe> {
|
||||||
|
|
||||||
private final AnimatedPress press = new AnimatedPress(false);
|
private final AnimatedPress press = new AnimatedPress(false);
|
||||||
|
|
||||||
public PressingCategory() {
|
public PressingCategory(Info<PressingRecipe> info) {
|
||||||
super(doubleItemIcon(AllBlocks.MECHANICAL_PRESS.get(), AllItems.IRON_SHEET.get()), emptyBackground(177, 70));
|
super(info);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends PressingRecipe> getRecipeClass() {
|
|
||||||
return PressingRecipe.class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -16,7 +16,6 @@ import com.simibubi.create.foundation.gui.AllGuiTextures;
|
||||||
import com.simibubi.create.foundation.utility.Lang;
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
|
|
||||||
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
|
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
|
||||||
import mezz.jei.api.gui.drawable.IDrawable;
|
|
||||||
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
|
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
|
||||||
import mezz.jei.api.recipe.IFocusGroup;
|
import mezz.jei.api.recipe.IFocusGroup;
|
||||||
import mezz.jei.api.recipe.RecipeIngredientRole;
|
import mezz.jei.api.recipe.RecipeIngredientRole;
|
||||||
|
@ -28,12 +27,8 @@ public abstract class ProcessingViaFanCategory<T extends Recipe<?>> extends Crea
|
||||||
|
|
||||||
protected static final int SCALE = 24;
|
protected static final int SCALE = 24;
|
||||||
|
|
||||||
public ProcessingViaFanCategory(IDrawable icon) {
|
public ProcessingViaFanCategory(Info<T> info) {
|
||||||
this(178, icon);
|
super(info);
|
||||||
}
|
|
||||||
|
|
||||||
public ProcessingViaFanCategory(int width, IDrawable icon) {
|
|
||||||
super(icon, emptyBackground(width, 72));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Supplier<ItemStack> getFan(String name) {
|
public static Supplier<ItemStack> getFan(String name) {
|
||||||
|
@ -95,8 +90,8 @@ public abstract class ProcessingViaFanCategory<T extends Recipe<?>> extends Crea
|
||||||
|
|
||||||
public static abstract class MultiOutput<T extends ProcessingRecipe<?>> extends ProcessingViaFanCategory<T> {
|
public static abstract class MultiOutput<T extends ProcessingRecipe<?>> extends ProcessingViaFanCategory<T> {
|
||||||
|
|
||||||
public MultiOutput(IDrawable icon) {
|
public MultiOutput(Info<T> info) {
|
||||||
super(icon);
|
super(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -5,7 +5,6 @@ import java.util.List;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllBlocks;
|
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedSaw;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedSaw;
|
||||||
import com.simibubi.create.content.contraptions.components.saw.CuttingRecipe;
|
import com.simibubi.create.content.contraptions.components.saw.CuttingRecipe;
|
||||||
import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
|
import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
|
||||||
|
@ -15,20 +14,14 @@ import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
|
||||||
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
|
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
|
||||||
import mezz.jei.api.recipe.IFocusGroup;
|
import mezz.jei.api.recipe.IFocusGroup;
|
||||||
import mezz.jei.api.recipe.RecipeIngredientRole;
|
import mezz.jei.api.recipe.RecipeIngredientRole;
|
||||||
import net.minecraft.world.item.Items;
|
|
||||||
|
|
||||||
@ParametersAreNonnullByDefault
|
@ParametersAreNonnullByDefault
|
||||||
public class SawingCategory extends CreateRecipeCategory<CuttingRecipe> {
|
public class SawingCategory extends CreateRecipeCategory<CuttingRecipe> {
|
||||||
|
|
||||||
private final AnimatedSaw saw = new AnimatedSaw();
|
private final AnimatedSaw saw = new AnimatedSaw();
|
||||||
|
|
||||||
public SawingCategory() {
|
public SawingCategory(Info<CuttingRecipe> info) {
|
||||||
super(doubleItemIcon(AllBlocks.MECHANICAL_SAW.get(), Items.OAK_LOG), emptyBackground(177, 70));
|
super(info);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends CuttingRecipe> getRecipeClass() {
|
|
||||||
return CuttingRecipe.class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -10,8 +10,6 @@ import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllItems;
|
|
||||||
import com.simibubi.create.compat.jei.EmptyBackground;
|
|
||||||
import com.simibubi.create.compat.jei.category.sequencedAssembly.SequencedAssemblySubCategory;
|
import com.simibubi.create.compat.jei.category.sequencedAssembly.SequencedAssemblySubCategory;
|
||||||
import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipe;
|
import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipe;
|
||||||
import com.simibubi.create.content.contraptions.itemAssembly.SequencedRecipe;
|
import com.simibubi.create.content.contraptions.itemAssembly.SequencedRecipe;
|
||||||
|
@ -36,13 +34,8 @@ public class SequencedAssemblyCategory extends CreateRecipeCategory<SequencedAss
|
||||||
|
|
||||||
Map<ResourceLocation, SequencedAssemblySubCategory> subCategories = new HashMap<>();
|
Map<ResourceLocation, SequencedAssemblySubCategory> subCategories = new HashMap<>();
|
||||||
|
|
||||||
public SequencedAssemblyCategory() {
|
public SequencedAssemblyCategory(Info<SequencedAssemblyRecipe> info) {
|
||||||
super(itemIcon(AllItems.PRECISION_MECHANISM.get()), new EmptyBackground(180, 115));
|
super(info);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends SequencedAssemblyRecipe> getRecipeClass() {
|
|
||||||
return SequencedAssemblyRecipe.class;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -6,7 +6,6 @@ import java.util.function.Consumer;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.simibubi.create.AllBlocks;
|
|
||||||
import com.simibubi.create.Create;
|
import com.simibubi.create.Create;
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedSpout;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedSpout;
|
||||||
import com.simibubi.create.content.contraptions.fluids.actors.FillingRecipe;
|
import com.simibubi.create.content.contraptions.fluids.actors.FillingRecipe;
|
||||||
|
@ -17,6 +16,7 @@ import com.simibubi.create.foundation.fluid.FluidIngredient;
|
||||||
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
||||||
|
|
||||||
import mezz.jei.api.constants.VanillaTypes;
|
import mezz.jei.api.constants.VanillaTypes;
|
||||||
|
import mezz.jei.api.forge.ForgeTypes;
|
||||||
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
|
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
|
||||||
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
|
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
|
||||||
import mezz.jei.api.recipe.IFocusGroup;
|
import mezz.jei.api.recipe.IFocusGroup;
|
||||||
|
@ -36,16 +36,15 @@ import net.minecraftforge.fluids.capability.IFluidHandlerItem;
|
||||||
@ParametersAreNonnullByDefault
|
@ParametersAreNonnullByDefault
|
||||||
public class SpoutCategory extends CreateRecipeCategory<FillingRecipe> {
|
public class SpoutCategory extends CreateRecipeCategory<FillingRecipe> {
|
||||||
|
|
||||||
private final AnimatedSpout spout;
|
private final AnimatedSpout spout = new AnimatedSpout();
|
||||||
|
|
||||||
public SpoutCategory() {
|
public SpoutCategory(Info<FillingRecipe> info) {
|
||||||
super(doubleItemIcon(AllBlocks.SPOUT.get(), Items.WATER_BUCKET), emptyBackground(177, 70));
|
super(info);
|
||||||
spout = new AnimatedSpout();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void consumeRecipes(Consumer<FillingRecipe> consumer, IIngredientManager ingredientManager) {
|
public static void consumeRecipes(Consumer<FillingRecipe> consumer, IIngredientManager ingredientManager) {
|
||||||
Collection<FluidStack> fluidStacks = ingredientManager.getAllIngredients(VanillaTypes.FLUID);
|
Collection<FluidStack> fluidStacks = ingredientManager.getAllIngredients(ForgeTypes.FLUID_STACK);
|
||||||
for (ItemStack stack : ingredientManager.getAllIngredients(VanillaTypes.ITEM)) {
|
for (ItemStack stack : ingredientManager.getAllIngredients(VanillaTypes.ITEM_STACK)) {
|
||||||
if (stack.getItem() instanceof PotionItem) {
|
if (stack.getItem() instanceof PotionItem) {
|
||||||
FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack);
|
FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack);
|
||||||
Ingredient bottle = Ingredient.of(Items.GLASS_BOTTLE);
|
Ingredient bottle = Ingredient.of(Items.GLASS_BOTTLE);
|
||||||
|
@ -94,11 +93,6 @@ public class SpoutCategory extends CreateRecipeCategory<FillingRecipe> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends FillingRecipe> getRecipeClass() {
|
|
||||||
return FillingRecipe.class;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRecipe(IRecipeLayoutBuilder builder, FillingRecipe recipe, IFocusGroup focuses) {
|
public void setRecipe(IRecipeLayoutBuilder builder, FillingRecipe recipe, IFocusGroup focuses) {
|
||||||
builder
|
builder
|
||||||
|
@ -108,7 +102,7 @@ public class SpoutCategory extends CreateRecipeCategory<FillingRecipe> {
|
||||||
builder
|
builder
|
||||||
.addSlot(RecipeIngredientRole.INPUT, 27, 32)
|
.addSlot(RecipeIngredientRole.INPUT, 27, 32)
|
||||||
.setBackground(getRenderedSlot(), -1, -1)
|
.setBackground(getRenderedSlot(), -1, -1)
|
||||||
.addIngredients(VanillaTypes.FLUID, withImprovedVisibility(recipe.getRequiredFluid().getMatchingFluidStacks()))
|
.addIngredients(ForgeTypes.FLUID_STACK, withImprovedVisibility(recipe.getRequiredFluid().getMatchingFluidStacks()))
|
||||||
.addTooltipCallback(addFluidTooltip(recipe.getRequiredFluid().getRequiredAmount()));
|
.addTooltipCallback(addFluidTooltip(recipe.getRequiredFluid().getRequiredAmount()));
|
||||||
builder
|
builder
|
||||||
.addSlot(RecipeIngredientRole.OUTPUT, 132, 51)
|
.addSlot(RecipeIngredientRole.OUTPUT, 132, 51)
|
||||||
|
|
|
@ -11,7 +11,7 @@ import com.simibubi.create.content.contraptions.itemAssembly.SequencedRecipe;
|
||||||
import com.simibubi.create.foundation.fluid.FluidIngredient;
|
import com.simibubi.create.foundation.fluid.FluidIngredient;
|
||||||
import com.simibubi.create.foundation.utility.Lang;
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
|
|
||||||
import mezz.jei.api.constants.VanillaTypes;
|
import mezz.jei.api.forge.ForgeTypes;
|
||||||
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
|
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
|
||||||
import mezz.jei.api.gui.builder.IRecipeSlotBuilder;
|
import mezz.jei.api.gui.builder.IRecipeSlotBuilder;
|
||||||
import mezz.jei.api.recipe.IFocusGroup;
|
import mezz.jei.api.recipe.IFocusGroup;
|
||||||
|
@ -73,7 +73,7 @@ public abstract class SequencedAssemblySubCategory {
|
||||||
builder
|
builder
|
||||||
.addSlot(RecipeIngredientRole.INPUT, x + 4, 15)
|
.addSlot(RecipeIngredientRole.INPUT, x + 4, 15)
|
||||||
.setBackground(CreateRecipeCategory.getRenderedSlot(), -1, -1)
|
.setBackground(CreateRecipeCategory.getRenderedSlot(), -1, -1)
|
||||||
.addIngredients(VanillaTypes.FLUID, CreateRecipeCategory.withImprovedVisibility(fluidIngredient.getMatchingFluidStacks()))
|
.addIngredients(ForgeTypes.FLUID_STACK, CreateRecipeCategory.withImprovedVisibility(fluidIngredient.getMatchingFluidStacks()))
|
||||||
.addTooltipCallback(CreateRecipeCategory.addFluidTooltip(fluidIngredient.getRequiredAmount()));
|
.addTooltipCallback(CreateRecipeCategory.addFluidTooltip(fluidIngredient.getRequiredAmount()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.simibubi.create.content.curiosities.deco;
|
package com.simibubi.create.content.curiosities.deco;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import java.util.List;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.AllShapes;
|
import com.simibubi.create.AllShapes;
|
||||||
import com.simibubi.create.AllSoundEvents;
|
import com.simibubi.create.AllSoundEvents;
|
||||||
|
@ -201,9 +202,15 @@ public class PlacardBlock extends FaceAttachedHorizontalDirectionalBlock
|
||||||
@Override
|
@Override
|
||||||
public ItemRequirement getRequiredItems(BlockState state, BlockEntity te) {
|
public ItemRequirement getRequiredItems(BlockState state, BlockEntity te) {
|
||||||
ItemStack placardStack = AllBlocks.PLACARD.asStack();
|
ItemStack placardStack = AllBlocks.PLACARD.asStack();
|
||||||
if (te instanceof PlacardTileEntity pte && !pte.getHeldItem()
|
if (te instanceof PlacardTileEntity pte) {
|
||||||
.isEmpty())
|
ItemStack heldItem = pte.getHeldItem();
|
||||||
return new ItemRequirement(ItemUseType.CONSUME, ImmutableList.of(placardStack, pte.getHeldItem()));
|
if (!heldItem.isEmpty()) {
|
||||||
|
return new ItemRequirement(List.of(
|
||||||
|
new ItemRequirement.StackRequirement(placardStack, ItemUseType.CONSUME),
|
||||||
|
new ItemRequirement.StrictNbtStackRequirement(heldItem, ItemUseType.CONSUME)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
return new ItemRequirement(ItemUseType.CONSUME, placardStack);
|
return new ItemRequirement(ItemUseType.CONSUME, placardStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -399,10 +399,10 @@ public class ClientEvents {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void loadCompleted(FMLLoadCompleteEvent event) {
|
public static void onLoadComplete(FMLLoadCompleteEvent event) {
|
||||||
ModContainer createContainer = ModList.get()
|
ModContainer createContainer = ModList.get()
|
||||||
.getModContainerById(Create.ID)
|
.getModContainerById(Create.ID)
|
||||||
.orElseThrow(() -> new IllegalStateException("Create Mod Container missing after loadCompleted"));
|
.orElseThrow(() -> new IllegalStateException("Create mod container missing on LoadComplete"));
|
||||||
createContainer.registerExtensionPoint(ConfigGuiHandler.ConfigGuiFactory.class,
|
createContainer.registerExtensionPoint(ConfigGuiHandler.ConfigGuiFactory.class,
|
||||||
() -> new ConfigGuiHandler.ConfigGuiFactory(
|
() -> new ConfigGuiHandler.ConfigGuiFactory(
|
||||||
(mc, previousScreen) -> BaseConfigScreen.forCreate(previousScreen)));
|
(mc, previousScreen) -> BaseConfigScreen.forCreate(previousScreen)));
|
||||||
|
|
|
@ -13,6 +13,7 @@ import com.simibubi.create.content.curiosities.zapper.ZapperInteractionHandler;
|
||||||
import com.simibubi.create.content.curiosities.zapper.ZapperItem;
|
import com.simibubi.create.content.curiosities.zapper.ZapperItem;
|
||||||
import com.simibubi.create.content.logistics.item.LinkedControllerServerHandler;
|
import com.simibubi.create.content.logistics.item.LinkedControllerServerHandler;
|
||||||
import com.simibubi.create.content.logistics.trains.entity.CarriageEntityHandler;
|
import com.simibubi.create.content.logistics.trains.entity.CarriageEntityHandler;
|
||||||
|
import com.simibubi.create.foundation.ModFilePackResources;
|
||||||
import com.simibubi.create.foundation.command.AllCommands;
|
import com.simibubi.create.foundation.command.AllCommands;
|
||||||
import com.simibubi.create.foundation.fluid.FluidHelper;
|
import com.simibubi.create.foundation.fluid.FluidHelper;
|
||||||
import com.simibubi.create.foundation.utility.Iterate;
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
|
@ -24,6 +25,9 @@ import com.simibubi.create.foundation.worldgen.AllWorldFeatures;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraft.server.packs.PackType;
|
||||||
|
import net.minecraft.server.packs.repository.Pack;
|
||||||
|
import net.minecraft.server.packs.repository.PackSource;
|
||||||
import net.minecraft.tags.FluidTags;
|
import net.minecraft.tags.FluidTags;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
|
@ -34,6 +38,7 @@ import net.minecraft.world.level.LevelAccessor;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.material.FluidState;
|
import net.minecraft.world.level.material.FluidState;
|
||||||
import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent;
|
import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent;
|
||||||
|
import net.minecraftforge.event.AddPackFindersEvent;
|
||||||
import net.minecraftforge.event.AddReloadListenerEvent;
|
import net.minecraftforge.event.AddReloadListenerEvent;
|
||||||
import net.minecraftforge.event.AttachCapabilitiesEvent;
|
import net.minecraftforge.event.AttachCapabilitiesEvent;
|
||||||
import net.minecraftforge.event.OnDatapackSyncEvent;
|
import net.minecraftforge.event.OnDatapackSyncEvent;
|
||||||
|
@ -55,7 +60,10 @@ import net.minecraftforge.event.world.ChunkEvent;
|
||||||
import net.minecraftforge.event.world.WorldEvent;
|
import net.minecraftforge.event.world.WorldEvent;
|
||||||
import net.minecraftforge.eventbus.api.EventPriority;
|
import net.minecraftforge.eventbus.api.EventPriority;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.ModList;
|
||||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
|
import net.minecraftforge.forgespi.language.IModFileInfo;
|
||||||
|
import net.minecraftforge.forgespi.locating.IModFile;
|
||||||
|
|
||||||
@EventBusSubscriber
|
@EventBusSubscriber
|
||||||
public class CommonEvents {
|
public class CommonEvents {
|
||||||
|
@ -223,6 +231,21 @@ public class CommonEvents {
|
||||||
event.register(CapabilityMinecartController.class);
|
event.register(CapabilityMinecartController.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void addPackFinders(AddPackFindersEvent event) {
|
||||||
|
if (event.getPackType() == PackType.CLIENT_RESOURCES) {
|
||||||
|
IModFileInfo modFileInfo = ModList.get().getModFileById(Create.ID);
|
||||||
|
if (modFileInfo == null) {
|
||||||
|
Create.LOGGER.error("Could not find Create mod file info; built-in resource packs will be missing!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
IModFile modFile = modFileInfo.getFile();
|
||||||
|
event.addRepositorySource((consumer, constructor) -> {
|
||||||
|
consumer.accept(Pack.create(Create.asResource("legacy_copper").toString(), false, () -> new ModFilePackResources("Create Legacy Copper", modFile, "resourcepacks/legacy_copper"), constructor, Pack.Position.TOP, PackSource.DEFAULT));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
package com.simibubi.create.foundation;
|
||||||
|
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
|
import net.minecraftforge.forgespi.locating.IModFile;
|
||||||
|
import net.minecraftforge.resource.PathResourcePack;
|
||||||
|
|
||||||
|
public class ModFilePackResources extends PathResourcePack {
|
||||||
|
protected final IModFile modFile;
|
||||||
|
protected final String sourcePath;
|
||||||
|
|
||||||
|
public ModFilePackResources(String name, IModFile modFile, String sourcePath) {
|
||||||
|
super(name, modFile.findResource(sourcePath));
|
||||||
|
this.modFile = modFile;
|
||||||
|
this.sourcePath = sourcePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Path resolve(String... paths) {
|
||||||
|
String[] allPaths = new String[paths.length + 1];
|
||||||
|
allPaths[0] = sourcePath;
|
||||||
|
System.arraycopy(paths, 0, allPaths, 1, paths.length);
|
||||||
|
return modFile.findResource(allPaths);
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,7 +10,6 @@ public class CKinetics extends ConfigBase {
|
||||||
public final ConfigInt maxMotorSpeed = i(256, 64, "maxMotorSpeed", Comments.rpm, Comments.maxMotorSpeed, ConfigAnnotations.RequiresRestart.BOTH.asComment());
|
public final ConfigInt maxMotorSpeed = i(256, 64, "maxMotorSpeed", Comments.rpm, Comments.maxMotorSpeed, ConfigAnnotations.RequiresRestart.BOTH.asComment());
|
||||||
public final ConfigInt waterWheelBaseSpeed = i(4, 1, "waterWheelBaseSpeed", Comments.rpm, Comments.waterWheelBaseSpeed);
|
public final ConfigInt waterWheelBaseSpeed = i(4, 1, "waterWheelBaseSpeed", Comments.rpm, Comments.waterWheelBaseSpeed);
|
||||||
public final ConfigInt waterWheelFlowSpeed = i(4, 1, "waterWheelFlowSpeed", Comments.rpm, Comments.waterWheelFlowSpeed);
|
public final ConfigInt waterWheelFlowSpeed = i(4, 1, "waterWheelFlowSpeed", Comments.rpm, Comments.waterWheelFlowSpeed);
|
||||||
public final ConfigInt furnaceEngineSpeed = i(16, 1, "furnaceEngineSpeed", Comments.rpm, Comments.furnaceEngineSpeed);
|
|
||||||
public final ConfigInt maxRotationSpeed = i(256, 64, "maxRotationSpeed", Comments.rpm, Comments.maxRotationSpeed);
|
public final ConfigInt maxRotationSpeed = i(256, 64, "maxRotationSpeed", Comments.rpm, Comments.maxRotationSpeed);
|
||||||
public final ConfigEnum<DeployerAggroSetting> ignoreDeployerAttacks =
|
public final ConfigEnum<DeployerAggroSetting> ignoreDeployerAttacks =
|
||||||
e(DeployerAggroSetting.CREEPERS, "ignoreDeployerAttacks", Comments.ignoreDeployerAttacks);
|
e(DeployerAggroSetting.CREEPERS, "ignoreDeployerAttacks", Comments.ignoreDeployerAttacks);
|
||||||
|
@ -27,7 +26,6 @@ public class CKinetics extends ConfigBase {
|
||||||
public final ConfigInt fanPullDistance = i(20, 5, "fanPullDistance", Comments.fanPullDistance);
|
public final ConfigInt fanPullDistance = i(20, 5, "fanPullDistance", Comments.fanPullDistance);
|
||||||
public final ConfigInt fanBlockCheckRate = i(30, 10, "fanBlockCheckRate", Comments.fanBlockCheckRate);
|
public final ConfigInt fanBlockCheckRate = i(30, 10, "fanBlockCheckRate", Comments.fanBlockCheckRate);
|
||||||
public final ConfigInt fanRotationArgmax = i(256, 64, "fanRotationArgmax", Comments.rpm, Comments.fanRotationArgmax);
|
public final ConfigInt fanRotationArgmax = i(256, 64, "fanRotationArgmax", Comments.rpm, Comments.fanRotationArgmax);
|
||||||
public final ConfigInt generatingFanSpeed = i(4, 0, "generatingFanSpeed", Comments.rpm, Comments.generatingFanSpeed);
|
|
||||||
public final ConfigInt inWorldProcessingTime = i(150, 0, "inWorldProcessingTime", Comments.inWorldProcessingTime);
|
public final ConfigInt inWorldProcessingTime = i(150, 0, "inWorldProcessingTime", Comments.inWorldProcessingTime);
|
||||||
|
|
||||||
public final ConfigGroup contraptions = group(1, "contraptions", "Moving Contraptions");
|
public final ConfigGroup contraptions = group(1, "contraptions", "Moving Contraptions");
|
||||||
|
@ -71,7 +69,6 @@ public class CKinetics extends ConfigBase {
|
||||||
static String fanPullDistance = "Maximum distance in blocks from where Fans can pull entities.";
|
static String fanPullDistance = "Maximum distance in blocks from where Fans can pull entities.";
|
||||||
static String fanBlockCheckRate = "Game ticks between Fans checking for anything blocking their air flow.";
|
static String fanBlockCheckRate = "Game ticks between Fans checking for anything blocking their air flow.";
|
||||||
static String fanRotationArgmax = "Rotation speed at which the maximum stats of fans are reached.";
|
static String fanRotationArgmax = "Rotation speed at which the maximum stats of fans are reached.";
|
||||||
static String generatingFanSpeed = "Rotation speed generated by a vertical fan above fire.";
|
|
||||||
static String inWorldProcessingTime = "Game ticks required for a Fan-based processing recipe to take effect.";
|
static String inWorldProcessingTime = "Game ticks required for a Fan-based processing recipe to take effect.";
|
||||||
static String crankHungerMultiplier =
|
static String crankHungerMultiplier =
|
||||||
"multiplier used for calculating exhaustion from speed when a crank is turned.";
|
"multiplier used for calculating exhaustion from speed when a crank is turned.";
|
||||||
|
@ -99,7 +96,6 @@ public class CKinetics extends ConfigBase {
|
||||||
static String waterWheelBaseSpeed = "Added rotation speed by a water wheel when at least one flow is present.";
|
static String waterWheelBaseSpeed = "Added rotation speed by a water wheel when at least one flow is present.";
|
||||||
static String waterWheelFlowSpeed =
|
static String waterWheelFlowSpeed =
|
||||||
"Rotation speed gained by a water wheel for each side with running fluids. (halved if not against blades)";
|
"Rotation speed gained by a water wheel for each side with running fluids. (halved if not against blades)";
|
||||||
static String furnaceEngineSpeed = "Base rotation speed for the furnace engine generator";
|
|
||||||
static String disableStress = "Disable the Stress mechanic altogether.";
|
static String disableStress = "Disable the Stress mechanic altogether.";
|
||||||
static String kineticValidationFrequency =
|
static String kineticValidationFrequency =
|
||||||
"Game ticks between Kinetic Blocks checking whether their source is still valid.";
|
"Game ticks between Kinetic Blocks checking whether their source is still valid.";
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
package com.simibubi.create.foundation.utility;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.nio.file.FileAlreadyExistsException;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
|
|
||||||
public class ShippedResourcePacks {
|
|
||||||
|
|
||||||
public static void extractFiles(String... packs) {
|
|
||||||
FilesHelper.createFolderIfMissing("resourcepacks");
|
|
||||||
|
|
||||||
for (String name : packs) {
|
|
||||||
InputStream folderInJar = ShippedResourcePacks.class.getResourceAsStream("/opt_in/" + name + ".zip");
|
|
||||||
|
|
||||||
try {
|
|
||||||
Files.copy(folderInJar, Paths.get("resourcepacks/" + name + ".zip"));
|
|
||||||
} catch (FileAlreadyExistsException e) {
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
folderInJar.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -5,7 +5,8 @@ license="MIT"
|
||||||
|
|
||||||
[[mods]]
|
[[mods]]
|
||||||
modId="create"
|
modId="create"
|
||||||
version="${version}"
|
# The Implementation-Version property in the jar's MANIFEST.MF file will be used as the mod version at runtime
|
||||||
|
version="${file.jarVersion}"
|
||||||
displayName="Create"
|
displayName="Create"
|
||||||
#updateJSONURL=""
|
#updateJSONURL=""
|
||||||
displayURL="https://www.curseforge.com/minecraft/mc-mods/create"
|
displayURL="https://www.curseforge.com/minecraft/mc-mods/create"
|
||||||
|
@ -18,7 +19,7 @@ Technology that empowers the player.'''
|
||||||
[[dependencies.create]]
|
[[dependencies.create]]
|
||||||
modId="forge"
|
modId="forge"
|
||||||
mandatory=true
|
mandatory=true
|
||||||
versionRange="[40.1.0,)"
|
versionRange="[40.1.60,)"
|
||||||
ordering="NONE"
|
ordering="NONE"
|
||||||
side="BOTH"
|
side="BOTH"
|
||||||
|
|
||||||
|
@ -32,6 +33,6 @@ Technology that empowers the player.'''
|
||||||
[[dependencies.create]]
|
[[dependencies.create]]
|
||||||
modId="flywheel"
|
modId="flywheel"
|
||||||
mandatory=true
|
mandatory=true
|
||||||
versionRange="[1.18-0.6.4,1.18-0.6.5)"
|
versionRange="[0.6.4,0.6.5)"
|
||||||
ordering="AFTER"
|
ordering="AFTER"
|
||||||
side="CLIENT"
|
side="CLIENT"
|
||||||
|
|
Before Width: | Height: | Size: 350 B After Width: | Height: | Size: 345 B |
Before Width: | Height: | Size: 372 B After Width: | Height: | Size: 370 B |
Before Width: | Height: | Size: 293 B After Width: | Height: | Size: 289 B |
Before Width: | Height: | Size: 653 B After Width: | Height: | Size: 651 B |
Before Width: | Height: | Size: 760 B After Width: | Height: | Size: 748 B |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 356 B After Width: | Height: | Size: 351 B |
Before Width: | Height: | Size: 339 B After Width: | Height: | Size: 334 B |
Before Width: | Height: | Size: 819 B After Width: | Height: | Size: 794 B |
Before Width: | Height: | Size: 225 B After Width: | Height: | Size: 224 B |
Before Width: | Height: | Size: 289 B After Width: | Height: | Size: 286 B |
Before Width: | Height: | Size: 770 B After Width: | Height: | Size: 744 B |
Before Width: | Height: | Size: 302 B After Width: | Height: | Size: 296 B |
Before Width: | Height: | Size: 505 B After Width: | Height: | Size: 492 B |
Before Width: | Height: | Size: 297 B After Width: | Height: | Size: 290 B |
Before Width: | Height: | Size: 291 B After Width: | Height: | Size: 288 B |
Before Width: | Height: | Size: 245 B After Width: | Height: | Size: 239 B |
Before Width: | Height: | Size: 284 B After Width: | Height: | Size: 280 B |
Before Width: | Height: | Size: 290 B After Width: | Height: | Size: 287 B |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 898 B |
Before Width: | Height: | Size: 175 B After Width: | Height: | Size: 174 B |
Before Width: | Height: | Size: 149 B After Width: | Height: | Size: 148 B |
Before Width: | Height: | Size: 326 B After Width: | Height: | Size: 321 B |
Before Width: | Height: | Size: 268 B After Width: | Height: | Size: 267 B |
Before Width: | Height: | Size: 473 B After Width: | Height: | Size: 454 B |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 631 B After Width: | Height: | Size: 630 B |
Before Width: | Height: | Size: 544 B After Width: | Height: | Size: 543 B |
Before Width: | Height: | Size: 567 B After Width: | Height: | Size: 564 B |
Before Width: | Height: | Size: 599 B After Width: | Height: | Size: 597 B |
Before Width: | Height: | Size: 608 B After Width: | Height: | Size: 605 B |
Before Width: | Height: | Size: 590 B After Width: | Height: | Size: 589 B |
Before Width: | Height: | Size: 619 B After Width: | Height: | Size: 615 B |
Before Width: | Height: | Size: 572 B After Width: | Height: | Size: 569 B |
Before Width: | Height: | Size: 574 B After Width: | Height: | Size: 569 B |
Before Width: | Height: | Size: 601 B After Width: | Height: | Size: 600 B |
Before Width: | Height: | Size: 622 B After Width: | Height: | Size: 619 B |
Before Width: | Height: | Size: 617 B After Width: | Height: | Size: 613 B |
Before Width: | Height: | Size: 574 B After Width: | Height: | Size: 569 B |
Before Width: | Height: | Size: 589 B After Width: | Height: | Size: 585 B |
Before Width: | Height: | Size: 616 B After Width: | Height: | Size: 614 B |
Before Width: | Height: | Size: 631 B After Width: | Height: | Size: 628 B |
Before Width: | Height: | Size: 631 B After Width: | Height: | Size: 629 B |
Before Width: | Height: | Size: 641 B After Width: | Height: | Size: 637 B |
Before Width: | Height: | Size: 563 B After Width: | Height: | Size: 561 B |
Before Width: | Height: | Size: 600 B After Width: | Height: | Size: 597 B |
Before Width: | Height: | Size: 637 B After Width: | Height: | Size: 635 B |
Before Width: | Height: | Size: 265 B After Width: | Height: | Size: 261 B |
Before Width: | Height: | Size: 269 B After Width: | Height: | Size: 264 B |
Before Width: | Height: | Size: 311 B After Width: | Height: | Size: 307 B |
Before Width: | Height: | Size: 320 B After Width: | Height: | Size: 315 B |
Before Width: | Height: | Size: 217 B After Width: | Height: | Size: 197 B |
Before Width: | Height: | Size: 249 B After Width: | Height: | Size: 214 B |
Before Width: | Height: | Size: 255 B After Width: | Height: | Size: 210 B |
Before Width: | Height: | Size: 483 B After Width: | Height: | Size: 432 B |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 820 B |
Before Width: | Height: | Size: 292 B After Width: | Height: | Size: 291 B |
Before Width: | Height: | Size: 391 B After Width: | Height: | Size: 357 B |
Before Width: | Height: | Size: 269 B After Width: | Height: | Size: 264 B |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 598 B |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 632 B |
Before Width: | Height: | Size: 228 B After Width: | Height: | Size: 226 B |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 590 B |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 1.1 KiB |