Update FLUID_STACK component to use SimpleFluidContent

This commit is contained in:
DBotThePony 2024-08-28 18:18:01 +07:00
parent 0446e5adb3
commit 5af896e476
Signed by: DBot
GPG Key ID: DCC23B5715498507
3 changed files with 17 additions and 10 deletions

View File

@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.capability.fluid
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.neoforged.neoforge.fluids.FluidStack import net.neoforged.neoforge.fluids.FluidStack
import net.neoforged.neoforge.fluids.SimpleFluidContent
import net.neoforged.neoforge.fluids.capability.IFluidHandler import net.neoforged.neoforge.fluids.capability.IFluidHandler
import net.neoforged.neoforge.fluids.capability.IFluidHandlerItem import net.neoforged.neoforge.fluids.capability.IFluidHandlerItem
import ru.dbotthepony.mc.otm.registry.MDataComponentTypes import ru.dbotthepony.mc.otm.registry.MDataComponentTypes
@ -12,8 +13,8 @@ import java.util.function.IntSupplier
*/ */
open class ItemMatteryFluidHandler(val itemStack: ItemStack, private val _capacity: IntSupplier) : AbstractMatteryFluidHandler(), IFluidHandlerItem { open class ItemMatteryFluidHandler(val itemStack: ItemStack, private val _capacity: IntSupplier) : AbstractMatteryFluidHandler(), IFluidHandlerItem {
override var fluid: FluidStack override var fluid: FluidStack
get() = itemStack[MDataComponentTypes.FLUID_STACK] ?: FluidStack.EMPTY get() = (itemStack[MDataComponentTypes.FLUID_STACK] ?: SimpleFluidContent.EMPTY).copy()
set(value) { itemStack[MDataComponentTypes.FLUID_STACK] = value } set(value) { itemStack[MDataComponentTypes.FLUID_STACK] = SimpleFluidContent.copyOf(value) }
final override val capacity: Int final override val capacity: Int
get() = _capacity.asInt get() = _capacity.asInt

View File

@ -1,5 +1,6 @@
package ru.dbotthepony.mc.otm.item.matter package ru.dbotthepony.mc.otm.item.matter
import com.google.common.collect.ImmutableList
import net.minecraft.ChatFormatting import net.minecraft.ChatFormatting
import net.minecraft.network.chat.Component import net.minecraft.network.chat.Component
import net.minecraft.world.item.Item import net.minecraft.world.item.Item
@ -119,7 +120,7 @@ class PatternStorageItem : Item, CapabilitiesRegisterListener {
} }
patterns[i] = pattern patterns[i] = pattern
stack[MDataComponentTypes.PATTERNS] = patterns stack[MDataComponentTypes.PATTERNS] = ImmutableList.copyOf(patterns)
return PatternInsertUpdated(pattern, ePattern) return PatternInsertUpdated(pattern, ePattern)
} }
} }
@ -129,7 +130,7 @@ class PatternStorageItem : Item, CapabilitiesRegisterListener {
if (!simulate) { if (!simulate) {
patterns.add(pattern) patterns.add(pattern)
stack[MDataComponentTypes.PATTERNS] = patterns stack[MDataComponentTypes.PATTERNS] = ImmutableList.copyOf(patterns)
} }
return PatternInsertInserted(pattern) return PatternInsertInserted(pattern)

View File

@ -1,5 +1,6 @@
package ru.dbotthepony.mc.otm.registry package ru.dbotthepony.mc.otm.registry
import com.google.common.collect.ImmutableList
import com.mojang.serialization.Codec import com.mojang.serialization.Codec
import net.minecraft.core.UUIDUtil import net.minecraft.core.UUIDUtil
import net.minecraft.core.component.DataComponentType import net.minecraft.core.component.DataComponentType
@ -8,6 +9,7 @@ import net.minecraft.network.RegistryFriendlyByteBuf
import net.minecraft.network.codec.StreamCodec import net.minecraft.network.codec.StreamCodec
import net.neoforged.bus.api.IEventBus import net.neoforged.bus.api.IEventBus
import net.neoforged.neoforge.fluids.FluidStack import net.neoforged.neoforge.fluids.FluidStack
import net.neoforged.neoforge.fluids.SimpleFluidContent
import ru.dbotthepony.mc.otm.capability.matter.PatternState import ru.dbotthepony.mc.otm.capability.matter.PatternState
import ru.dbotthepony.mc.otm.container.ItemFilter import ru.dbotthepony.mc.otm.container.ItemFilter
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
@ -30,13 +32,13 @@ object MDataComponentTypes {
} }
val FLUID_STACK by registry.register("fluid_stack") { val FLUID_STACK by registry.register("fluid_stack") {
object : DataComponentType<FluidStack> { object : DataComponentType<SimpleFluidContent> {
override fun codec(): Codec<FluidStack> { override fun codec(): Codec<SimpleFluidContent> {
return FluidStack.OPTIONAL_CODEC return SimpleFluidContent.CODEC
} }
override fun streamCodec(): StreamCodec<in RegistryFriendlyByteBuf, FluidStack> { override fun streamCodec(): StreamCodec<in RegistryFriendlyByteBuf, SimpleFluidContent> {
return FluidStack.OPTIONAL_STREAM_CODEC return SimpleFluidContent.STREAM_CODEC
} }
} }
} }
@ -53,7 +55,10 @@ object MDataComponentTypes {
val EXOPACK_UPGRADE_ID: DataComponentType<UUID> by registry.register("exopack_upgrade_id") { uuid() } val EXOPACK_UPGRADE_ID: DataComponentType<UUID> by registry.register("exopack_upgrade_id") { uuid() }
val QUANTUM_LINK_ID: DataComponentType<UUID> by registry.register("quantum_link_id") { uuid() } val QUANTUM_LINK_ID: DataComponentType<UUID> by registry.register("quantum_link_id") { uuid() }
val CONDENSATION_DRIVE_UUID: DataComponentType<UUID> by registry.register("condensation_drive_uuid") { uuid() } val CONDENSATION_DRIVE_UUID: DataComponentType<UUID> by registry.register("condensation_drive_uuid") { uuid() }
val PATTERNS: DataComponentType<List<PatternState>> by registry.register("patterns") { DataComponentType.builder<List<PatternState>>().persistent(Codec.list(PatternState.CODEC)).build() } val PATTERNS: DataComponentType<ImmutableList<PatternState>> by registry.register("patterns") {
DataComponentType.builder<ImmutableList<PatternState>>().persistent(Codec.list(PatternState.CODEC).xmap({ ImmutableList.copyOf(it) }, { it })).build()
}
val ITEM_FILTER: DataComponentType<ItemFilter> by registry.register("item_filter") { DataComponentType.builder<ItemFilter>().persistent(ItemFilter.CODEC).build() } val ITEM_FILTER: DataComponentType<ItemFilter> by registry.register("item_filter") { DataComponentType.builder<ItemFilter>().persistent(ItemFilter.CODEC).build() }
val EXPERIENCE: DataComponentType<Long> by registry.register("experience") { DataComponentType.builder<Long>().persistent(Codec.LONG).networkSynchronized(StreamCodecs.LONG).build() } val EXPERIENCE: DataComponentType<Long> by registry.register("experience") { DataComponentType.builder<Long>().persistent(Codec.LONG).networkSynchronized(StreamCodecs.LONG).build() }