Fix prioritized slot iterator

This commit is contained in:
DBotThePony 2022-06-16 15:56:07 +07:00
parent 1afdcbe058
commit cc7e7600ec
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -2,8 +2,6 @@ package ru.dbotthepony.mc.otm.block.entity.storage
import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap
import it.unimi.dsi.fastutil.ints.IntAVLTreeSet
import it.unimi.dsi.fastutil.ints.IntArraySet
import it.unimi.dsi.fastutil.longs.Long2ObjectAVLTreeMap
import net.minecraft.core.BlockPos
import net.minecraft.core.Direction
import net.minecraft.nbt.CompoundTag
@ -44,6 +42,7 @@ import java.lang.ref.WeakReference
import java.math.BigInteger
import java.util.*
import java.util.stream.Stream
import kotlin.NoSuchElementException
import kotlin.collections.ArrayList
import kotlin.collections.HashMap
@ -251,21 +250,47 @@ class StorageBusBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matter
private val seenIterator = tupleIndexes.iterator()
private val regularIterator = (0 until parent.slots).iterator()
private var storedValue = -1
override fun hasNext(): Boolean {
return seenIterator.hasNext() || regularIterator.hasNext()
return seenIterator.hasNext() || storedValue != -1
}
private fun advance() {
if (!regularIterator.hasNext()) {
storedValue = -1
return
}
var value = regularIterator.nextInt()
var removed = tupleIndexes.remove(value)
while (removed && regularIterator.hasNext()) {
value = regularIterator.nextInt()
removed = tupleIndexes.remove(value)
}
if (!removed) {
storedValue = value
}
}
override fun next(): Int {
if (seenIterator.hasNext())
return seenIterator.nextInt()
if (storedValue != -1) {
val value = storedValue
advance()
return value
} else if (seenIterator.hasNext()) {
val value = seenIterator.nextInt()
var value = regularIterator.nextInt()
if (!seenIterator.hasNext()) {
advance()
}
while (tupleIndexes.remove(value)) {
value = regularIterator.nextInt()
return value
}
return value
throw NoSuchElementException("Reached end of iteration")
}
}