diff --git a/src/main/java/refinedstorage/storage/IStorage.java b/src/main/java/refinedstorage/storage/IStorage.java index 4c0af9c99..46013e05c 100755 --- a/src/main/java/refinedstorage/storage/IStorage.java +++ b/src/main/java/refinedstorage/storage/IStorage.java @@ -9,7 +9,7 @@ public interface IStorage { void push(ItemStack stack); - ItemStack take(ItemStack stack, int flags); + ItemStack take(ItemStack stack, int size, int flags); boolean mayPush(ItemStack stack); diff --git a/src/main/java/refinedstorage/storage/NBTStorage.java b/src/main/java/refinedstorage/storage/NBTStorage.java index 0082b48ba..4012d3876 100755 --- a/src/main/java/refinedstorage/storage/NBTStorage.java +++ b/src/main/java/refinedstorage/storage/NBTStorage.java @@ -96,9 +96,7 @@ public abstract class NBTStorage implements IStorage { } @Override - public ItemStack take(ItemStack stack, int flags) { - int size = stack.stackSize; - + public ItemStack take(ItemStack stack, int size, int flags) { for (ItemStack s : stacks) { if (RefinedStorageUtils.compareStack(s, stack, flags)) { if (size > s.stackSize) { diff --git a/src/main/java/refinedstorage/tile/TileExternalStorage.java b/src/main/java/refinedstorage/tile/TileExternalStorage.java index bc9b32eba..91b2196b4 100755 --- a/src/main/java/refinedstorage/tile/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/TileExternalStorage.java @@ -82,21 +82,16 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider } @Override - public ItemStack take(ItemStack stack, int flags) { - int quantity = stack.stackSize; - + public ItemStack take(ItemStack stack, int size, int flags) { IDeepStorageUnit storageUnit = getStorageUnit(); if (storageUnit != null) { if (storageUnit.getStoredItemType() != null && RefinedStorageUtils.compareStackNoQuantity(storageUnit.getStoredItemType(), stack)) { - if (quantity > storageUnit.getStoredItemType().stackSize) { - quantity = storageUnit.getStoredItemType().stackSize; - } + size = Math.min(size, storageUnit.getStoredItemType().stackSize); - ItemStack took = storageUnit.getStoredItemType().copy(); - took.stackSize = quantity; + ItemStack took = ItemHandlerHelper.copyStackWithSize(storageUnit.getStoredItemType(), size); - storageUnit.setStoredItemCount(storageUnit.getStoredItemType().stackSize - quantity); + storageUnit.setStoredItemCount(storageUnit.getStoredItemType().stackSize - size); return took; } @@ -108,13 +103,13 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider ItemStack slot = handler.getStackInSlot(i); if (slot != null && RefinedStorageUtils.compareStack(slot, stack, flags)) { - if (quantity > slot.stackSize) { - quantity = slot.stackSize; - } + size = Math.min(size, slot.stackSize); - handler.extractItem(i, quantity, false); + ItemStack took = ItemHandlerHelper.copyStackWithSize(slot, size); - return ItemHandlerHelper.copyStackWithSize(slot, quantity); + handler.extractItem(i, size, false); + + return took; } } } diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index 7502255ec..9367976d6 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -396,7 +396,7 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr ItemStack newStack = null; for (IStorage storage : storages) { - ItemStack took = storage.take(stack, flags); + ItemStack took = storage.take(stack, requested, flags); if (took != null) { if (newStack == null) {