diff --git a/CHANGELOG.md b/CHANGELOG.md index ac7386aeb..989b058c9 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - Fixed External Storage not refreshing when the storage is broken or replaced (raoulvdberge) - Fixed delay in block update when placing a cable block (raoulvdberge) - Fixed holder of cable blocks sometimes conflicting with a cable connection while rendering (raoulvdberge) +- Fixed being able to move wireless items in inventory when using a keybinding to open (raoulvdberge) ### 1.7 NOTE: This is an alpha release. Bugs may happen. Remember to take backups. 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 9a530b603..e31b6a758 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 @@ -237,6 +237,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 887a884ee..e47640219 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 @@ -1,7 +1,6 @@ package com.raoulvdberge.refinedstorage.api.network.grid; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; @@ -18,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(PlayerEntity player, ItemStack stack); + IGrid createFromStack(PlayerEntity 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 96f190b11..d039622ee 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 @@ -42,8 +42,9 @@ public interface IGridManager { * @param id the grid factory id * @param player the player * @param stack the stack + * @param slotId the slot id, if applicable, otherwise -1 */ - void openGrid(ResourceLocation id, ServerPlayerEntity player, ItemStack stack); + void openGrid(ResourceLocation id, ServerPlayerEntity player, ItemStack stack, int slotId); /** * Creates a grid. @@ -52,8 +53,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(ResourceLocation id, PlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos); + Pair createGrid(ResourceLocation id, PlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos, int slotId); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemManager.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemManager.java index d2fa8d703..c1092c012 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemManager.java @@ -15,8 +15,9 @@ public interface INetworkItemManager { * * @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(PlayerEntity player, ItemStack stack); + void open(PlayerEntity 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 e42657c5b..7137539b1 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(INetworkItemManager handler, PlayerEntity player, ItemStack stack); + INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId); } 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 c71a66358..ef1aeb614 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 @@ -33,16 +33,16 @@ public class GridManager implements IGridManager { @Override public void openGrid(ResourceLocation id, ServerPlayerEntity player, BlockPos pos) { - openGrid(id, player, null, pos); + openGrid(id, player, null, pos, -1); } @Override - public void openGrid(ResourceLocation id, ServerPlayerEntity player, ItemStack stack) { - openGrid(id, player, stack, null); + public void openGrid(ResourceLocation id, ServerPlayerEntity player, ItemStack stack, int slotId) { + openGrid(id, player, stack, null, slotId); } - private void openGrid(ResourceLocation id, ServerPlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos) { - Pair grid = createGrid(id, player, stack, pos); + private void openGrid(ResourceLocation id, ServerPlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos, int slotId) { + Pair grid = createGrid(id, player, stack, pos, slotId); if (grid == null) { return; } @@ -59,12 +59,14 @@ public class GridManager implements IGridManager { if (stack != null) { buf.writeItemStack(stack); } + + buf.writeInt(slotId); }); } @Override @Nullable - public Pair createGrid(ResourceLocation id, PlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos) { + public Pair createGrid(ResourceLocation id, PlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos, int slotId) { IGridFactory factory = get(id); if (factory == null) { @@ -76,7 +78,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/factory/GridBlockGridFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/GridBlockGridFactory.java index 4fd49fbd2..d6dee76cc 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/GridBlockGridFactory.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/GridBlockGridFactory.java @@ -19,7 +19,7 @@ public class GridBlockGridFactory implements IGridFactory { @Override @Nullable - public IGrid createFromStack(PlayerEntity player, ItemStack stack) { + public IGrid createFromStack(PlayerEntity player, ItemStack stack, int slotId) { return null; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/PortableGridBlockGridFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/PortableGridBlockGridFactory.java index 3d7536b0b..514d63b93 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/PortableGridBlockGridFactory.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/PortableGridBlockGridFactory.java @@ -19,7 +19,7 @@ public class PortableGridBlockGridFactory implements IGridFactory { @Override @Nullable - public IGrid createFromStack(PlayerEntity player, ItemStack stack) { + public IGrid createFromStack(PlayerEntity player, ItemStack stack, int slotId) { return null; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/PortableGridGridFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/PortableGridGridFactory.java index 86874a928..f783413e6 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/PortableGridGridFactory.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/PortableGridGridFactory.java @@ -19,8 +19,8 @@ public class PortableGridGridFactory implements IGridFactory { @Nullable @Override - public IGrid createFromStack(PlayerEntity player, ItemStack stack) { - PortableGrid portableGrid = new PortableGrid(player, stack); + public IGrid createFromStack(PlayerEntity player, ItemStack stack, int slotId) { + PortableGrid portableGrid = new PortableGrid(player, stack, slotId); portableGrid.onOpen(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/WirelessFluidGridGridFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/WirelessFluidGridGridFactory.java index eddb7177d..17e534b76 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/WirelessFluidGridGridFactory.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/WirelessFluidGridGridFactory.java @@ -19,8 +19,8 @@ public class WirelessFluidGridGridFactory implements IGridFactory { @Nullable @Override - public IGrid createFromStack(PlayerEntity player, ItemStack stack) { - return new WirelessFluidGrid(stack, player.getServer()); + public IGrid createFromStack(PlayerEntity player, ItemStack stack, int slotId) { + return new WirelessFluidGrid(stack, player.getServer(), slotId); } @Nullable diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/WirelessGridGridFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/WirelessGridGridFactory.java index b032cb29a..6e1d0e8e5 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/WirelessGridGridFactory.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/WirelessGridGridFactory.java @@ -19,8 +19,8 @@ public class WirelessGridGridFactory implements IGridFactory { @Nullable @Override - public IGrid createFromStack(PlayerEntity player, ItemStack stack) { - return new WirelessGrid(stack, player.getServer()); + public IGrid createFromStack(PlayerEntity player, ItemStack stack, int slotId) { + return new WirelessGrid(stack, player.getServer(), slotId); } @Nullable diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemManager.java index 2ea7b19db..890aad483 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemManager.java @@ -22,7 +22,7 @@ public class NetworkItemManager implements INetworkItemManager { } @Override - public void open(PlayerEntity player, ItemStack stack) { + public void open(PlayerEntity player, ItemStack stack, int slotId) { boolean inRange = false; for (INetworkNode node : network.getNodeGraph().all()) { @@ -47,7 +47,7 @@ public class NetworkItemManager implements INetworkItemManager { 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/WirelessCraftingMonitorNetworkItem.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/WirelessCraftingMonitorNetworkItem.java index b99862d08..10e0f3f71 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/WirelessCraftingMonitorNetworkItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/WirelessCraftingMonitorNetworkItem.java @@ -22,13 +22,13 @@ public class WirelessCraftingMonitorNetworkItem implements INetworkItem { private INetworkItemManager handler; private PlayerEntity player; private ItemStack stack; - private int invIndex; + private int slotId; - public WirelessCraftingMonitorNetworkItem(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int invIndex) { + public WirelessCraftingMonitorNetworkItem(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId) { this.handler = handler; this.player = player; this.stack = stack; - this.invIndex = invIndex; + this.slotId = slotId; } @Override @@ -56,12 +56,12 @@ public class WirelessCraftingMonitorNetworkItem implements INetworkItem { return false; } - WirelessCraftingMonitor wirelessCraftingMonitor = new WirelessCraftingMonitor(stack, player.getServer()); + WirelessCraftingMonitor wirelessCraftingMonitor = new WirelessCraftingMonitor(stack, player.getServer(), slotId); NetworkHooks.openGui( (ServerPlayerEntity) player, new CraftingMonitorContainerProvider(RSContainers.WIRELESS_CRAFTING_MONITOR, wirelessCraftingMonitor, null), - buf -> buf.writeInt(invIndex) + buf -> buf.writeInt(slotId) ); drainEnergy(RS.SERVER_CONFIG.getWirelessCraftingMonitor().getOpenUsage()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/WirelessFluidGridNetworkItem.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/WirelessFluidGridNetworkItem.java index da3907474..2d934d08f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/WirelessFluidGridNetworkItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/WirelessFluidGridNetworkItem.java @@ -20,11 +20,13 @@ public class WirelessFluidGridNetworkItem implements INetworkItem { private INetworkItemManager handler; private PlayerEntity player; private ItemStack stack; + private int slotId; - public WirelessFluidGridNetworkItem(INetworkItemManager handler, PlayerEntity player, ItemStack stack) { + public WirelessFluidGridNetworkItem(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId) { this.handler = handler; this.player = player; this.stack = stack; + this.slotId = slotId; } @Override @@ -51,7 +53,7 @@ public class WirelessFluidGridNetworkItem implements INetworkItem { return false; } - API.instance().getGridManager().openGrid(WirelessFluidGridGridFactory.ID, (ServerPlayerEntity) player, stack); + API.instance().getGridManager().openGrid(WirelessFluidGridGridFactory.ID, (ServerPlayerEntity) player, stack, slotId); drainEnergy(RS.SERVER_CONFIG.getWirelessFluidGrid().getOpenUsage()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/WirelessGridNetworkItem.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/WirelessGridNetworkItem.java index c6eb6f283..25deb665e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/WirelessGridNetworkItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/WirelessGridNetworkItem.java @@ -20,11 +20,13 @@ public class WirelessGridNetworkItem implements INetworkItem { private INetworkItemManager handler; private PlayerEntity player; private ItemStack stack; + private int slotId; - public WirelessGridNetworkItem(INetworkItemManager handler, PlayerEntity player, ItemStack stack) { + public WirelessGridNetworkItem(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId) { this.handler = handler; this.player = player; this.stack = stack; + this.slotId = slotId; } @Override @@ -41,7 +43,7 @@ public class WirelessGridNetworkItem implements INetworkItem { energy != null && energy.getEnergyStored() <= RS.SERVER_CONFIG.getWirelessGrid().getOpenUsage()) { sendOutOfEnergyMessage(); - + return false; } @@ -51,7 +53,7 @@ public class WirelessGridNetworkItem implements INetworkItem { return false; } - API.instance().getGridManager().openGrid(WirelessGridGridFactory.ID, (ServerPlayerEntity) player, stack); + API.instance().getGridManager().openGrid(WirelessGridGridFactory.ID, (ServerPlayerEntity) player, stack, slotId); drainEnergy(RS.SERVER_CONFIG.getWirelessGrid().getOpenUsage()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CraftingMonitorNetworkNode.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CraftingMonitorNetworkNode.java index 64914faf3..bdae1bb78 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CraftingMonitorNetworkNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CraftingMonitorNetworkNode.java @@ -139,4 +139,9 @@ public class CraftingMonitorNetworkNode extends NetworkNode implements ICrafting TileDataManager.setParameter(CraftingMonitorTile.TAB_PAGE, page); } } + + @Override + public int getSlotId() { + return -1; + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/GridNetworkNode.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/GridNetworkNode.java index bf5331cb9..9a014b3ad 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/GridNetworkNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/GridNetworkNode.java @@ -408,6 +408,11 @@ public class GridNetworkNode extends NetworkNode implements INetworkAwareGrid, I return world.getBlockState(pos).get(NetworkNodeBlock.CONNECTED); } + @Override + public int getSlotId() { + return -1; + } + @Override public void onCrafted(PlayerEntity player) { API.instance().getCraftingGridBehavior().onCrafted(this, currentRecipe, player); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/BaseContainer.java b/src/main/java/com/raoulvdberge/refinedstorage/container/BaseContainer.java index 4b08a53a4..5c7d0eea4 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/BaseContainer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/BaseContainer.java @@ -60,11 +60,13 @@ public abstract class BaseContainer extends Container { protected void addPlayerInventory(int xInventory, int yInventory) { int 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) { addSlot(new LegacyDisabledSlot(player.inventory, id, x, y)); } else { addSlot(new Slot(player.inventory, id, x, y)); @@ -75,7 +77,11 @@ public abstract class BaseContainer extends Container { for (int y = 0; y < 3; y++) { for (int x = 0; x < 9; x++) { - addSlot(new Slot(player.inventory, id, xInventory + x * 18, yInventory + y * 18)); + if (id == disabledSlotNumber) { + addSlot(new LegacyDisabledSlot(player.inventory, id, xInventory + x * 18, yInventory + y * 18)); + } else { + addSlot(new Slot(player.inventory, id, xInventory + x * 18, yInventory + y * 18)); + } id++; } @@ -90,8 +96,12 @@ public abstract class BaseContainer extends Container { public ItemStack slotClick(int id, int dragType, ClickType clickType, PlayerEntity 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; } @@ -157,8 +167,8 @@ public abstract class BaseContainer 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/CraftingMonitorContainer.java b/src/main/java/com/raoulvdberge/refinedstorage/container/CraftingMonitorContainer.java index d015977bc..90d649cf7 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/CraftingMonitorContainer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/CraftingMonitorContainer.java @@ -6,7 +6,6 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftin import com.raoulvdberge.refinedstorage.network.craftingmonitor.CraftingMonitorUpdateMessage; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.CraftingMonitorTile; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor; -import com.raoulvdberge.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.inventory.container.ContainerType; @@ -87,8 +86,8 @@ public class CraftingMonitorContainer extends BaseContainer 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/FilterContainer.java b/src/main/java/com/raoulvdberge/refinedstorage/container/FilterContainer.java index 38d8621f0..923f303e7 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/FilterContainer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/FilterContainer.java @@ -52,7 +52,7 @@ public class FilterContainer extends BaseContainer { } @Override - protected boolean isHeldItemDisabled() { - return true; + protected int getDisabledSlotNumber() { + return getPlayer().inventory.currentItem; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/GridContainer.java b/src/main/java/com/raoulvdberge/refinedstorage/container/GridContainer.java index 8ce3e35cc..a36cefa95 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/GridContainer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/GridContainer.java @@ -19,9 +19,7 @@ import com.raoulvdberge.refinedstorage.container.slot.legacy.LegacyFilterSlot; import com.raoulvdberge.refinedstorage.screen.IScreenInfoProvider; import com.raoulvdberge.refinedstorage.tile.BaseTile; 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.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.inventory.container.IContainerListener; @@ -283,8 +281,7 @@ public class GridContainer extends BaseContainer implements ICraftingGridListene } @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/container/factory/GridContainerFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/container/factory/GridContainerFactory.java index 3edc152e9..18ae6e90b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/factory/GridContainerFactory.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/factory/GridContainerFactory.java @@ -29,7 +29,9 @@ public class GridContainerFactory implements IContainerFactory { stack = data.readItemStack(); } - Pair grid = API.instance().getGridManager().createGrid(id, inv.player, stack, pos); + int slotId = data.readInt(); + + Pair grid = API.instance().getGridManager().createGrid(id, inv.player, stack, pos, slotId); return new GridContainer(grid.getLeft(), grid.getRight() instanceof BaseTile ? (BaseTile) grid.getRight() : null, inv.player, windowId); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/factory/WirelessCraftingMonitorContainerFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/container/factory/WirelessCraftingMonitorContainerFactory.java index aef1fc265..1e1b4410c 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/factory/WirelessCraftingMonitorContainerFactory.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/factory/WirelessCraftingMonitorContainerFactory.java @@ -11,11 +11,11 @@ import net.minecraftforge.fml.network.IContainerFactory; public class WirelessCraftingMonitorContainerFactory implements IContainerFactory { @Override public CraftingMonitorContainer create(int windowId, PlayerInventory inv, PacketBuffer data) { - int invIndex = data.readInt(); + int slotId = data.readInt(); - ItemStack stack = inv.getStackInSlot(invIndex); + ItemStack stack = inv.getStackInSlot(slotId); - WirelessCraftingMonitor wirelessCraftingMonitor = new WirelessCraftingMonitor(stack, null); + WirelessCraftingMonitor wirelessCraftingMonitor = new WirelessCraftingMonitor(stack, null, slotId); return new CraftingMonitorContainer(RSContainers.WIRELESS_CRAFTING_MONITOR, wirelessCraftingMonitor, null, inv.player, windowId); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/NetworkItem.java b/src/main/java/com/raoulvdberge/refinedstorage/item/NetworkItem.java index 1c3784b6d..68bc9fe35 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/NetworkItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/NetworkItem.java @@ -44,7 +44,7 @@ public abstract class NetworkItem extends EnergyItem implements INetworkItemProv ItemStack stack = player.getHeldItem(hand); if (!world.isRemote) { - applyNetwork(world.getServer(), stack, n -> n.getNetworkItemManager().open(player, player.getHeldItem(hand)), player::sendMessage); + applyNetwork(world.getServer(), stack, n -> n.getNetworkItemManager().open(player, player.getHeldItem(hand), player.inventory.currentItem), player::sendMessage); } return ActionResult.newResult(ActionResultType.SUCCESS, stack); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/WirelessCraftingMonitorItem.java b/src/main/java/com/raoulvdberge/refinedstorage/item/WirelessCraftingMonitorItem.java index ee2ca6d87..7c60e188f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/WirelessCraftingMonitorItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/WirelessCraftingMonitorItem.java @@ -38,16 +38,8 @@ public class WirelessCraftingMonitorItem extends NetworkItem { @Nonnull @Override - public INetworkItem provide(INetworkItemManager handler, PlayerEntity 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 WirelessCraftingMonitorNetworkItem(handler, player, stack, invIndex); + public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId) { + return new WirelessCraftingMonitorNetworkItem(handler, player, stack, slotId); } public static Optional getTabSelected(ItemStack stack) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/WirelessFluidGridItem.java b/src/main/java/com/raoulvdberge/refinedstorage/item/WirelessFluidGridItem.java index b2d97050a..8304a34bc 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/WirelessFluidGridItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/WirelessFluidGridItem.java @@ -34,8 +34,8 @@ public class WirelessFluidGridItem extends NetworkItem { @Nonnull @Override - public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack) { - return new WirelessFluidGridNetworkItem(handler, player, stack); + public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId) { + return new WirelessFluidGridNetworkItem(handler, player, stack, slotId); } public static int getSortingType(ItemStack stack) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/WirelessGridItem.java b/src/main/java/com/raoulvdberge/refinedstorage/item/WirelessGridItem.java index 06a8bd49f..a6cd32d64 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/WirelessGridItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/WirelessGridItem.java @@ -34,8 +34,8 @@ public class WirelessGridItem extends NetworkItem { @Override @Nonnull - public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack) { - return new WirelessGridNetworkItem(handler, player, stack); + public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId) { + return new WirelessGridNetworkItem(handler, player, stack, slotId); } public static int getViewType(ItemStack stack) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/PortableGridBlockItem.java b/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/PortableGridBlockItem.java index 35ddebb6c..c2779c5fb 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/PortableGridBlockItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/PortableGridBlockItem.java @@ -51,7 +51,7 @@ public class PortableGridBlockItem extends EnergyBlockItem { ItemStack stack = player.getHeldItem(hand); if (!world.isRemote) { - API.instance().getGridManager().openGrid(PortableGridGridFactory.ID, (ServerPlayerEntity) player, stack); + API.instance().getGridManager().openGrid(PortableGridGridFactory.ID, (ServerPlayerEntity) player, stack, player.inventory.currentItem); } return ActionResult.newResult(ActionResultType.SUCCESS, stack); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/OpenNetworkItemMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/OpenNetworkItemMessage.java index 2f80e4eba..6be9131d8 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/OpenNetworkItemMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/OpenNetworkItemMessage.java @@ -34,9 +34,9 @@ public class OpenNetworkItemMessage { ItemStack stack = player.inventory.getStackInSlot(message.slotId); if (stack.getItem() instanceof NetworkItem) { - ((NetworkItem) stack.getItem()).applyNetwork(player.getServer(), stack, n -> n.getNetworkItemManager().open(player, stack), player::sendMessage); + ((NetworkItem) stack.getItem()).applyNetwork(player.getServer(), stack, n -> n.getNetworkItemManager().open(player, stack, message.slotId), player::sendMessage); } else if (stack.getItem() instanceof PortableGridBlockItem) { - API.instance().getGridManager().openGrid(PortableGridGridFactory.ID, player, stack); + API.instance().getGridManager().openGrid(PortableGridGridFactory.ID, player, stack, message.slotId); } }); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/model/PortableGridBakedModel.java b/src/main/java/com/raoulvdberge/refinedstorage/render/model/PortableGridBakedModel.java index 7259eb593..a769d1f0c 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/render/model/PortableGridBakedModel.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/model/PortableGridBakedModel.java @@ -103,7 +103,7 @@ public class PortableGridBakedModel extends DelegateBakedModel { @Nullable @Override public IBakedModel getModelWithOverrides(IBakedModel model, ItemStack stack, @Nullable World worldIn, @Nullable LivingEntity entityIn) { - PortableGrid portableGrid = new PortableGrid(null, stack); + PortableGrid portableGrid = new PortableGrid(null, stack, -1); IBakedModel myDisk = null; 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 fcb0b7ed4..dc1c46df8 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java @@ -37,4 +37,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 d53aa6d52..d0d678469 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java @@ -33,10 +33,12 @@ public class WirelessCraftingMonitor implements ICraftingMonitor { private BlockPos nodePos; private int tabPage; private Optional tabSelected; + private int slotId; - public WirelessCraftingMonitor(ItemStack stack, @Nullable MinecraftServer server) { + public WirelessCraftingMonitor(ItemStack stack, @Nullable MinecraftServer server, int slotId) { this.stack = stack; this.server = server; + this.slotId = slotId; this.nodeDimension = WirelessCraftingMonitorItem.getDimension(stack); this.nodePos = new BlockPos(WirelessCraftingMonitorItem.getX(stack), WirelessCraftingMonitorItem.getY(stack), WirelessCraftingMonitorItem.getZ(stack)); @@ -151,4 +153,9 @@ public class WirelessCraftingMonitor implements ICraftingMonitor { RS.NETWORK_HANDLER.sendToServer(new WirelessCraftingMonitorSettingsUpdateMessage(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 0e5cc6257..cea0a15e5 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java @@ -41,6 +41,7 @@ public class WirelessFluidGrid implements INetworkAwareGrid { private final MinecraftServer server; private final DimensionType nodeDimension; private final BlockPos nodePos; + private final int slotId; private int sortingType; private int sortingDirection; @@ -60,11 +61,12 @@ public class WirelessFluidGrid implements INetworkAwareGrid { StackUtils.writeItems(handler, 0, stack.getTag()); })); - public WirelessFluidGrid(ItemStack stack, @Nullable MinecraftServer server) { + public WirelessFluidGrid(ItemStack stack, @Nullable MinecraftServer server, int slotId) { this.stack = stack; this.server = server; this.nodeDimension = WirelessFluidGridItem.getDimension(stack); this.nodePos = new BlockPos(WirelessFluidGridItem.getX(stack), WirelessFluidGridItem.getY(stack), WirelessFluidGridItem.getZ(stack)); + this.slotId = slotId; this.sortingType = WirelessFluidGridItem.getSortingType(stack); this.sortingDirection = WirelessFluidGridItem.getSortingDirection(stack); @@ -293,6 +295,11 @@ public class WirelessFluidGrid implements INetworkAwareGrid { return true; } + @Override + public int getSlotId() { + return slotId; + } + @Override public void onClosed(PlayerEntity 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 a9b1456d7..ca72f1f3a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java @@ -41,6 +41,7 @@ public class WirelessGrid implements INetworkAwareGrid { private final MinecraftServer server; private final DimensionType nodeDimension; private final BlockPos nodePos; + private final int slotId; private int viewType; private int sortingType; @@ -61,11 +62,12 @@ public class WirelessGrid implements INetworkAwareGrid { StackUtils.writeItems(handler, 0, stack.getTag()); }); - public WirelessGrid(ItemStack stack, @Nullable MinecraftServer server) { + public WirelessGrid(ItemStack stack, @Nullable MinecraftServer server, int slotId) { this.stack = stack; this.server = server; this.nodeDimension = WirelessGridItem.getDimension(stack); this.nodePos = new BlockPos(WirelessGridItem.getX(stack), WirelessGridItem.getY(stack), WirelessGridItem.getZ(stack)); + this.slotId = slotId; this.viewType = WirelessGridItem.getViewType(stack); this.sortingType = WirelessGridItem.getSortingType(stack); @@ -299,6 +301,11 @@ public class WirelessGrid implements INetworkAwareGrid { return true; } + @Override + public int getSlotId() { + return slotId; + } + @Override public void onClosed(PlayerEntity 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 594e574e6..557243a4d 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 @@ -71,6 +71,7 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer @Nullable private PlayerEntity player; private ItemStack stack; + private int slotId; private int sortingType; private int sortingDirection; @@ -135,9 +136,10 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer } })); - public PortableGrid(@Nullable PlayerEntity player, ItemStack stack) { + public PortableGrid(@Nullable PlayerEntity player, ItemStack stack, int slotId) { this.player = player; this.stack = stack; + this.slotId = slotId; this.sortingType = WirelessGridItem.getSortingType(stack); this.sortingDirection = WirelessGridItem.getSortingDirection(stack); @@ -435,6 +437,11 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer return hasDisk(); } + @Override + public int getSlotId() { + return slotId; + } + @Nullable private UUID getDiskId() { return !hasDisk() ? null : ((IStorageDiskProvider) disk.getStackInSlot(0).getItem()).getId(disk.getStackInSlot(0)); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGridTile.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGridTile.java index 8830654bb..58c654ee7 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGridTile.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGridTile.java @@ -535,6 +535,11 @@ public class PortableGridTile extends BaseTile implements IGrid, IPortableGrid, return redstoneMode.isEnabled(world, pos); } + @Override + public int getSlotId() { + return -1; + } + @Override @Nullable public IStorageCache getCache() {