diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/Ext.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/Ext.kt index 314235255..4e0ede534 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/Ext.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/Ext.kt @@ -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 { + return object : MutableIterator { + private val regular = this@extendedItemIterator.inventory.iterator() + private val mattery: MutableIterator + private var isSecond = false + + init { + val get = this@extendedItemIterator.matteryPlayer + + if (get != null && get.hasExoSuit) { + mattery = get.exoSuitContainer.iterator() + } else { + mattery = object : MutableIterator { + 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() + } + } + } +} \ No newline at end of file