Micro optimize combinedcontainer stack iterator for best case scenario

This commit is contained in:
DBotThePony 2024-01-21 23:32:40 +07:00
parent 8ebc611c7c
commit 9ad1c8e82a
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -16,6 +16,7 @@ import net.minecraft.world.item.ItemStack
import ru.dbotthepony.mc.otm.container.util.IContainerSlot
import ru.dbotthepony.mc.otm.container.util.containerSlot
import ru.dbotthepony.mc.otm.container.util.iterator
import ru.dbotthepony.mc.otm.container.util.slotIterator
import ru.dbotthepony.mc.otm.core.collect.concatIterators
import ru.dbotthepony.mc.otm.core.collect.filter
import ru.dbotthepony.mc.otm.core.collect.flatMap
@ -154,6 +155,9 @@ class CombinedContainer(containers: Stream<Pair<Container, Iterable<Int>>>) : IM
}
override fun iterator(nonEmpty: Boolean): Iterator<ItemStack> {
if (notFullCoverage.isEmpty())
return fullCoverage.iterator().flatMap { it.iterator(nonEmpty) }
return concatIterators(
fullCoverage.iterator().flatMap { it.iterator(nonEmpty) },
notFullCoverage.values.iterator().flatMap { it.iterator() }.map { it.item }.let { if (nonEmpty) it.filter { it.isNotEmpty } else it }