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 net.minecraftforge.items.IItemHandler
|
||||||
import ru.dbotthepony.mc.otm.core.AwareItemStack
|
import ru.dbotthepony.mc.otm.core.AwareItemStack
|
||||||
import ru.dbotthepony.mc.otm.core.ItemHandlerItemStackEntry
|
import ru.dbotthepony.mc.otm.core.ItemHandlerItemStackEntry
|
||||||
import java.util.Spliterator
|
import java.util.*
|
||||||
import java.util.stream.Stream
|
import java.util.stream.Stream
|
||||||
import java.util.stream.StreamSupport
|
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.spliterator(): Spliterator<out ItemStack> = ItemHandlerSpliterator(this)
|
||||||
fun IItemHandler.awareSpliterator(): Spliterator<out AwareItemStack> = ItemHandlerAwareSpliterator(this)
|
fun IItemHandler.awareSpliterator(): Spliterator<out AwareItemStack> = ItemHandlerAwareSpliterator(this)
|
||||||
fun IItemHandler.stream(): Stream<out ItemStack> = StreamSupport.stream(spliterator(), false)
|
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.Recipe
|
||||||
import net.minecraft.world.item.crafting.RecipeType
|
import net.minecraft.world.item.crafting.RecipeType
|
||||||
import net.minecraft.world.level.ItemLike
|
import net.minecraft.world.level.ItemLike
|
||||||
|
import net.minecraftforge.common.capabilities.ForgeCapabilities
|
||||||
import net.minecraftforge.event.AddReloadListenerEvent
|
import net.minecraftforge.event.AddReloadListenerEvent
|
||||||
import net.minecraftforge.event.OnDatapackSyncEvent
|
import net.minecraftforge.event.OnDatapackSyncEvent
|
||||||
import net.minecraftforge.event.RegisterCommandsEvent
|
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.MatteryCapability
|
||||||
import ru.dbotthepony.mc.otm.capability.drive.IMatteryDrive
|
import ru.dbotthepony.mc.otm.capability.drive.IMatteryDrive
|
||||||
import ru.dbotthepony.mc.otm.client.minecraft
|
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.ImpreciseFraction
|
||||||
import ru.dbotthepony.mc.otm.core.TextComponent
|
import ru.dbotthepony.mc.otm.core.TextComponent
|
||||||
import ru.dbotthepony.mc.otm.core.TranslatableComponent
|
import ru.dbotthepony.mc.otm.core.TranslatableComponent
|
||||||
import ru.dbotthepony.mc.otm.core.filterNotNull
|
import ru.dbotthepony.mc.otm.core.filterNotNull
|
||||||
import ru.dbotthepony.mc.otm.core.formatMatterFull
|
import ru.dbotthepony.mc.otm.core.formatMatterFull
|
||||||
import ru.dbotthepony.mc.otm.core.formatSiComponent
|
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.isActuallyEmpty
|
||||||
import ru.dbotthepony.mc.otm.core.isZero
|
import ru.dbotthepony.mc.otm.core.isZero
|
||||||
import ru.dbotthepony.mc.otm.core.orNull
|
import ru.dbotthepony.mc.otm.core.orNull
|
||||||
@ -962,7 +967,7 @@ object MatterManager {
|
|||||||
return get(value).hasMatterValue
|
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) {
|
if (value.isEmpty) {
|
||||||
return IMatterValue.Companion
|
return IMatterValue.Companion
|
||||||
}
|
}
|
||||||
@ -994,7 +999,7 @@ object MatterManager {
|
|||||||
|
|
||||||
if (drive != null && drive.storageType === OverdriveThatMatters.INSTANCE.ITEM_STORAGE()) {
|
if (drive != null && drive.storageType === OverdriveThatMatters.INSTANCE.ITEM_STORAGE()) {
|
||||||
for (item in (drive as IMatteryDrive<ItemStackWrapper>).stacks) {
|
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) {
|
if (tuple.hasMatterValue) {
|
||||||
matter += tuple
|
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))
|
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
|
* Matter value for itemstack, accounting for capabilities and stack size
|
||||||
*/
|
*/
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun get(value: ItemStack): IMatterValue {
|
@JvmOverloads
|
||||||
return get(value, 0)
|
fun get(value: ItemStack, accountForStackSize: Boolean = true): IMatterValue {
|
||||||
|
return get(value, 0, accountForStackSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@ -1159,6 +1182,9 @@ object MatterManager {
|
|||||||
fun find(server: MinecraftServer, json: JsonObject): Stream<ResolvedRecipe>
|
fun find(server: MinecraftServer, json: JsonObject): Stream<ResolvedRecipe>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Please use exclusively inside recipe finder
|
||||||
|
*/
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun getDirect(value: Item): IMatterValue {
|
fun getDirect(value: Item): IMatterValue {
|
||||||
return Registry.direct(value)
|
return Registry.direct(value)
|
||||||
|
Loading…
Reference in New Issue
Block a user