From f1dc2880ab570c00777a2fa520c09fd0f85a1d04 Mon Sep 17 00:00:00 2001 From: xinyihl <1012737146@qq.com> Date: Sat, 1 Feb 2025 14:07:08 +0800 Subject: [PATCH] =?UTF-8?q?Add=20=E7=A5=9E=E7=A7=98=E5=9D=A9=E5=9F=9A?= =?UTF-8?q?=E9=80=82=E9=85=8D=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/tc6/AdapterTC6Crucible.java | 85 +++++++++++++++++++ .../registry/RegistryRecipeAdapters.java | 2 + 2 files changed, 87 insertions(+) create mode 100644 src/main/java/hellfirepvp/modularmachinery/common/crafting/adapter/tc6/AdapterTC6Crucible.java diff --git a/src/main/java/hellfirepvp/modularmachinery/common/crafting/adapter/tc6/AdapterTC6Crucible.java b/src/main/java/hellfirepvp/modularmachinery/common/crafting/adapter/tc6/AdapterTC6Crucible.java new file mode 100644 index 00000000..aead4dce --- /dev/null +++ b/src/main/java/hellfirepvp/modularmachinery/common/crafting/adapter/tc6/AdapterTC6Crucible.java @@ -0,0 +1,85 @@ +package hellfirepvp.modularmachinery.common.crafting.adapter.tc6; + +import crafttweaker.util.IEventHandler; +import github.kasuminova.mmce.common.event.recipe.RecipeEvent; +import github.kasuminova.mmce.common.itemtype.ChancedIngredientStack; +import hellfirepvp.modularmachinery.common.crafting.MachineRecipe; +import hellfirepvp.modularmachinery.common.crafting.adapter.RecipeAdapter; +import hellfirepvp.modularmachinery.common.crafting.helper.ComponentRequirement; +import hellfirepvp.modularmachinery.common.crafting.requirement.RequirementIngredientArray; +import hellfirepvp.modularmachinery.common.crafting.requirement.RequirementItem; +import hellfirepvp.modularmachinery.common.lib.RequirementTypesMM; +import hellfirepvp.modularmachinery.common.machine.IOType; +import hellfirepvp.modularmachinery.common.modifier.RecipeModifier; +import hellfirepvp.modularmachinery.common.util.ItemUtils; +import kport.modularmagic.common.crafting.requirement.RequirementAspect; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import thaumcraft.api.ThaumcraftApi; +import thaumcraft.api.crafting.CrucibleRecipe; + +import javax.annotation.Nonnull; +import java.util.*; +import java.util.stream.Collectors; + +public class AdapterTC6Crucible extends RecipeAdapter { + public static final int BASE_WORK_TIME = 100; + + public AdapterTC6Crucible() { + super(new ResourceLocation("thaumcraft", "crucible")); + } + + @Nonnull + @Override + public Collection createRecipesFor(ResourceLocation owningMachineName, List modifiers, List> additionalRequirements, Map, List>> eventHandlers, List recipeTooltips) { + List machineRecipeList = new ArrayList<>(); + + ThaumcraftApi.getCraftingRecipes().forEach((recipeName, tcRecipe) -> { + if (!(tcRecipe instanceof CrucibleRecipe recipe)) { + return; + } + if (recipe.getCatalyst() == null) { + return; + } + if (recipe.getRecipeOutput() == null) { + return; + } + int inAmount = Math.round(RecipeModifier.applyModifiers(modifiers, RequirementTypesMM.REQUIREMENT_ITEM, IOType.INPUT, 1, false)); + if (inAmount <= 0) { + return; + } + + MachineRecipe machineRecipe = createRecipeShell( + new ResourceLocation("thaumcraft", "auto_crucible" + incId), + owningMachineName, + BASE_WORK_TIME, + incId, false); + + // Input + ItemStack[] inputMain = recipe.getCatalyst().getMatchingStacks(); + List inputMainList = Arrays.stream(inputMain) + .map(itemStack -> new ChancedIngredientStack(ItemUtils.copyStackWithSize(itemStack, inAmount))) + .collect(Collectors.toList()); + if (!inputMainList.isEmpty()) { + machineRecipe.addRequirement(new RequirementIngredientArray(inputMainList)); + } + + // Aspect Inputs + recipe.getAspects().aspects.forEach((aspect, amount) -> { + machineRecipe.addRequirement(new RequirementAspect(IOType.INPUT, amount, aspect)); + }); + + // Output + ItemStack output = recipe.getRecipeOutput(); + int outAmount = Math.round(RecipeModifier.applyModifiers(modifiers, RequirementTypesMM.REQUIREMENT_ITEM, IOType.OUTPUT, output.getCount(), false)); + if (outAmount > 0) { + machineRecipe.addRequirement(new RequirementItem(IOType.OUTPUT, ItemUtils.copyStackWithSize(output, outAmount))); + } + + machineRecipeList.add(machineRecipe); + incId++; + }); + + return machineRecipeList; + } +} diff --git a/src/main/java/hellfirepvp/modularmachinery/common/registry/RegistryRecipeAdapters.java b/src/main/java/hellfirepvp/modularmachinery/common/registry/RegistryRecipeAdapters.java index d3e952ca..227999fe 100644 --- a/src/main/java/hellfirepvp/modularmachinery/common/registry/RegistryRecipeAdapters.java +++ b/src/main/java/hellfirepvp/modularmachinery/common/registry/RegistryRecipeAdapters.java @@ -18,6 +18,7 @@ import hellfirepvp.modularmachinery.common.crafting.adapter.nco.AdapterNCOChemicalReactor; import hellfirepvp.modularmachinery.common.crafting.adapter.nco.AdapterNCOInfuser; import hellfirepvp.modularmachinery.common.crafting.adapter.nco.AdapterNCOMelter; +import hellfirepvp.modularmachinery.common.crafting.adapter.tc6.AdapterTC6Crucible; import hellfirepvp.modularmachinery.common.crafting.adapter.tc6.AdapterTC6InfusionMatrix; import hellfirepvp.modularmachinery.common.crafting.adapter.tconstruct.AdapterSmelteryAlloyRecipe; import hellfirepvp.modularmachinery.common.crafting.adapter.tconstruct.AdapterSmelteryMeltingRecipe; @@ -55,6 +56,7 @@ public static void initialize() { } if (Mods.TC6.isPresent()){ registerAdapter(new AdapterTC6InfusionMatrix()); + registerAdapter(new AdapterTC6Crucible()); } if (Mods.THERMAL_EXPANSION.isPresent()) { registerAdapter(new InsolatorRecipeAdapter(false));