diff --git a/src/main/java/com/silvermoon/boxplusplus/common/BoxModule.java b/src/main/java/com/silvermoon/boxplusplus/common/BoxModule.java index 14d7cb0..1f6054d 100644 --- a/src/main/java/com/silvermoon/boxplusplus/common/BoxModule.java +++ b/src/main/java/com/silvermoon/boxplusplus/common/BoxModule.java @@ -103,64 +103,57 @@ public static BoxModule getModuleByIndex(int index) { } public static int[] transMachinesToModule(BoxRoutings routing) { + String unlocalizedName = routing.RoutingMachine.getUnlocalizedName(); if (routing.special != 0) { if (routing.special > 5402) { return new int[] { 8, 1 }; } return new int[] { 8, 0 }; } - switch (routing.RoutingMachine.getUnlocalizedName()) { - case "tile.dire_crafting" -> { - return new int[] { 1, 1 }; - } - case "tile.neutronium_compressor" -> { - return new int[] { 5, 0 }; - } + if ("tile.dire_crafting".equals(unlocalizedName)) { + return new int[] { 1, 1 }; + } + return switch (unlocalizedName.substring(17)) { + case "industrialmixer.controller.tier.single", "multimachine.chemicalreactor" -> new int[] { 0, 0 }; + case "gtplusplus.autocrafter.multi", "mxrandomlargemolecularassembler" -> new int[] { 1, 0 }; + case "multimachine.cracker", "megadistillationtower", "multimachine.adv.distillationtower", "megaoilcracker", "multimachine.distillationtower" -> new int[] { + 2, 0 }; + case "multimachine.multifurnace", "industrialthermalcentrifuge.controller.tier.single", "industrialarcfurnace.controller.tier.single", "industrialalloysmelter.controller.tier.single" -> new int[] { + 3, 0 }; + case "industrialmultimachine.controller.tier.single", "multimachine.basiccompressor", "multimachine.lathe", "multimachine.electromagneticseparator", "multimachine.extractor", "multimachine.fluidextractor", "multimachine.engraver", "multimachine.autoclave", "multimachine.solidifier" -> new int[] { + 4, 0 }; + case "industrialrockcrusher.controller.tier.single", "industrialfluidheater.controller.tier.single", "multimachine.neutroniumcompressor" -> new int[] { + 5, 0 }; + case "industrialcuttingmachine.controller.tier.01", "industrialmacerator.controller.tier.single", "industrialbender.controller.tier.single", "industrialextruder.controller.tier.single", "industrialwiremill.controller.tier.single", "industrialhammer.controller.tier.single" -> new int[] { + 6, 0 }; + case "industrialwashplant.controller.tier.single", "industrialsifter.controller.tier.single", "industrialcentrifuge.controller.tier.single", "industrialelectrolyzer.controller.tier.single", "digester", "basicmachine.electromagneticseparator.tier.06" -> new int[] { + 7, 0 }; + case "industrialcokeoven.controller.tier.single", "multimachine.pyro", "multimachine.vacuumfreezer", "multimachine.adv.industrialfreezer" -> new int[] { + 8, 0 }; + case "multimachine.assemblyline" -> new int[] { 9, 0 }; + case "industrialsalloyamelter.controller.tier.single" -> new int[] { 10, 0 }; + case "moleculartransformer.controller.tier.single", "gtpp.multimachine.replicator" -> new int[] { 0, 1 }; + case "preciseassembler" -> new int[] { 1, 1 }; + case "chemicalplant.controller.tier.single" -> new int[] { 2, 1 }; + case "cyclotron.tier.single" -> new int[] { 3, 1 }; + case "multimachine.pcbfactory", "circuitassemblyline" -> new int[] { 4, 1 }; + case "largefusioncomputer5" -> new int[] { 5, 1 }; + case "dissolution_tank", "bw.biovat" -> new int[] { 7, 1 }; + case "electricimplosioncompressor", "componentassemblyline", "projectmoduleassemblert3" -> new int[] { 9, + 1 }; + case "multimachine.plasma forge", "multimachine.transcendentplasmamixer", "multimachine.nanoforge" -> new int[] { + 8, 1 }; + case "quantumforcetransformer.controller.tier.single", "frf", "industrialmassfab.controller.tier.single" -> new int[] { + 10, 1 }; default -> { - return switch (routing.RoutingMachine.getUnlocalizedName() - .substring(17)) { - case "industrialmixer.controller.tier.single", "multimachine.chemicalreactor" -> new int[] { 0, 0 }; - case "gtplusplus.autocrafter.multi", "mxrandomlargemolecularassembler" -> new int[] { 1, 0 }; - case "multimachine.cracker", "megadistillationtower", "multimachine.adv.distillationtower", "megaoilcracker", "multimachine.distillationtower" -> new int[] { - 2, 0 }; - case "multimachine.multifurnace", "industrialthermalcentrifuge.controller.tier.single", "industrialarcfurnace.controller.tier.single", "industrialalloysmelter.controller.tier.single" -> new int[] { - 3, 0 }; - case "industrialmultimachine.controller.tier.single" -> new int[] { 4, 0 }; - case "industrialrockcrusher.controller.tier.single", "industrialfluidheater.controller.tier.single" -> new int[] { - 5, 0 }; - case "industrialcuttingmachine.controller.tier.01", "industrialmacerator.controller.tier.single", "industrialbender.controller.tier.single", "industrialextruder.controller.tier.single", "industrialwiremill.controller.tier.single", "industrialhammer.controller.tier.single" -> new int[] { - 6, 0 }; - case "industrialwashplant.controller.tier.single", "industrialsifter.controller.tier.single", "industrialcentrifuge.controller.tier.single", "industrialelectrolyzer.controller.tier.single", "digester", "basicmachine.electromagneticseparator.tier.06" -> new int[] { - 7, 0 }; - case "industrialcokeoven.controller.tier.single", "multimachine.pyro", "multimachine.vacuumfreezer", "multimachine.adv.industrialfreezer" -> new int[] { - 8, 0 }; - case "multimachine.assemblyline" -> new int[] { 9, 0 }; - case "industrialsalloyamelter.controller.tier.single" -> new int[] { 10, 0 }; - case "moleculartransformer.controller.tier.single", "gtpp.multimachine.replicator" -> new int[] { 0, - 1 }; - case "preciseassembler" -> new int[] { 1, 1 }; - case "chemicalplant.controller.tier.single" -> new int[] { 2, 1 }; - case "cyclotron.tier.single" -> new int[] { 3, 1 }; - case "multimachine.pcbfactory", "circuitassemblyline" -> new int[] { 4, 1 }; - case "largefusioncomputer5" -> new int[] { 5, 1 }; - case "dissolution_tank", "bw.biovat" -> new int[] { 7, 1 }; - case "electricimplosioncompressor", "componentassemblyline", "projectmoduleassemblert3" -> new int[] { - 9, 1 }; - case "multimachine.plasmaforge", "multimachine.transcendentplasmamixer", "multimachine.nanoforge" -> new int[] { - 8, 1 }; - case "quantumforcetransformer.controller.tier.single", "frf", "industrialmassfab.controller.tier.single" -> new int[] { - 10, 1 }; - default -> { - for (MTEMultiBlockBase machine : customerMachineList) { - if (GTUtility.areStacksEqual(machine.getStackForm(1), routing.RoutingMachine, true)) { - yield new int[] { ((IBoxable) machine).getModuleIDSafely(), - ((IBoxable) machine).isUpdateModule() ? 1 : 0 }; - } - } - yield new int[] { 14, 0 }; + for (MTEMultiBlockBase machine : customerMachineList) { + if (GTUtility.areStacksEqual(machine.getStackForm(1), routing.RoutingMachine, true)) { + yield new int[] { ((IBoxable) machine).getModuleIDSafely(), + ((IBoxable) machine).isUpdateModule() ? 1 : 0 }; } - }; + } + yield new int[] { 14, 0 }; } - } + }; } } diff --git a/src/main/java/com/silvermoon/boxplusplus/util/BoxRoutings.java b/src/main/java/com/silvermoon/boxplusplus/util/BoxRoutings.java index 4ff7c40..66e0b69 100644 --- a/src/main/java/com/silvermoon/boxplusplus/util/BoxRoutings.java +++ b/src/main/java/com/silvermoon/boxplusplus/util/BoxRoutings.java @@ -17,6 +17,7 @@ import net.minecraft.item.crafting.CraftingManager; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; @@ -268,27 +269,6 @@ public static void checkRouting(GTMachineBox box) { } return; } - // Really? You add neutronium compressor? - if (inputBus.getStackInSlot(i) - .getUnlocalizedName() - .equals("tile.neutronium_compressor")) { - for (ItemStack item : allInputItems) { - ItemStack out = fox.spiteful.avaritia.crafting.CompressorManager.getOutput(item); - if (out != null) { - ItemStack in = item.copy(); - in.stackSize = fox.spiteful.avaritia.crafting.CompressorManager.getCost(item); - ItemStack machine = inputBus.getStackInSlot(i) - .copy(); - machine.stackSize = 1; - box.routingMap - .add(new BoxRoutings(in, out, machine, TierEU.RECIPE_ZPM, TickTime.MINUTE)); - box.routingStatus = 0; - return; - } - } - box.routingStatus = 3; - return; - } // Extreme Craft Table if (inputBus.getStackInSlot(i) .getUnlocalizedName() @@ -679,16 +659,52 @@ public static void checkRouting(GTMachineBox box) { public static List convertToItemStackList(List positionedStacks) { List itemStacks = new ArrayList<>(); - if (positionedStacks != null) { - for (PositionedStack positionedStack : positionedStacks) { - if (positionedStack != null) { - itemStacks.add(positionedStack.item); // PositionedStack 继承自 ItemStack,直接访问 item 属性 - } + + if (positionedStacks == null || positionedStacks.isEmpty()) return itemStacks; + for (PositionedStack positionedStack : positionedStacks) { + if (positionedStack == null) continue; + if (!isNormalItem(positionedStack.item)) { + itemStacks.add(positionedStack.item.copy()); } } return itemStacks; } + public static boolean isValidResearchItem(ItemStack stack) { + if (stack == null || !stack.hasTagCompound()) return false; + + NBTTagCompound root = stack.getTagCompound(); + + if (!root.hasKey("display", Constants.NBT.TAG_COMPOUND)) { + return false; + } + + NBTTagCompound displayTag = root.getCompoundTag("display"); + + if (!displayTag.hasKey("Name", Constants.NBT.TAG_STRING)) { + return false; + } + + String nameValue = displayTag.getString("Name"); + return "Reads Research result".equals(nameValue); + } + + // 判断流体 和 特殊物品 + private static boolean isNormalItem(ItemStack stack) { + if (stack == null || stack.getItem() == null) return false; + NBTTagCompound nbt = stack.getTagCompound(); + if (nbt == null) return false; + + boolean isFluidItem = (stack.getItem() == ItemList.Display_Fluid.getItem()) && nbt.hasKey("mFluidDisplayAmount") + && nbt.hasKey("mFluidDisplayHeat") + && nbt.hasKey("mFluidState") + && nbt.hasKey("mHideStackSize"); + + boolean isDataItem = (nbt.hasKey("mDataTitle") && nbt.hasKey("mData")); + + return isFluidItem || isDataItem || isValidResearchItem(stack); + } + public static void makeRouting(GTNEIDefaultHandler recipe, int recipeIndex, EntityPlayer player) { List machineListWithPos = RecipeCatalysts.getRecipeCatalysts(recipe); List machineList = machineListWithPos.stream()