diff --git a/src/main/kotlin/net/shadowfacts/extrahoppers/block/inventory/ContainerInventoryHopper.kt b/src/main/kotlin/net/shadowfacts/extrahoppers/block/inventory/ContainerInventoryHopper.kt index ddfb7f5..a8f217b 100644 --- a/src/main/kotlin/net/shadowfacts/extrahoppers/block/inventory/ContainerInventoryHopper.kt +++ b/src/main/kotlin/net/shadowfacts/extrahoppers/block/inventory/ContainerInventoryHopper.kt @@ -51,11 +51,40 @@ class ContainerInventoryHopper(val hopper: TileEntityInventoryHopper, playerInv: return super.slotClick(id, dragType, type, player) } - override fun transferStackInSlot(player: EntityPlayer, index: Int): ItemStack { + override fun transferStackInSlot(player: EntityPlayer?, index: Int): ItemStack { if (index in hopper.inventory.slots..hopper.inventory.slots + 5) { // if the slot is a filter slot return ItemStack.EMPTY } - return super.transferStackInSlot(player, index) + + var itemstack = ItemStack.EMPTY + val slot = inventorySlots[index] + + if (slot != null && slot.hasStack) { + val itemstack1 = slot.stack + itemstack = itemstack1.copy() + + if (index < hopper.inventory.slots) { + if (!this.mergeItemStack(itemstack1, hopper.inventory.slots + 6, inventorySlots.size, true)) { + return ItemStack.EMPTY + } + } else if (!this.mergeItemStack(itemstack1, 0, hopper.inventory.slots, false)) { + return ItemStack.EMPTY + } + + if (itemstack1.count == 0) { + slot.putStack(ItemStack.EMPTY) + } else { + slot.onSlotChanged() + } + + if (itemstack1.count == itemstack.count) { + return ItemStack.EMPTY + } + + slot.onTake(player, itemstack1) + } + + return itemstack } private class SlotHopper(val hopper: TileEntityInventoryHopper, index: Int, x: Int, y: Int): SlotItemHandler(hopper.inventory, index, x, y) { diff --git a/src/main/kotlin/net/shadowfacts/extrahoppers/util/SlotItemFilter.kt b/src/main/kotlin/net/shadowfacts/extrahoppers/util/SlotItemFilter.kt index c40bd5d..74861ad 100644 --- a/src/main/kotlin/net/shadowfacts/extrahoppers/util/SlotItemFilter.kt +++ b/src/main/kotlin/net/shadowfacts/extrahoppers/util/SlotItemFilter.kt @@ -7,4 +7,10 @@ import net.shadowfacts.extrahoppers.util.filter.ItemFilter /** * @author shadowfacts */ -class SlotItemFilter(hopper: TileEntityInventoryHopper, id: Int, x: Int, y: Int): SlotItemHandler((hopper.filter as ItemFilter).inventory, id, x, y) \ No newline at end of file +class SlotItemFilter(val hopper: TileEntityInventoryHopper, id: Int, x: Int, y: Int): SlotItemHandler((hopper.filter as ItemFilter).inventory, id, x, y) { + + override fun onSlotChanged() { + hopper.markDirty() + } + +} \ No newline at end of file