diff --git a/src/main/java/refinedstorage/container/ContainerBase.java b/src/main/java/refinedstorage/container/ContainerBase.java index 2a876fd14..aa0685fbe 100755 --- a/src/main/java/refinedstorage/container/ContainerBase.java +++ b/src/main/java/refinedstorage/container/ContainerBase.java @@ -7,6 +7,7 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import refinedstorage.container.slot.SlotDisabled; +import refinedstorage.container.slot.SlotGridCraftingResult; import refinedstorage.container.slot.SlotSpecimen; import java.util.ArrayList; @@ -98,6 +99,10 @@ public abstract class ContainerBase extends Container { } return player.inventory.getItemStack(); + } else if (slot instanceof SlotGridCraftingResult && slot.getHasStack() && GuiScreen.isShiftKeyDown()) { + ((SlotGridCraftingResult) slot).onShiftClick(player); + + return null; } else if (slot instanceof SlotDisabled) { return null; } diff --git a/src/main/java/refinedstorage/container/slot/SlotGridCraftingResult.java b/src/main/java/refinedstorage/container/slot/SlotGridCraftingResult.java index 350905dd0..3bf56c7b5 100755 --- a/src/main/java/refinedstorage/container/slot/SlotGridCraftingResult.java +++ b/src/main/java/refinedstorage/container/slot/SlotGridCraftingResult.java @@ -30,4 +30,8 @@ public class SlotGridCraftingResult extends SlotCrafting { grid.onCrafted(container); } + + public void onShiftClick(EntityPlayer player) { + grid.onCraftedShift(container, player); + } } diff --git a/src/main/java/refinedstorage/tile/TileGrid.java b/src/main/java/refinedstorage/tile/TileGrid.java index 26bff673a..a1a776e46 100755 --- a/src/main/java/refinedstorage/tile/TileGrid.java +++ b/src/main/java/refinedstorage/tile/TileGrid.java @@ -15,6 +15,9 @@ import refinedstorage.container.ContainerGrid; import refinedstorage.inventory.InventorySimple; import refinedstorage.util.InventoryUtils; +import java.util.ArrayList; +import java.util.List; + public class TileGrid extends TileMachine { public static final String NBT_SORTING_DIRECTION = "SortingDirection"; public static final String NBT_SORTING_TYPE = "SortingType"; @@ -93,6 +96,34 @@ public class TileGrid extends TileMachine { } } + public void onCraftedShift(ContainerGrid container, EntityPlayer player) { + List craftedItemsList = new ArrayList(); + int craftedItems = 0; + ItemStack crafted = craftingResultInventory.getStackInSlot(0); + + while (true) { + onCrafted(container); + + craftedItemsList.add(crafted.copy()); + + craftedItems += crafted.stackSize; + + if (!InventoryUtils.compareStack(crafted, craftingResultInventory.getStackInSlot(0)) || craftedItems + crafted.stackSize > 64) { + break; + } + } + + for (ItemStack craftedItem : craftedItemsList) { + if (!player.inventory.addItemStackToInventory(craftedItem.copy())) { + if (isConnected() && getController().push(craftedItem.copy())) { + // NO OP + } else { + InventoryUtils.dropStack(player.worldObj, craftedItem, player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ()); + } + } + } + } + public int getSortingDirection() { return sortingDirection; }