diff --git a/src/main/java/com/silvermoon/boxplusplus/boxplusplus.java b/src/main/java/com/silvermoon/boxplusplus/boxplusplus.java index 5398b1b..115a774 100644 --- a/src/main/java/com/silvermoon/boxplusplus/boxplusplus.java +++ b/src/main/java/com/silvermoon/boxplusplus/boxplusplus.java @@ -58,8 +58,8 @@ public void postInit(FMLPostInitializationEvent event) { } @Mod.EventHandler - public void serverStarted(FMLServerStartedEvent event) { - proxy.serverStarted(event); + public void loadCompeted(FMLLoadCompleteEvent event) { + proxy.loadCompeted(event); } public static final CreativeTabs BoxTab = new CreativeTabs("BoxPlusPlus") { 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/common/CommonProxy.java b/src/main/java/com/silvermoon/boxplusplus/common/CommonProxy.java index cbd8c30..7485382 100644 --- a/src/main/java/com/silvermoon/boxplusplus/common/CommonProxy.java +++ b/src/main/java/com/silvermoon/boxplusplus/common/CommonProxy.java @@ -1,18 +1,13 @@ package com.silvermoon.boxplusplus.common; -import net.minecraftforge.common.MinecraftForge; - import com.silvermoon.boxplusplus.common.config.Config; import com.silvermoon.boxplusplus.common.loader.BlockRegister; import com.silvermoon.boxplusplus.common.loader.ItemRegister; import com.silvermoon.boxplusplus.common.loader.RecipeLoader; import com.silvermoon.boxplusplus.common.loader.TileEntitiesLoader; -import com.silvermoon.boxplusplus.event.ServerEvent; import com.silvermoon.boxplusplus.network.NetworkLoader; import com.silvermoon.boxplusplus.util.ResultModuleRequirement; -import bartworks.API.SideReference; -import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.event.*; import gregtech.api.recipe.check.CheckRecipeResultRegistry; @@ -31,20 +26,16 @@ public void preInit(FMLPreInitializationEvent event) { public void init(FMLInitializationEvent event) { TileEntitiesLoader.register(); CheckRecipeResultRegistry.register(new ResultModuleRequirement(0, false)); - - ServerEvent serverEvent = new ServerEvent(); - if (SideReference.Side.Server) { - MinecraftForge.EVENT_BUS.register(serverEvent); - } - FMLCommonHandler.instance() - .bus() - .register(serverEvent); } // postInit "Handle interaction with other mods, complete your setup based on this." (Remove if not needed) public void postInit(FMLPostInitializationEvent event) {} public void serverStarted(FMLServerStartedEvent event) { + + } + + public void loadCompeted(FMLLoadCompleteEvent event) { new RecipeLoader().run(); } } diff --git a/src/main/java/com/silvermoon/boxplusplus/common/loader/RecipeLoader.java b/src/main/java/com/silvermoon/boxplusplus/common/loader/RecipeLoader.java index 3d3ad8b..ec4dd9f 100644 --- a/src/main/java/com/silvermoon/boxplusplus/common/loader/RecipeLoader.java +++ b/src/main/java/com/silvermoon/boxplusplus/common/loader/RecipeLoader.java @@ -19,13 +19,7 @@ public class RecipeLoader implements Runnable { - public static boolean hasLoadedRecipe; - public synchronized void run() { - if (hasLoadedRecipe) { - return; - } - hasLoadedRecipe = true; addBoxRecipe(); addMachineBlockRecipe(); addModuleRecipe(); diff --git a/src/main/java/com/silvermoon/boxplusplus/event/ServerEvent.java b/src/main/java/com/silvermoon/boxplusplus/event/ServerEvent.java deleted file mode 100644 index b37b1d3..0000000 --- a/src/main/java/com/silvermoon/boxplusplus/event/ServerEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.silvermoon.boxplusplus.event; - -import static com.silvermoon.boxplusplus.boxplusplus.LOG; - -import net.minecraft.entity.player.EntityPlayerMP; - -import com.silvermoon.boxplusplus.network.NetworkLoader; -import com.silvermoon.boxplusplus.network.packet.ServerJoinedPacket; - -import bartworks.API.SideReference; -import cpw.mods.fml.common.eventhandler.EventPriority; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.PlayerEvent; - -public class ServerEvent { - - @SubscribeEvent(priority = EventPriority.LOWEST) - public void PlayerJoinServerEvent(PlayerEvent.PlayerLoggedInEvent event) { - LOG.info("PlayerJoinServerEvent running"); - if (event == null || !(event.player instanceof EntityPlayerMP player) || !SideReference.Side.Server) return; - NetworkLoader.instance.sendTo(new ServerJoinedPacket(), player); - LOG.info("PlayerJoinServerEvent run finished"); - } -} diff --git a/src/main/java/com/silvermoon/boxplusplus/network/NetworkLoader.java b/src/main/java/com/silvermoon/boxplusplus/network/NetworkLoader.java index 1e45d08..3dbbc8f 100644 --- a/src/main/java/com/silvermoon/boxplusplus/network/NetworkLoader.java +++ b/src/main/java/com/silvermoon/boxplusplus/network/NetworkLoader.java @@ -1,7 +1,6 @@ package com.silvermoon.boxplusplus.network; import com.silvermoon.boxplusplus.Tags; -import com.silvermoon.boxplusplus.network.packet.ServerJoinedPacket; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; @@ -15,8 +14,5 @@ public class NetworkLoader { public static void init() { instance.registerMessage(MessageRouting.Handler.class, MessageRouting.class, nextID++, Side.SERVER); - - instance.registerMessage(ServerJoinedPacket.class, ServerJoinedPacket.class, nextID++, Side.SERVER); - instance.registerMessage(ServerJoinedPacket.class, ServerJoinedPacket.class, nextID++, Side.CLIENT); } } diff --git a/src/main/java/com/silvermoon/boxplusplus/network/packet/ServerJoinedPacket.java b/src/main/java/com/silvermoon/boxplusplus/network/packet/ServerJoinedPacket.java deleted file mode 100644 index dafd012..0000000 --- a/src/main/java/com/silvermoon/boxplusplus/network/packet/ServerJoinedPacket.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.silvermoon.boxplusplus.network.packet; - -import com.silvermoon.boxplusplus.common.loader.ServerInitLoader; - -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import io.netty.buffer.ByteBuf; - -public class ServerJoinedPacket implements IMessage, IMessageHandler { - - @Override - public void fromBytes(ByteBuf buf) { - - } - - @Override - public void toBytes(ByteBuf buf) { - - } - - @Override - public IMessage onMessage(ServerJoinedPacket message, MessageContext ctx) { - ServerInitLoader.initOnPlayerJoinedSever(); - return null; - } -} diff --git a/src/main/java/com/silvermoon/boxplusplus/util/BoxRoutings.java b/src/main/java/com/silvermoon/boxplusplus/util/BoxRoutings.java index 4ff7c40..b866044 100644 --- a/src/main/java/com/silvermoon/boxplusplus/util/BoxRoutings.java +++ b/src/main/java/com/silvermoon/boxplusplus/util/BoxRoutings.java @@ -268,27 +268,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 +658,39 @@ 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 nbt = stack.getTagCompound(); + return nbt.hasKey("display"); + } + + // 判断流体 和 特殊物品 + 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()