From c23cbbb4be11266fa874124c0603cd4c304063d0 Mon Sep 17 00:00:00 2001 From: FortressNebula Date: Sat, 12 Feb 2022 12:27:30 +0000 Subject: [PATCH] Add condition support for mechanical crafting recipes - Copied over the condition functions from ProcessingRecipeBuilder - Added recipeConditions variable - Copied over json section for dealing with conditions from ProcessingRecipeBuilder --- .../MechanicalCraftingRecipeBuilder.java | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java index c85d4ecdf..cf8fb24f1 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java @@ -1,5 +1,6 @@ package com.simibubi.create.foundation.data.recipe; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -15,6 +16,8 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder; + import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.SetTag; @@ -22,6 +25,10 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.ItemLike; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.common.crafting.conditions.ICondition; +import net.minecraftforge.common.crafting.conditions.ModLoadedCondition; +import net.minecraftforge.common.crafting.conditions.NotCondition; import net.minecraftforge.registries.ForgeRegistries; public class MechanicalCraftingRecipeBuilder { @@ -31,11 +38,13 @@ public class MechanicalCraftingRecipeBuilder { private final List pattern = Lists.newArrayList(); private final Map key = Maps.newLinkedHashMap(); private boolean acceptMirrored; + private List recipeConditions; public MechanicalCraftingRecipeBuilder(ItemLike p_i48261_1_, int p_i48261_2_) { result = p_i48261_1_.asItem(); count = p_i48261_2_; acceptMirrored = true; + recipeConditions = new ArrayList<>(); } /** @@ -127,7 +136,7 @@ public class MechanicalCraftingRecipeBuilder { public void build(Consumer p_200467_1_, ResourceLocation p_200467_2_) { validate(p_200467_2_); p_200467_1_ - .accept(new MechanicalCraftingRecipeBuilder.Result(p_200467_2_, result, count, pattern, key, acceptMirrored)); + .accept(new MechanicalCraftingRecipeBuilder.Result(p_200467_2_, result, count, pattern, key, acceptMirrored, recipeConditions)); } /** @@ -156,6 +165,19 @@ public class MechanicalCraftingRecipeBuilder { } } + public MechanicalCraftingRecipeBuilder whenModLoaded(String modid) { + return withCondition(new ModLoadedCondition(modid)); + } + + public MechanicalCraftingRecipeBuilder whenModMissing(String modid) { + return withCondition(new NotCondition(new ModLoadedCondition(modid))); + } + + public MechanicalCraftingRecipeBuilder withCondition(ICondition condition) { + recipeConditions.add(condition); + return this; + } + public class Result implements FinishedRecipe { private final ResourceLocation id; private final Item result; @@ -163,15 +185,17 @@ public class MechanicalCraftingRecipeBuilder { private final List pattern; private final Map key; private final boolean acceptMirrored; + private List recipeConditions; public Result(ResourceLocation p_i48271_2_, Item p_i48271_3_, int p_i48271_4_, List p_i48271_6_, - Map p_i48271_7_, boolean asymmetrical) { + Map p_i48271_7_, boolean asymmetrical, List recipeConditions) { this.id = p_i48271_2_; this.result = p_i48271_3_; this.count = p_i48271_4_; this.pattern = p_i48271_6_; this.key = p_i48271_7_; this.acceptMirrored = asymmetrical; + this.recipeConditions = recipeConditions; } public void serializeRecipeData(JsonObject p_218610_1_) { @@ -194,6 +218,13 @@ public class MechanicalCraftingRecipeBuilder { p_218610_1_.add("result", jsonobject1); p_218610_1_.addProperty("acceptMirrored", acceptMirrored); + + if (recipeConditions.isEmpty()) + return; + + JsonArray conds = new JsonArray(); + recipeConditions.forEach(c -> conds.add(CraftingHelper.serialize(c))); + p_218610_1_.add("conditions", conds); } public RecipeSerializer getType() {