When storage bus receive items, try to put them into existing slots first
This commit is contained in:
parent
2597a8b15b
commit
cbc1c634d2
@ -1,6 +1,7 @@
|
|||||||
package ru.dbotthepony.mc.otm.block.entity.storage
|
package ru.dbotthepony.mc.otm.block.entity.storage
|
||||||
|
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap
|
import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap
|
||||||
|
import it.unimi.dsi.fastutil.ints.IntArraySet
|
||||||
import it.unimi.dsi.fastutil.longs.Long2ObjectAVLTreeMap
|
import it.unimi.dsi.fastutil.longs.Long2ObjectAVLTreeMap
|
||||||
import net.minecraft.core.BlockPos
|
import net.minecraft.core.BlockPos
|
||||||
import net.minecraft.core.Direction
|
import net.minecraft.core.Direction
|
||||||
@ -235,6 +236,38 @@ class StorageBusBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private inner class PrioritizedSlotIterator(tuple: TrackedTuple?) : Iterator<Int> {
|
||||||
|
private val tupleIndexes = IntArraySet()
|
||||||
|
|
||||||
|
init {
|
||||||
|
if (tuple != null) {
|
||||||
|
for (child in tuple.children) {
|
||||||
|
tupleIndexes.add(child.key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private val seenIterator = tupleIndexes.iterator()
|
||||||
|
private val regularIterator = (0 until parent.slots).iterator()
|
||||||
|
|
||||||
|
override fun hasNext(): Boolean {
|
||||||
|
return seenIterator.hasNext() || regularIterator.hasNext()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun next(): Int {
|
||||||
|
if (seenIterator.hasNext())
|
||||||
|
return seenIterator.nextInt()
|
||||||
|
|
||||||
|
var value = regularIterator.nextInt()
|
||||||
|
|
||||||
|
while (tupleIndexes.remove(value)) {
|
||||||
|
value = regularIterator.nextInt()
|
||||||
|
}
|
||||||
|
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private var snapshot: EventsSnapshot? = null
|
private var snapshot: EventsSnapshot? = null
|
||||||
|
|
||||||
override val storageType: StorageStackType<ItemStackWrapper>
|
override val storageType: StorageStackType<ItemStackWrapper>
|
||||||
@ -435,7 +468,7 @@ class StorageBusBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matter
|
|||||||
leftover.count -= additional
|
leftover.count -= additional
|
||||||
}
|
}
|
||||||
|
|
||||||
for (slot in 0 until parent.slots) {
|
for (slot in PrioritizedSlotIterator(tuples[stack.key()])) {
|
||||||
val oldCount = leftover.count
|
val oldCount = leftover.count
|
||||||
leftover = ItemStackWrapper(parent.insertItem(slot, leftover.stack, simulate))
|
leftover = ItemStackWrapper(parent.insertItem(slot, leftover.stack, simulate))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user