From 339e236081a1b85c2303eaa272c8210241ffe1bb Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 15 Jun 2016 15:42:55 +0200 Subject: [PATCH] Fixes #69 "Unable to triple click items into a grid" --- CHANGELOG.md | 3 + .../container/ContainerGrid.java | 41 ++++++------- src/main/java/refinedstorage/gui/GuiGrid.java | 32 +++------- .../java/refinedstorage/gui/GuiHandler.java | 2 +- .../network/MessageCraftingMonitorCancel.java | 2 +- .../network/MessageGridCraftingPush.java | 60 ------------------- .../network/MessageGridCraftingStart.java | 2 +- ...Push.java => MessageGridHeldItemPush.java} | 14 ++--- .../network/MessageGridStoragePull.java | 2 +- .../MessageWirelessGridCraftingStart.java | 2 +- ...a => MessageWirelessGridHeldItemPush.java} | 14 ++--- .../MessageWirelessGridStoragePull.java | 2 +- .../refinedstorage/proxy/CommonProxy.java | 5 +- .../tile/controller/StorageHandler.java | 53 +++++++--------- .../java/refinedstorage/tile/grid/IGrid.java | 6 +- .../refinedstorage/tile/grid/TileGrid.java | 11 +++- .../tile/grid/WirelessGrid.java | 28 +++++++-- 17 files changed, 106 insertions(+), 173 deletions(-) delete mode 100755 src/main/java/refinedstorage/network/MessageGridCraftingPush.java rename src/main/java/refinedstorage/network/{MessageGridStoragePush.java => MessageGridHeldItemPush.java} (68%) rename src/main/java/refinedstorage/network/{MessageWirelessGridStoragePush.java => MessageWirelessGridHeldItemPush.java} (66%) diff --git a/CHANGELOG.md b/CHANGELOG.md index e958e1779..82b1f8d16 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Refined Storage Changelog +### 0.7.13 +- Fixed not being able to triple click in grid + ### 0.7.12 **Bugfixes** - Fixed creative storage blocks and disks not working diff --git a/src/main/java/refinedstorage/container/ContainerGrid.java b/src/main/java/refinedstorage/container/ContainerGrid.java index 678716eb1..3f7278cef 100755 --- a/src/main/java/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/refinedstorage/container/ContainerGrid.java @@ -14,17 +14,12 @@ import refinedstorage.tile.grid.IGrid; import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.grid.WirelessGrid; -import java.util.ArrayList; -import java.util.List; - public class ContainerGrid extends ContainerBase { - private List craftingSlots = new ArrayList(); - private SlotGridCraftingResult craftingResultSlot; - - private SlotDisabled patternResultSlot; - private IGrid grid; + private SlotGridCraftingResult craftingResultSlot; + private SlotDisabled patternResultSlot; + public ContainerGrid(EntityPlayer player, IGrid grid) { super(player); @@ -37,11 +32,7 @@ public class ContainerGrid extends ContainerBase { int y = 106; for (int i = 0; i < 9; ++i) { - SlotGridCrafting slot = new SlotGridCrafting(((TileGrid) grid).getMatrix(), i, x, y); - - craftingSlots.add(slot); - - addSlotToContainer(slot); + addSlotToContainer(new SlotGridCrafting(((TileGrid) grid).getMatrix(), i, x, y)); x += 18; @@ -78,15 +69,6 @@ public class ContainerGrid extends ContainerBase { return grid; } - public List getCraftingSlots() { - return craftingSlots; - } - - /* I'm overriding detectAndSendChanges() here because the default check - checks if the item stacks are equal, and if so, then it will only send the new slot contents. - The thing is though, when the grid replaces the slots with new items from the storage - system, the item stack replaced WILL be the same and thus changes will not be sent! - That is why we override here to get rid of the check and ALWAYS send slot changes. */ @Override public void detectAndSendChanges() { for (int i = 0; i < inventorySlots.size(); ++i) { @@ -143,4 +125,19 @@ public class ContainerGrid extends ContainerBase { return super.canMergeSlot(stack, slot); } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) { + if (!player.worldObj.isRemote) { + ItemStack stack = inventorySlots.get(slotIndex).getStack(); + + if (stack != null) { + inventorySlots.get(slotIndex).putStack(grid.onItemPush(player, stack)); + + detectAndSendChanges(); + } + } + + return null; + } } diff --git a/src/main/java/refinedstorage/gui/GuiGrid.java b/src/main/java/refinedstorage/gui/GuiGrid.java index 1f1cfeb5d..c0854d4d4 100755 --- a/src/main/java/refinedstorage/gui/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/GuiGrid.java @@ -6,7 +6,6 @@ import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.init.SoundEvents; -import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.common.FMLCommonHandler; @@ -20,7 +19,6 @@ import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.jei.RefinedStorageJEIPlugin; import refinedstorage.network.GridPullFlags; import refinedstorage.network.MessageGridCraftingClear; -import refinedstorage.network.MessageGridCraftingPush; import refinedstorage.network.MessageGridPatternCreate; import refinedstorage.tile.ClientItem; import refinedstorage.tile.grid.IGrid; @@ -331,9 +329,15 @@ public class GuiGrid extends GuiBase { RefinedStorage.NETWORK.sendToServer(new MessageGridPatternCreate(gridPos.getX(), gridPos.getY(), gridPos.getZ())); } else if (grid.isConnected()) { + if (clickedClear) { + RefinedStorage.NETWORK.sendToServer(new MessageGridCraftingClear((TileGrid) grid)); + } + if (isHoveringOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && container.getPlayer().inventory.getItemStack() != null && (clickedButton == 0 || clickedButton == 1)) { - grid.onItemPush(-1, clickedButton == 1); - } else if (isHoveringOverItemInSlot() && container.getPlayer().inventory.getItemStack() == null) { + grid.onHeldItemPush(clickedButton == 1); + } + + if (isHoveringOverItemInSlot() && container.getPlayer().inventory.getItemStack() == null) { if (items.get(slotNumber).getStack().stackSize == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown())) { FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, slotId)); } else { @@ -353,26 +357,6 @@ public class GuiGrid extends GuiBase { grid.onItemPull(slotId, flags); } - } else if (clickedClear) { - RefinedStorage.NETWORK.sendToServer(new MessageGridCraftingClear((TileGrid) grid)); - } else { - for (Slot slot : container.getPlayerInventorySlots()) { - if (inBounds(slot.xDisplayPosition, slot.yDisplayPosition, 16, 16, mouseX - guiLeft, mouseY - guiTop)) { - if (GuiScreen.isShiftKeyDown()) { - grid.onItemPush(slot.slotNumber, clickedButton == 1); - } - } - } - - if (grid.getType() == EnumGridType.CRAFTING) { - for (Slot slot : container.getCraftingSlots()) { - if (inBounds(slot.xDisplayPosition, slot.yDisplayPosition, 16, 16, mouseX - guiLeft, mouseY - guiTop)) { - if (GuiScreen.isShiftKeyDown()) { - RefinedStorage.NETWORK.sendToServer(new MessageGridCraftingPush((TileGrid) grid, slot.getSlotIndex())); - } - } - } - } } } diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 0ae7e5312..87e374ce4 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -64,7 +64,7 @@ public class GuiHandler implements IGuiHandler { } private WirelessGrid getWirelessGrid(EntityPlayer player, int hand) { - return new WirelessGrid(player.getHeldItem(RefinedStorageUtils.getHandById(hand)), RefinedStorageUtils.getHandById(hand)); + return new WirelessGrid(player.worldObj, player.getHeldItem(RefinedStorageUtils.getHandById(hand)), RefinedStorageUtils.getHandById(hand)); } private ContainerGrid getWirelessGridContainer(EntityPlayer player, int hand) { diff --git a/src/main/java/refinedstorage/network/MessageCraftingMonitorCancel.java b/src/main/java/refinedstorage/network/MessageCraftingMonitorCancel.java index d34d83acb..1d6e7d1a5 100755 --- a/src/main/java/refinedstorage/network/MessageCraftingMonitorCancel.java +++ b/src/main/java/refinedstorage/network/MessageCraftingMonitorCancel.java @@ -47,7 +47,7 @@ public class MessageCraftingMonitorCancel extends MessageHandlerPlayerToServer implements IMessage { - private int x; - private int y; - private int z; - private int craftingSlot; - - public MessageGridCraftingPush() { - } - - public MessageGridCraftingPush(TileGrid grid, int craftingSlot) { - this.x = grid.getPos().getX(); - this.y = grid.getPos().getY(); - this.z = grid.getPos().getZ(); - this.craftingSlot = craftingSlot; - } - - @Override - public void fromBytes(ByteBuf buf) { - x = buf.readInt(); - y = buf.readInt(); - z = buf.readInt(); - craftingSlot = buf.readInt(); - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(x); - buf.writeInt(y); - buf.writeInt(z); - buf.writeInt(craftingSlot); - } - - @Override - public void handle(MessageGridCraftingPush message, EntityPlayerMP player) { - TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z)); - - if (tile instanceof TileGrid) { - TileGrid grid = (TileGrid) tile; - - if (grid.isConnected() && grid.getType() == EnumGridType.CRAFTING && message.craftingSlot >= 0 && message.craftingSlot < grid.getMatrix().getSizeInventory()) { - ItemStack stack = grid.getMatrix().getStackInSlot(message.craftingSlot); - - if (stack != null) { - grid.getMatrix().setInventorySlotContents(message.craftingSlot, grid.getController().push(stack, stack.stackSize, false)); - } - } - } - } -} diff --git a/src/main/java/refinedstorage/network/MessageGridCraftingStart.java b/src/main/java/refinedstorage/network/MessageGridCraftingStart.java index aed8e8547..7dd8f8205 100755 --- a/src/main/java/refinedstorage/network/MessageGridCraftingStart.java +++ b/src/main/java/refinedstorage/network/MessageGridCraftingStart.java @@ -48,7 +48,7 @@ public class MessageGridCraftingStart extends MessageHandlerPlayerToServer implements IMessage { +public class MessageGridHeldItemPush extends MessageHandlerPlayerToServer implements IMessage { private int x; private int y; private int z; - private int playerSlot; private boolean one; - public MessageGridStoragePush() { + public MessageGridHeldItemPush() { } - public MessageGridStoragePush(int x, int y, int z, int playerSlot, boolean one) { + public MessageGridHeldItemPush(int x, int y, int z, boolean one) { this.x = x; this.y = y; this.z = z; - this.playerSlot = playerSlot; this.one = one; } @@ -30,7 +28,6 @@ public class MessageGridStoragePush extends MessageHandlerPlayerToServer implements IMessage { +public class MessageWirelessGridHeldItemPush extends MessageHandlerPlayerToServer implements IMessage { private int controllerX; private int controllerY; private int controllerZ; - private int playerSlot; private boolean one; - public MessageWirelessGridStoragePush() { + public MessageWirelessGridHeldItemPush() { } - public MessageWirelessGridStoragePush(int controllerX, int controllerY, int controllerZ, int playerSlot, boolean one) { + public MessageWirelessGridHeldItemPush(int controllerX, int controllerY, int controllerZ, boolean one) { this.controllerX = controllerX; this.controllerY = controllerY; this.controllerZ = controllerZ; - this.playerSlot = playerSlot; this.one = one; } @@ -30,7 +28,6 @@ public class MessageWirelessGridStoragePush extends MessageHandlerPlayerToServer controllerX = buf.readInt(); controllerY = buf.readInt(); controllerZ = buf.readInt(); - playerSlot = buf.readInt(); one = buf.readBoolean(); } @@ -39,16 +36,15 @@ public class MessageWirelessGridStoragePush extends MessageHandlerPlayerToServer buf.writeInt(controllerX); buf.writeInt(controllerY); buf.writeInt(controllerZ); - buf.writeInt(playerSlot); buf.writeBoolean(one); } @Override - public void handle(MessageWirelessGridStoragePush message, EntityPlayerMP player) { + public void handle(MessageWirelessGridHeldItemPush message, EntityPlayerMP player) { TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.controllerX, message.controllerY, message.controllerZ)); if (tile instanceof TileController && ((TileController) tile).canRun()) { - ((TileController) tile).getStorageHandler().handlePush(message.playerSlot, message.one, player); + ((TileController) tile).getStorageHandler().onHeldItemPush(message.one, player); } } } diff --git a/src/main/java/refinedstorage/network/MessageWirelessGridStoragePull.java b/src/main/java/refinedstorage/network/MessageWirelessGridStoragePull.java index 6d1eb2fce..5a96f7539 100755 --- a/src/main/java/refinedstorage/network/MessageWirelessGridStoragePull.java +++ b/src/main/java/refinedstorage/network/MessageWirelessGridStoragePull.java @@ -48,7 +48,7 @@ public class MessageWirelessGridStoragePull extends MessageHandlerPlayerToServer TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.controllerX, message.controllerY, message.controllerZ)); if (tile instanceof TileController && ((TileController) tile).canRun()) { - ((TileController) tile).getStorageHandler().handlePull(message.id, message.flags, player); + ((TileController) tile).getStorageHandler().onPull(message.id, message.flags, player); } } } diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 27bb419ce..4a1072f31 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -43,7 +43,7 @@ public class CommonProxy { RefinedStorage.NETWORK.registerMessage(MessageTileContainerUpdate.class, MessageTileContainerUpdate.class, id++, Side.CLIENT); RefinedStorage.NETWORK.registerMessage(MessageRedstoneModeUpdate.class, MessageRedstoneModeUpdate.class, id++, Side.SERVER); - RefinedStorage.NETWORK.registerMessage(MessageGridStoragePush.class, MessageGridStoragePush.class, id++, Side.SERVER); + RefinedStorage.NETWORK.registerMessage(MessageGridHeldItemPush.class, MessageGridHeldItemPush.class, id++, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageGridStoragePull.class, MessageGridStoragePull.class, id++, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageCompareUpdate.class, MessageCompareUpdate.class, id++, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageModeToggle.class, MessageModeToggle.class, id++, Side.SERVER); @@ -52,10 +52,9 @@ public class CommonProxy { RefinedStorage.NETWORK.registerMessage(MessageGridCraftingClear.class, MessageGridCraftingClear.class, id++, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessagePriorityUpdate.class, MessagePriorityUpdate.class, id++, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageGridSettingsUpdate.class, MessageGridSettingsUpdate.class, id++, Side.SERVER); - RefinedStorage.NETWORK.registerMessage(MessageGridCraftingPush.class, MessageGridCraftingPush.class, id++, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageGridCraftingTransfer.class, MessageGridCraftingTransfer.class, id++, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageWirelessGridSettingsUpdate.class, MessageWirelessGridSettingsUpdate.class, id++, Side.SERVER); - RefinedStorage.NETWORK.registerMessage(MessageWirelessGridStoragePush.class, MessageWirelessGridStoragePush.class, id++, Side.SERVER); + RefinedStorage.NETWORK.registerMessage(MessageWirelessGridHeldItemPush.class, MessageWirelessGridHeldItemPush.class, id++, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageWirelessGridStoragePull.class, MessageWirelessGridStoragePull.class, id++, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageGridCraftingShift.class, MessageGridCraftingShift.class, id++, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageGridCraftingStart.class, MessageGridCraftingStart.class, id++, Side.SERVER); diff --git a/src/main/java/refinedstorage/tile/controller/StorageHandler.java b/src/main/java/refinedstorage/tile/controller/StorageHandler.java index 92234a44a..ec51596a3 100755 --- a/src/main/java/refinedstorage/tile/controller/StorageHandler.java +++ b/src/main/java/refinedstorage/tile/controller/StorageHandler.java @@ -18,7 +18,7 @@ public class StorageHandler { this.controller = controller; } - public void handlePull(int id, int flags, EntityPlayerMP player) { + public void onPull(int id, int flags, EntityPlayerMP player) { if (player.inventory.getItemStack() != null) { return; } @@ -61,45 +61,34 @@ public class StorageHandler { } } - public void handlePush(int playerSlot, boolean one, EntityPlayerMP player) { - ItemStack stack; + public void onHeldItemPush(boolean one, EntityPlayerMP player) { + if (player.inventory.getItemStack() == null) { + return; + } - if (playerSlot == -1) { - stack = player.inventory.getItemStack().copy(); + ItemStack stack = player.inventory.getItemStack(); + int size = one ? 1 : stack.stackSize; - if (one) { - stack.stackSize = 1; + if (one) { + if (controller.push(stack, size, true) == null) { + controller.push(stack, size, false); + + stack.stackSize -= size; + + if (stack.stackSize == 0) { + player.inventory.setItemStack(null); + } } } else { - stack = player.inventory.getStackInSlot(playerSlot); + player.inventory.setItemStack(controller.push(stack, size, false)); } - if (stack != null) { - if (playerSlot == -1) { - if (one) { - if (controller.push(stack, stack.stackSize, true) == null) { - controller.push(stack, stack.stackSize, false); + player.updateHeldItem(); - player.inventory.getItemStack().stackSize--; - - if (player.inventory.getItemStack().stackSize == 0) { - player.inventory.setItemStack(null); - } - } - } else { - player.inventory.setItemStack(controller.push(stack, stack.stackSize, false)); - } - - player.updateHeldItem(); - } else { - player.inventory.setInventorySlotContents(playerSlot, controller.push(stack, stack.stackSize, false)); - } - - controller.getWirelessGridHandler().drainEnergy(player, ItemWirelessGrid.USAGE_PUSH); - } + controller.getWirelessGridHandler().drainEnergy(player, ItemWirelessGrid.USAGE_PUSH); } - public void handleCraftingRequest(int id, int quantity) { + public void onCraftingRequested(int id, int quantity) { if (id >= 0 && id < controller.getItems().size() && quantity > 0 && quantity <= MAX_CRAFTING_PER_REQUEST) { ItemStack requested = controller.getItems().get(id); @@ -127,7 +116,7 @@ public class StorageHandler { } } - public void handleCraftingCancel(int id) { + public void onCraftingCancelRequested(int id) { if (id >= 0 && id < controller.getCraftingTasks().size()) { controller.cancelCraftingTask(controller.getCraftingTasks().get(id)); } else if (id == -1) { diff --git a/src/main/java/refinedstorage/tile/grid/IGrid.java b/src/main/java/refinedstorage/tile/grid/IGrid.java index 353bbe9c9..87c20c577 100755 --- a/src/main/java/refinedstorage/tile/grid/IGrid.java +++ b/src/main/java/refinedstorage/tile/grid/IGrid.java @@ -1,5 +1,7 @@ package refinedstorage.tile.grid; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import refinedstorage.block.EnumGridType; import refinedstorage.tile.ClientItem; @@ -16,7 +18,9 @@ public interface IGrid { BlockPos getControllerPos(); - void onItemPush(int playerSlot, boolean one); + ItemStack onItemPush(EntityPlayer player, ItemStack stack); + + void onHeldItemPush(boolean one); void onItemPull(int id, int flags); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 683fbfbc9..74dd83e10 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -21,9 +21,9 @@ import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.BasicItemValidator; import refinedstorage.item.ItemPattern; import refinedstorage.network.MessageGridCraftingStart; +import refinedstorage.network.MessageGridHeldItemPush; import refinedstorage.network.MessageGridSettingsUpdate; import refinedstorage.network.MessageGridStoragePull; -import refinedstorage.network.MessageGridStoragePush; import refinedstorage.tile.ClientItem; import refinedstorage.tile.TileMachine; import refinedstorage.tile.config.IRedstoneModeConfig; @@ -110,8 +110,13 @@ public class TileGrid extends TileMachine implements IGrid { } @Override - public void onItemPush(int playerSlot, boolean one) { - RefinedStorage.NETWORK.sendToServer(new MessageGridStoragePush(getPos().getX(), getPos().getY(), getPos().getZ(), playerSlot, one)); + public ItemStack onItemPush(EntityPlayer player, ItemStack stack) { + return isConnected() ? controller.push(stack, stack.stackSize, false) : stack; + } + + @Override + public void onHeldItemPush(boolean one) { + RefinedStorage.NETWORK.sendToServer(new MessageGridHeldItemPush(getPos().getX(), getPos().getY(), getPos().getZ(), one)); } @Override diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 7d495dc59..dd138ea14 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -5,14 +5,15 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageUtils; import refinedstorage.block.EnumGridType; import refinedstorage.item.ItemWirelessGrid; import refinedstorage.network.MessageWirelessGridCraftingStart; +import refinedstorage.network.MessageWirelessGridHeldItemPush; import refinedstorage.network.MessageWirelessGridSettingsUpdate; import refinedstorage.network.MessageWirelessGridStoragePull; -import refinedstorage.network.MessageWirelessGridStoragePush; import refinedstorage.tile.ClientItem; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.controller.TileController; @@ -22,6 +23,7 @@ import java.util.List; public class WirelessGrid implements IGrid { private EnumHand hand; + private World world; private BlockPos controllerPos; private int sortingType; private int sortingDirection; @@ -29,8 +31,9 @@ public class WirelessGrid implements IGrid { private List items = new ArrayList(); private long lastUpdate; - public WirelessGrid(ItemStack stack, EnumHand hand) { + public WirelessGrid(World world, ItemStack stack, EnumHand hand) { this.hand = hand; + this.world = world; this.controllerPos = new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack)); this.sortingType = ItemWirelessGrid.getSortingType(stack); this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack); @@ -59,8 +62,25 @@ public class WirelessGrid implements IGrid { } @Override - public void onItemPush(int playerSlot, boolean one) { - RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridStoragePush(controllerPos.getX(), controllerPos.getY(), controllerPos.getZ(), playerSlot, one)); + public ItemStack onItemPush(EntityPlayer player, ItemStack stack) { + TileEntity tile = world.getTileEntity(controllerPos); + + if (tile instanceof TileController) { + TileController controller = (TileController) tile; + + if (controller.canRun()) { + controller.getWirelessGridHandler().drainEnergy(player, ItemWirelessGrid.USAGE_PUSH); + + return controller.push(stack, stack.stackSize, false); + } + } + + return stack; + } + + @Override + public void onHeldItemPush(boolean one) { + RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridHeldItemPush(controllerPos.getX(), controllerPos.getY(), controllerPos.getZ(), one)); } @Override