From d04aac3b2929e7a97c74fe9cda7a9eed5868c8c6 Mon Sep 17 00:00:00 2001 From: asdflj <854865755@qq.com> Date: Sun, 5 Feb 2023 16:52:16 +0800 Subject: [PATCH] fix bug --- .../inventory/ItemBiggerAppEngInventory.java | 6 +- ...dPatternTerminalRecipeTransferHandler.java | 6 +- .../network/CPacketPatternValueSet.java | 35 +++--- .../github/network/CPacketTransferRecipe.java | 113 ++++++++++++------ 4 files changed, 105 insertions(+), 55 deletions(-) diff --git a/src/main/java/com/glodblock/github/inventory/ItemBiggerAppEngInventory.java b/src/main/java/com/glodblock/github/inventory/ItemBiggerAppEngInventory.java index eba1f78a..d2459bfb 100644 --- a/src/main/java/com/glodblock/github/inventory/ItemBiggerAppEngInventory.java +++ b/src/main/java/com/glodblock/github/inventory/ItemBiggerAppEngInventory.java @@ -5,6 +5,8 @@ import net.minecraft.item.ItemStack; import appeng.tile.inventory.BiggerAppEngInventory; import appeng.util.Platform; +import com.glodblock.github.inventory.gui.GuiType; + public class ItemBiggerAppEngInventory extends BiggerAppEngInventory { private final ItemStack is; @@ -20,7 +22,9 @@ public class ItemBiggerAppEngInventory extends BiggerAppEngInventory { @Override public void markDirty() { boolean isCraft = Platform.openNbtData(is).getBoolean("craftingMode"); - if (isCraft) { + boolean isCraftingTerm = Platform.openNbtData(is).getString("mode_main") + .equals(GuiType.WIRELESS_CRAFTING_TERMINAL.toString()); + if (!isCraftingTerm && isCraft) { for (int x = 0; x < this.getSizeInventory(); x++) { final ItemStack is = this.getStackInSlot(x); if (is != null) { diff --git a/src/main/java/com/glodblock/github/nei/FluidPatternTerminalRecipeTransferHandler.java b/src/main/java/com/glodblock/github/nei/FluidPatternTerminalRecipeTransferHandler.java index f22c0c3c..5afc67e9 100644 --- a/src/main/java/com/glodblock/github/nei/FluidPatternTerminalRecipeTransferHandler.java +++ b/src/main/java/com/glodblock/github/nei/FluidPatternTerminalRecipeTransferHandler.java @@ -10,6 +10,7 @@ import codechicken.nei.recipe.IRecipeHandler; import codechicken.nei.recipe.TemplateRecipeHandler; import com.glodblock.github.FluidCraft; +import com.glodblock.github.client.gui.GuiFluidCraftingWireless; import com.glodblock.github.client.gui.base.FCGuiEncodeTerminal; import com.glodblock.github.nei.object.OrderStack; import com.glodblock.github.nei.recipes.FluidRecipe; @@ -30,8 +31,9 @@ public class FluidPatternTerminalRecipeTransferHandler implements IOverlayHandle @Override public void overlayRecipe(GuiContainer firstGui, IRecipeHandler recipe, int recipeIndex, boolean shift) { - if (firstGui instanceof FCGuiEncodeTerminal) { - boolean priority = ((FCGuiEncodeTerminal) firstGui).container.prioritize; + if (firstGui instanceof FCGuiEncodeTerminal || firstGui instanceof GuiFluidCraftingWireless) { + boolean priority = !(firstGui instanceof GuiFluidCraftingWireless) + && ((FCGuiEncodeTerminal) firstGui).container.prioritize; List> in = FluidRecipe.getPackageInputs(recipe, recipeIndex, priority); List> out = FluidRecipe.getPackageOutputs(recipe, recipeIndex, !notUseOther(recipe)); boolean craft = shouldCraft(recipe); diff --git a/src/main/java/com/glodblock/github/network/CPacketPatternValueSet.java b/src/main/java/com/glodblock/github/network/CPacketPatternValueSet.java index 6aca96f0..d5e6fee7 100644 --- a/src/main/java/com/glodblock/github/network/CPacketPatternValueSet.java +++ b/src/main/java/com/glodblock/github/network/CPacketPatternValueSet.java @@ -2,7 +2,6 @@ package com.glodblock.github.network; import java.util.Objects; -import com.glodblock.github.inventory.gui.PartOrItemGuiFactory; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; @@ -18,6 +17,7 @@ import com.glodblock.github.client.gui.container.base.FCContainerEncodeTerminal; import com.glodblock.github.common.item.ItemFluidPacket; import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; +import com.glodblock.github.inventory.gui.PartOrItemGuiFactory; import com.glodblock.github.util.BlockPos; import com.glodblock.github.util.Util; @@ -70,25 +70,28 @@ public class CPacketPatternValueSet implements IMessage { final TileEntity te = context.getTile(); if (te != null) { InventoryHandler.openGui( - player, - player.worldObj, - new BlockPos(te), - Objects.requireNonNull(context.getSide()), - message.originGui); + player, + player.worldObj, + new BlockPos(te), + Objects.requireNonNull(context.getSide()), + message.originGui); } else if (message.originGui.guiFactory instanceof PartOrItemGuiFactory) { InventoryHandler.openGui( - player, - player.worldObj, - new BlockPos(player.inventory.currentItem, Util.GuiHelper.encodeType(0, Util.GuiHelper.GuiType.ITEM), 0), - Objects.requireNonNull(context.getSide()), - message.originGui); + player, + player.worldObj, + new BlockPos( + player.inventory.currentItem, + Util.GuiHelper.encodeType(0, Util.GuiHelper.GuiType.ITEM), + 0), + Objects.requireNonNull(context.getSide()), + message.originGui); } else { InventoryHandler.openGui( - player, - player.worldObj, - new BlockPos(player.inventory.currentItem, 0, 0), - Objects.requireNonNull(context.getSide()), - message.originGui); + player, + player.worldObj, + new BlockPos(player.inventory.currentItem, 0, 0), + Objects.requireNonNull(context.getSide()), + message.originGui); } if (player.openContainer instanceof FCContainerEncodeTerminal) { Slot slot = player.openContainer.getSlot(message.valueIndex); diff --git a/src/main/java/com/glodblock/github/network/CPacketTransferRecipe.java b/src/main/java/com/glodblock/github/network/CPacketTransferRecipe.java index 3c96902c..a6751d6a 100644 --- a/src/main/java/com/glodblock/github/network/CPacketTransferRecipe.java +++ b/src/main/java/com/glodblock/github/network/CPacketTransferRecipe.java @@ -12,11 +12,14 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fluids.FluidStack; import appeng.api.AEApi; +import appeng.api.config.Actionable; import appeng.api.config.FuzzyMode; import appeng.api.storage.ITerminalHost; import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IItemList; +import com.glodblock.github.client.gui.container.ContainerCraftingWireless; +import com.glodblock.github.client.gui.container.ContainerItemMonitor; import com.glodblock.github.client.gui.container.base.FCContainerEncodeTerminal; import com.glodblock.github.common.item.ItemFluidPacket; import com.glodblock.github.nei.NEIUtils; @@ -95,9 +98,8 @@ public class CPacketTransferRecipe implements IMessage { @SuppressWarnings("unchecked") public IMessage onMessage(CPacketTransferRecipe message, MessageContext ctx) { Container c = ctx.getServerHandler().playerEntity.openContainer; - if (c instanceof FCContainerEncodeTerminal) { - FCContainerEncodeTerminal cf = (FCContainerEncodeTerminal) c; - ITerminalHost host = cf.getHost(); + if (c instanceof ContainerItemMonitor) { + ITerminalHost host = ((ContainerItemMonitor) c).getHost(); IItemList storageList; if (host != null) { storageList = host.getItemInventory().getStorageList(); @@ -105,46 +107,85 @@ public class CPacketTransferRecipe implements IMessage { storageList = AEApi.instance().storage().createItemList(); } - boolean combine = cf.combine; - cf.getPatternTerminal().setCraftingRecipe(message.isCraft); - IInventory inputSlot = cf.getInventoryByName("crafting"); - IInventory outputSlot = cf.getInventoryByName("output"); - for (int i = 0; i < inputSlot.getSizeInventory(); i++) { - inputSlot.setInventorySlotContents(i, null); - } - for (int i = 0; i < outputSlot.getSizeInventory(); i++) { - outputSlot.setInventorySlotContents(i, null); - } + if (c instanceof ContainerCraftingWireless && host != null) { + // crafting terminal only + ContainerCraftingWireless cf = (ContainerCraftingWireless) c; - if (!message.isCraft) { - if (combine) { - message.inputs = NEIUtils.compress(message.inputs); - message.outputs = NEIUtils.compress(message.outputs); + IInventory inputSlot = cf.getInventoryByName("crafting"); + + if (!storageList.isEmpty()) { + int i = 0; + for (OrderStack stack : message.inputs) { + if (inputSlot.getStackInSlot(i) == null) { + ItemStack is = (ItemStack) stack.getStack(); + IAEItemStack iaeItemStack = AEApi.instance().storage().createItemStack(is); + IAEItemStack storedItem = storageList.findPrecise(iaeItemStack); + if (storedItem == null) { + for (IAEItemStack tmp : storageList.findFuzzy(iaeItemStack, FuzzyMode.IGNORE_ALL)) { + tmp.setStackSize(is.stackSize); + ItemStack substitute = tmp.getItemStack().copy(); + inputSlot.setInventorySlotContents(i, substitute); + host.getItemInventory() + .extractItems(tmp, Actionable.MODULATE, cf.getActionSource()); + break; + } + } else { + host.getItemInventory() + .extractItems(iaeItemStack, Actionable.MODULATE, cf.getActionSource()); + inputSlot.setInventorySlotContents(i, is); + } + } + i++; + } } - message.inputs = NEIUtils.clearNull(message.inputs); - message.outputs = NEIUtils.clearNull(message.outputs); - } - // using exists item to fill slot - if (message.shift && !storageList.isEmpty()) { - for (OrderStack stack : message.inputs) { - if (stack.getStack() instanceof FluidStack) continue; - ItemStack is = (ItemStack) stack.getStack(); - IAEItemStack iaeItemStack = AEApi.instance().storage().createItemStack(is); - if (storageList.findPrecise(iaeItemStack) == null) { - for (IAEItemStack tmp : storageList.findFuzzy(iaeItemStack, FuzzyMode.IGNORE_ALL)) { - ItemStack substitute = tmp.getItemStack().copy(); - substitute.stackSize = is.stackSize; - stack.putStack(substitute); - break; + c.onCraftMatrixChanged(inputSlot); + + } else if (c instanceof FCContainerEncodeTerminal) { + // pattern terminal only + FCContainerEncodeTerminal cf = (FCContainerEncodeTerminal) c; + + boolean combine = cf.combine; + cf.getPatternTerminal().setCraftingRecipe(message.isCraft); + IInventory inputSlot = cf.getInventoryByName("crafting"); + IInventory outputSlot = cf.getInventoryByName("output"); + for (int i = 0; i < inputSlot.getSizeInventory(); i++) { + inputSlot.setInventorySlotContents(i, null); + } + for (int i = 0; i < outputSlot.getSizeInventory(); i++) { + outputSlot.setInventorySlotContents(i, null); + } + + if (!message.isCraft) { + if (combine) { + message.inputs = NEIUtils.compress(message.inputs); + message.outputs = NEIUtils.compress(message.outputs); + } + message.inputs = NEIUtils.clearNull(message.inputs); + message.outputs = NEIUtils.clearNull(message.outputs); + } + // using exists item to fill slot + if (message.shift && !storageList.isEmpty()) { + for (OrderStack stack : message.inputs) { + if (stack.getStack() instanceof FluidStack) continue; + ItemStack is = (ItemStack) stack.getStack(); + IAEItemStack iaeItemStack = AEApi.instance().storage().createItemStack(is); + if (storageList.findPrecise(iaeItemStack) == null) { + for (IAEItemStack tmp : storageList.findFuzzy(iaeItemStack, FuzzyMode.IGNORE_ALL)) { + ItemStack substitute = tmp.getItemStack().copy(); + substitute.stackSize = is.stackSize; + stack.putStack(substitute); + break; + } } } } + transferPack(message.inputs, inputSlot); + transferPack(message.outputs, outputSlot); + c.onCraftMatrixChanged(inputSlot); + c.onCraftMatrixChanged(outputSlot); } - transferPack(message.inputs, inputSlot); - transferPack(message.outputs, outputSlot); - c.onCraftMatrixChanged(inputSlot); - c.onCraftMatrixChanged(outputSlot); } + return null; }