diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index 1088fced1..72176f679 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -52,10 +52,12 @@ public class TileInterface extends TileMachine implements ICompareConfig { } else if (ticks % RefinedStorageUtils.getSpeed(upgrades) == 0) { int size = RefinedStorageUtils.hasUpgrade(upgrades, ItemUpgrade.TYPE_STACK) ? 64 : 1; - if (controller.push(slot, size, true) == null) { - controller.push(slot, size, false); + ItemStack remainder = controller.push(slot, size, false); + if (remainder == null) { importItems.extractItem(currentSlot, size, false); + } else { + importItems.extractItem(currentSlot, size - remainder.stackSize, false); } } diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index 82df366ce..fd931a693 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -13,6 +13,7 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.util.Constants; import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageUtils; @@ -411,6 +412,15 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr return null; } + // We copy here because push can not modify the stack + // if we return the remainder (that will not be copied if there are no storages) + // user code can do something with the uncopied remainder. + if (storages.isEmpty()) { + return ItemHandlerHelper.copyStackWithSize(stack, size); + } + + int orginalSize = size; + ItemStack remainder = stack; for (IStorage storage : storages) { @@ -427,11 +437,7 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr syncItems(); syncItemsWithClients(); - int sizePushed = stack.stackSize; - - if (remainder != null) { - sizePushed = stack.stackSize - remainder.stackSize; - } + int sizePushed = remainder != null ? (orginalSize - remainder.stackSize) : orginalSize; for (int i = 0; i < sizePushed; ++i) { if (!craftingTasks.empty()) {