From f9d814a053191cc43b58cae03fdd2903f8271230 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Tue, 8 Oct 2024 11:34:56 -0400 Subject: [PATCH] Conditions for all! - Add ICondition support to shapeless recipes in StandardRecipeGen - Fixes #7021 --- .../82992cbf8f2794d83ac94034835eac0acd7915b9 | 8 +-- .../recipes/crafting/tree_fertilizer.json | 6 ++ .../data/recipe/StandardRecipeGen.java | 63 +++++++++++++------ 3 files changed, 54 insertions(+), 23 deletions(-) diff --git a/src/generated/resources/.cache/82992cbf8f2794d83ac94034835eac0acd7915b9 b/src/generated/resources/.cache/82992cbf8f2794d83ac94034835eac0acd7915b9 index 2380111ec..13a17d3fb 100644 --- a/src/generated/resources/.cache/82992cbf8f2794d83ac94034835eac0acd7915b9 +++ b/src/generated/resources/.cache/82992cbf8f2794d83ac94034835eac0acd7915b9 @@ -1,4 +1,4 @@ -// 1.20.1 2024-09-02T22:36:27.358065 Create's Standard Recipes +// 1.20.1 2024-10-08T11:30:41.235223596 Create's Standard Recipes a8cc4af26f6c7c45a9eef12e92af1452fe042454 data/create/advancements/recipes/combat/crafting/appliances/netherite_backtank.json 2c2639c7b307ee7c7a4e97e5efebf496788998ad data/create/advancements/recipes/combat/crafting/appliances/netherite_backtank_from_netherite.json 81dcf0cb1aa99e39bc7d1a386e07cad4cee7d8b9 data/create/advancements/recipes/combat/crafting/appliances/netherite_diving_boots.json @@ -202,9 +202,9 @@ dd7c250fa8e41cbaae65754f38b8861397718ae4 data/create/advancements/recipes/misc/c 05a4420a08df24680b8a7c5c94d9a7ad1d13c0df data/create/advancements/recipes/misc/crafting/materials/zinc_nugget_from_decompacting.json ec99015f13bb194dfb197ea0839cceaed5135148 data/create/advancements/recipes/misc/crafting/palettes/scorchia.json 541c3cb26e0cae9ffd3df94829e5f55a62240bd8 data/create/advancements/recipes/misc/crafting/schematics/empty_schematic.json -3e73c3336f3ab13365d439c491b2e2ce6de6e401 data/create/advancements/recipes/misc/crafting/schematics/schematicannon.json 6e0b7056d229fc949cc7386aa307d0870929f555 data/create/advancements/recipes/misc/crafting/schematics/schematic_and_quill.json f0d041509b3752b3ec6c4ce2b2c6eef9825a0685 data/create/advancements/recipes/misc/crafting/schematics/schematic_table.json +3e73c3336f3ab13365d439c491b2e2ce6de6e401 data/create/advancements/recipes/misc/crafting/schematics/schematicannon.json a8003bd4c06bdf5f2aa3d1789eab2445df9513be data/create/advancements/recipes/misc/crafting/tree_fertilizer.json 0ac95fd4b991a6c61c1d03cc6a6f2f345530f62a data/create/advancements/recipes/misc/smelting/bread.json 53cb4643430e3fd69f81c375f3e334a3d6014128 data/create/advancements/recipes/misc/smelting/copper_ingot_from_crushed.json @@ -448,10 +448,10 @@ cde25f253da4d9800fd8f879a7d208e40510df82 data/create/recipes/crafting/materials/ 11583ad28f32b7f22ffb71e180aface890d1d2d0 data/create/recipes/crafting/materials/zinc_nugget_from_decompacting.json d849fafedd10c68e6bc6dc1e5a85be82aae1b139 data/create/recipes/crafting/palettes/scorchia.json 611c4a553408e0b6ddfcf6ed35bc972bea14ffda data/create/recipes/crafting/schematics/empty_schematic.json -9a687ee9dab44c439ab669aa596117064fb13457 data/create/recipes/crafting/schematics/schematicannon.json 4a20356c9ce01ebfbcacbdc5d3c31094a5599a17 data/create/recipes/crafting/schematics/schematic_and_quill.json 4a297162a630b48407dbc8ff8ca713387dcd3206 data/create/recipes/crafting/schematics/schematic_table.json -dd2b5bfb7ebd836e8b5639894736c226f2cac8c0 data/create/recipes/crafting/tree_fertilizer.json +9a687ee9dab44c439ab669aa596117064fb13457 data/create/recipes/crafting/schematics/schematicannon.json +2cf06129b47d1a2b733619514dc9e8cf1d8967f2 data/create/recipes/crafting/tree_fertilizer.json 78526658ca5ccaa3729c967b5283069945d183b7 data/create/recipes/smelting/bread.json 04bb0c80f3b5a6fe86fc4a8ed5293fc74c2d9aba data/create/recipes/smelting/copper_ingot_from_crushed.json d5b29fa27977691c3c50eb36c28bfe33b8462d09 data/create/recipes/smelting/glass_from_framed_glass.json diff --git a/src/generated/resources/data/create/recipes/crafting/tree_fertilizer.json b/src/generated/resources/data/create/recipes/crafting/tree_fertilizer.json index f705b2e53..56bfafb78 100644 --- a/src/generated/resources/data/create/recipes/crafting/tree_fertilizer.json +++ b/src/generated/resources/data/create/recipes/crafting/tree_fertilizer.json @@ -1,6 +1,12 @@ { "type": "minecraft:crafting_shapeless", "category": "misc", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "upgrade_aquatic" + } + ], "ingredients": [ { "tag": "minecraft:small_flowers" diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java index 405fe0549..b7be3c7de 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java @@ -59,6 +59,8 @@ import net.minecraftforge.common.crafting.conditions.ICondition; import net.minecraftforge.common.crafting.conditions.ModLoadedCondition; import net.minecraftforge.common.crafting.conditions.NotCondition; +import org.jetbrains.annotations.NotNull; + @SuppressWarnings("unused") public class StandardRecipeGen extends CreateRecipeProvider { @@ -1178,7 +1180,8 @@ public class StandardRecipeGen extends CreateRecipeProvider { .inBlastFurnace(), UA_TREE_FERTILIZER = create(AllItems.TREE_FERTILIZER::get).returns(2) - .whenModLoaded(Mods.UA.getId()).unlockedBy(() -> Items.BONE_MEAL) + .unlockedBy(() -> Items.BONE_MEAL) + .whenModLoaded(Mods.UA.getId()) .viaShapeless(b -> b.requires(Ingredient.of(ItemTags.SMALL_FLOWERS), 2) .requires(AllItemTags.UA_CORAL.tag).requires(Items.BONE_MEAL)) @@ -1375,7 +1378,12 @@ public class StandardRecipeGen extends CreateRecipeProvider { ShapelessRecipeBuilder b = builder.apply(ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, result.get(), amount)); if (unlockedBy != null) b.unlockedBy("has_item", inventoryTrigger(unlockedBy.get())); - b.save(consumer, createLocation("crafting")); + + b.save(result -> { + consumer.accept( + !recipeConditions.isEmpty() ? new ConditionSupportingShapelessRecipeResult(result, recipeConditions) + : result); + }, createLocation("crafting")); }); } @@ -1478,10 +1486,10 @@ public class StandardRecipeGen extends CreateRecipeProvider { SimpleCookingRecipeBuilder b = builder.apply(SimpleCookingRecipeBuilder.generic(ingredient.get(), RecipeCategory.MISC, isOtherMod ? Items.DIRT : result.get(), exp, (int) (cookingTime * cookingTimeModifier), serializer)); - + if (unlockedBy != null) b.unlockedBy("has_item", inventoryTrigger(unlockedBy.get())); - + b.save(result -> { consumer.accept( isOtherMod ? new ModdedCookingRecipeResult(result, compatDatagenOutput, recipeConditions) @@ -1502,19 +1510,39 @@ public class StandardRecipeGen extends CreateRecipeProvider { super(p_i48262_1_); } - private static class ModdedCookingRecipeResult implements FinishedRecipe { + private record ModdedCookingRecipeResult(FinishedRecipe wrapped, ResourceLocation outputOverride, List conditions) implements FinishedRecipe { + @Override + public ResourceLocation getId() { + return wrapped.getId(); + } - private FinishedRecipe wrapped; - private ResourceLocation outputOverride; - private List conditions; + @Override + public RecipeSerializer getType() { + return wrapped.getType(); + } - public ModdedCookingRecipeResult(FinishedRecipe wrapped, ResourceLocation outputOverride, - List conditions) { - this.wrapped = wrapped; - this.outputOverride = outputOverride; - this.conditions = conditions; + @Override + public JsonObject serializeAdvancement() { + return wrapped.serializeAdvancement(); + } + + @Override + public ResourceLocation getAdvancementId() { + return wrapped.getAdvancementId(); + } + + @Override + public void serializeRecipeData(JsonObject object) { + wrapped.serializeRecipeData(object); + object.addProperty("result", outputOverride.toString()); + + JsonArray conds = new JsonArray(); + conditions.forEach(c -> conds.add(CraftingHelper.serialize(c))); + object.add("conditions", conds); + } } + private record ConditionSupportingShapelessRecipeResult(FinishedRecipe wrapped, List conditions) implements FinishedRecipe { @Override public ResourceLocation getId() { return wrapped.getId(); @@ -1536,15 +1564,12 @@ public class StandardRecipeGen extends CreateRecipeProvider { } @Override - public void serializeRecipeData(JsonObject object) { - wrapped.serializeRecipeData(object); - object.addProperty("result", outputOverride.toString()); + public void serializeRecipeData(@NotNull JsonObject pJson) { + wrapped.serializeRecipeData(pJson); JsonArray conds = new JsonArray(); conditions.forEach(c -> conds.add(CraftingHelper.serialize(c))); - object.add("conditions", conds); + pJson.add("conditions", conds); } - } - }