Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 43 additions & 50 deletions src/main/java/com/silvermoon/boxplusplus/common/BoxModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 };
}
}
};
}
}
68 changes: 42 additions & 26 deletions src/main/java/com/silvermoon/boxplusplus/util/BoxRoutings.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -679,16 +659,52 @@ public static void checkRouting(GTMachineBox box) {

public static List<ItemStack> convertToItemStackList(List<PositionedStack> positionedStacks) {
List<ItemStack> 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<PositionedStack> machineListWithPos = RecipeCatalysts.getRecipeCatalysts(recipe);
List<ItemStack> machineList = machineListWithPos.stream()
Expand Down