From 938fdf51538e5cddb69abd5399efc4c78c05084f Mon Sep 17 00:00:00 2001 From: vercte Date: Tue, 10 Jun 2025 16:57:33 -0700 Subject: [PATCH 01/11] IHeatCondition, registry next --- .../compat/jei/category/BasinCategory.java | 29 +++++----- .../compat/jei/category/MixingCategory.java | 14 +++-- .../compat/jei/category/PackingCategory.java | 13 +++-- .../content/processing/basin/BasinRecipe.java | 13 ++--- .../processing/recipe/HeatCondition.java | 58 ++++++++++++------- .../processing/recipe/IHeatCondition.java | 31 ++++++++++ .../processing/recipe/ProcessingRecipe.java | 8 ++- .../recipe/ProcessingRecipeBuilder.java | 4 +- .../recipe/ProcessingRecipeSerializer.java | 6 +- 9 files changed, 116 insertions(+), 60 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/processing/recipe/IHeatCondition.java diff --git a/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java index 03c0dfebee..870d984024 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java @@ -5,6 +5,10 @@ import javax.annotation.ParametersAreNonnullByDefault; +import com.simibubi.create.content.processing.recipe.IHeatCondition; + +import net.minecraft.network.chat.Component; + import org.apache.commons.lang3.mutable.MutableInt; import com.simibubi.create.AllBlocks; @@ -91,24 +95,21 @@ public void setRecipe(IRecipeLayoutBuilder builder, BasinRecipe recipe, IFocusGr i++; } - HeatCondition requiredHeat = recipe.getRequiredHeat(); - if (!requiredHeat.testBlazeBurner(HeatLevel.NONE)) { - builder - .addSlot(RecipeIngredientRole.RENDER_ONLY, 134, 81) - .addItemStack(AllBlocks.BLAZE_BURNER.asStack()); - } - if (!requiredHeat.testBlazeBurner(HeatLevel.KINDLED)) { - builder - .addSlot(RecipeIngredientRole.CATALYST, 153, 81) - .addItemStack(AllItems.BLAZE_CAKE.asStack()); + IHeatCondition heatCondition = recipe.getRequiredHeat(); + if (heatCondition == null) return; + + List itemHints = heatCondition.getItemHints(); + for (int j = 0; j < itemHints.size(); j++) { + builder.addSlot(RecipeIngredientRole.RENDER_ONLY, 134 + (j*20), 81) + .addItemStack(itemHints.get(j)); } } @Override public void draw(BasinRecipe recipe, IRecipeSlotsView recipeSlotsView, GuiGraphics graphics, double mouseX, double mouseY) { - HeatCondition requiredHeat = recipe.getRequiredHeat(); + IHeatCondition heatCondition = recipe.getRequiredHeat(); - boolean noHeat = requiredHeat == HeatCondition.NONE; + boolean noHeat = heatCondition == null; int vRows = (1 + recipe.getFluidResults().size() + recipe.getRollableResults().size()) / 2; @@ -123,8 +124,8 @@ public void draw(BasinRecipe recipe, IRecipeSlotsView recipeSlotsView, GuiGraphi AllGuiTextures heatBar = noHeat ? AllGuiTextures.JEI_NO_HEAT_BAR : AllGuiTextures.JEI_HEAT_BAR; heatBar.render(graphics, 4, 80); - graphics.drawString(Minecraft.getInstance().font, CreateLang.translateDirect(requiredHeat.getTranslationKey()), 9, - 86, requiredHeat.getColor(), false); + graphics.drawString(Minecraft.getInstance().font, Component.translatable(heatCondition.getTranslationKey()), 9, + 86, heatCondition.getColor(), false); } } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/MixingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/MixingCategory.java index 2c8c621fb4..7c480e7145 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/MixingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/MixingCategory.java @@ -4,6 +4,9 @@ import com.simibubi.create.compat.jei.category.animations.AnimatedMixer; import com.simibubi.create.content.processing.basin.BasinRecipe; import com.simibubi.create.content.processing.recipe.HeatCondition; +import com.simibubi.create.content.processing.recipe.IHeatCondition; + +import mezz.jei.api.gui.drawable.IDrawable; import mezz.jei.api.gui.ingredient.IRecipeSlotsView; import net.minecraft.client.gui.GuiGraphics; @@ -13,7 +16,6 @@ public class MixingCategory extends BasinCategory { private final AnimatedMixer mixer = new AnimatedMixer(); - private final AnimatedBlazeBurner heater = new AnimatedBlazeBurner(); MixingType type; enum MixingType { @@ -41,10 +43,12 @@ protected MixingCategory(Info info, MixingType type) { public void draw(BasinRecipe recipe, IRecipeSlotsView iRecipeSlotsView, GuiGraphics graphics, double mouseX, double mouseY) { super.draw(recipe, iRecipeSlotsView, graphics, mouseX, mouseY); - HeatCondition requiredHeat = recipe.getRequiredHeat(); - if (requiredHeat != HeatCondition.NONE) - heater.withHeat(requiredHeat.visualizeAsBlazeBurner()) - .draw(graphics, getBackground().getWidth() / 2 + 3, 55); + IHeatCondition heatCondition = recipe.getRequiredHeat(); + if (heatCondition != null) { + IDrawable drawable = heatCondition.visualize(); + if (drawable != null) + drawable.draw(graphics, getBackground().getWidth() / 2 + 3, 55); + } mixer.draw(graphics, getBackground().getWidth() / 2 + 3, 34); } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java index 1b207bf247..d7e2c30746 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java @@ -4,8 +4,10 @@ import com.simibubi.create.compat.jei.category.animations.AnimatedPress; import com.simibubi.create.content.processing.basin.BasinRecipe; import com.simibubi.create.content.processing.recipe.HeatCondition; +import com.simibubi.create.content.processing.recipe.IHeatCondition; import com.simibubi.create.foundation.gui.AllGuiTextures; 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.recipe.IFocusGroup; import mezz.jei.api.recipe.RecipeIngredientRole; @@ -19,7 +21,6 @@ public class PackingCategory extends BasinCategory { private final AnimatedPress press = new AnimatedPress(true); - private final AnimatedBlazeBurner heater = new AnimatedBlazeBurner(); private final PackingType type; enum PackingType { @@ -76,10 +77,12 @@ public void draw(BasinRecipe recipe, IRecipeSlotsView iRecipeSlotsView, GuiGraph } - HeatCondition requiredHeat = recipe.getRequiredHeat(); - if (requiredHeat != HeatCondition.NONE) - heater.withHeat(requiredHeat.visualizeAsBlazeBurner()) - .draw(graphics, getBackground().getWidth() / 2 + 3, 55); + IHeatCondition heatCondition = recipe.getRequiredHeat(); + if (heatCondition != null) { + IDrawable drawable = heatCondition.visualize(); + if (drawable != null) + drawable.draw(graphics, getBackground().getWidth() / 2 + 3, 55); + } press.draw(graphics, getBackground().getWidth() / 2 + 3, 34); diff --git a/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java b/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java index 81effe6c25..592663746d 100644 --- a/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java +++ b/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java @@ -8,7 +8,7 @@ import javax.annotation.Nonnull; import com.simibubi.create.AllRecipeTypes; -import com.simibubi.create.content.processing.burner.BlazeBurnerBlock.HeatLevel; +import com.simibubi.create.content.processing.recipe.IHeatCondition; import com.simibubi.create.content.processing.recipe.ProcessingRecipe; import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder; import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder.ProcessingRecipeParams; @@ -72,12 +72,11 @@ private static boolean apply(BasinBlockEntity basin, Recipe recipe, boolean t if (availableItems == null || availableFluids == null) return false; - HeatLevel heat = BasinBlockEntity.getHeatLevelOf(basin.getLevel() - .getBlockState(basin.getBlockPos() - .below(1))); - if (isBasinRecipe && !((BasinRecipe) recipe).getRequiredHeat() - .testBlazeBurner(heat)) - return false; + if (isBasinRecipe) { + IHeatCondition heatCondition = ((BasinRecipe) recipe).getRequiredHeat(); + if (heatCondition == null) return false; + return heatCondition.test(basin.getLevel(), basin.getBlockPos()); + } List recipeOutputItems = new ArrayList<>(); List recipeOutputFluids = new ArrayList<>(); diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/HeatCondition.java b/src/main/java/com/simibubi/create/content/processing/recipe/HeatCondition.java index 9c26f0bb52..23629fd51a 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/HeatCondition.java +++ b/src/main/java/com/simibubi/create/content/processing/recipe/HeatCondition.java @@ -1,29 +1,43 @@ package com.simibubi.create.content.processing.recipe; -import com.simibubi.create.Create; +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllItems; +import com.simibubi.create.compat.jei.category.animations.AnimatedBlazeBurner; import com.simibubi.create.content.processing.burner.BlazeBurnerBlock; import com.simibubi.create.content.processing.burner.BlazeBurnerBlock.HeatLevel; +import mezz.jei.api.gui.drawable.IDrawable; import net.createmod.catnip.lang.Lang; +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.state.BlockState; -public enum HeatCondition { +import org.jetbrains.annotations.NotNull; - NONE(0xffffff), HEATED(0xE88300), SUPERHEATED(0x5C93E8), +import java.util.List; - ; +public enum HeatCondition implements IHeatCondition { + HEATED(0xE88300, HeatLevel.KINDLED, AllBlocks.BLAZE_BURNER.asStack()), + SUPERHEATED(0x5C93E8, HeatLevel.SEETHING, AllBlocks.BLAZE_BURNER.asStack(), AllItems.BLAZE_CAKE.asStack()); - private int color; + private static final AnimatedBlazeBurner blaze = new AnimatedBlazeBurner(); - private HeatCondition(int color) { + private final int color; + private final HeatLevel heatLevel; + private final List itemHints; + + HeatCondition(int color, HeatLevel heatLevel, ItemStack... hints) { this.color = color; + this.heatLevel = heatLevel; + this.itemHints = List.of(hints); } - public boolean testBlazeBurner(BlazeBurnerBlock.HeatLevel level) { - if (this == SUPERHEATED) - return level == HeatLevel.SEETHING; - if (this == HEATED) - return level != HeatLevel.NONE && level != HeatLevel.SMOULDERING; - return true; + @Override + public boolean test(BlockGetter getter, BlockPos basinPos) { + BlockState stateBelow = getter.getBlockState(basinPos.below()); + HeatLevel basinHeat = stateBelow.getValue(BlazeBurnerBlock.HEAT_LEVEL); + return basinHeat.isAtLeast(heatLevel); } public BlazeBurnerBlock.HeatLevel visualizeAsBlazeBurner() { @@ -34,6 +48,17 @@ public BlazeBurnerBlock.HeatLevel visualizeAsBlazeBurner() { return HeatLevel.NONE; } + @Override + public IDrawable visualize() { + return blaze.withHeat(this.visualizeAsBlazeBurner()); + } + + @Override + @NotNull + public List getItemHints() { + return itemHints; + } + public String serialize() { return Lang.asId(name()); } @@ -42,15 +67,6 @@ public String getTranslationKey() { return "recipe.heat_requirement." + serialize(); } - public static HeatCondition deserialize(String name) { - for (HeatCondition heatCondition : values()) - if (heatCondition.serialize() - .equals(name)) - return heatCondition; - Create.LOGGER.warn("Tried to deserialize invalid heat condition: \"" + name + "\""); - return NONE; - } - public int getColor() { return color; } diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/IHeatCondition.java b/src/main/java/com/simibubi/create/content/processing/recipe/IHeatCondition.java new file mode 100644 index 0000000000..2dcba7c109 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/processing/recipe/IHeatCondition.java @@ -0,0 +1,31 @@ +package com.simibubi.create.content.processing.recipe; + +import mezz.jei.api.gui.drawable.IDrawable; +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public interface IHeatCondition { + boolean test(BlockGetter getter, BlockPos basinPos); + + String getTranslationKey(); + + @Nullable + default IDrawable visualize() { + return null; + } + + @NotNull + default List getItemHints() { + return List.of(); + } + + default int getColor() { + return 0xffffff; + } +} diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipe.java b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipe.java index 7bf6363b71..9ff125038d 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipe.java +++ b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipe.java @@ -5,6 +5,7 @@ import java.util.function.Supplier; import java.util.stream.Collectors; +import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; import org.slf4j.Logger; @@ -38,7 +39,7 @@ public abstract class ProcessingRecipe implements Recipe protected NonNullList fluidIngredients; protected NonNullList fluidResults; protected int processingDuration; - protected HeatCondition requiredHeat; + protected IHeatCondition requiredHeat; private RecipeType type; private RecipeSerializer serializer; @@ -102,7 +103,7 @@ private void validate(ResourceLocation recipeTypeId) { if (processingDuration > 0 && !canSpecifyDuration()) logger.warn(messageHeader + " specified a duration. Durations have no impact on this type of recipe."); - if (requiredHeat != HeatCondition.NONE && !canRequireHeat()) + if (requiredHeat != null && !canRequireHeat()) logger.warn( messageHeader + " specified a heat condition. Heat conditions have no impact on this type of recipe."); @@ -164,7 +165,8 @@ public int getProcessingDuration() { return processingDuration; } - public HeatCondition getRequiredHeat() { + @Nullable + public IHeatCondition getRequiredHeat() { return requiredHeat; } diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeBuilder.java b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeBuilder.java index d9cc5cdd98..fc90736cc7 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeBuilder.java @@ -231,7 +231,7 @@ public static class ProcessingRecipeParams { protected NonNullList fluidIngredients; protected NonNullList fluidResults; protected int processingDuration; - protected HeatCondition requiredHeat; + protected IHeatCondition requiredHeat; public boolean keepHeldItem; @@ -242,7 +242,7 @@ protected ProcessingRecipeParams(ResourceLocation id) { fluidIngredients = NonNullList.create(); fluidResults = NonNullList.create(); processingDuration = 0; - requiredHeat = HeatCondition.NONE; + requiredHeat = null; keepHeldItem = false; } diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeSerializer.java b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeSerializer.java index 8a1d910fef..4a6b10b3a3 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeSerializer.java +++ b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeSerializer.java @@ -45,9 +45,9 @@ protected void writeToJson(JsonObject json, T recipe) { if (processingDuration > 0) json.addProperty("processingTime", processingDuration); - HeatCondition requiredHeat = recipe.getRequiredHeat(); - if (requiredHeat != HeatCondition.NONE) - json.addProperty("heatRequirement", requiredHeat.serialize()); + IHeatCondition heatCondition = recipe.getRequiredHeat(); + if (heatCondition != null) + json.addProperty("heatRequirement", heatCondition.serialize()); recipe.writeAdditional(json); } From ef27c75ff778044dbd5bdbb2a15438ef39d1cf32 Mon Sep 17 00:00:00 2001 From: vercte Date: Tue, 10 Jun 2025 17:04:59 -0700 Subject: [PATCH 02/11] rename allat --- .../recipe/HeatCondition.java} | 4 ++-- .../compat/jei/category/BasinCategory.java | 11 +++-------- .../compat/jei/category/MixingCategory.java | 6 ++---- .../compat/jei/category/PackingCategory.java | 6 ++---- .../fluids/potion/PotionMixingRecipes.java | 4 ++-- .../content/processing/basin/BasinRecipe.java | 4 ++-- ...dition.java => BlazeBurnerHeatCondition.java} | 5 +++-- .../processing/recipe/ProcessingRecipe.java | 6 ++++-- .../recipe/ProcessingRecipeBuilder.java | 5 +++-- .../recipe/ProcessingRecipeSerializer.java | 7 ++++--- .../data/recipe/CreateMixingRecipeGen.java | 16 +++++++--------- 11 files changed, 34 insertions(+), 40 deletions(-) rename src/main/java/com/simibubi/create/{content/processing/recipe/IHeatCondition.java => api/recipe/HeatCondition.java} (86%) rename src/main/java/com/simibubi/create/content/processing/recipe/{HeatCondition.java => BlazeBurnerHeatCondition.java} (91%) diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/IHeatCondition.java b/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java similarity index 86% rename from src/main/java/com/simibubi/create/content/processing/recipe/IHeatCondition.java rename to src/main/java/com/simibubi/create/api/recipe/HeatCondition.java index 2dcba7c109..f4253fa4e1 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/IHeatCondition.java +++ b/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java @@ -1,4 +1,4 @@ -package com.simibubi.create.content.processing.recipe; +package com.simibubi.create.api.recipe; import mezz.jei.api.gui.drawable.IDrawable; import net.minecraft.core.BlockPos; @@ -10,7 +10,7 @@ import java.util.List; -public interface IHeatCondition { +public interface HeatCondition { boolean test(BlockGetter getter, BlockPos basinPos); String getTranslationKey(); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java index 870d984024..9c5dede586 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java @@ -5,22 +5,17 @@ import javax.annotation.ParametersAreNonnullByDefault; -import com.simibubi.create.content.processing.recipe.IHeatCondition; +import com.simibubi.create.api.recipe.HeatCondition; import net.minecraft.network.chat.Component; import org.apache.commons.lang3.mutable.MutableInt; -import com.simibubi.create.AllBlocks; -import com.simibubi.create.AllItems; import com.simibubi.create.content.processing.basin.BasinRecipe; -import com.simibubi.create.content.processing.burner.BlazeBurnerBlock.HeatLevel; -import com.simibubi.create.content.processing.recipe.HeatCondition; import com.simibubi.create.content.processing.recipe.ProcessingOutput; import com.simibubi.create.foundation.fluid.FluidIngredient; import com.simibubi.create.foundation.gui.AllGuiTextures; import com.simibubi.create.foundation.item.ItemHelper; -import com.simibubi.create.foundation.utility.CreateLang; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; import mezz.jei.api.gui.ingredient.IRecipeSlotsView; @@ -95,7 +90,7 @@ public void setRecipe(IRecipeLayoutBuilder builder, BasinRecipe recipe, IFocusGr i++; } - IHeatCondition heatCondition = recipe.getRequiredHeat(); + HeatCondition heatCondition = recipe.getRequiredHeat(); if (heatCondition == null) return; List itemHints = heatCondition.getItemHints(); @@ -107,7 +102,7 @@ public void setRecipe(IRecipeLayoutBuilder builder, BasinRecipe recipe, IFocusGr @Override public void draw(BasinRecipe recipe, IRecipeSlotsView recipeSlotsView, GuiGraphics graphics, double mouseX, double mouseY) { - IHeatCondition heatCondition = recipe.getRequiredHeat(); + HeatCondition heatCondition = recipe.getRequiredHeat(); boolean noHeat = heatCondition == null; diff --git a/src/main/java/com/simibubi/create/compat/jei/category/MixingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/MixingCategory.java index 7c480e7145..fb3970e791 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/MixingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/MixingCategory.java @@ -1,10 +1,8 @@ package com.simibubi.create.compat.jei.category; -import com.simibubi.create.compat.jei.category.animations.AnimatedBlazeBurner; import com.simibubi.create.compat.jei.category.animations.AnimatedMixer; import com.simibubi.create.content.processing.basin.BasinRecipe; -import com.simibubi.create.content.processing.recipe.HeatCondition; -import com.simibubi.create.content.processing.recipe.IHeatCondition; +import com.simibubi.create.api.recipe.HeatCondition; import mezz.jei.api.gui.drawable.IDrawable; import mezz.jei.api.gui.ingredient.IRecipeSlotsView; @@ -43,7 +41,7 @@ protected MixingCategory(Info info, MixingType type) { public void draw(BasinRecipe recipe, IRecipeSlotsView iRecipeSlotsView, GuiGraphics graphics, double mouseX, double mouseY) { super.draw(recipe, iRecipeSlotsView, graphics, mouseX, mouseY); - IHeatCondition heatCondition = recipe.getRequiredHeat(); + HeatCondition heatCondition = recipe.getRequiredHeat(); if (heatCondition != null) { IDrawable drawable = heatCondition.visualize(); if (drawable != null) diff --git a/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java index d7e2c30746..c60a5c17ac 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java @@ -1,10 +1,8 @@ package com.simibubi.create.compat.jei.category; -import com.simibubi.create.compat.jei.category.animations.AnimatedBlazeBurner; import com.simibubi.create.compat.jei.category.animations.AnimatedPress; import com.simibubi.create.content.processing.basin.BasinRecipe; -import com.simibubi.create.content.processing.recipe.HeatCondition; -import com.simibubi.create.content.processing.recipe.IHeatCondition; +import com.simibubi.create.api.recipe.HeatCondition; import com.simibubi.create.foundation.gui.AllGuiTextures; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; import mezz.jei.api.gui.drawable.IDrawable; @@ -77,7 +75,7 @@ public void draw(BasinRecipe recipe, IRecipeSlotsView iRecipeSlotsView, GuiGraph } - IHeatCondition heatCondition = recipe.getRequiredHeat(); + HeatCondition heatCondition = recipe.getRequiredHeat(); if (heatCondition != null) { IDrawable drawable = heatCondition.visualize(); if (drawable != null) diff --git a/src/main/java/com/simibubi/create/content/fluids/potion/PotionMixingRecipes.java b/src/main/java/com/simibubi/create/content/fluids/potion/PotionMixingRecipes.java index 9433c0aa61..9a71e80abe 100644 --- a/src/main/java/com/simibubi/create/content/fluids/potion/PotionMixingRecipes.java +++ b/src/main/java/com/simibubi/create/content/fluids/potion/PotionMixingRecipes.java @@ -10,7 +10,7 @@ import com.simibubi.create.Create; import com.simibubi.create.content.fluids.potion.PotionFluid.BottleType; import com.simibubi.create.content.kinetics.mixer.MixingRecipe; -import com.simibubi.create.content.processing.recipe.HeatCondition; +import com.simibubi.create.content.processing.recipe.BlazeBurnerHeatCondition; import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder; import com.simibubi.create.foundation.fluid.FluidIngredient; @@ -122,7 +122,7 @@ private static MixingRecipe createRecipe(String id, Ingredient ingredient, Fluid Create.asResource(id)).require(ingredient) .require(FluidIngredient.fromFluidStack(fromFluid)) .output(toFluid) - .requiresHeat(HeatCondition.HEATED) + .requiresHeat(BlazeBurnerHeatCondition.HEATED) .build(); } diff --git a/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java b/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java index 592663746d..5e2ae7aa17 100644 --- a/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java +++ b/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java @@ -8,7 +8,7 @@ import javax.annotation.Nonnull; import com.simibubi.create.AllRecipeTypes; -import com.simibubi.create.content.processing.recipe.IHeatCondition; +import com.simibubi.create.api.recipe.HeatCondition; import com.simibubi.create.content.processing.recipe.ProcessingRecipe; import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder; import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder.ProcessingRecipeParams; @@ -73,7 +73,7 @@ private static boolean apply(BasinBlockEntity basin, Recipe recipe, boolean t return false; if (isBasinRecipe) { - IHeatCondition heatCondition = ((BasinRecipe) recipe).getRequiredHeat(); + HeatCondition heatCondition = ((BasinRecipe) recipe).getRequiredHeat(); if (heatCondition == null) return false; return heatCondition.test(basin.getLevel(), basin.getBlockPos()); } diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/HeatCondition.java b/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java similarity index 91% rename from src/main/java/com/simibubi/create/content/processing/recipe/HeatCondition.java rename to src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java index 23629fd51a..26b7fe0828 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/HeatCondition.java +++ b/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java @@ -2,6 +2,7 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; +import com.simibubi.create.api.recipe.HeatCondition; import com.simibubi.create.compat.jei.category.animations.AnimatedBlazeBurner; import com.simibubi.create.content.processing.burner.BlazeBurnerBlock; import com.simibubi.create.content.processing.burner.BlazeBurnerBlock.HeatLevel; @@ -17,7 +18,7 @@ import java.util.List; -public enum HeatCondition implements IHeatCondition { +public enum BlazeBurnerHeatCondition implements HeatCondition { HEATED(0xE88300, HeatLevel.KINDLED, AllBlocks.BLAZE_BURNER.asStack()), SUPERHEATED(0x5C93E8, HeatLevel.SEETHING, AllBlocks.BLAZE_BURNER.asStack(), AllItems.BLAZE_CAKE.asStack()); @@ -27,7 +28,7 @@ public enum HeatCondition implements IHeatCondition { private final HeatLevel heatLevel; private final List itemHints; - HeatCondition(int color, HeatLevel heatLevel, ItemStack... hints) { + BlazeBurnerHeatCondition(int color, HeatLevel heatLevel, ItemStack... hints) { this.color = color; this.heatLevel = heatLevel; this.itemHints = List.of(hints); diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipe.java b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipe.java index 9ff125038d..b594abfa91 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipe.java +++ b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipe.java @@ -8,6 +8,8 @@ import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; +import com.simibubi.create.api.recipe.HeatCondition; + import org.slf4j.Logger; import com.google.gson.JsonObject; @@ -39,7 +41,7 @@ public abstract class ProcessingRecipe implements Recipe protected NonNullList fluidIngredients; protected NonNullList fluidResults; protected int processingDuration; - protected IHeatCondition requiredHeat; + protected HeatCondition requiredHeat; private RecipeType type; private RecipeSerializer serializer; @@ -166,7 +168,7 @@ public int getProcessingDuration() { } @Nullable - public IHeatCondition getRequiredHeat() { + public HeatCondition getRequiredHeat() { return requiredHeat; } diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeBuilder.java b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeBuilder.java index fc90736cc7..14bbbfd932 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeBuilder.java @@ -6,6 +6,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import com.simibubi.create.api.recipe.HeatCondition; import com.simibubi.create.foundation.data.SimpleDatagenIngredient; import com.simibubi.create.foundation.data.recipe.Mods; import com.simibubi.create.foundation.fluid.FluidHelper; @@ -92,7 +93,7 @@ public ProcessingRecipeBuilder averageProcessingDuration() { return duration(100); } - public ProcessingRecipeBuilder requiresHeat(HeatCondition condition) { + public ProcessingRecipeBuilder requiresHeat(BlazeBurnerHeatCondition condition) { params.requiredHeat = condition; return this; } @@ -231,7 +232,7 @@ public static class ProcessingRecipeParams { protected NonNullList fluidIngredients; protected NonNullList fluidResults; protected int processingDuration; - protected IHeatCondition requiredHeat; + protected HeatCondition requiredHeat; public boolean keepHeldItem; diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeSerializer.java b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeSerializer.java index 4a6b10b3a3..821c5bbabd 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeSerializer.java +++ b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeSerializer.java @@ -5,6 +5,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.simibubi.create.api.recipe.HeatCondition; import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder.ProcessingRecipeFactory; import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.fluid.FluidIngredient; @@ -45,7 +46,7 @@ protected void writeToJson(JsonObject json, T recipe) { if (processingDuration > 0) json.addProperty("processingTime", processingDuration); - IHeatCondition heatCondition = recipe.getRequiredHeat(); + HeatCondition heatCondition = recipe.getRequiredHeat(); if (heatCondition != null) json.addProperty("heatRequirement", heatCondition.serialize()); @@ -82,7 +83,7 @@ protected T readFromJson(ResourceLocation recipeId, JsonObject json) { if (GsonHelper.isValidNode(json, "processingTime")) builder.duration(GsonHelper.getAsInt(json, "processingTime")); if (GsonHelper.isValidNode(json, "heatRequirement")) - builder.requiresHeat(HeatCondition.deserialize(GsonHelper.getAsString(json, "heatRequirement"))); + builder.requiresHeat(BlazeBurnerHeatCondition.deserialize(GsonHelper.getAsString(json, "heatRequirement"))); T recipe = builder.build(); recipe.readAdditional(json); @@ -139,7 +140,7 @@ protected T readFromBuffer(ResourceLocation recipeId, FriendlyByteBuf buffer) { .withFluidIngredients(fluidIngredients) .withFluidOutputs(fluidResults) .duration(buffer.readVarInt()) - .requiresHeat(HeatCondition.values()[buffer.readVarInt()]) + .requiresHeat(BlazeBurnerHeatCondition.values()[buffer.readVarInt()]) .build(); recipe.readAdditional(buffer); return recipe; diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateMixingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateMixingRecipeGen.java index 8e1f93c1de..5fc3d2bc9f 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateMixingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateMixingRecipeGen.java @@ -4,11 +4,9 @@ import com.simibubi.create.AllItems; import com.simibubi.create.AllTags.AllItemTags; import com.simibubi.create.Create; -import com.simibubi.create.api.data.recipe.CompactingRecipeGen; import com.simibubi.create.api.data.recipe.MixingRecipeGen; -import com.simibubi.create.api.data.recipe.SequencedAssemblyRecipeGen; -import com.simibubi.create.content.processing.recipe.HeatCondition; +import com.simibubi.create.content.processing.recipe.BlazeBurnerHeatCondition; import com.simibubi.create.foundation.recipe.BlockTagIngredient; import net.minecraft.data.PackOutput; @@ -31,27 +29,27 @@ public final class CreateMixingRecipeGen extends MixingRecipeGen { TEMP_LAVA = create("lava_from_cobble", b -> b.require(Tags.Items.COBBLESTONE) .output(Fluids.LAVA, 50) - .requiresHeat(HeatCondition.SUPERHEATED)), + .requiresHeat(BlazeBurnerHeatCondition.SUPERHEATED)), TEA = create("tea", b -> b.require(Fluids.WATER, 250) .require(Tags.Fluids.MILK, 250) .require(ItemTags.LEAVES) .output(AllFluids.TEA.get(), 500) - .requiresHeat(HeatCondition.HEATED)), + .requiresHeat(BlazeBurnerHeatCondition.HEATED)), CHOCOLATE = create("chocolate", b -> b.require(Tags.Fluids.MILK, 250) .require(Items.SUGAR) .require(Items.COCOA_BEANS) .output(AllFluids.CHOCOLATE.get(), 250) - .requiresHeat(HeatCondition.HEATED)), + .requiresHeat(BlazeBurnerHeatCondition.HEATED)), CHOCOLATE_MELTING = create("chocolate_melting", b -> b.require(AllItems.BAR_OF_CHOCOLATE.get()) .output(AllFluids.CHOCOLATE.get(), 250) - .requiresHeat(HeatCondition.HEATED)), + .requiresHeat(BlazeBurnerHeatCondition.HEATED)), HONEY = create("honey", b -> b.require(Items.HONEY_BLOCK) .output(AllFluids.HONEY.get(), 1000) - .requiresHeat(HeatCondition.HEATED)), + .requiresHeat(BlazeBurnerHeatCondition.HEATED)), DOUGH = create("dough_by_mixing", b -> b.require(CreateRecipeProvider.I.wheatFlour()) .require(Fluids.WATER, 1000) @@ -60,7 +58,7 @@ public final class CreateMixingRecipeGen extends MixingRecipeGen { BRASS_INGOT = create("brass_ingot", b -> b.require(CreateRecipeProvider.I.copper()) .require(CreateRecipeProvider.I.zinc()) .output(AllItems.BRASS_INGOT.get(), 2) - .requiresHeat(HeatCondition.HEATED)), + .requiresHeat(BlazeBurnerHeatCondition.HEATED)), ANDESITE_ALLOY = create("andesite_alloy", b -> b.require(Blocks.ANDESITE) .require(CreateRecipeProvider.I.ironNugget()) From a5e4d702a6a052411f683d30a4433bfe7c1c836d Mon Sep 17 00:00:00 2001 From: vercte Date: Tue, 10 Jun 2025 17:45:04 -0700 Subject: [PATCH 03/11] REGISTRY YEAH!!! --- src/main/java/com/simibubi/create/Create.java | 3 +++ .../create/api/recipe/HeatCondition.java | 6 ++++++ .../api/registry/CreateBuiltInRegistries.java | 3 +++ .../create/api/registry/CreateRegistries.java | 3 +++ .../compat/jei/category/BasinCategory.java | 8 +++++++- .../processing/recipe/AllHeatConditions.java | 18 ++++++++++++++++++ .../recipe/BlazeBurnerHeatCondition.java | 13 +++++++------ .../recipe/ProcessingRecipeBuilder.java | 2 +- .../recipe/ProcessingRecipeSerializer.java | 17 ++++++++++++----- 9 files changed, 60 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/processing/recipe/AllHeatConditions.java diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 3385d9f4c5..c29ba5c1d2 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -2,6 +2,8 @@ import java.util.Random; +import com.simibubi.create.content.processing.recipe.AllHeatConditions; + import org.slf4j.Logger; import com.google.gson.Gson; @@ -199,6 +201,7 @@ public static void onRegister(final RegisterEvent event) { AllPotatoProjectileRenderModes.init(); AllPotatoProjectileEntityHitActions.init(); AllPotatoProjectileBlockHitActions.init(); + AllHeatConditions.init(); } public static LangBuilder lang() { diff --git a/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java b/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java index f4253fa4e1..d1d3557842 100644 --- a/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java +++ b/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java @@ -1,5 +1,7 @@ package com.simibubi.create.api.recipe; +import com.simibubi.create.api.registry.CreateBuiltInRegistries; + import mezz.jei.api.gui.drawable.IDrawable; import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; @@ -28,4 +30,8 @@ default List getItemHints() { default int getColor() { return 0xffffff; } + + default int ordinal() { + return CreateBuiltInRegistries.HEAT_CONDITION.getId(this); + } } diff --git a/src/main/java/com/simibubi/create/api/registry/CreateBuiltInRegistries.java b/src/main/java/com/simibubi/create/api/registry/CreateBuiltInRegistries.java index d517af66cb..d0d08017c8 100644 --- a/src/main/java/com/simibubi/create/api/registry/CreateBuiltInRegistries.java +++ b/src/main/java/com/simibubi/create/api/registry/CreateBuiltInRegistries.java @@ -1,5 +1,7 @@ package com.simibubi.create.api.registry; +import com.simibubi.create.api.recipe.HeatCondition; + import org.jetbrains.annotations.ApiStatus; import com.mojang.serialization.Codec; @@ -41,6 +43,7 @@ public class CreateBuiltInRegistries { public static final Registry> POTATO_PROJECTILE_RENDER_MODE = simple(CreateRegistries.POTATO_PROJECTILE_RENDER_MODE); public static final Registry> POTATO_PROJECTILE_ENTITY_HIT_ACTION = simple(CreateRegistries.POTATO_PROJECTILE_ENTITY_HIT_ACTION); public static final Registry> POTATO_PROJECTILE_BLOCK_HIT_ACTION = simple(CreateRegistries.POTATO_PROJECTILE_BLOCK_HIT_ACTION); + public static final Registry HEAT_CONDITION = simple(CreateRegistries.HEAT_CONDITION); private static Registry simple(ResourceKey> key) { return register(key, new MappedRegistry<>(key, Lifecycle.stable(), false)); diff --git a/src/main/java/com/simibubi/create/api/registry/CreateRegistries.java b/src/main/java/com/simibubi/create/api/registry/CreateRegistries.java index 73efe5aed1..490209c343 100644 --- a/src/main/java/com/simibubi/create/api/registry/CreateRegistries.java +++ b/src/main/java/com/simibubi/create/api/registry/CreateRegistries.java @@ -15,6 +15,8 @@ import com.simibubi.create.content.kinetics.mechanicalArm.ArmInteractionPointType; import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttributeType; +import com.simibubi.create.api.recipe.HeatCondition; + import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; @@ -36,6 +38,7 @@ public class CreateRegistries { public static final ResourceKey>> POTATO_PROJECTILE_RENDER_MODE = key("potato_projectile/render_mode"); public static final ResourceKey>> POTATO_PROJECTILE_ENTITY_HIT_ACTION = key("potato_projectile/entity_hit_action"); public static final ResourceKey>> POTATO_PROJECTILE_BLOCK_HIT_ACTION = key("potato_projectile/block_hit_action"); + public static final ResourceKey> HEAT_CONDITION = key("heat_condition"); private static ResourceKey> key(String name) { return ResourceKey.createRegistryKey(Create.asResource(name)); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java index 9c5dede586..4b8611fc0f 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java @@ -119,8 +119,14 @@ public void draw(BasinRecipe recipe, IRecipeSlotsView recipeSlotsView, GuiGraphi AllGuiTextures heatBar = noHeat ? AllGuiTextures.JEI_NO_HEAT_BAR : AllGuiTextures.JEI_HEAT_BAR; heatBar.render(graphics, 4, 80); - graphics.drawString(Minecraft.getInstance().font, Component.translatable(heatCondition.getTranslationKey()), 9, + + if (noHeat) { + graphics.drawString(Minecraft.getInstance().font, Component.translatable("create.recipe.heat_requirement.none"), 9, + 86, 0xffffff, false); + } else { + graphics.drawString(Minecraft.getInstance().font, Component.translatable(heatCondition.getTranslationKey()), 9, 86, heatCondition.getColor(), false); + } } } diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/AllHeatConditions.java b/src/main/java/com/simibubi/create/content/processing/recipe/AllHeatConditions.java new file mode 100644 index 0000000000..fff9b323d3 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/processing/recipe/AllHeatConditions.java @@ -0,0 +1,18 @@ +package com.simibubi.create.content.processing.recipe; + +import com.simibubi.create.Create; +import com.simibubi.create.api.recipe.HeatCondition; +import com.simibubi.create.api.registry.CreateBuiltInRegistries; + +import net.minecraft.core.Registry; + +public class AllHeatConditions { + public static final BlazeBurnerHeatCondition HEATED = register("heated", BlazeBurnerHeatCondition.HEATED); + public static final BlazeBurnerHeatCondition SUPERHEATED = register("superheated", BlazeBurnerHeatCondition.SUPERHEATED); + + private static T register(String name, T type) { + return Registry.register(CreateBuiltInRegistries.HEAT_CONDITION, Create.asResource(name), type); + } + + public static void init() {} +} diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java b/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java index 26b7fe0828..c758c91364 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java +++ b/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java @@ -12,6 +12,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.NotNull; @@ -19,16 +20,16 @@ import java.util.List; public enum BlazeBurnerHeatCondition implements HeatCondition { - HEATED(0xE88300, HeatLevel.KINDLED, AllBlocks.BLAZE_BURNER.asStack()), - SUPERHEATED(0x5C93E8, HeatLevel.SEETHING, AllBlocks.BLAZE_BURNER.asStack(), AllItems.BLAZE_CAKE.asStack()); + HEATED(0xE88300, HeatLevel.KINDLED, AllBlocks.BLAZE_BURNER), + SUPERHEATED(0x5C93E8, HeatLevel.SEETHING, AllBlocks.BLAZE_BURNER, AllItems.BLAZE_CAKE); private static final AnimatedBlazeBurner blaze = new AnimatedBlazeBurner(); private final int color; private final HeatLevel heatLevel; - private final List itemHints; + private final List itemHints; - BlazeBurnerHeatCondition(int color, HeatLevel heatLevel, ItemStack... hints) { + BlazeBurnerHeatCondition(int color, HeatLevel heatLevel, ItemLike... hints) { this.color = color; this.heatLevel = heatLevel; this.itemHints = List.of(hints); @@ -57,7 +58,7 @@ public IDrawable visualize() { @Override @NotNull public List getItemHints() { - return itemHints; + return itemHints.stream().map(ItemStack::new).toList(); } public String serialize() { @@ -65,7 +66,7 @@ public String serialize() { } public String getTranslationKey() { - return "recipe.heat_requirement." + serialize(); + return "create.recipe.heat_requirement." + serialize(); } public int getColor() { diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeBuilder.java b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeBuilder.java index 14bbbfd932..ed7c1a9b04 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeBuilder.java @@ -93,7 +93,7 @@ public ProcessingRecipeBuilder averageProcessingDuration() { return duration(100); } - public ProcessingRecipeBuilder requiresHeat(BlazeBurnerHeatCondition condition) { + public ProcessingRecipeBuilder requiresHeat(HeatCondition condition) { params.requiredHeat = condition; return this; } diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeSerializer.java b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeSerializer.java index 821c5bbabd..a11d02c152 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeSerializer.java +++ b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeSerializer.java @@ -6,6 +6,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.simibubi.create.api.recipe.HeatCondition; +import com.simibubi.create.api.registry.CreateBuiltInRegistries; import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder.ProcessingRecipeFactory; import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.fluid.FluidIngredient; @@ -48,7 +49,7 @@ protected void writeToJson(JsonObject json, T recipe) { HeatCondition heatCondition = recipe.getRequiredHeat(); if (heatCondition != null) - json.addProperty("heatRequirement", heatCondition.serialize()); + json.addProperty("heatRequirement", CreateBuiltInRegistries.HEAT_CONDITION.getId(heatCondition)); recipe.writeAdditional(json); } @@ -82,8 +83,14 @@ protected T readFromJson(ResourceLocation recipeId, JsonObject json) { if (GsonHelper.isValidNode(json, "processingTime")) builder.duration(GsonHelper.getAsInt(json, "processingTime")); - if (GsonHelper.isValidNode(json, "heatRequirement")) - builder.requiresHeat(BlazeBurnerHeatCondition.deserialize(GsonHelper.getAsString(json, "heatRequirement"))); + if (GsonHelper.isValidNode(json, "heatRequirement")) { + String requirement = GsonHelper.getAsString(json, "heatRequirement"); + ResourceLocation location; + if (requirement.contains(":")) location = new ResourceLocation(requirement); + else location = new ResourceLocation("create", requirement); + + builder.requiresHeat(CreateBuiltInRegistries.HEAT_CONDITION.get(location)); + } T recipe = builder.build(); recipe.readAdditional(json); @@ -107,8 +114,8 @@ protected void writeToBuffer(FriendlyByteBuf buffer, T recipe) { fluidOutputs.forEach(o -> o.writeToPacket(buffer)); buffer.writeVarInt(recipe.getProcessingDuration()); - buffer.writeVarInt(recipe.getRequiredHeat() - .ordinal()); + if(recipe.getRequiredHeat() != null) + buffer.writeVarInt(recipe.getRequiredHeat().ordinal()); recipe.writeAdditional(buffer); } From 1b2078e50c31538067361a395d064f8055ae6708 Mon Sep 17 00:00:00 2001 From: vercte Date: Tue, 10 Jun 2025 19:24:14 -0700 Subject: [PATCH 04/11] Fix that non-application bug --- .../simibubi/create/content/processing/basin/BasinRecipe.java | 4 ++-- .../content/processing/recipe/BlazeBurnerHeatCondition.java | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java b/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java index 5e2ae7aa17..f5f35453e6 100644 --- a/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java +++ b/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java @@ -74,8 +74,8 @@ private static boolean apply(BasinBlockEntity basin, Recipe recipe, boolean t if (isBasinRecipe) { HeatCondition heatCondition = ((BasinRecipe) recipe).getRequiredHeat(); - if (heatCondition == null) return false; - return heatCondition.test(basin.getLevel(), basin.getBlockPos()); + if (heatCondition == null || + !heatCondition.test(basin.getLevel(), basin.getBlockPos())) return false; } List recipeOutputItems = new ArrayList<>(); diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java b/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java index c758c91364..4901b72510 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java +++ b/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java @@ -38,6 +38,7 @@ public enum BlazeBurnerHeatCondition implements HeatCondition { @Override public boolean test(BlockGetter getter, BlockPos basinPos) { BlockState stateBelow = getter.getBlockState(basinPos.below()); + if(!stateBelow.is(AllBlocks.BLAZE_BURNER.get())) return false; HeatLevel basinHeat = stateBelow.getValue(BlazeBurnerBlock.HEAT_LEVEL); return basinHeat.isAtLeast(heatLevel); } From a10081f8f3f0b888dff74ef82f0f7540b54522de Mon Sep 17 00:00:00 2001 From: vercte Date: Tue, 10 Jun 2025 19:34:12 -0700 Subject: [PATCH 05/11] fix & run datagen --- .../2d64935085b86659cb7857bad9701dbf9bab6e4c | 8 ++++---- .../b256105d8411632b0d585496ea8944a751a08034 | 14 +++++++------- .../data/create/recipes/mixing/brass_ingot.json | 2 +- .../data/create/recipes/mixing/chocolate.json | 2 +- .../create/recipes/mixing/chocolate_melting.json | 2 +- .../data/create/recipes/mixing/honey.json | 2 +- .../create/recipes/mixing/lava_from_cobble.json | 2 +- .../resources/data/create/recipes/mixing/tea.json | 2 +- .../resources/data/forge/tags/items/plates.json | 1 + .../recipe/ProcessingRecipeSerializer.java | 2 +- 10 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/generated/resources/.cache/2d64935085b86659cb7857bad9701dbf9bab6e4c b/src/generated/resources/.cache/2d64935085b86659cb7857bad9701dbf9bab6e4c index 847e073df5..5d9a59449c 100644 --- a/src/generated/resources/.cache/2d64935085b86659cb7857bad9701dbf9bab6e4c +++ b/src/generated/resources/.cache/2d64935085b86659cb7857bad9701dbf9bab6e4c @@ -1,4 +1,4 @@ -// 1.20.1 2025-05-18T12:16:16.454733203 Registrate Provider for create [Recipes, Advancements, Loot Tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)] +// 1.20.1 2025-06-10T19:27:13.538878 Registrate Provider for create [Recipes, Advancements, Loot Tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)] 60bbdf92d2ac9824ea6144955c74043a6005f79d assets/create/blockstates/acacia_window.json 6a67703c2697d81b7dc83e9d72a66f9c9ff08383 assets/create/blockstates/acacia_window_pane.json c3ae87b62e81d8e9476eccd793bb1548d74c66a1 assets/create/blockstates/adjustable_chain_gearshift.json @@ -642,8 +642,8 @@ b0d8f08968763a5f74e5cd5644377a76a9f39753 assets/create/blockstates/yellow_toolbo fe8c497aacc641c2f01cec90bba9f19e59cc2ed2 assets/create/blockstates/yellow_valve_handle.json e819e93fdcbe9fd9c050a052d2718ff3b3539365 assets/create/blockstates/zinc_block.json 64121dcb216381c83b4fe28aa361ea07c24c9ad0 assets/create/blockstates/zinc_ore.json -474cf1316a62de21d48116ab471717b54b8e5438 assets/create/lang/en_ud.json -785c865cda29da3a52e8e58de1bf4955e66a4a93 assets/create/lang/en_us.json +53a6843019a9a8f78863687d81dea37cb8ecd24a assets/create/lang/en_ud.json +4793ab3e91a6ad78ee9415ae817751f7d388583b assets/create/lang/en_us.json a97e1060e00ae701a02e39cd4ef8054cf345fac4 assets/create/models/block/acacia_window.json 103e032c0b1a0a6a27c67da8c91179a564bd281c assets/create/models/block/acacia_window_pane_noside.json fb00b627abda76ad4fea867ca57dbfadd24fffa3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -4811,7 +4811,7 @@ ccf5b08295f6362a3f6b3b595f1de1bba4b224ec data/forge/tags/items/ingots/zinc.json 81b107ada9c6ac5679a21f8c6a006bf230f69c39 data/forge/tags/items/ores/zinc.json e475ad1c52bffedfc544e5331a87c1f5c45149fd data/forge/tags/items/ores_in_ground/deepslate.json 2f6068972e364599b6849dc46fcb0724d4219d53 data/forge/tags/items/ores_in_ground/stone.json -12c3455bbb7edcea84d47ad6ccde9c209a25d811 data/forge/tags/items/plates.json +0b718fa5d4db0c2f2d34db1096f33a88f12f0ede data/forge/tags/items/plates.json 23f4874238f7d06e80c699b672d4e9fab6eb464f data/forge/tags/items/plates/brass.json 7f3f85d0978bc274e4689fbf41f7b80b023b7a05 data/forge/tags/items/plates/cardboard.json ef5256892a9d4167bf7371c7138a933a107a123a data/forge/tags/items/plates/copper.json diff --git a/src/generated/resources/.cache/b256105d8411632b0d585496ea8944a751a08034 b/src/generated/resources/.cache/b256105d8411632b0d585496ea8944a751a08034 index 6523f1eb50..d9043504d2 100644 --- a/src/generated/resources/.cache/b256105d8411632b0d585496ea8944a751a08034 +++ b/src/generated/resources/.cache/b256105d8411632b0d585496ea8944a751a08034 @@ -1,4 +1,4 @@ -// 1.20.1 2025-05-10T10:25:35.993685808 Create's Processing Recipes +// 1.20.1 2025-06-10T19:33:57.719451 Create's Processing Recipes 3c94326fb730f68c1e44fe1e2ef09c9db6ffd92b data/create/recipes/compacting/andesite_from_flint.json 8d3d5b31f3601b9f681ff710e0545a483a1494c6 data/create/recipes/compacting/blaze_cake.json 8bd7f4e3a686ab520b2d55594d2018d0e9a50c91 data/create/recipes/compacting/chocolate.json @@ -562,18 +562,18 @@ a91dae829938d3f69a7007d3cf8db02b70fe3a7f data/create/recipes/milling/white_tulip 74bb289e20e891112f4964761eb76c3ce4d3c8cd data/create/recipes/milling/wool.json 5f1b8a82af091cd4589ecfa5c13a4db6ad9c51b9 data/create/recipes/mixing/andesite_alloy.json 48604c2205b18fe1401eac58d14aa1677cbd9c2b data/create/recipes/mixing/andesite_alloy_from_zinc.json -d06c1d0362dccc4e5f8b22f851dc8316b35c06b0 data/create/recipes/mixing/brass_ingot.json +e02c9e5eb3e915a20ce9fac61f55e9146e98a0f0 data/create/recipes/mixing/brass_ingot.json 84a789f57691cb1e515f98cb162d7eda416eae7a data/create/recipes/mixing/cardboard_pulp.json -840a9008d4531425beadfcf224d21e938acc4502 data/create/recipes/mixing/chocolate.json -e7b86d4ca5de2df474794424d93b447e5f9dcdc3 data/create/recipes/mixing/chocolate_melting.json +a81c1955899569ccf4691977c3b660153b74e20b data/create/recipes/mixing/chocolate.json +4902bc0410366fbba41e75fc1585a6dd69b176f8 data/create/recipes/mixing/chocolate_melting.json 39e832016fa5e360434271505d09ced17a40e7eb data/create/recipes/mixing/compat/ae2/fluix_crystal.json f0648e6b963e1ac1c1756f769988e779963eb1a1 data/create/recipes/mixing/compat/regions_unexplored/peat_mud.json a2cf143f409a26709ad119f151c611331dca960c data/create/recipes/mixing/compat/regions_unexplored/silt_mud.json 4cf9a0979fb6401c51c763d71f0bb53ea2c8c32b data/create/recipes/mixing/dough_by_mixing.json -ac2a2456e2f0ccd74db6dc5ad029eb4e6781a25d data/create/recipes/mixing/honey.json -251c09ac25bb73e092fac483ceb5a9196a479919 data/create/recipes/mixing/lava_from_cobble.json +589a0fccb25f16c4a26bd3c77a8d225500cafdd0 data/create/recipes/mixing/honey.json +7ff78a2644738fecdea7b238cadeacb748321388 data/create/recipes/mixing/lava_from_cobble.json 939c55202f06b50cec3c16e66e85f915f2272db2 data/create/recipes/mixing/mud_by_mixing.json -4454cb7a73571d90e19826ee394b0c9e52ac8620 data/create/recipes/mixing/tea.json +7ae0e4d9b533bacc38f2b5bf84bb93a64108cf34 data/create/recipes/mixing/tea.json 77de88a8d25b974a63a5d132dd5461523e798fe2 data/create/recipes/pressing/aether_dirt_path.json 92a1198c990660458565ca871520b7c32fb0e24b data/create/recipes/pressing/aether_dirt_path_from_grass.json 8bd950c78b4db3b7f5a9a1f42c116677049b77fc data/create/recipes/pressing/brass_ingot.json diff --git a/src/generated/resources/data/create/recipes/mixing/brass_ingot.json b/src/generated/resources/data/create/recipes/mixing/brass_ingot.json index 9c2cabae7e..8f528d105c 100644 --- a/src/generated/resources/data/create/recipes/mixing/brass_ingot.json +++ b/src/generated/resources/data/create/recipes/mixing/brass_ingot.json @@ -1,6 +1,6 @@ { "type": "create:mixing", - "heatRequirement": "heated", + "heatRequirement": "create:heated", "ingredients": [ { "tag": "forge:ingots/copper" diff --git a/src/generated/resources/data/create/recipes/mixing/chocolate.json b/src/generated/resources/data/create/recipes/mixing/chocolate.json index cdf1308a93..c8522b1d52 100644 --- a/src/generated/resources/data/create/recipes/mixing/chocolate.json +++ b/src/generated/resources/data/create/recipes/mixing/chocolate.json @@ -1,6 +1,6 @@ { "type": "create:mixing", - "heatRequirement": "heated", + "heatRequirement": "create:heated", "ingredients": [ { "item": "minecraft:sugar" diff --git a/src/generated/resources/data/create/recipes/mixing/chocolate_melting.json b/src/generated/resources/data/create/recipes/mixing/chocolate_melting.json index 37ae358d1f..616fd51eb1 100644 --- a/src/generated/resources/data/create/recipes/mixing/chocolate_melting.json +++ b/src/generated/resources/data/create/recipes/mixing/chocolate_melting.json @@ -1,6 +1,6 @@ { "type": "create:mixing", - "heatRequirement": "heated", + "heatRequirement": "create:heated", "ingredients": [ { "item": "create:bar_of_chocolate" diff --git a/src/generated/resources/data/create/recipes/mixing/honey.json b/src/generated/resources/data/create/recipes/mixing/honey.json index 0165c90f0b..b4518ee028 100644 --- a/src/generated/resources/data/create/recipes/mixing/honey.json +++ b/src/generated/resources/data/create/recipes/mixing/honey.json @@ -1,6 +1,6 @@ { "type": "create:mixing", - "heatRequirement": "heated", + "heatRequirement": "create:heated", "ingredients": [ { "item": "minecraft:honey_block" diff --git a/src/generated/resources/data/create/recipes/mixing/lava_from_cobble.json b/src/generated/resources/data/create/recipes/mixing/lava_from_cobble.json index 127c2bfe92..f8e8e6d410 100644 --- a/src/generated/resources/data/create/recipes/mixing/lava_from_cobble.json +++ b/src/generated/resources/data/create/recipes/mixing/lava_from_cobble.json @@ -1,6 +1,6 @@ { "type": "create:mixing", - "heatRequirement": "superheated", + "heatRequirement": "create:superheated", "ingredients": [ { "tag": "forge:cobblestone" diff --git a/src/generated/resources/data/create/recipes/mixing/tea.json b/src/generated/resources/data/create/recipes/mixing/tea.json index db46698368..1108ee0974 100644 --- a/src/generated/resources/data/create/recipes/mixing/tea.json +++ b/src/generated/resources/data/create/recipes/mixing/tea.json @@ -1,6 +1,6 @@ { "type": "create:mixing", - "heatRequirement": "heated", + "heatRequirement": "create:heated", "ingredients": [ { "tag": "minecraft:leaves" diff --git a/src/generated/resources/data/forge/tags/items/plates.json b/src/generated/resources/data/forge/tags/items/plates.json index 59b5c00f67..1c9868ec06 100644 --- a/src/generated/resources/data/forge/tags/items/plates.json +++ b/src/generated/resources/data/forge/tags/items/plates.json @@ -1,6 +1,7 @@ { "values": [ "create:sturdy_sheet", + "create:cardboard", "create:copper_sheet", "create:brass_sheet", "create:iron_sheet", diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeSerializer.java b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeSerializer.java index a11d02c152..750b92e11f 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeSerializer.java +++ b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingRecipeSerializer.java @@ -49,7 +49,7 @@ protected void writeToJson(JsonObject json, T recipe) { HeatCondition heatCondition = recipe.getRequiredHeat(); if (heatCondition != null) - json.addProperty("heatRequirement", CreateBuiltInRegistries.HEAT_CONDITION.getId(heatCondition)); + json.addProperty("heatRequirement", CreateBuiltInRegistries.HEAT_CONDITION.getKey(heatCondition).toString()); recipe.writeAdditional(json); } From 01e6c78326b70dc9c1e4373349f3e4fb4e333f70 Mon Sep 17 00:00:00 2001 From: vercte Date: Tue, 10 Jun 2025 22:47:59 -0700 Subject: [PATCH 06/11] javadocs --- .../create/api/recipe/HeatCondition.java | 34 +++++++++++++++++-- .../recipe/BlazeBurnerHeatCondition.java | 6 ++-- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java b/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java index d1d3557842..3b4bcfa6ad 100644 --- a/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java +++ b/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java @@ -5,32 +5,62 @@ import mezz.jei.api.gui.drawable.IDrawable; import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; + +import org.jetbrains.annotations.ApiStatus.Internal; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; +/** + * A HeatCondition is a recipe condition such as the requirement of being heated or superheated. + * This is demonstrated with the Blaze Burner. + *

+ * This interface provides integration with JEI through {@link #visualize()}, + * {@link #getItemHints()}, and {@link #getColor()}. + */ public interface HeatCondition { - boolean test(BlockGetter getter, BlockPos basinPos); + /** + * Tests the HeatCondition's criteria against a position. + * @param level The level in which the test is located in. + * @param testPos The position of the block entity to be heated (e.g. a Basin) + * @return Whether the HeatCondition is valid for this position. + */ + boolean test(Level level, BlockPos testPos); + /** + * @return The heating type's translation key. + */ String getTranslationKey(); + /** + * Gets the IDrawable responsible for rendering this HeatCondition in JEI. + * If it is null, then it should not be rendered. + * @see IDrawable + */ @Nullable default IDrawable visualize() { return null; } + /** + * Provides items associated with this HeatCondition (e.g. a Blaze Burner) + */ @NotNull default List getItemHints() { return List.of(); } + /** + * The color of the HeatCondition when shown in JEI. + */ default int getColor() { return 0xffffff; } + @Internal default int ordinal() { return CreateBuiltInRegistries.HEAT_CONDITION.getId(this); } diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java b/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java index 4901b72510..106540be79 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java +++ b/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java @@ -11,8 +11,8 @@ import net.createmod.catnip.lang.Lang; import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.NotNull; @@ -36,8 +36,8 @@ public enum BlazeBurnerHeatCondition implements HeatCondition { } @Override - public boolean test(BlockGetter getter, BlockPos basinPos) { - BlockState stateBelow = getter.getBlockState(basinPos.below()); + public boolean test(Level level, BlockPos testPos) { + BlockState stateBelow = level.getBlockState(testPos.below()); if(!stateBelow.is(AllBlocks.BLAZE_BURNER.get())) return false; HeatLevel basinHeat = stateBelow.getValue(BlazeBurnerBlock.HEAT_LEVEL); return basinHeat.isAtLeast(heatLevel); From 9e9117239335b711ccf58ae99f732f9f4e210542 Mon Sep 17 00:00:00 2001 From: vercte Date: Tue, 10 Jun 2025 22:53:09 -0700 Subject: [PATCH 07/11] im not calling it that!! inconsistent --- src/main/java/com/simibubi/create/api/recipe/HeatCondition.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java b/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java index 3b4bcfa6ad..3e2bdddef2 100644 --- a/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java +++ b/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java @@ -31,7 +31,7 @@ public interface HeatCondition { boolean test(Level level, BlockPos testPos); /** - * @return The heating type's translation key. + * @return The HeatingCondition's translation key. */ String getTranslationKey(); From dced77bc74f41a1c3b2148413b6a4427aa6304cd Mon Sep 17 00:00:00 2001 From: vercte Date: Fri, 22 Aug 2025 14:54:17 -0700 Subject: [PATCH 08/11] Use a map instead of just an interface function --- .../create/api/recipe/HeatCondition.java | 16 ++------------ .../simibubi/create/compat/jei/CreateJEI.java | 21 ++++++++++++++----- .../compat/jei/category/MixingCategory.java | 3 ++- .../compat/jei/category/PackingCategory.java | 3 ++- .../recipe/BlazeBurnerHeatCondition.java | 17 --------------- 5 files changed, 22 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java b/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java index 3e2bdddef2..6375a581d5 100644 --- a/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java +++ b/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java @@ -2,7 +2,6 @@ import com.simibubi.create.api.registry.CreateBuiltInRegistries; -import mezz.jei.api.gui.drawable.IDrawable; import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; @@ -10,7 +9,6 @@ import org.jetbrains.annotations.ApiStatus.Internal; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.List; @@ -18,8 +16,8 @@ * A HeatCondition is a recipe condition such as the requirement of being heated or superheated. * This is demonstrated with the Blaze Burner. *

- * This interface provides integration with JEI through {@link #visualize()}, - * {@link #getItemHints()}, and {@link #getColor()}. + * This interface provides integration with JEI through {@link #getItemHints()} and {@link #getColor()}. + * To make your heat source render within Create's categories, add your IDrawable to {@link com.simibubi.create.compat.jei.CreateJEI#heatConditionDrawables}. */ public interface HeatCondition { /** @@ -35,16 +33,6 @@ public interface HeatCondition { */ String getTranslationKey(); - /** - * Gets the IDrawable responsible for rendering this HeatCondition in JEI. - * If it is null, then it should not be rendered. - * @see IDrawable - */ - @Nullable - default IDrawable visualize() { - return null; - } - /** * Provides items associated with this HeatCondition (e.g. a Blaze Burner) */ diff --git a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java index c5e42a4db7..06eeb74859 100644 --- a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java +++ b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -21,6 +22,7 @@ import com.simibubi.create.AllItems; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.Create; +import com.simibubi.create.api.recipe.HeatCondition; import com.simibubi.create.compat.jei.category.BlockCuttingCategory; import com.simibubi.create.compat.jei.category.BlockCuttingCategory.CondensedBlockCuttingRecipe; import com.simibubi.create.compat.jei.category.CreateRecipeCategory; @@ -43,6 +45,7 @@ import com.simibubi.create.compat.jei.category.SawingCategory; import com.simibubi.create.compat.jei.category.SequencedAssemblyCategory; import com.simibubi.create.compat.jei.category.SpoutCategory; +import com.simibubi.create.compat.jei.category.animations.AnimatedBlazeBurner; import com.simibubi.create.content.equipment.blueprint.BlueprintScreen; import com.simibubi.create.content.equipment.sandPaper.SandPaperPolishingRecipe; import com.simibubi.create.content.fluids.potion.PotionFluid; @@ -63,6 +66,8 @@ import com.simibubi.create.content.logistics.filter.AbstractFilterScreen; import com.simibubi.create.content.logistics.redstoneRequester.RedstoneRequesterScreen; import com.simibubi.create.content.processing.basin.BasinRecipe; +import com.simibubi.create.content.processing.burner.BlazeBurnerBlock.HeatLevel; +import com.simibubi.create.content.processing.recipe.BlazeBurnerHeatCondition; import com.simibubi.create.content.processing.sequenced.SequencedAssemblyRecipe; import com.simibubi.create.content.redstone.link.controller.LinkedControllerScreen; import com.simibubi.create.content.trains.schedule.ScheduleScreen; @@ -118,9 +123,11 @@ public class CreateJEI implements IModPlugin { private final List> allCategories = new ArrayList<>(); private IIngredientManager ingredientManager; - + public static IJeiRuntime runtime; + public static Map heatConditionDrawables = new HashMap<>(); + private void loadCategories() { allCategories.clear(); @@ -375,16 +382,16 @@ public void registerExtraIngredients(IExtraIngredientRegistration registration) // @goshante: Ingame potion fluids always have Bottle tag that specifies // to what bottle type this potion belongs // Potion fluid without this tag wouldn't be recognized by other mods - + // for (PotionFluid.BottleType bottleType : PotionFluid.BottleType.values()) { // FluidStack potionFluid = PotionFluid.of(1000, potion, bottleType); // potionFluids.add(potionFluid); // } - + if (!potion.getEffects().isEmpty()) if (!visitedEffects.add(potion.getEffects().stream().map(mei -> mei.getEffect()).collect(Collectors.toSet()))) continue; - + potionFluids.add(PotionFluid.of(1000, potion, PotionFluid.BottleType.REGULAR)); } registration.addExtraIngredients(ForgeTypes.FLUID_STACK, potionFluids); @@ -611,10 +618,14 @@ public static boolean doOutputsMatch(Recipe recipe1, Recipe recipe2) { RegistryAccess registryAccess = Minecraft.getInstance().level.registryAccess(); return ItemHelper.sameItem(recipe1.getResultItem(registryAccess), recipe2.getResultItem(registryAccess)); } - + @Override public void onRuntimeAvailable(IJeiRuntime runtime) { CreateJEI.runtime = runtime; } + static { + heatConditionDrawables.put(BlazeBurnerHeatCondition.HEATED, new AnimatedBlazeBurner().withHeat(HeatLevel.KINDLED)); + heatConditionDrawables.put(BlazeBurnerHeatCondition.SUPERHEATED, new AnimatedBlazeBurner().withHeat(HeatLevel.SEETHING)); + } } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/MixingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/MixingCategory.java index fb3970e791..2d3eea5689 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/MixingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/MixingCategory.java @@ -1,5 +1,6 @@ package com.simibubi.create.compat.jei.category; +import com.simibubi.create.compat.jei.CreateJEI; import com.simibubi.create.compat.jei.category.animations.AnimatedMixer; import com.simibubi.create.content.processing.basin.BasinRecipe; import com.simibubi.create.api.recipe.HeatCondition; @@ -43,7 +44,7 @@ public void draw(BasinRecipe recipe, IRecipeSlotsView iRecipeSlotsView, GuiGraph HeatCondition heatCondition = recipe.getRequiredHeat(); if (heatCondition != null) { - IDrawable drawable = heatCondition.visualize(); + IDrawable drawable = CreateJEI.heatConditionDrawables.get(heatCondition); if (drawable != null) drawable.draw(graphics, getBackground().getWidth() / 2 + 3, 55); } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java index c60a5c17ac..31a32811ce 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java @@ -1,5 +1,6 @@ package com.simibubi.create.compat.jei.category; +import com.simibubi.create.compat.jei.CreateJEI; import com.simibubi.create.compat.jei.category.animations.AnimatedPress; import com.simibubi.create.content.processing.basin.BasinRecipe; import com.simibubi.create.api.recipe.HeatCondition; @@ -77,7 +78,7 @@ public void draw(BasinRecipe recipe, IRecipeSlotsView iRecipeSlotsView, GuiGraph HeatCondition heatCondition = recipe.getRequiredHeat(); if (heatCondition != null) { - IDrawable drawable = heatCondition.visualize(); + IDrawable drawable = CreateJEI.heatConditionDrawables.get(heatCondition); if (drawable != null) drawable.draw(graphics, getBackground().getWidth() / 2 + 3, 55); } diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java b/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java index 106540be79..18401c46df 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java +++ b/src/main/java/com/simibubi/create/content/processing/recipe/BlazeBurnerHeatCondition.java @@ -3,11 +3,9 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.api.recipe.HeatCondition; -import com.simibubi.create.compat.jei.category.animations.AnimatedBlazeBurner; import com.simibubi.create.content.processing.burner.BlazeBurnerBlock; import com.simibubi.create.content.processing.burner.BlazeBurnerBlock.HeatLevel; -import mezz.jei.api.gui.drawable.IDrawable; import net.createmod.catnip.lang.Lang; import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; @@ -23,8 +21,6 @@ public enum BlazeBurnerHeatCondition implements HeatCondition { HEATED(0xE88300, HeatLevel.KINDLED, AllBlocks.BLAZE_BURNER), SUPERHEATED(0x5C93E8, HeatLevel.SEETHING, AllBlocks.BLAZE_BURNER, AllItems.BLAZE_CAKE); - private static final AnimatedBlazeBurner blaze = new AnimatedBlazeBurner(); - private final int color; private final HeatLevel heatLevel; private final List itemHints; @@ -43,19 +39,6 @@ public boolean test(Level level, BlockPos testPos) { return basinHeat.isAtLeast(heatLevel); } - public BlazeBurnerBlock.HeatLevel visualizeAsBlazeBurner() { - if (this == SUPERHEATED) - return HeatLevel.SEETHING; - if (this == HEATED) - return HeatLevel.KINDLED; - return HeatLevel.NONE; - } - - @Override - public IDrawable visualize() { - return blaze.withHeat(this.visualizeAsBlazeBurner()); - } - @Override @NotNull public List getItemHints() { From 37a2f71352f1e8116dc753250aac4a3b7f9492d5 Mon Sep 17 00:00:00 2001 From: vercte Date: Fri, 22 Aug 2025 17:18:06 -0700 Subject: [PATCH 09/11] move drawable registration to a more appropriate place...? --- src/main/java/com/simibubi/create/compat/jei/CreateJEI.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java index 06eeb74859..2fa688ed3f 100644 --- a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java +++ b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java @@ -622,10 +622,8 @@ public static boolean doOutputsMatch(Recipe recipe1, Recipe recipe2) { @Override public void onRuntimeAvailable(IJeiRuntime runtime) { CreateJEI.runtime = runtime; - } - static { heatConditionDrawables.put(BlazeBurnerHeatCondition.HEATED, new AnimatedBlazeBurner().withHeat(HeatLevel.KINDLED)); heatConditionDrawables.put(BlazeBurnerHeatCondition.SUPERHEATED, new AnimatedBlazeBurner().withHeat(HeatLevel.SEETHING)); - } + } } From 1ed64e5edd95a4f9c76ad04732d0387fffea5d55 Mon Sep 17 00:00:00 2001 From: vercte Date: Fri, 22 Aug 2025 17:26:54 -0700 Subject: [PATCH 10/11] guidance --- .../java/com/simibubi/create/api/recipe/HeatCondition.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java b/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java index 6375a581d5..c1278b6d46 100644 --- a/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java +++ b/src/main/java/com/simibubi/create/api/recipe/HeatCondition.java @@ -15,9 +15,11 @@ /** * A HeatCondition is a recipe condition such as the requirement of being heated or superheated. * This is demonstrated with the Blaze Burner. - *

+ *

* This interface provides integration with JEI through {@link #getItemHints()} and {@link #getColor()}. * To make your heat source render within Create's categories, add your IDrawable to {@link com.simibubi.create.compat.jei.CreateJEI#heatConditionDrawables}. + * You should do this from your JEI plugin's onRuntimeAvailable method. + *

*/ public interface HeatCondition { /** From 7934b5c394fb2a0d8341bf6e2e9b3ce374aec6b0 Mon Sep 17 00:00:00 2001 From: vercte Date: Mon, 25 Aug 2025 17:16:53 -0700 Subject: [PATCH 11/11] haha, fix every unheated basin recipe --- .../create/content/processing/basin/BasinRecipe.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java b/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java index 1e52d532e1..0197019adc 100644 --- a/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java +++ b/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java @@ -74,8 +74,9 @@ private static boolean apply(BasinBlockEntity basin, Recipe recipe, boolean t if (isBasinRecipe) { HeatCondition heatCondition = ((BasinRecipe) recipe).getRequiredHeat(); - if (heatCondition == null || - !heatCondition.test(basin.getLevel(), basin.getBlockPos())) return false; + if (heatCondition != null) { + if (!heatCondition.test(basin.getLevel(), basin.getBlockPos())) return false; + } } List recipeOutputItems = new ArrayList<>();