diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/fluid/ItemMatteryFluidHandler.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/fluid/ItemMatteryFluidHandler.kt index 4a9fc3428..fe66aeabb 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/fluid/ItemMatteryFluidHandler.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/fluid/ItemMatteryFluidHandler.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.capability.fluid import net.minecraft.world.item.ItemStack 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.IFluidHandlerItem 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 { override var fluid: FluidStack - get() = itemStack[MDataComponentTypes.FLUID_STACK] ?: FluidStack.EMPTY - set(value) { itemStack[MDataComponentTypes.FLUID_STACK] = value } + get() = (itemStack[MDataComponentTypes.FLUID_STACK] ?: SimpleFluidContent.EMPTY).copy() + set(value) { itemStack[MDataComponentTypes.FLUID_STACK] = SimpleFluidContent.copyOf(value) } final override val capacity: Int get() = _capacity.asInt diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/matter/PatternStorageItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/matter/PatternStorageItem.kt index 514561761..9bc8d5812 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/matter/PatternStorageItem.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/matter/PatternStorageItem.kt @@ -1,5 +1,6 @@ package ru.dbotthepony.mc.otm.item.matter +import com.google.common.collect.ImmutableList import net.minecraft.ChatFormatting import net.minecraft.network.chat.Component import net.minecraft.world.item.Item @@ -119,7 +120,7 @@ class PatternStorageItem : Item, CapabilitiesRegisterListener { } patterns[i] = pattern - stack[MDataComponentTypes.PATTERNS] = patterns + stack[MDataComponentTypes.PATTERNS] = ImmutableList.copyOf(patterns) return PatternInsertUpdated(pattern, ePattern) } } @@ -129,7 +130,7 @@ class PatternStorageItem : Item, CapabilitiesRegisterListener { if (!simulate) { patterns.add(pattern) - stack[MDataComponentTypes.PATTERNS] = patterns + stack[MDataComponentTypes.PATTERNS] = ImmutableList.copyOf(patterns) } return PatternInsertInserted(pattern) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MDataComponentTypes.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MDataComponentTypes.kt index 358bc7a4f..c015eca46 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MDataComponentTypes.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MDataComponentTypes.kt @@ -1,5 +1,6 @@ package ru.dbotthepony.mc.otm.registry +import com.google.common.collect.ImmutableList import com.mojang.serialization.Codec import net.minecraft.core.UUIDUtil import net.minecraft.core.component.DataComponentType @@ -8,6 +9,7 @@ import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec import net.neoforged.bus.api.IEventBus 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.container.ItemFilter import ru.dbotthepony.mc.otm.core.math.Decimal @@ -30,13 +32,13 @@ object MDataComponentTypes { } val FLUID_STACK by registry.register("fluid_stack") { - object : DataComponentType { - override fun codec(): Codec { - return FluidStack.OPTIONAL_CODEC + object : DataComponentType { + override fun codec(): Codec { + return SimpleFluidContent.CODEC } - override fun streamCodec(): StreamCodec { - return FluidStack.OPTIONAL_STREAM_CODEC + override fun streamCodec(): StreamCodec { + return SimpleFluidContent.STREAM_CODEC } } } @@ -53,7 +55,10 @@ object MDataComponentTypes { val EXOPACK_UPGRADE_ID: DataComponentType by registry.register("exopack_upgrade_id") { uuid() } val QUANTUM_LINK_ID: DataComponentType by registry.register("quantum_link_id") { uuid() } val CONDENSATION_DRIVE_UUID: DataComponentType by registry.register("condensation_drive_uuid") { uuid() } - val PATTERNS: DataComponentType> by registry.register("patterns") { DataComponentType.builder>().persistent(Codec.list(PatternState.CODEC)).build() } + val PATTERNS: DataComponentType> by registry.register("patterns") { + DataComponentType.builder>().persistent(Codec.list(PatternState.CODEC).xmap({ ImmutableList.copyOf(it) }, { it })).build() + } + val ITEM_FILTER: DataComponentType by registry.register("item_filter") { DataComponentType.builder().persistent(ItemFilter.CODEC).build() } val EXPERIENCE: DataComponentType by registry.register("experience") { DataComponentType.builder().persistent(Codec.LONG).networkSynchronized(StreamCodecs.LONG).build() }