diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/MenuIterator.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/MenuIterator.kt deleted file mode 100644 index 836534a6a..000000000 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/MenuIterator.kt +++ /dev/null @@ -1,30 +0,0 @@ -package ru.dbotthepony.mc.otm.core - -import net.minecraft.world.inventory.AbstractContainerMenu -import net.minecraft.world.item.ItemStack - -class MenuIterator(private val menu: AbstractContainerMenu) : MutableIterator { - private var index = 0 - - override fun hasNext(): Boolean { - return index < menu.slots.size - } - - override fun next(): ItemStack { - if (index >= menu.slots.size) { - throw IllegalStateException("Already finished iterating") - } - - return menu.slots[index++].item - } - - override fun remove() { - if (index == 0) { - throw IllegalStateException("Never called next()") - } - - menu.slots[index - 1].set(ItemStack.EMPTY) - } -} - -fun AbstractContainerMenu.itemStackIterator() : MutableIterator = MenuIterator(this) \ No newline at end of file diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/SlotIterator.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/SlotIterator.kt new file mode 100644 index 000000000..e61bcf4d2 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/SlotIterator.kt @@ -0,0 +1,26 @@ +package ru.dbotthepony.mc.otm.core + +import net.minecraft.world.inventory.AbstractContainerMenu +import net.minecraft.world.inventory.Slot +import net.minecraft.world.item.ItemStack + +private class SlotIterator(private val parent: Iterator) : MutableIterator { + private var last: Slot? = null + + override fun hasNext(): Boolean { + return parent.hasNext() + } + + override fun next(): ItemStack { + return parent.next().also { last = it }.item + } + + override fun remove() { + val last = last ?: throw IllegalStateException("Never called next()") + last.set(ItemStack.EMPTY) + } +} + +fun AbstractContainerMenu.itemStackIterator() : MutableIterator = SlotIterator(slots.iterator()) +fun List.itemStackIterator() : MutableIterator = SlotIterator(iterator()) +fun Iterator.asItemStackIterator() : MutableIterator = SlotIterator(this)