From 4fa5a12746d4cd963fd8d8be4b28acbd24ab3532 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Sun, 28 Mar 2021 13:42:14 -0400 Subject: [PATCH] Cleanup TerminalBufferInventory code --- .../block/terminal/AbstractTerminalBlockEntity.kt | 2 +- .../block/terminal/TerminalBufferInventory.kt | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/net/shadowfacts/phycon/block/terminal/AbstractTerminalBlockEntity.kt b/src/main/kotlin/net/shadowfacts/phycon/block/terminal/AbstractTerminalBlockEntity.kt index 53376e3..870b30e 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/block/terminal/AbstractTerminalBlockEntity.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/block/terminal/AbstractTerminalBlockEntity.kt @@ -109,7 +109,7 @@ abstract class AbstractTerminalBlockEntity(type: BlockEntityType<*>): DeviceBloc } override fun doHandleItemStack(packet: ItemStackPacket): ItemStack { - val remaining = internalBuffer.insertFromNetwork(packet.stack) + val remaining = internalBuffer.insert(packet.stack, TerminalBufferInventory.Mode.FROM_NETWORK) // this happens outside the normal update loop because by receiving the item stack packet // we "know" how much the count in the source inventory has changed diff --git a/src/main/kotlin/net/shadowfacts/phycon/block/terminal/TerminalBufferInventory.kt b/src/main/kotlin/net/shadowfacts/phycon/block/terminal/TerminalBufferInventory.kt index 492715b..7630f2d 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/block/terminal/TerminalBufferInventory.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/block/terminal/TerminalBufferInventory.kt @@ -34,12 +34,12 @@ class TerminalBufferInventory(size: Int): SimpleInventory(size) { tag.getIntArray("Modes").forEachIndexed { i, it -> modes[i] = Mode.values()[it] } } - fun insertFromNetwork(stack: ItemStack): ItemStack { + fun insert(stack: ItemStack, mode: Mode): ItemStack { var remaining = stack.copy() for (slot in 0 until size()) { - if (modes[slot] == Mode.TO_NETWORK) continue + if (modes[slot] != mode && modes[slot] != Mode.UNASSIGNED) continue - remaining = insertFromNetwork(stack, slot) + remaining = tryInsert(stack, slot, mode) if (remaining.isEmpty) { break @@ -48,19 +48,17 @@ class TerminalBufferInventory(size: Int): SimpleInventory(size) { return remaining } - private fun insertFromNetwork(stack: ItemStack, slot: Int): ItemStack { - val mode = modes[slot] - if (mode == Mode.TO_NETWORK) return stack + private fun tryInsert(stack: ItemStack, slot: Int, mode: Mode): ItemStack { val current = getStack(slot) if (current.isEmpty) { setStack(slot, stack) - modes[slot] = Mode.FROM_NETWORK + markSlot(slot, mode) return ItemStack.EMPTY } else if (ItemStackUtil.areEqualIgnoreAmounts(stack, current)) { val toTransfer = min(current.maxCount - current.count, stack.count) current.count += toTransfer stack.count -= toTransfer - modes[slot] = Mode.FROM_NETWORK + markSlot(slot, mode) return stack } else { return stack