From a8958092746d549ed0f65a32e758f98994fad024 Mon Sep 17 00:00:00 2001 From: WayofTime Date: Thu, 14 Jan 2016 11:06:50 -0500 Subject: [PATCH] Added packet handlers, guis, etc required to handle the routing nodes. Added the ability to have a different filter for each direction. --- .../WayofTime/bloodmagic/api/Constants.java | 2 + .../block/BlockInputRoutingNode.java | 36 +-- .../block/BlockOutputRoutingNode.java | 32 +-- .../bloodmagic/client/gui/GuiHandler.java | 6 +- .../client/gui/GuiItemRoutingNode.java | 42 +++ .../item/inventory/ItemInventory.java | 258 ++++++++++++++++++ .../network/BloodMagicPacketHandler.java | 1 + .../ItemRouterButtonPacketProcessor.java | 73 +++++ .../container/ContainerItemRoutingNode.java | 71 ++++- .../tile/routing/TileFilteredRoutingNode.java | 57 ++++ .../tile/routing/TileInputRoutingNode.java | 4 +- .../tile/routing/TileOutputRoutingNode.java | 4 +- .../bloodmagic/textures/gui/routingNode.png | Bin 1740 -> 1837 bytes 13 files changed, 508 insertions(+), 78 deletions(-) create mode 100644 src/main/java/WayofTime/bloodmagic/item/inventory/ItemInventory.java create mode 100644 src/main/java/WayofTime/bloodmagic/network/ItemRouterButtonPacketProcessor.java create mode 100644 src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java diff --git a/src/main/java/WayofTime/bloodmagic/api/Constants.java b/src/main/java/WayofTime/bloodmagic/api/Constants.java index c9bc3a16..4891b583 100644 --- a/src/main/java/WayofTime/bloodmagic/api/Constants.java +++ b/src/main/java/WayofTime/bloodmagic/api/Constants.java @@ -93,6 +93,8 @@ public class Constants public static final String ROUTING_MASTER_OUTPUT = "outputList"; public static final String GHOST_STACK_SIZE = "stackSize"; + + public static final String ITEM_INVENTORY = "itemInventory"; } public static class Mod diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockInputRoutingNode.java b/src/main/java/WayofTime/bloodmagic/block/BlockInputRoutingNode.java index df4c78d1..27aedde0 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockInputRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockInputRoutingNode.java @@ -1,7 +1,5 @@ package WayofTime.bloodmagic.block; -import java.util.LinkedList; - import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -12,10 +10,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.world.World; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.routing.IMasterRoutingNode; -import WayofTime.bloodmagic.routing.IRoutingNode; import WayofTime.bloodmagic.tile.routing.TileInputRoutingNode; -import WayofTime.bloodmagic.util.ChatUtil; public class BlockInputRoutingNode extends BlockContainer { @@ -43,12 +38,14 @@ public class BlockInputRoutingNode extends BlockContainer } @Override + //TODO: Combine BlockOutputRoutingNode and BlockInputRoutingNode so they have the same superclass public void breakBlock(World world, BlockPos pos, IBlockState state) { TileEntity tile = world.getTileEntity(pos); - if (tile instanceof IRoutingNode) + if (tile instanceof TileInputRoutingNode) { - ((IRoutingNode) tile).removeAllConnections(); + ((TileInputRoutingNode) tile).removeAllConnections(); + ((TileInputRoutingNode) tile).dropItems(); } super.breakBlock(world, pos, state); } @@ -56,30 +53,11 @@ public class BlockInputRoutingNode extends BlockContainer @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) { - if (world.isRemote) + if (world.getTileEntity(pos) instanceof TileInputRoutingNode) { - return false; + player.openGui(BloodMagic.instance, Constants.Gui.ROUTING_NODE_GUI, world, pos.getX(), pos.getY(), pos.getZ()); } - TileEntity tile = world.getTileEntity(pos); - IRoutingNode node = (IRoutingNode) tile; - ChatUtil.sendChat(player, "Master: " + node.getMasterPos().toString()); - for (BlockPos connPos : node.getConnected()) - { - ChatUtil.sendChat(player, "Connected to: " + connPos.toString()); - } - - BlockPos masterPos = node.getMasterPos(); - TileEntity testTile = world.getTileEntity(masterPos); - if (testTile instanceof IMasterRoutingNode) - { - IMasterRoutingNode master = (IMasterRoutingNode) testTile; - if (master.isConnected(new LinkedList(), pos)) - { - ChatUtil.sendChat(player, "Can find the path to the master"); - } - } - - return false; + return true; } } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockOutputRoutingNode.java b/src/main/java/WayofTime/bloodmagic/block/BlockOutputRoutingNode.java index d9f366e7..20be6c19 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockOutputRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockOutputRoutingNode.java @@ -10,7 +10,6 @@ import net.minecraft.util.EnumFacing; import net.minecraft.world.World; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.routing.IRoutingNode; import WayofTime.bloodmagic.tile.routing.TileOutputRoutingNode; public class BlockOutputRoutingNode extends BlockContainer @@ -43,9 +42,10 @@ public class BlockOutputRoutingNode extends BlockContainer public void breakBlock(World world, BlockPos pos, IBlockState state) { TileEntity tile = world.getTileEntity(pos); - if (tile instanceof IRoutingNode) + if (tile instanceof TileOutputRoutingNode) { - ((IRoutingNode) tile).removeAllConnections(); + ((TileOutputRoutingNode) tile).removeAllConnections(); + ((TileOutputRoutingNode) tile).dropItems(); } super.breakBlock(world, pos, state); } @@ -59,31 +59,5 @@ public class BlockOutputRoutingNode extends BlockContainer } return true; - -// if (world.isRemote) -// { -// return false; -// } -// -// TileEntity tile = world.getTileEntity(pos); -// IRoutingNode node = (IRoutingNode) tile; -// ChatUtil.sendChat(player, "Master: " + node.getMasterPos().toString()); -// for (BlockPos connPos : node.getConnected()) -// { -// ChatUtil.sendChat(player, "Connected to: " + connPos.toString()); -// } -// -// BlockPos masterPos = node.getMasterPos(); -// TileEntity testTile = world.getTileEntity(masterPos); -// if (testTile instanceof IMasterRoutingNode) -// { -// IMasterRoutingNode master = (IMasterRoutingNode) testTile; -// if (master.isConnected(new LinkedList(), pos)) -// { -// ChatUtil.sendChat(player, "Can find the path to the master"); -// } -// } -// -// return false; } } diff --git a/src/main/java/WayofTime/bloodmagic/client/gui/GuiHandler.java b/src/main/java/WayofTime/bloodmagic/client/gui/GuiHandler.java index 9b6092c6..4e94fb9d 100644 --- a/src/main/java/WayofTime/bloodmagic/client/gui/GuiHandler.java +++ b/src/main/java/WayofTime/bloodmagic/client/gui/GuiHandler.java @@ -11,7 +11,7 @@ import WayofTime.bloodmagic.tile.TileTeleposer; import WayofTime.bloodmagic.tile.container.ContainerItemRoutingNode; import WayofTime.bloodmagic.tile.container.ContainerSoulForge; import WayofTime.bloodmagic.tile.container.ContainerTeleposer; -import WayofTime.bloodmagic.tile.routing.TileOutputRoutingNode; +import WayofTime.bloodmagic.tile.routing.TileFilteredRoutingNode; public class GuiHandler implements IGuiHandler { @@ -27,7 +27,7 @@ public class GuiHandler implements IGuiHandler case Constants.Gui.SOUL_FORGE_GUI: return new ContainerSoulForge(player.inventory, (TileSoulForge) world.getTileEntity(pos)); case Constants.Gui.ROUTING_NODE_GUI: - return new ContainerItemRoutingNode(player.inventory, (TileOutputRoutingNode) world.getTileEntity(pos)); + return new ContainerItemRoutingNode(player.inventory, (TileFilteredRoutingNode) world.getTileEntity(pos)); } return null; @@ -47,7 +47,7 @@ public class GuiHandler implements IGuiHandler case Constants.Gui.SOUL_FORGE_GUI: return new GuiSoulForge(player.inventory, (TileSoulForge) world.getTileEntity(pos)); case Constants.Gui.ROUTING_NODE_GUI: - return new GuiItemRoutingNode(player.inventory, (TileOutputRoutingNode) world.getTileEntity(pos)); + return new GuiItemRoutingNode(player.inventory, (TileFilteredRoutingNode) world.getTileEntity(pos)); } } diff --git a/src/main/java/WayofTime/bloodmagic/client/gui/GuiItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/client/gui/GuiItemRoutingNode.java index fa0e4a94..6f915f94 100644 --- a/src/main/java/WayofTime/bloodmagic/client/gui/GuiItemRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/client/gui/GuiItemRoutingNode.java @@ -1,23 +1,65 @@ package WayofTime.bloodmagic.client.gui; +import java.io.IOException; + +import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.IInventory; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.network.BloodMagicPacketHandler; +import WayofTime.bloodmagic.network.ItemRouterButtonPacketProcessor; import WayofTime.bloodmagic.tile.container.ContainerItemRoutingNode; @SideOnly(Side.CLIENT) public class GuiItemRoutingNode extends GuiContainer { + private GuiButton downButton; + private GuiButton upButton; + private GuiButton northButton; + private GuiButton southButton; + private GuiButton westButton; + private GuiButton eastButton; + + private TileEntity inventory; + public GuiItemRoutingNode(InventoryPlayer playerInventory, IInventory tileRoutingNode) { super(new ContainerItemRoutingNode(playerInventory, tileRoutingNode)); this.xSize = 176; this.ySize = 169; + inventory = (TileEntity) tileRoutingNode; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + this.buttonList.add(this.downButton = new GuiButton(0, (this.width - this.xSize) / 2 + 133, (this.height - this.ySize) / 2 + 50, 18, 18, "D")); + this.buttonList.add(this.upButton = new GuiButton(1, (this.width - this.xSize) / 2 + 133, (this.height - this.ySize) / 2 + 14, 18, 18, "U")); + this.buttonList.add(this.northButton = new GuiButton(2, (this.width - this.xSize) / 2 + 151, (this.height - this.ySize) / 2 + 14, 18, 18, "N")); + this.buttonList.add(this.southButton = new GuiButton(3, (this.width - this.xSize) / 2 + 151, (this.height - this.ySize) / 2 + 50, 18, 18, "S")); + this.buttonList.add(this.westButton = new GuiButton(4, (this.width - this.xSize) / 2 + 133, (this.height - this.ySize) / 2 + 32, 18, 18, "W")); + this.buttonList.add(this.eastButton = new GuiButton(5, (this.width - this.xSize) / 2 + 151, (this.height - this.ySize) / 2 + 32, 18, 18, "E")); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed + * for buttons) + */ + @Override + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + BloodMagicPacketHandler.INSTANCE.sendToServer(new ItemRouterButtonPacketProcessor(button.id, inventory.getPos(), inventory.getWorld())); + } } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/inventory/ItemInventory.java b/src/main/java/WayofTime/bloodmagic/item/inventory/ItemInventory.java new file mode 100644 index 00000000..e682ba99 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/inventory/ItemInventory.java @@ -0,0 +1,258 @@ +package WayofTime.bloodmagic.item.inventory; + +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.util.helper.NBTHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.IChatComponent; + +public class ItemInventory implements IInventory +{ + protected int[] syncedSlots = new int[0]; + private ItemStack[] inventory; + private int size; + private String name; + protected ItemStack masterStack; + + public ItemInventory(ItemStack masterStack, int size, String name) + { + this.inventory = new ItemStack[size]; + this.size = size; + this.name = name; + this.masterStack = masterStack; + + if (masterStack != null) + this.readFromStack(masterStack); + } + + public void initializeInventory(ItemStack masterStack) + { + this.masterStack = masterStack; + this.clear(); + this.readFromStack(masterStack); + } + + private boolean isSyncedSlot(int slot) + { + for (int s : this.syncedSlots) + { + if (s == slot) + { + return true; + } + } + return false; + } + + public void readFromNBT(NBTTagCompound tagCompound) + { + NBTTagList tags = tagCompound.getTagList("Items", 10); + inventory = new ItemStack[getSizeInventory()]; + + for (int i = 0; i < tags.tagCount(); i++) + { + if (!isSyncedSlot(i)) + { + NBTTagCompound data = tags.getCompoundTagAt(i); + byte j = data.getByte("Slot"); + + if (j >= 0 && j < inventory.length) + { + inventory[j] = ItemStack.loadItemStackFromNBT(data); + } + } + } + } + + public void writeToNBT(NBTTagCompound tagCompound) + { + NBTTagList tags = new NBTTagList(); + + for (int i = 0; i < inventory.length; i++) + { + if ((inventory[i] != null) && !isSyncedSlot(i)) + { + NBTTagCompound data = new NBTTagCompound(); + data.setByte("Slot", (byte) i); + inventory[i].writeToNBT(data); + tags.appendTag(data); + } + } + + tagCompound.setTag("Items", tags); + } + + public void readFromStack(ItemStack masterStack) + { + if (masterStack != null) + { + NBTHelper.checkNBT(masterStack); + NBTTagCompound tag = masterStack.getTagCompound(); + readFromNBT(tag.getCompoundTag(Constants.NBT.ITEM_INVENTORY)); + } + } + + public void writeToStack(ItemStack masterStack) + { + if (masterStack != null) + { + NBTHelper.checkNBT(masterStack); + NBTTagCompound tag = masterStack.getTagCompound(); + NBTTagCompound invTag = new NBTTagCompound(); + writeToNBT(invTag); + tag.setTag(Constants.NBT.ITEM_INVENTORY, invTag); + } + } + + @Override + public int getSizeInventory() + { + return size; + } + + @Override + public ItemStack getStackInSlot(int index) + { + return inventory[index]; + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + if (inventory[index] != null) + { +// if (!worldObj.isRemote) +// worldObj.markBlockForUpdate(this.pos); + + if (inventory[index].stackSize <= count) + { + ItemStack itemStack = inventory[index]; + inventory[index] = null; + markDirty(); + return itemStack; + } + + ItemStack itemStack = inventory[index].splitStack(count); + if (inventory[index].stackSize == 0) + inventory[index] = null; + + markDirty(); + return itemStack; + } + + return null; + } + + @Override + public ItemStack removeStackFromSlot(int slot) + { + if (inventory[slot] != null) + { + ItemStack itemStack = inventory[slot]; + setInventorySlotContents(slot, null); + return itemStack; + } + return null; + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack) + { + inventory[slot] = stack; + if (stack != null && stack.stackSize > getInventoryStackLimit()) + stack.stackSize = getInventoryStackLimit(); + markDirty(); +// if (!worldObj.isRemote) +// worldObj.markBlockForUpdate(this.pos); + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) + { + return true; + } + + @Override + public void openInventory(EntityPlayer player) + { + + } + + @Override + public void closeInventory(EntityPlayer player) + { + + } + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack) + { + return true; + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + this.inventory = new ItemStack[size]; + } + + @Override + public String getName() + { + return name; + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public IChatComponent getDisplayName() + { + return new ChatComponentText(getName()); + } + + @Override + public void markDirty() + { + if (masterStack != null) + { + this.writeToStack(masterStack); + } + } + + public boolean canInventoryBeManipulated() + { + return masterStack != null; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/network/BloodMagicPacketHandler.java b/src/main/java/WayofTime/bloodmagic/network/BloodMagicPacketHandler.java index 3108aacf..5080df45 100644 --- a/src/main/java/WayofTime/bloodmagic/network/BloodMagicPacketHandler.java +++ b/src/main/java/WayofTime/bloodmagic/network/BloodMagicPacketHandler.java @@ -16,6 +16,7 @@ public class BloodMagicPacketHandler public static void init() { INSTANCE.registerMessage(ChatUtil.PacketNoSpamChat.Handler.class, ChatUtil.PacketNoSpamChat.class, 0, Side.CLIENT); + INSTANCE.registerMessage(ItemRouterButtonPacketProcessor.class, ItemRouterButtonPacketProcessor.class, 1, Side.SERVER); } public static void sendToAllAround(IMessage message, TileEntity te, int range) diff --git a/src/main/java/WayofTime/bloodmagic/network/ItemRouterButtonPacketProcessor.java b/src/main/java/WayofTime/bloodmagic/network/ItemRouterButtonPacketProcessor.java new file mode 100644 index 00000000..6baec865 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/network/ItemRouterButtonPacketProcessor.java @@ -0,0 +1,73 @@ +package WayofTime.bloodmagic.network; + +import io.netty.buffer.ByteBuf; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; +import net.minecraftforge.fml.relauncher.Side; +import WayofTime.bloodmagic.tile.routing.TileFilteredRoutingNode; + +public class ItemRouterButtonPacketProcessor implements IMessage, IMessageHandler +{ + private int buttonPress; + private int dimension; + private BlockPos pos; + + public ItemRouterButtonPacketProcessor() + { + + } + + public ItemRouterButtonPacketProcessor(int buttonPress, BlockPos pos, World world) + { + this.buttonPress = buttonPress; + this.pos = pos; + this.dimension = world.provider.getDimensionId(); + } + + @Override + public void fromBytes(ByteBuf buffer) + { + PacketBuffer buff = new PacketBuffer(buffer); + dimension = buff.readInt(); + pos = buff.readBlockPos(); + buttonPress = buff.readInt(); + } + + @Override + public void toBytes(ByteBuf buffer) + { + PacketBuffer buff = new PacketBuffer(buffer); + buff.writeInt(dimension); + buff.writeBlockPos(pos); + buff.writeInt(buttonPress); + } + + @Override + public IMessage onMessage(ItemRouterButtonPacketProcessor message, MessageContext ctx) + { + if (ctx.side == Side.SERVER) + { + message.onMessageFromClient(); + } + return null; + } + + public void onMessageFromClient() + { + World world = DimensionManager.getWorld(dimension); + if (world != null) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileFilteredRoutingNode) + { + ((TileFilteredRoutingNode) tile).swapFilters(buttonPress); + } + } + } +} diff --git a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerItemRoutingNode.java index f3b8ea83..b70890b4 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerItemRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerItemRoutingNode.java @@ -1,28 +1,37 @@ package WayofTime.bloodmagic.tile.container; -import WayofTime.bloodmagic.util.GhostItemHelper; -import WayofTime.bloodmagic.util.Utils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import WayofTime.bloodmagic.item.inventory.ItemInventory; +import WayofTime.bloodmagic.util.GhostItemHelper; +import WayofTime.bloodmagic.util.Utils; public class ContainerItemRoutingNode extends Container { private final IInventory tileItemRoutingNode; + private final ItemInventory itemInventory; private int slotsOccupied; public ContainerItemRoutingNode(InventoryPlayer inventoryPlayer, IInventory tileItemRoutingNode) { this.tileItemRoutingNode = tileItemRoutingNode; -// this.addSlotToContainer(new Slot(tileItemRoutingNode, 0, 8, 15)); -// this.addSlotToContainer(new Slot(tileItemRoutingNode, 1, 80, 15)); -// this.addSlotToContainer(new Slot(tileItemRoutingNode, 2, 80, 87)); -// this.addSlotToContainer(new Slot(tileItemRoutingNode, 3, 8, 87)); - this.addSlotToContainer(new SlotGhostItem(tileItemRoutingNode, 0, 8, 33)); - slotsOccupied = 1; + + this.addSlotToContainer(new SlotItemFilter(this, tileItemRoutingNode, 0, 8, 33)); + ItemStack masterStack = tileItemRoutingNode.getStackInSlot(0); + itemInventory = new ItemInventory(masterStack, 9, ""); + + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 3; j++) + { + addSlotToContainer(new SlotGhostItem(itemInventory, j + i * 3, 26 + j * 18, 15 + i * 18)); + } + } + slotsOccupied = 10; // this.addSlotToContainer(new SlotOutput(tileItemRoutingNode, TileSoulForge.outputSlot, 44, 51)); for (int i = 0; i < 3; i++) @@ -39,6 +48,11 @@ public class ContainerItemRoutingNode extends Container } } + public void resetItemInventory(ItemStack masterStack) + { + itemInventory.initializeInventory(masterStack); + } + /** * Overridden in order to handle ghost item slots. */ @@ -46,7 +60,7 @@ public class ContainerItemRoutingNode extends Container public ItemStack slotClick(int slotId, int clickedButton, int mode, EntityPlayer player) { InventoryPlayer inventoryPlayer = player.inventory; - if (!player.worldObj.isRemote) +// if (!player.worldObj.isRemote) { if (slotId >= 0) { @@ -56,8 +70,6 @@ public class ContainerItemRoutingNode extends Container { if ((mode == 0 || mode == 1) && (clickedButton == 0 || clickedButton == 1)) { - System.out.println("Clicked button: " + clickedButton + ", mode: " + mode); - ItemStack slotStack = slot.getStack(); ItemStack heldStack = inventoryPlayer.getItemStack(); @@ -71,6 +83,10 @@ public class ContainerItemRoutingNode extends Container slot.putStack(slotStack); } else if (heldStack != null) { + if (!((SlotGhostItem) slot).canBeAccessed()) + { + return super.slotClick(slotId, clickedButton, mode, player); + } if (slotStack != null && Utils.canCombine(slotStack, heldStack)) { GhostItemHelper.incrementGhostAmout(slotStack, heldStack.stackSize); @@ -192,9 +208,12 @@ public class ContainerItemRoutingNode extends Container private class SlotItemFilter extends Slot { - public SlotItemFilter(IInventory inventory, int slotIndex, int x, int y) + public ContainerItemRoutingNode container; + + public SlotItemFilter(ContainerItemRoutingNode container, IInventory inventory, int slotIndex, int x, int y) { super(inventory, slotIndex, x, y); + this.container = container; } @Override @@ -202,13 +221,28 @@ public class ContainerItemRoutingNode extends Container { return true; //TODO: Create a new Item that holds the filter. } + + @Override + public void onSlotChanged() + { + super.onSlotChanged(); + container.resetItemInventory(getStack()); + for (int i = 1; i <= 9; i++) + { + Slot slot = container.getSlot(i); + slot.onSlotChanged(); + } + } } private class SlotGhostItem extends Slot { - public SlotGhostItem(IInventory inventory, int slotIndex, int x, int y) + private ItemInventory itemInv; + + public SlotGhostItem(ItemInventory inventory, int slotIndex, int x, int y) { super(inventory, slotIndex, x, y); + itemInv = inventory; } @Override @@ -222,5 +256,16 @@ public class ContainerItemRoutingNode extends Container { return false; } + +// @Override +// public boolean isHere(IInventory inv, int slotIn) +// { +// return itemInv.canInventoryBeManipulated() && super.isHere(inv, slotIn); +// } + + public boolean canBeAccessed() + { + return itemInv.canInventoryBeManipulated(); + } } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java new file mode 100644 index 00000000..7d1b67ab --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java @@ -0,0 +1,57 @@ +package WayofTime.bloodmagic.tile.routing; + +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; + +public class TileFilteredRoutingNode extends TileRoutingNode implements ISidedInventory +{ + public int currentActiveSlot = 0; + + public TileFilteredRoutingNode(int size, String name) + { + super(size, name); + } + + @Override + public void readFromNBT(NBTTagCompound tag) + { + super.readFromNBT(tag); + currentActiveSlot = tag.getInteger("currentSlot"); + } + + @Override + public void writeToNBT(NBTTagCompound tag) + { + super.writeToNBT(tag); + tag.setInteger("currentSlot", currentActiveSlot); + } + + public void swapFilters(int requestedSlot) + { + this.setInventorySlotContents(currentActiveSlot + 1, this.getStackInSlot(0)); + this.setInventorySlotContents(0, this.getStackInSlot(requestedSlot + 1)); + this.setInventorySlotContents(requestedSlot + 1, null); + currentActiveSlot = requestedSlot; + this.markDirty(); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + public boolean canInsertItem(int index, ItemStack itemStackIn, EnumFacing direction) + { + return false; + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) + { + return false; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java index f606db62..6a430b65 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java @@ -1,9 +1,9 @@ package WayofTime.bloodmagic.tile.routing; -public class TileInputRoutingNode extends TileRoutingNode +public class TileInputRoutingNode extends TileFilteredRoutingNode { public TileInputRoutingNode() { - super(1, "inputNode"); + super(7, "inputNode"); } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java index f825520b..5f3ab947 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java @@ -1,9 +1,9 @@ package WayofTime.bloodmagic.tile.routing; -public class TileOutputRoutingNode extends TileRoutingNode +public class TileOutputRoutingNode extends TileFilteredRoutingNode { public TileOutputRoutingNode() { - super(1, "outputNode"); + super(7, "outputNode"); } } diff --git a/src/main/resources/assets/bloodmagic/textures/gui/routingNode.png b/src/main/resources/assets/bloodmagic/textures/gui/routingNode.png index 70a5b278f0fbd6fdeef975b733a9578c6a90ec9e..2d87307b8e0d429e34bd4cdc00ec72cca1bb2cfe 100644 GIT binary patch literal 1837 zcmah~4LFl)7=FK5d{d1bBnO$1{}Xa5O+}eYL+NitKhjZKDy+1Yer!uI6pDmeoJ1MT z`lBe8^+WkfPLrQmB`T?t#m;Kxe50$Yu5)#r@8^2I_j#Z9exCbz?(6*$mo4?3toy4j z0AMnCF=+(=5b_BDSQ{DE@484u2JJumeMw+cbLZW@kd9a|^u@u^0AOo0FJxrr$3~1g zyU9y@bYu_~Yc}C@$@UmzV+EPCaMj-Sfv$xqrap$+GD+t2rC`4x?U=_fu5H-te8KPu zxB3)EA-(j5csJF$QKW4hB+{OO=B{$ens$PGKe00+kSS4+Gr6cJn^!R`{=?yX?q~r! z#_lt#ZO81mWD3RT%ZR$JJJ8-II1`84$z+z-9tp62!=es)uQSy1tUTRdBR$YDnXec* zRb17Z4(ThZH%87**5#b+rA1Z<_LrIW4|H|eRi@Yv04avOrZhx}32PCQmRb>B(B1D+ zuiDSJsrCA|Ew;jaUyO4s2HP&7iE?xgn!&!W!B$0S~ZU&l@s*L;QB5*%RilT*bY{;P2H2o*(EyL?t1Bg9L-(HcZXMov3hYnfA+SQcSR zq18q4${HU<6i>EjUC={Pg>4Hupr@FOrvG^!Q zZ=Z7Tm6((lHX1^@yQi|@3!JA6KF8-H&+-|IjZHyLuGyhbvZb&^l@oADw)xf_#Jt&VQC>U)VyysMZf#|Ay++VI$^ zg7BPRsTKke&W}|TiunfF&8NY9Gl??8CZr~S zn-4X2Z^LH4YYB`uA(~T@828(aj?LoGNQg+O$ASt4Naa{ z)sxt>Tjah|b#sJy{=9Ve>wWzniHavoy#((avroTxUmT@<@YtuJWV@sqtjv2)W!KhdC?V)GDX-{q z<9i^T2;s#*AC(pZV5oK;I1DyV1B*cB%bpkzcAE&|MyQw>6H$k2 z-&r>5%vNCNuAV`M$OGUV8ZS2&by(`-Y)}ncM&kotThyJ_TXS%)lQ{;Qsz*#h+Mjtc zEYJsR00xC+=z8ggOwrf*H~zA-3dn`k3$;N=9mZT!i2E=>k|CM%G79BdL~#nyR^l2o zoQ=w3q2jmZ*tC~Xe0k~pQz?BgnD+n+3QPF>8xbKvum{+6t@}g1UD6#r=@v; zSYx%$ip$T{F5x@m6q=}fT9+q;I}iv383cmV^j0V#jkxlnd@rGSXox`~nPC&uw5;fN z;InNgY!KCIvi1Q9&(yH_5%K#VDA6y-`pnG;QhKRanFXJ3?CH;fKLvQO)tIR@cTE}b zPhD}f=0CLmdjL)1Y#>DA0ee#R*lzj)O<@hQ;U0LLmhIeqn5_=Nu~Z#gjCIG5Th}4T zJLe*5`#E)eB&rhx1H5-3s@P3QJd;`^s!u5rrHpfW7BOn_fJjI>XSYJam}0!E6FQ%f zG_Ys;tgOk#Y%4$edn1leoj44eT3qaS%%cS-TPR_Cu->*ol3&koezd}zu~Z=c=T*4x zU&m9wE0WWxKrOx|SRfAf{0Y0hEkM<*s(zxHx`Nc`p!z(g$Ag0TWi!1{v-aD>>QbD>>$n=EnlAbg11@ zkbW*Ve9Yk8J7UHJ_62Q`<*VbK(INM987*Q*$VF$(nl)24l~{R|_E#`tuL}B?_g0+R zQlt@IjB4;&{@YsL|0>Gq5C{J@pbFa;hKH|);kj00UG>`2!MeW*54S;wIr#ddiHPd{ c?~+YYPe3iBAKib&#Z==<_E}02EDAmJFEPW=2LJ#7 literal 1740 zcmb_cdpML?96sL|gOO%D54tchiY2Y|P%1(&bzze;c$o5B~yT{+zb9EiGP~wgP$6WB24_^25*yi#w8%LLM zqo8b@2jjh8_>ZErh7Fx;q&%UE_Z=)9B}`-_6Nk+p2*{dZCzj1@kfA;?o)b|- zAWS3)b=U)oGr#9?wD)84qJUEHHge<1Xu z(J1;%-hzj%Qt;1#Vd+`!k-pY^!nId{S2B-ogObZfK zQFT8^UE{rh=O2>#5i~F#%BVL#qfc};9avhLDrHcSpy7B1CnIKdr0qB*|M0T8VL+W< z4?_6vMwVfr)pLjs*ojFDD&7Dv9<98@SnNQnwO!m;dzi^qz$1~K4 zQ%mvFAM&4Gs!~D#omgY}G9*aLKiOm048a`>smtQG#it>LU1|n@bpB&4vM^!W!dB>l zJHbX+*q&2j#GSUuj9$AJPelo{dB;+s&gBH~?hxA2c8ZS2*)efJFP1FnfH@|yY^3gF zF2oCVicTdgg^OKfQp2wjl1W6*F-d**29Pz@Tai{X%h3YZya`D~Z)lK|3DZhc16aTY zK&KIJFeGcldO`rPf*^r`d{d9{9$**(UTjf2KTy!$+!inJKO|w&G%qqmn&CAW1a6mC zursTulOM?K7#-fNe}8f!s@AiN-uBp|e@zT`VfIDwt>gz1B>rW3#(80Z&Wn{SAuJM571~y`m06yl1!1p zEip3>bQl;W*b%D2G)8(#Plm(Q5($VWXtr zD*r2e7UC0q1%w4D@OU{CgH#*{P`sXH%LRzf~W>~jJkK$M& z!Su}d3GcRxRiE92>Abw^s&q?EgQ~6hzLlLNX}SsBQC{(S`GW+{XthepGbq&Z?cf)P zx>&oerRU7+L2|Y3p49yW{x7`9G+N7C-J`Qc0uUj(<99n9)ffhL|C&2JXbZU|_Vjos zS+whj^Cx9<4?C@1nZ)&u-ltP|6{CCN&UDjRk`<9w85U?y!m^D0&%J2DCJzLw2B<4W t%d3a%247>5rC>h^dwu|x{y(p3b^>H5RS7SQt>MWhJ2_Cvg8hude*j`lnI-@L