extendedItemIterator for player

This commit is contained in:
DBotThePony 2022-09-02 11:17:05 +07:00
parent 1ff1587951
commit da3ae55d38
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -1,8 +1,10 @@
package ru.dbotthepony.mc.otm.capability
import net.minecraft.core.Direction
import net.minecraft.world.Container
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.player.Player
import net.minecraft.world.item.ItemStack
import net.minecraftforge.common.capabilities.ForgeCapabilities
import net.minecraftforge.common.capabilities.ICapabilityProvider
import net.minecraftforge.common.util.LazyOptional
@ -10,6 +12,7 @@ import net.minecraftforge.energy.IEnergyStorage
import net.minecraftforge.fml.ModList
import ru.dbotthepony.mc.otm.compat.mekanism.getMekanismEnergySided
import ru.dbotthepony.mc.otm.compat.mekanism.mekanismEnergy
import ru.dbotthepony.mc.otm.container.iterator
import ru.dbotthepony.mc.otm.core.ImpreciseFraction
import ru.dbotthepony.mc.otm.core.orNull
@ -118,3 +121,58 @@ fun ICapabilityProvider.getMatteryEnergySided(side: Direction? = null): LazyOpti
return getCapability(MatteryCapability.ENERGY, side)
}
fun Player.extendedItemIterator(): MutableIterator<ItemStack> {
return object : MutableIterator<ItemStack> {
private val regular = this@extendedItemIterator.inventory.iterator()
private val mattery: MutableIterator<ItemStack>
private var isSecond = false
init {
val get = this@extendedItemIterator.matteryPlayer
if (get != null && get.hasExoSuit) {
mattery = get.exoSuitContainer.iterator()
} else {
mattery = object : MutableIterator<ItemStack> {
override fun hasNext(): Boolean {
return false
}
override fun next(): ItemStack {
throw UnsupportedOperationException()
}
override fun remove() {
throw UnsupportedOperationException()
}
}
}
}
override fun hasNext(): Boolean {
return regular.hasNext() || mattery.hasNext()
}
override fun next(): ItemStack {
if (isSecond) {
return mattery.next()
}
if (!regular.hasNext()) {
isSecond = true
return mattery.next()
}
return regular.next()
}
override fun remove() {
if (isSecond) {
mattery.remove()
} else {
regular.remove()
}
}
}
}