diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGrid.java index 98b2a6e5b..ee5fd0a7b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGrid.java @@ -231,6 +231,11 @@ public interface IGrid { */ boolean isActive(); + /** + * @return the slot id where this grid is located, if applicable, otherwise -1 + */ + int getSlotId(); + static boolean isValidViewType(int type) { return type == VIEW_TYPE_NORMAL || type == VIEW_TYPE_CRAFTABLES || diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGridFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGridFactory.java index c2849f92d..abe156b09 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGridFactory.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGridFactory.java @@ -17,10 +17,11 @@ public interface IGridFactory { * * @param player the player * @param stack the stack + * @param slotId the slot id, if applicable, otherwise -1 * @return the grid, or null if a problem occurred */ @Nullable - IGrid createFromStack(EntityPlayer player, ItemStack stack); + IGrid createFromStack(EntityPlayer player, ItemStack stack, int slotId); /** * Creates a grid from a block. Used when {@link #getType()} is BLOCK. diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGridManager.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGridManager.java index 2bb42bb97..e1ae7afe7 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGridManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGridManager.java @@ -41,8 +41,9 @@ public interface IGridManager { * @param id the grid factory id as returned from {@link #add(IGridFactory)} * @param player the player * @param stack the stack + * @param slotId the slot id, if applicable, otherwise -1 */ - void openGrid(int id, EntityPlayerMP player, ItemStack stack); + void openGrid(int id, EntityPlayerMP player, ItemStack stack, int slotId); /** * Creates a grid. @@ -51,8 +52,9 @@ public interface IGridManager { * @param player the player * @param stack the stack, if there is one * @param pos the block position, if there is one + * @param slotId the slot id, if applicable, otherwise -1 * @return a grid, or null if an error has occurred */ @Nullable - Pair createGrid(int id, EntityPlayer player, @Nullable ItemStack stack, @Nullable BlockPos pos); + Pair createGrid(int id, EntityPlayer player, @Nullable ItemStack stack, @Nullable BlockPos pos, int slotId); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemHandler.java index 295dfff16..2b4bdabc2 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemHandler.java @@ -15,8 +15,9 @@ public interface INetworkItemHandler { * * @param player the player that opened the network item * @param stack the stack that has been opened + * @param slotId the slot id, if applicable, otherwise -1 */ - void open(EntityPlayer player, ItemStack stack); + void open(EntityPlayer player, ItemStack stack, int slotId); /** * Called when the player closes a network item. diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemProvider.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemProvider.java index 08e0dd3f3..5c4954e6b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemProvider.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemProvider.java @@ -15,8 +15,9 @@ public interface INetworkItemProvider { * @param handler the network item handler * @param player the player * @param stack the stack + * @param slotId the slot id, if applicable, otherwise -1 * @return the network item */ @Nonnull - INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack); + INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int slotId); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryGridBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryGridBlock.java index 3bf330ee8..09a84d68f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryGridBlock.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryGridBlock.java @@ -15,7 +15,7 @@ import javax.annotation.Nullable; public class GridFactoryGridBlock implements IGridFactory { @Override @Nullable - public IGrid createFromStack(EntityPlayer player, ItemStack stack) { + public IGrid createFromStack(EntityPlayer player, ItemStack stack, int slotId) { return null; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryPortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryPortableGrid.java index af0765606..747370a9e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryPortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryPortableGrid.java @@ -15,8 +15,8 @@ import javax.annotation.Nullable; public class GridFactoryPortableGrid implements IGridFactory { @Nullable @Override - public IGrid createFromStack(EntityPlayer player, ItemStack stack) { - return new PortableGrid(player, stack); + public IGrid createFromStack(EntityPlayer player, ItemStack stack, int slotId) { + return new PortableGrid(player, stack, slotId); } @Nullable diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryPortableGridBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryPortableGridBlock.java index 74093edb5..bc4bd82fc 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryPortableGridBlock.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryPortableGridBlock.java @@ -15,7 +15,7 @@ import javax.annotation.Nullable; public class GridFactoryPortableGridBlock implements IGridFactory { @Override @Nullable - public IGrid createFromStack(EntityPlayer player, ItemStack stack) { + public IGrid createFromStack(EntityPlayer player, ItemStack stack, int slotId) { return null; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryWirelessFluidGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryWirelessFluidGrid.java index b36d4cda6..b9c65fc68 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryWirelessFluidGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryWirelessFluidGrid.java @@ -15,8 +15,8 @@ import javax.annotation.Nullable; public class GridFactoryWirelessFluidGrid implements IGridFactory { @Nullable @Override - public IGrid createFromStack(EntityPlayer player, ItemStack stack) { - return new WirelessFluidGrid(stack); + public IGrid createFromStack(EntityPlayer player, ItemStack stack, int slotId) { + return new WirelessFluidGrid(stack, slotId); } @Nullable diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryWirelessGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryWirelessGrid.java index 2de94328e..b7f6e6d0f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryWirelessGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryWirelessGrid.java @@ -15,8 +15,8 @@ import javax.annotation.Nullable; public class GridFactoryWirelessGrid implements IGridFactory { @Nullable @Override - public IGrid createFromStack(EntityPlayer player, ItemStack stack) { - return new WirelessGrid(stack); + public IGrid createFromStack(EntityPlayer player, ItemStack stack, int slotId) { + return new WirelessGrid(stack, slotId); } @Nullable diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridManager.java index 3ee64e171..5d4792a76 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridManager.java @@ -43,16 +43,16 @@ public class GridManager implements IGridManager { @Override public void openGrid(int id, EntityPlayerMP player, BlockPos pos) { - openGrid(id, player, null, pos); + openGrid(id, player, null, pos, -1); } @Override - public void openGrid(int id, EntityPlayerMP player, ItemStack stack) { - openGrid(id, player, stack, null); + public void openGrid(int id, EntityPlayerMP player, ItemStack stack, int slotId) { + openGrid(id, player, stack, null, slotId); } - private void openGrid(int id, EntityPlayerMP player, @Nullable ItemStack stack, @Nullable BlockPos pos) { - Pair grid = createGrid(id, player, stack, pos); + private void openGrid(int id, EntityPlayerMP player, @Nullable ItemStack stack, @Nullable BlockPos pos, int slotId) { + Pair grid = createGrid(id, player, stack, pos, slotId); if (grid == null) { return; } @@ -73,7 +73,7 @@ public class GridManager implements IGridManager { // So we first send the window id in MessageGridOpen. // The order is preserved by TCP. - RS.INSTANCE.network.sendTo(new MessageGridOpen(player.currentWindowId, pos, id, stack), player); + RS.INSTANCE.network.sendTo(new MessageGridOpen(player.currentWindowId, pos, id, stack, slotId), player); player.openContainer = new ContainerGrid(grid.getLeft(), new ResizableDisplayDummy(), grid.getRight() instanceof TileBase ? (TileBase) grid.getRight() : null, player); player.openContainer.windowId = player.currentWindowId; @@ -84,7 +84,7 @@ public class GridManager implements IGridManager { @Override @Nullable - public Pair createGrid(int id, EntityPlayer player, @Nullable ItemStack stack, @Nullable BlockPos pos) { + public Pair createGrid(int id, EntityPlayer player, @Nullable ItemStack stack, @Nullable BlockPos pos, int slotId) { IGridFactory factory = get(id); if (factory == null) { @@ -96,7 +96,7 @@ public class GridManager implements IGridManager { switch (factory.getType()) { case STACK: - grid = factory.createFromStack(player, stack); + grid = factory.createFromStack(player, stack, slotId); break; case BLOCK: grid = factory.createFromBlock(player, pos); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridOpenHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridOpenHandler.java index 5d2caf245..fb171d06c 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridOpenHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridOpenHandler.java @@ -23,7 +23,7 @@ public class GridOpenHandler implements Runnable { public void run() { EntityPlayer player = Minecraft.getMinecraft().player; - Pair grid = API.instance().getGridManager().createGrid(message.getGridId(), player, message.getStack(), message.getPos()); + Pair grid = API.instance().getGridManager().createGrid(message.getGridId(), player, message.getStack(), message.getPos(), message.getSlotId()); if (grid == null) { return; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemHandler.java index b09276e5b..7755965ce 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemHandler.java @@ -23,7 +23,7 @@ public class NetworkItemHandler implements INetworkItemHandler { } @Override - public void open(EntityPlayer player, ItemStack stack) { + public void open(EntityPlayer player, ItemStack stack, int slotId) { boolean inRange = false; for (INetworkNode node : network.getNodeGraph().all()) { @@ -46,7 +46,7 @@ public class NetworkItemHandler implements INetworkItemHandler { return; } - INetworkItem item = ((INetworkItemProvider) stack.getItem()).provide(this, player, stack); + INetworkItem item = ((INetworkItemProvider) stack.getItem()).provide(this, player, stack, slotId); if (item.onOpen(network)) { items.put(player, item); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java index dcba8a988..bef79f76c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java @@ -17,13 +17,13 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem { private INetworkItemHandler handler; private EntityPlayer player; private ItemStack stack; - private int invIndex; + private int slotId; - public NetworkItemWirelessCraftingMonitor(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int invIndex) { + public NetworkItemWirelessCraftingMonitor(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int slotId) { this.handler = handler; this.player = player; this.stack = stack; - this.invIndex = invIndex; + this.slotId = slotId; } @Override @@ -43,7 +43,7 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem { return false; } - player.openGui(RS.INSTANCE, RSGui.WIRELESS_CRAFTING_MONITOR, player.getEntityWorld(), invIndex, 0, 0); + player.openGui(RS.INSTANCE, RSGui.WIRELESS_CRAFTING_MONITOR, player.getEntityWorld(), slotId, 0, 0); drainEnergy(RS.INSTANCE.config.wirelessCraftingMonitorOpenUsage); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessFluidGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessFluidGrid.java index 4ad168cec..f1467a05d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessFluidGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessFluidGrid.java @@ -19,11 +19,13 @@ public class NetworkItemWirelessFluidGrid implements INetworkItem { private INetworkItemHandler handler; private EntityPlayer player; private ItemStack stack; + private int slotId; - public NetworkItemWirelessFluidGrid(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) { + public NetworkItemWirelessFluidGrid(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int slotId) { this.handler = handler; this.player = player; this.stack = stack; + this.slotId = slotId; } @Override @@ -43,7 +45,7 @@ public class NetworkItemWirelessFluidGrid implements INetworkItem { return false; } - API.instance().getGridManager().openGrid(WirelessFluidGrid.ID, (EntityPlayerMP) player, stack); + API.instance().getGridManager().openGrid(WirelessFluidGrid.ID, (EntityPlayerMP) player, stack, slotId); drainEnergy(RS.INSTANCE.config.wirelessFluidGridOpenUsage); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessGrid.java index acc96798a..2ad00655a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessGrid.java @@ -19,11 +19,13 @@ public class NetworkItemWirelessGrid implements INetworkItem { private INetworkItemHandler handler; private EntityPlayer player; private ItemStack stack; + private int slotId; - public NetworkItemWirelessGrid(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) { + public NetworkItemWirelessGrid(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int slotId) { this.handler = handler; this.player = player; this.stack = stack; + this.slotId = slotId; } @Override @@ -43,7 +45,7 @@ public class NetworkItemWirelessGrid implements INetworkItem { return false; } - API.instance().getGridManager().openGrid(WirelessGrid.ID, (EntityPlayerMP) player, stack); + API.instance().getGridManager().openGrid(WirelessGrid.ID, (EntityPlayerMP) player, stack, slotId); drainEnergy(RS.INSTANCE.config.wirelessGridOpenUsage); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCraftingMonitor.java index 9625d20c3..87a118156 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCraftingMonitor.java @@ -135,4 +135,9 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting TileDataManager.setParameter(TileCraftingMonitor.TAB_PAGE, page); } } + + @Override + public int getSlotId() { + return -1; + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java index 891306bb9..7c6c4c422 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java @@ -449,6 +449,11 @@ public class NetworkNodeGrid extends NetworkNode implements IGridNetworkAware, I // NO OP } + @Override + public int getSlotId() { + return -1; + } + @Override public void onCrafted(EntityPlayer player) { onCrafted(this, world, player); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerBase.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerBase.java index 54162d685..dbb7b6426 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerBase.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerBase.java @@ -61,7 +61,11 @@ public abstract class ContainerBase extends Container { for (int y = 0; y < 3; y++) { for (int x = 0; x < 9; x++) { - addSlotToContainer(new Slot(player.inventory, id, xInventory + x * 18, yInventory + y * 18)); + if (id == disabledSlotNumber) { + addSlotToContainer(new SlotLegacyDisabled(player.inventory, id, xInventory + x * 18, yInventory + y * 18)); + } else { + addSlotToContainer(new Slot(player.inventory, id, xInventory + x * 18, yInventory + y * 18)); + } id++; } @@ -69,11 +73,13 @@ public abstract class ContainerBase extends Container { id = 0; + int disabledSlotNumber = getDisabledSlotNumber(); + for (int i = 0; i < 9; i++) { int x = xInventory + i * 18; int y = yInventory + 4 + (3 * 18); - if (isHeldItemDisabled() && i == player.inventory.currentItem) { + if (id == disabledSlotNumber) { addSlotToContainer(new SlotLegacyDisabled(player.inventory, id, x, y)); } else { addSlotToContainer(new Slot(player.inventory, id, x, y)); @@ -91,8 +97,12 @@ public abstract class ContainerBase extends Container { public ItemStack slotClick(int id, int dragType, ClickType clickType, EntityPlayer player) { Slot slot = id >= 0 ? getSlot(id) : null; + int disabledSlotNumber = getDisabledSlotNumber(); + // Prevent swapping disabled held item with the number keys (dragType is the slot we're swapping with) - if (isHeldItemDisabled() && clickType == ClickType.SWAP && dragType == player.inventory.currentItem) { + if (disabledSlotNumber != -1 && + clickType == ClickType.SWAP && + dragType == disabledSlotNumber) { return ItemStack.EMPTY; } @@ -158,8 +168,8 @@ public abstract class ContainerBase extends Container { return super.canMergeSlot(stack, slot); } - protected boolean isHeldItemDisabled() { - return false; + protected int getDisabledSlotNumber() { + return -1; } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCraftingMonitor.java index 0793a5b33..ca8bee2bd 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCraftingMonitor.java @@ -82,8 +82,8 @@ public class ContainerCraftingMonitor extends ContainerBase implements ICrafting } @Override - protected boolean isHeldItemDisabled() { - return craftingMonitor instanceof WirelessCraftingMonitor; + protected int getDisabledSlotNumber() { + return craftingMonitor.getSlotId(); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerFilter.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerFilter.java index 71c3fa724..aef90542b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerFilter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerFilter.java @@ -53,7 +53,7 @@ public class ContainerFilter extends ContainerBase { } @Override - protected boolean isHeldItemDisabled() { - return true; + protected int getDisabledSlotNumber() { + return getPlayer().inventory.currentItem; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerGrid.java index ce6c9c88c..2658f997e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerGrid.java @@ -18,9 +18,7 @@ import com.raoulvdberge.refinedstorage.container.slot.legacy.SlotLegacyFilter; import com.raoulvdberge.refinedstorage.gui.IResizableDisplay; import com.raoulvdberge.refinedstorage.tile.TileBase; import com.raoulvdberge.refinedstorage.tile.config.IType; -import com.raoulvdberge.refinedstorage.tile.grid.WirelessGrid; import com.raoulvdberge.refinedstorage.tile.grid.portable.IPortableGrid; -import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.IContainerListener; @@ -271,8 +269,7 @@ public class ContainerGrid extends ContainerBase implements IGridCraftingListene } @Override - protected boolean isHeldItemDisabled() { - // Here we check for the concrete portable grid type, not IPortableGrid, because we *CAN* move the held item in the portable grid tile - return grid instanceof WirelessGrid || grid instanceof PortableGrid; + protected int getDisabledSlotNumber() { + return grid.getSlotId(); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java index 7d18490cc..671bd90cd 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java @@ -143,7 +143,7 @@ public class GuiHandler implements IGuiHandler { } private WirelessCraftingMonitor getWirelessCraftingMonitor(EntityPlayer player, int invIndex) { - return new WirelessCraftingMonitor(player.inventory.getStackInSlot(invIndex)); + return new WirelessCraftingMonitor(player.inventory.getStackInSlot(invIndex), invIndex); } private GuiCraftingMonitor getWirelessCraftingMonitorGui(EntityPlayer player, int invIndex) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemNetworkItem.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemNetworkItem.java index d5a89c061..313b5936e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemNetworkItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemNetworkItem.java @@ -47,7 +47,7 @@ public abstract class ItemNetworkItem extends ItemEnergyItem implements INetwork ItemStack stack = player.getHeldItem(hand); if (!world.isRemote) { - applyNetwork(stack, n -> n.getNetworkItemHandler().open(player, player.getHeldItem(hand)), player::sendMessage); + applyNetwork(stack, n -> n.getNetworkItemHandler().open(player, player.getHeldItem(hand), player.inventory.currentItem), player::sendMessage); } return ActionResult.newResult(EnumActionResult.SUCCESS, stack); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessCraftingMonitor.java index 7b18bd590..96a49599c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessCraftingMonitor.java @@ -33,16 +33,8 @@ public class ItemWirelessCraftingMonitor extends ItemNetworkItem { @Override @Nonnull - public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) { - int invIndex = 0; - for (int i = 0; i < player.inventory.getSizeInventory(); ++i) { - if (player.inventory.getStackInSlot(i) == stack) { - invIndex = i; - break; - } - } - - return new NetworkItemWirelessCraftingMonitor(handler, player, stack, invIndex); + public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int slotId) { + return new NetworkItemWirelessCraftingMonitor(handler, player, stack, slotId); } public static Optional getTabSelected(ItemStack stack) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessFluidGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessFluidGrid.java index 1b1ca0161..0d68d5533 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessFluidGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessFluidGrid.java @@ -29,8 +29,8 @@ public class ItemWirelessFluidGrid extends ItemNetworkItem { @Override @Nonnull - public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) { - return new NetworkItemWirelessFluidGrid(handler, player, stack); + public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int slotId) { + return new NetworkItemWirelessFluidGrid(handler, player, stack, slotId); } public static int getSortingType(ItemStack stack) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessGrid.java index 6c2689df5..1f77fdbd6 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessGrid.java @@ -34,8 +34,8 @@ public class ItemWirelessGrid extends ItemNetworkItem { @Override @Nonnull - public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) { - return new NetworkItemWirelessGrid(handler, player, stack); + public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int slotId) { + return new NetworkItemWirelessGrid(handler, player, stack, slotId); } public static int getViewType(ItemStack stack) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/itemblock/ItemBlockPortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/item/itemblock/ItemBlockPortableGrid.java index bc5bc9931..1571377dc 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/itemblock/ItemBlockPortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/itemblock/ItemBlockPortableGrid.java @@ -30,7 +30,7 @@ public class ItemBlockPortableGrid extends ItemBlockEnergyItem { ItemStack stack = player.getHeldItem(hand); if (!world.isRemote) { - API.instance().getGridManager().openGrid(PortableGrid.ID, (EntityPlayerMP) player, stack); + API.instance().getGridManager().openGrid(PortableGrid.ID, (EntityPlayerMP) player, stack, player.inventory.currentItem); } return ActionResult.newResult(EnumActionResult.SUCCESS, stack); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridOpen.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridOpen.java index 0d1bc3a20..816668a58 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridOpen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridOpen.java @@ -18,12 +18,13 @@ public class MessageGridOpen implements IMessage, IMessageHandler n.getNetworkItemHandler().open(player, player.inventory.getStackInSlot(message.slotId)), player::sendMessage); + ((ItemNetworkItem) stack.getItem()).applyNetwork(stack, n -> n.getNetworkItemHandler().open(player, stack, message.slotId), player::sendMessage); } else if (stack.getItem() == Item.getItemFromBlock(RSBlocks.PORTABLE_GRID)) { // @Hack - API.instance().getGridManager().openGrid(PortableGrid.ID, player, stack); + API.instance().getGridManager().openGrid(PortableGrid.ID, player, stack, message.slotId); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java index b263868af..5d6c8f807 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java @@ -36,4 +36,6 @@ public interface ICraftingMonitor { void onTabSelectionChanged(Optional taskId); void onTabPageChanged(int page); + + int getSlotId(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java index 1fb44a4e7..2f3f3a489 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java @@ -28,9 +28,11 @@ public class WirelessCraftingMonitor implements ICraftingMonitor { private BlockPos network; private int tabPage; private Optional tabSelected; + private int slotId; - public WirelessCraftingMonitor(ItemStack stack) { + public WirelessCraftingMonitor(ItemStack stack, int slotId) { this.stack = stack; + this.slotId = slotId; this.networkDimension = ItemWirelessCraftingMonitor.getDimensionId(stack); this.network = new BlockPos(ItemWirelessCraftingMonitor.getX(stack), ItemWirelessCraftingMonitor.getY(stack), ItemWirelessCraftingMonitor.getZ(stack)); this.tabPage = ItemWirelessCraftingMonitor.getTabPage(stack); @@ -138,4 +140,9 @@ public class WirelessCraftingMonitor implements ICraftingMonitor { RS.INSTANCE.network.sendToServer(new MessageWirelessCraftingMonitorSettings(tabSelected, tabPage)); } } + + @Override + public int getSlotId() { + return slotId; + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java index 1e8fa82a8..9e7907578 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java @@ -39,6 +39,7 @@ public class WirelessFluidGrid implements IGridNetworkAware { private int networkDimension; private BlockPos network; + private int slotId; private int sortingType; private int sortingDirection; @@ -62,11 +63,12 @@ public class WirelessFluidGrid implements IGridNetworkAware { } }; - public WirelessFluidGrid(ItemStack stack) { + public WirelessFluidGrid(ItemStack stack, int slotId) { this.networkDimension = ItemWirelessFluidGrid.getDimensionId(stack); this.network = new BlockPos(ItemWirelessFluidGrid.getX(stack), ItemWirelessFluidGrid.getY(stack), ItemWirelessFluidGrid.getZ(stack)); this.stack = stack; + this.slotId = slotId; this.sortingType = ItemWirelessFluidGrid.getSortingType(stack); this.sortingDirection = ItemWirelessFluidGrid.getSortingDirection(stack); @@ -294,6 +296,11 @@ public class WirelessFluidGrid implements IGridNetworkAware { return true; } + @Override + public int getSlotId() { + return slotId; + } + @Override public void onClosed(EntityPlayer player) { INetwork network = getNetwork(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java index 440d63b4a..9373dc956 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java @@ -39,6 +39,7 @@ public class WirelessGrid implements IGridNetworkAware { private int networkDimension; private BlockPos network; + private int slotId; private int viewType; private int sortingType; @@ -63,11 +64,12 @@ public class WirelessGrid implements IGridNetworkAware { } }; - public WirelessGrid(ItemStack stack) { + public WirelessGrid(ItemStack stack, int slotId) { this.networkDimension = ItemWirelessGrid.getDimensionId(stack); this.network = new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack)); this.stack = stack; + this.slotId = slotId; this.viewType = ItemWirelessGrid.getViewType(stack); this.sortingType = ItemWirelessGrid.getSortingType(stack); @@ -300,6 +302,12 @@ public class WirelessGrid implements IGridNetworkAware { return true; } + @Override + public int getSlotId() { + return slotId; + } + + @Override public void onClosed(EntityPlayer player) { INetwork network = getNetwork(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java index 8b9055d75..e002b3b5f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java @@ -63,6 +63,7 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer private EntityPlayer player; private ItemStack stack; + private int slotId; private int sortingType; private int sortingDirection; @@ -132,9 +133,10 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer } }; - public PortableGrid(EntityPlayer player, ItemStack stack) { + public PortableGrid(EntityPlayer player, ItemStack stack, int slotId) { this.player = player; this.stack = stack; + this.slotId = slotId; if (player != null) { this.sortingType = ItemWirelessGrid.getSortingType(stack); @@ -426,6 +428,11 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer return true; } + @Override + public int getSlotId() { + return slotId; + } + @Override public AccessType getAccessType() { return AccessType.INSERT_EXTRACT; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java index 142e0207f..e67b6c974 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java @@ -519,6 +519,11 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, return redstoneMode.isEnabled(world, pos); } + @Override + public int getSlotId() { + return -1; + } + @Override @Nullable public IStorageCache getCache() {