Fixed observed item stacks are not properly synched

This commit is contained in:
DBotThePony 2025-02-19 12:16:01 +07:00
parent 74afafd904
commit 5166bf20ad
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 26 additions and 3 deletions

View File

@ -0,0 +1,22 @@
package ru.dbotthepony.mc.otm.network
import net.minecraft.network.RegistryFriendlyByteBuf
import net.minecraft.world.item.ItemStack
object ItemStackCodec : MatteryStreamCodec<RegistryFriendlyByteBuf, ItemStack> {
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)
}
}

View File

@ -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<ISynchable> {
}
fun item(value: ItemStack = ItemStack.EMPTY, setter: DelegateSetter<ItemStack> = DelegateSetter.passthrough(), getter: DelegateGetter<ItemStack> = DelegateGetter.passthrough()): SynchableDelegate<ItemStack> {
return add(ListenableDelegate.maskSmart(value, getter, setter), ItemStack.OPTIONAL_STREAM_CODEC.wrap())
return add(ListenableDelegate.maskSmart(value, getter, setter), ItemStackCodec)
}
fun computedItem(delegate: Supplier<ItemStack>): SynchableDelegate<ItemStack> {
return computed(delegate, ItemStack.OPTIONAL_STREAM_CODEC.wrap())
return computed(delegate, ItemStackCodec)
}
fun observedItem(value: ItemStack = ItemStack.EMPTY, setter: DelegateSetter<ItemStack> = DelegateSetter.passthrough(), getter: DelegateGetter<ItemStack> = DelegateGetter.passthrough()): SynchableObservedDelegate<ItemStack> {
return add(Delegate.maskSmart(value, getter, setter), ItemStack.OPTIONAL_STREAM_CODEC.wrap())
return add(Delegate.maskSmart(value, getter, setter), ItemStackCodec)
}
/**