Fix prioritized slot iterator
This commit is contained in:
parent
1afdcbe058
commit
cc7e7600ec
@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user