diff --git a/CHANGELOG.md b/CHANGELOG.md index ebcd9dbfc..459014fee 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ **Bugfixes** - Fixed not being able to take items sometimes +**Features** +- It is now possible to use middle click multiple times for the same item in grid + ### 0.8.1 **Bugfixes** - Fixed upgrades from interface not dropping diff --git a/src/main/java/refinedstorage/api/network/GridPullFlags.java b/src/main/java/refinedstorage/api/network/GridPullFlags.java index 90e4869ae..5a1b8a29c 100755 --- a/src/main/java/refinedstorage/api/network/GridPullFlags.java +++ b/src/main/java/refinedstorage/api/network/GridPullFlags.java @@ -5,6 +5,6 @@ package refinedstorage.api.network; */ public class GridPullFlags { public static final int PULL_HALF = 1; - public static final int PULL_ONE = 2; + public static final int PULL_SINGLE = 2; public static final int PULL_SHIFT = 4; } diff --git a/src/main/java/refinedstorage/apiimpl/network/GridHandler.java b/src/main/java/refinedstorage/apiimpl/network/GridHandler.java index 85359af52..a464b264d 100755 --- a/src/main/java/refinedstorage/apiimpl/network/GridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/GridHandler.java @@ -22,7 +22,15 @@ public class GridHandler implements IGridHandler { @Override public void onPull(ItemStack stack, int flags, EntityPlayerMP player) { - if (player.inventory.getItemStack() != null) { + boolean single = (flags & GridPullFlags.PULL_SINGLE) == GridPullFlags.PULL_SINGLE; + + ItemStack held = player.inventory.getItemStack(); + + if (single) { + if (held != null && (!RefinedStorageUtils.compareStackNoQuantity(stack, held) || held.stackSize + 1 > held.getMaxStackSize())) { + return; + } + } else if (player.inventory.getItemStack() != null) { return; } @@ -34,7 +42,7 @@ public class GridHandler implements IGridHandler { if (size > 32) { size = 32; } - } else if ((flags & GridPullFlags.PULL_ONE) == GridPullFlags.PULL_ONE) { + } else if (single) { size = 1; } else if ((flags & GridPullFlags.PULL_SHIFT) == GridPullFlags.PULL_SHIFT) { // NO OP, the quantity already set (64) is needed for shift @@ -50,7 +58,12 @@ public class GridHandler implements IGridHandler { InventoryHelper.spawnItemStack(player.worldObj, player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), took); } } else { - player.inventory.setItemStack(took); + if (held != null) { + held.stackSize++; + } else { + player.inventory.setItemStack(took); + } + player.updateHeldItem(); } diff --git a/src/main/java/refinedstorage/gui/GuiGrid.java b/src/main/java/refinedstorage/gui/GuiGrid.java index 2b0a0b366..8758aa5ad 100755 --- a/src/main/java/refinedstorage/gui/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/GuiGrid.java @@ -357,11 +357,13 @@ public class GuiGrid extends GuiBase { RefinedStorage.NETWORK.sendToServer(new MessageGridCraftingClear((TileGrid) grid)); } - if (isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && container.getPlayer().inventory.getItemStack() != null && (clickedButton == 0 || clickedButton == 1)) { + ItemStack held = container.getPlayer().inventory.getItemStack(); + + if (isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && held != null && (clickedButton == 0 || clickedButton == 1)) { RefinedStorage.NETWORK.sendToServer(new MessageGridHeldPush(clickedButton == 1)); } - if (isOverSlotWithItem() && container.getPlayer().inventory.getItemStack() == null) { + if (isOverSlotWithItem() && (held == null || (held != null && clickedButton == 2))) { if (items.get(slotNumber).stackSize == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown())) { FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, container.getPlayer(), items.get(slotNumber))); } else { @@ -376,7 +378,7 @@ public class GuiGrid extends GuiBase { } if (clickedButton == 2) { - flags |= GridPullFlags.PULL_ONE; + flags |= GridPullFlags.PULL_SINGLE; } RefinedStorage.NETWORK.sendToServer(new MessageGridPull(items.get(slotNumber), flags));