package thaumicenergistics.common.features; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Blocks; import thaumcraft.api.ThaumcraftApi; import thaumcraft.api.aspects.Aspect; import thaumcraft.api.aspects.AspectList; import thaumcraft.api.crafting.CrucibleRecipe; import thaumcraft.api.crafting.InfusionRecipe; import thaumcraft.api.crafting.ShapedArcaneRecipe; import thaumcraft.api.crafting.ShapelessArcaneRecipe; import thaumcraft.common.vis.TCVisHelper; import thaumicenergistics.ThaumicEnergistics; import thaumicenergistics.init.ModBlocks; import thaumicenergistics.init.ModItems; public final class RecipeRegistration { private RecipeRegistration() {} // ==================== 配方引用(供研究页面使用) ==================== // 注魔配方 public static InfusionRecipe ESSENTIA_PROVIDER; public static InfusionRecipe INFUSION_PROVIDER; public static InfusionRecipe ARCANE_ASSEMBLER; // 奥术有序配方 public static ShapedArcaneRecipe STORAGE_COMPONENT_1K; public static ShapedArcaneRecipe STORAGE_COMPONENT_4K; public static ShapedArcaneRecipe STORAGE_COMPONENT_16K; public static ShapedArcaneRecipe STORAGE_COMPONENT_64K; public static ShapedArcaneRecipe KNOWLEDGE_CORE_ITEM; public static ShapedArcaneRecipe FOCUS_AEWRENCH_RECIPE; public static ShapedArcaneRecipe GOLEM_WIFI_BACKPACK_RECIPE; public static ShapedArcaneRecipe ESSENTIA_IMPORT_BUS; public static ShapedArcaneRecipe ESSENTIA_EXPORT_BUS; public static ShapedArcaneRecipe ESSENTIA_STORAGE_BUS; public static ShapedArcaneRecipe KNOWLEDGE_INSCRIBER_BLOCK; public static ShapedArcaneRecipe DISTILLATION_ENCODER_BLOCK; // 奥术无序配方 public static ShapelessArcaneRecipe DIFFUSION_CORE; public static ShapelessArcaneRecipe COALESCENCE_CORE; public static ShapelessArcaneRecipe ESSENTIA_LEVEL_EMITTER; public static ShapelessArcaneRecipe ESSENTIA_TERMINAL; public static ShapelessArcaneRecipe ARCANE_CRAFTING_TERMINAL; public static ShapelessArcaneRecipe VIS_INTERFACE; public static ShapelessArcaneRecipe ESSENTIA_VIBRATION_CHAMBER; /** 赛特斯石英复制(坩埚炼金配方——研究页关联)。 */ public static CrucibleRecipe CERTUS_DUPE_RECIPE; private static final TagKey WISP_ESSENCES = tag("thaumicenergistics", "wisp_essences"); @SuppressWarnings("SameParameterValue") private static TagKey tag(String ns, String path) { return TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath(ns, path)); } public static void registerAll() { registerShapedArcane(); registerShapelessArcane(); registerInfusion(); registerCrucible(); ThaumicEnergistics.LOG.info("ThaumicEnergistics recipes registered."); } /** 坩埚炼金配方:赛特斯石英复制(丢 1 赛特斯石英 + 水晶/交换要素 → 2 赛特斯石英)。 */ private static void registerCrucible() { ItemStack quartz = ae("certus_quartz_crystal"); if (quartz.isEmpty()) return; CERTUS_DUPE_RECIPE = ThaumcraftApi.addCrucibleRecipe( "CERTUS_DUPE", quartz.copyWithCount(2), quartz.copyWithCount(1), new AspectList().add(Aspect.CRYSTAL, 5).add(Aspect.EXCHANGE, 5)); } private static void registerShapedArcane() { STORAGE_COMPONENT_1K = ThaumcraftApi.addArcaneCraftingRecipe("ESSENTIASTORAGE1K", stack(ModItems.STORAGE_COMPONENT_1K), new AspectList().add(Aspect.FIRE, 3).add(Aspect.ORDER, 1), "EQ ", "QPQ", " QE", 'E', WISP_ESSENCES, 'Q', ae("certus_quartz_crystal"), 'P', ae("logic_processor")); STORAGE_COMPONENT_4K = ThaumcraftApi.addArcaneCraftingRecipe("ESSENTIASTORAGE4K", stack(ModItems.STORAGE_COMPONENT_4K), new AspectList().add(Aspect.FIRE, 3).add(Aspect.ORDER, 2), "EPE", "1G1", "E1E", 'E', WISP_ESSENCES, 'P', ae("calculation_processor"), '1', stack(ModItems.STORAGE_COMPONENT_1K), 'G', ae("quartz_glass")); STORAGE_COMPONENT_16K = ThaumcraftApi.addArcaneCraftingRecipe("ESSENTIASTORAGE16K", stack(ModItems.STORAGE_COMPONENT_16K), new AspectList().add(Aspect.FIRE, 3).add(Aspect.ORDER, 4), "SPE", "4G4", "E4S", 'S', tc("salis_mundus"), 'P', ae("engineering_processor"), '4', stack(ModItems.STORAGE_COMPONENT_4K), 'G', ae("quartz_glass"), 'E', WISP_ESSENCES); STORAGE_COMPONENT_64K = ThaumcraftApi.addArcaneCraftingRecipe("ESSENTIASTORAGE64K", stack(ModItems.STORAGE_COMPONENT_64K), new AspectList().add(Aspect.FIRE, 3).add(Aspect.ORDER, 8), "SPS", "6G6", "S6S", 'S', tc("salis_mundus"), 'P', ae("engineering_processor"), '6', stack(ModItems.STORAGE_COMPONENT_16K), 'G', ae("quartz_glass")); KNOWLEDGE_CORE_ITEM = ThaumcraftApi.addArcaneCraftingRecipe("KNOWLEDGEINSCRIBER", stack(ModItems.KNOWLEDGE_CORE), new AspectList().add(Aspect.WATER, 3).add(Aspect.ORDER, 3).add(Aspect.EARTH, 1), "QlQ", "lBl", "QPQ", 'Q', ae("quartz_glass"), 'l', new ItemStack(Items.LAPIS_LAZULI, 4), 'B', tc("zombie_brain"), 'P', ae("calculation_processor")); FOCUS_AEWRENCH_RECIPE = ThaumcraftApi.addArcaneCraftingRecipe("FOCUS_AEWRENCH", stack(ModItems.FOCUS_AEWRENCH), new AspectList().add(Aspect.AIR, 10).add(Aspect.FIRE, 10), "AqF", "qWq", "FqA", 'A', tc("air_shard"), 'q', new ItemStack(Items.QUARTZ, 4), 'F', tc("fire_shard"), 'W', ae("certus_quartz_wrench")); GOLEM_WIFI_BACKPACK_RECIPE = ThaumcraftApi.addArcaneCraftingRecipe("GOLEMWIFI", stack(ModItems.GOLEM_WIFI_BACKPACK), new AspectList().add(Aspect.AIR, 6).add(Aspect.FIRE, 4).add(Aspect.ORDER, 3), "tIt", "nRn", "fCf", 't', tc("thaumium_ingot"), 'I', ae("interface"), 'n', tc("nitor"), 'R', ae("wireless_receiver"), 'f', ae("fluix_crystal"), 'C', ae("charger")); ESSENTIA_IMPORT_BUS = ThaumcraftApi.addArcaneCraftingRecipe("ESSENTIABUSES", stack(ModItems.ESSENTIA_IMPORT_BUS), new AspectList().add(Aspect.FIRE, 2).add(Aspect.EARTH, 2).add(Aspect.WATER, 1), "JDJ", "IFI", " ", 'J', tc("warded_jar"), 'D', stack(ModItems.DIFFUSION_CORE), 'I', new ItemStack(Items.IRON_INGOT, 2), 'F', tc("essentia_filter")); ESSENTIA_EXPORT_BUS = ThaumcraftApi.addArcaneCraftingRecipe("ESSENTIABUSES", stack(ModItems.ESSENTIA_EXPORT_BUS), new AspectList().add(Aspect.FIRE, 2).add(Aspect.EARTH, 2).add(Aspect.WATER, 1), "JCJ", "IFI", " ", 'J', tc("warded_jar"), 'C', stack(ModItems.COALESCENCE_CORE), 'I', new ItemStack(Items.IRON_INGOT, 2), 'F', tc("essentia_filter")); ESSENTIA_STORAGE_BUS = ThaumcraftApi.addArcaneCraftingRecipe("ESSENTIABUSES", stack(ModItems.ESSENTIA_STORAGE_BUS), new AspectList().add(Aspect.EARTH, 3).add(Aspect.FIRE, 3).add(Aspect.WATER, 3), "DCF", "IGI", " ", 'D', stack(ModItems.DIFFUSION_CORE), 'C', stack(ModItems.COALESCENCE_CORE), 'F', tc("essentia_filter"), 'I', new ItemStack(Items.IRON_INGOT, 2), 'G', ae("quartz_glass")); KNOWLEDGE_INSCRIBER_BLOCK = ThaumcraftApi.addArcaneCraftingRecipe("KNOWLEDGEINSCRIBER", stack(ModBlocks.KNOWLEDGE_INSCRIBER), new AspectList().add(Aspect.WATER, 5).add(Aspect.EARTH, 5).add(Aspect.FIRE, 5).add(Aspect.AIR, 5).add(Aspect.ORDER, 5).add(Aspect.ENTROPY, 5), "ILI", " T ", "IPI", 'I', new ItemStack(Items.IRON_INGOT, 4), 'L', ae("monitor"), 'T', tc("thaumonomicon"), 'P', ae("logic_processor")); ThaumcraftApi.addArcaneCraftingRecipe("KNOWLEDGEINSCRIBER", stack(ModBlocks.KNOWLEDGE_INSCRIBER), new AspectList().add(Aspect.WATER, 5).add(Aspect.EARTH, 5).add(Aspect.FIRE, 5).add(Aspect.AIR, 5).add(Aspect.ORDER, 5).add(Aspect.ENTROPY, 5), "ILI", " T ", "IPI", 'I', new ItemStack(Items.IRON_INGOT, 4), 'L', ae("dark_monitor"), 'T', tc("thaumonomicon"), 'P', ae("logic_processor")); ThaumcraftApi.addArcaneCraftingRecipe("KNOWLEDGEINSCRIBER", stack(ModBlocks.KNOWLEDGE_INSCRIBER), new AspectList().add(Aspect.WATER, 5).add(Aspect.EARTH, 5).add(Aspect.FIRE, 5).add(Aspect.AIR, 5).add(Aspect.ORDER, 5).add(Aspect.ENTROPY, 5), "ILI", " T ", "IPI", 'I', new ItemStack(Items.IRON_INGOT, 4), 'L', ae("semi_dark_monitor"), 'T', tc("thaumonomicon"), 'P', ae("logic_processor")); DISTILLATION_ENCODER_BLOCK = ThaumcraftApi.addArcaneCraftingRecipe("DISTILLATIONENCODER", stack(ModBlocks.DISTILLATION_ENCODER), new AspectList().add(Aspect.ORDER, 5).add(Aspect.ENTROPY, 5).add(Aspect.FIRE, 3), "ILI", " G ", "IPI", 'I', new ItemStack(Items.IRON_INGOT, 4), 'L', ae("monitor"), 'G', tc("thaumometer"), 'P', ae("engineering_processor")); ThaumcraftApi.addArcaneCraftingRecipe("DISTILLATIONENCODER", stack(ModBlocks.DISTILLATION_ENCODER), new AspectList().add(Aspect.ORDER, 5).add(Aspect.ENTROPY, 5).add(Aspect.FIRE, 3), "ILI", " G ", "IPI", 'I', new ItemStack(Items.IRON_INGOT, 4), 'L', ae("dark_monitor"), 'G', tc("thaumometer"), 'P', ae("engineering_processor")); ThaumcraftApi.addArcaneCraftingRecipe("DISTILLATIONENCODER", stack(ModBlocks.DISTILLATION_ENCODER), new AspectList().add(Aspect.ORDER, 5).add(Aspect.ENTROPY, 5).add(Aspect.FIRE, 3), "ILI", " G ", "IPI", 'I', new ItemStack(Items.IRON_INGOT, 4), 'L', ae("semi_dark_monitor"), 'G', tc("thaumometer"), 'P', ae("engineering_processor")); } private static void registerShapelessArcane() { // 1. 扩散核心 DIFFUSION_CORE = ThaumcraftApi.addShapelessArcaneCraftingRecipe("DIGISENTIA", stack(ModItems.DIFFUSION_CORE), new AspectList().add(Aspect.WATER, 2).add(Aspect.ENTROPY, 2), tc("quicksilver"), tc("quicksilver"), tc("quicksilver"), tc("entropy_shard"), ae("annihilation_core")); // 2. 凝聚核心 COALESCENCE_CORE = ThaumcraftApi.addShapelessArcaneCraftingRecipe("DIGISENTIA", stack(ModItems.COALESCENCE_CORE), new AspectList().add(Aspect.WATER, 2).add(Aspect.ORDER, 2), tc("quicksilver"), tc("quicksilver"), tc("quicksilver"), tc("order_shard"), ae("formation_core")); // 3. 原质等级发射器 ESSENTIA_LEVEL_EMITTER = ThaumcraftApi.addShapelessArcaneCraftingRecipe("ESSENTIAMONITORING", new ItemStack(ModItems.ESSENTIA_LEVEL_EMITTER.get(), 1), new AspectList().add(Aspect.FIRE, 4), ae("calculation_processor"), new ItemStack(Items.REDSTONE_TORCH), tc("salis_mundus")); // 4. 原质终端 ESSENTIA_TERMINAL = ThaumcraftApi.addShapelessArcaneCraftingRecipe("ESSENTIATERMINAL", stack(ModItems.ESSENTIA_TERMINAL_ITEM), new AspectList().add(Aspect.WATER, 5).add(Aspect.ORDER, 2).add(Aspect.FIRE, 1), //'ae2:semi_dark_monitor' 'ae2:monitor' 'ae2:dark_monitor'三者任一 ae("monitor"), stack(ModItems.DIFFUSION_CORE), stack(ModItems.COALESCENCE_CORE), ae("logic_processor"), tc("vis_filter")); ThaumcraftApi.addShapelessArcaneCraftingRecipe("ESSENTIATERMINAL", stack(ModItems.ESSENTIA_TERMINAL_ITEM), new AspectList().add(Aspect.WATER, 5).add(Aspect.ORDER, 2).add(Aspect.FIRE, 1), //'ae2:semi_dark_monitor' 'ae2:monitor' 'ae2:dark_monitor'三者任一 ae("dark_monitor"), stack(ModItems.DIFFUSION_CORE), stack(ModItems.COALESCENCE_CORE), ae("logic_processor"), tc("vis_filter")); ThaumcraftApi.addShapelessArcaneCraftingRecipe("ESSENTIATERMINAL", stack(ModItems.ESSENTIA_TERMINAL_ITEM), new AspectList().add(Aspect.WATER, 5).add(Aspect.ORDER, 2).add(Aspect.FIRE, 1), //'ae2:semi_dark_monitor' 'ae2:monitor' 'ae2:dark_monitor'三者任一 ae("semi_dark_monitor"), stack(ModItems.DIFFUSION_CORE), stack(ModItems.COALESCENCE_CORE), ae("logic_processor"), tc("vis_filter")); // 5. 奥术合成终端 ARCANE_CRAFTING_TERMINAL = ThaumcraftApi.addShapelessArcaneCraftingRecipe("ARCANECRAFTINGTERMINAL", stack(ModItems.ARCANE_CRAFTING_TERMINAL_ITEM), new AspectList().add(Aspect.AIR, 10).add(Aspect.EARTH, 10).add(Aspect.FIRE, 10).add(Aspect.WATER, 10).add(Aspect.ORDER, 10).add(Aspect.ENTROPY, 10), ae("terminal"), tc("arcane_workbench"), ae("calculation_processor")); // 6. 源流接口 VIS_INTERFACE = ThaumcraftApi.addShapelessArcaneCraftingRecipe("VISINTERFACE", stack(ModItems.VIS_INTERFACE), new AspectList().add(Aspect.AIR, 2).add(Aspect.EARTH, 2).add(Aspect.FIRE, 2).add(Aspect.WATER, 2).add(Aspect.ORDER, 2).add(Aspect.ENTROPY, 2), tc("balance_shard"), ae("me_p2p_tunnel")); // 7. 原质振荡室 ESSENTIA_VIBRATION_CHAMBER = ThaumcraftApi.addShapelessArcaneCraftingRecipe("ESSENTIAVIBRATIONCHAMBER", stack(ModBlocks.ESSENTIA_VIBRATION_CHAMBER), new AspectList().add(Aspect.FIRE, 10).add(Aspect.WATER, 6).add(Aspect.ORDER, 4).add(Aspect.ENTROPY, 4), ae("vibration_chamber"), tc("jar_of_essentia"), stack(ModItems.COALESCENCE_CORE)); } private static void registerInfusion() { // 1. 原质供应器 ESSENTIA_PROVIDER = ThaumcraftApi.addInfusionCraftingRecipe("ESSENTIAPROVIDER", stack(ModBlocks.ESSENTIA_PROVIDER), 1, new AspectList().add(Aspect.MECHANISM, 64).add(Aspect.MAGIC, 32).add(Aspect.ORDER, 32).add(Aspect.EXCHANGE, 16), ae("interface"), tc("water_shard"), tc("water_shard"), tc("salis_mundus"), tc("salis_mundus"), stack(ModItems.DIFFUSION_CORE), stack(ModItems.COALESCENCE_CORE), tc("essentia_filter"), tc("essentia_filter")); // 2. 注魔供应器 INFUSION_PROVIDER = ThaumcraftApi.addInfusionCraftingRecipe("INFUSIONPROVIDER", stack(ModBlocks.INFUSION_PROVIDER), 3, new AspectList().add(Aspect.MECHANISM, 64).add(Aspect.MAGIC, 32).add(Aspect.ORDER, 32).add(Aspect.EXCHANGE, 16), ae("interface"), tc("essentia_mirror"), tc("essentia_mirror"), tc("air_shard"), tc("air_shard"), stack(ModItems.COALESCENCE_CORE), stack(ModItems.COALESCENCE_CORE), tc("salis_mundus"), tc("salis_mundus")); // 3. 奥术装配器 ARCANE_ASSEMBLER = ThaumcraftApi.addInfusionCraftingRecipe("ARCANEASSEMBLER", stack(ModBlocks.ARCANE_ASSEMBLER), 5, new AspectList().add(Aspect.CRAFT, 64).add(Aspect.EXCHANGE, 32).add(Aspect.AURA, 16).add(Aspect.MAGIC, 16).add(Aspect.METAL, 8).add(Aspect.CRYSTAL, 8), ae("molecular_assembler"), tc("fire_shard"), tc("entropy_shard"), tc("order_shard"), tc("balance_shard"), tc("water_shard"), tc("earth_shard"), tc("air_shard"), tc("salis_mundus"), createFullVisScepter()); } private static ItemStack createFullVisScepter() { ItemStack scepter = tc("silverwood_thaumium_scepter"); if (scepter.isEmpty()) return scepter; TCVisHelper.setWandParts(scepter, "silverwood", "thaumium", true); int max = TCVisHelper.getWandMaxVis(scepter, "silverwood_thaumium_scepter"); for (Aspect a : Aspect.getPrimalAspects()) { TCVisHelper.storeVis(scepter, a, max, max); } return scepter; } private static ItemStack stack(java.util.function.Supplier s) { return new ItemStack(s.get()); } private static ItemStack tc(String name) { return new ItemStack(net.minecraft.core.registries.BuiltInRegistries.ITEM.get( ResourceLocation.fromNamespaceAndPath("thaumcraft", name))); } private static ItemStack ae(String name) { return new ItemStack(net.minecraft.core.registries.BuiltInRegistries.ITEM.get( ResourceLocation.fromNamespaceAndPath("ae2", name))); } }