From 5166bf20ad9077e82ccb74ee70a31968fc42206d Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Wed, 19 Feb 2025 12:16:01 +0700 Subject: [PATCH] Fixed observed item stacks are not properly synched --- .../mc/otm/network/ItemStackCodec.kt | 22 +++++++++++++++++++ .../mc/otm/network/syncher/SynchableGroup.kt | 7 +++--- 2 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 src/main/kotlin/ru/dbotthepony/mc/otm/network/ItemStackCodec.kt diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/network/ItemStackCodec.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/network/ItemStackCodec.kt new file mode 100644 index 000000000..488f161d1 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/network/ItemStackCodec.kt @@ -0,0 +1,22 @@ +package ru.dbotthepony.mc.otm.network + +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.world.item.ItemStack + +object ItemStackCodec : MatteryStreamCodec { + override fun decode(stream: RegistryFriendlyByteBuf): ItemStack { + return ItemStack.OPTIONAL_STREAM_CODEC.decode(stream) + } + + override fun encode(stream: RegistryFriendlyByteBuf, value: ItemStack) { + return ItemStack.OPTIONAL_STREAM_CODEC.encode(stream, value) + } + + override fun copy(value: ItemStack): ItemStack { + return value.copy() + } + + override fun compare(a: ItemStack, b: ItemStack): Boolean { + return ItemStack.isSameItemSameComponents(a, b) + } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/network/syncher/SynchableGroup.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/network/syncher/SynchableGroup.kt index 9b5ad3f04..e61c14779 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/network/syncher/SynchableGroup.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/network/syncher/SynchableGroup.kt @@ -21,6 +21,7 @@ import ru.dbotthepony.mc.otm.OTM_CLEANER import ru.dbotthepony.mc.otm.core.collect.filterNotNull import ru.dbotthepony.mc.otm.core.collect.map import ru.dbotthepony.mc.otm.core.math.Decimal +import ru.dbotthepony.mc.otm.network.ItemStackCodec import ru.dbotthepony.mc.otm.network.MatteryStreamCodec import ru.dbotthepony.mc.otm.network.StreamCodecs import ru.dbotthepony.mc.otm.network.decodePayload @@ -282,15 +283,15 @@ class SynchableGroup : Observer, ISynchable, Iterable { } fun item(value: ItemStack = ItemStack.EMPTY, setter: DelegateSetter = DelegateSetter.passthrough(), getter: DelegateGetter = DelegateGetter.passthrough()): SynchableDelegate { - return add(ListenableDelegate.maskSmart(value, getter, setter), ItemStack.OPTIONAL_STREAM_CODEC.wrap()) + return add(ListenableDelegate.maskSmart(value, getter, setter), ItemStackCodec) } fun computedItem(delegate: Supplier): SynchableDelegate { - return computed(delegate, ItemStack.OPTIONAL_STREAM_CODEC.wrap()) + return computed(delegate, ItemStackCodec) } fun observedItem(value: ItemStack = ItemStack.EMPTY, setter: DelegateSetter = DelegateSetter.passthrough(), getter: DelegateGetter = DelegateGetter.passthrough()): SynchableObservedDelegate { - return add(Delegate.maskSmart(value, getter, setter), ItemStack.OPTIONAL_STREAM_CODEC.wrap()) + return add(Delegate.maskSmart(value, getter, setter), ItemStackCodec) } /**