Matter value calculation now account for itemhandler
This commit is contained in:
parent
f68a927773
commit
471ddb49e5
@ -6,7 +6,7 @@ import net.minecraft.world.item.ItemStack
|
||||
import net.minecraftforge.items.IItemHandler
|
||||
import ru.dbotthepony.mc.otm.core.AwareItemStack
|
||||
import ru.dbotthepony.mc.otm.core.ItemHandlerItemStackEntry
|
||||
import java.util.Spliterator
|
||||
import java.util.*
|
||||
import java.util.stream.Stream
|
||||
import java.util.stream.StreamSupport
|
||||
|
||||
@ -48,6 +48,7 @@ class ItemHandlerAwareSpliterator(private val handler: IItemHandler, offset: Int
|
||||
}
|
||||
}
|
||||
|
||||
fun IItemHandler.iterator(): Iterator<ItemStack> = Spliterators.iterator(spliterator())
|
||||
fun IItemHandler.spliterator(): Spliterator<out ItemStack> = ItemHandlerSpliterator(this)
|
||||
fun IItemHandler.awareSpliterator(): Spliterator<out AwareItemStack> = ItemHandlerAwareSpliterator(this)
|
||||
fun IItemHandler.stream(): Stream<out ItemStack> = StreamSupport.stream(spliterator(), false)
|
||||
|
@ -38,6 +38,7 @@ import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.crafting.Recipe
|
||||
import net.minecraft.world.item.crafting.RecipeType
|
||||
import net.minecraft.world.level.ItemLike
|
||||
import net.minecraftforge.common.capabilities.ForgeCapabilities
|
||||
import net.minecraftforge.event.AddReloadListenerEvent
|
||||
import net.minecraftforge.event.OnDatapackSyncEvent
|
||||
import net.minecraftforge.event.RegisterCommandsEvent
|
||||
@ -60,12 +61,16 @@ import ru.dbotthepony.mc.otm.SystemTime
|
||||
import ru.dbotthepony.mc.otm.capability.MatteryCapability
|
||||
import ru.dbotthepony.mc.otm.capability.drive.IMatteryDrive
|
||||
import ru.dbotthepony.mc.otm.client.minecraft
|
||||
import ru.dbotthepony.mc.otm.container.iterator
|
||||
import ru.dbotthepony.mc.otm.container.spliterator
|
||||
import ru.dbotthepony.mc.otm.container.stream
|
||||
import ru.dbotthepony.mc.otm.core.ImpreciseFraction
|
||||
import ru.dbotthepony.mc.otm.core.TextComponent
|
||||
import ru.dbotthepony.mc.otm.core.TranslatableComponent
|
||||
import ru.dbotthepony.mc.otm.core.filterNotNull
|
||||
import ru.dbotthepony.mc.otm.core.formatMatterFull
|
||||
import ru.dbotthepony.mc.otm.core.formatSiComponent
|
||||
import ru.dbotthepony.mc.otm.core.ifPresentK
|
||||
import ru.dbotthepony.mc.otm.core.isActuallyEmpty
|
||||
import ru.dbotthepony.mc.otm.core.isZero
|
||||
import ru.dbotthepony.mc.otm.core.orNull
|
||||
@ -962,7 +967,7 @@ object MatterManager {
|
||||
return get(value).hasMatterValue
|
||||
}
|
||||
|
||||
private fun get(value: ItemStack, level: Int): IMatterValue {
|
||||
private fun get(value: ItemStack, level: Int, accountForStackSize: Boolean): IMatterValue {
|
||||
if (value.isEmpty) {
|
||||
return IMatterValue.Companion
|
||||
}
|
||||
@ -994,7 +999,7 @@ object MatterManager {
|
||||
|
||||
if (drive != null && drive.storageType === OverdriveThatMatters.INSTANCE.ITEM_STORAGE()) {
|
||||
for (item in (drive as IMatteryDrive<ItemStackWrapper>).stacks) {
|
||||
val tuple = get(item.stack.stack, level + 1)
|
||||
val tuple = get(item.stack.stack, level + 1, true)
|
||||
|
||||
if (tuple.hasMatterValue) {
|
||||
matter += tuple
|
||||
@ -1003,7 +1008,24 @@ object MatterManager {
|
||||
}
|
||||
}
|
||||
|
||||
if (matter.hasMatterValue && value.count > 1) {
|
||||
value.getCapability(ForgeCapabilities.ITEM_HANDLER).ifPresentK {
|
||||
it.stream().filter { !it.isEmpty }.map { get(it, level + 1, true) }.reduce { a, b ->
|
||||
if (a.hasMatterValue && b.hasMatterValue) {
|
||||
return@reduce MatterValue(a.matter + b.matter, a.complexity + b.complexity)
|
||||
} else if (a.hasMatterValue) {
|
||||
return@reduce a
|
||||
} else if (b.hasMatterValue) {
|
||||
return@reduce b
|
||||
} else {
|
||||
return@reduce IMatterValue.Companion
|
||||
}
|
||||
}.ifPresent {
|
||||
matter += it
|
||||
undamagedMatterValue += it
|
||||
}
|
||||
}
|
||||
|
||||
if (matter.hasMatterValue && value.count > 1 && accountForStackSize) {
|
||||
return MatterValue(matter.matter + undamagedMatterValue.matter * (value.count - 1), matter.complexity + undamagedMatterValue.complexity * (value.count - 1))
|
||||
}
|
||||
|
||||
@ -1014,8 +1036,9 @@ object MatterManager {
|
||||
* Matter value for itemstack, accounting for capabilities and stack size
|
||||
*/
|
||||
@JvmStatic
|
||||
fun get(value: ItemStack): IMatterValue {
|
||||
return get(value, 0)
|
||||
@JvmOverloads
|
||||
fun get(value: ItemStack, accountForStackSize: Boolean = true): IMatterValue {
|
||||
return get(value, 0, accountForStackSize)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@ -1159,6 +1182,9 @@ object MatterManager {
|
||||
fun find(server: MinecraftServer, json: JsonObject): Stream<ResolvedRecipe>
|
||||
}
|
||||
|
||||
/**
|
||||
* Please use exclusively inside recipe finder
|
||||
*/
|
||||
@JvmStatic
|
||||
fun getDirect(value: Item): IMatterValue {
|
||||
return Registry.direct(value)
|
||||
|
Loading…
Reference in New Issue
Block a user