Skip to content

SyncedItemHolder

interface SyncedItemHolder

Implemented by whatever owns an net.kernelpanicsoft.archie.serialization.NBTHolder.item-backed holder that wants its @Sync-annotated fields to actually push updates somewhere, mirroring what net.minecraft.world.level.block.entity.BlockEntity gets automatically via net.kernelpanicsoft.archie.gui.blockentity.BlockEntityStateManager.

net.kernelpanicsoft.archie.serialization.ItemStackNBTHolderImpl checks for this on its thisRef the same way it checks thisRef is BlockEntity for the block-entity-backed implementation - so any NBTHolder.item(stack)-delegated property declared directly on a type implementing this interface gets registerSyncedProperty/onSyncedPropertyChanged calls automatically.

Inheritors

Functions

onSyncedPropertyChanged

abstract fun <T> onSyncedPropertyChanged(
    name: String, 
    serializer: KSerializer<T>, 
    value: T
)

Called on every write to a @Sync-annotated NBTHolder.item-delegated property named name.

registerSyncedProperty

open fun <T> registerSyncedProperty(name: String, serializer: KSerializer<T>)

Called once, at property-declaration time, for every @Sync-annotated NBTHolder.item- delegated property named name - independent of whether its value has ever actually been written. Needed so a serializer is available to decode an incoming edit even for a property whose value came from an existing stack's already-populated data (where the delegate's own initial-value write, which onSyncedPropertyChanged would otherwise piggyback on, never runs) - mirrors why net.kernelpanicsoft.archie.gui.blockentity.BlockEntityStateContainer has its own separate setPropertySerializer call distinct from updateProperty. No-op by default for implementations that don't need it.