--- a/net/minecraft/network/syncher/DataWatcher.java +++ b/net/minecraft/network/syncher/DataWatcher.java @@ -24,6 +24,11 @@ import org.apache.commons.lang3.ObjectUtils; import org.slf4j.Logger; +// CraftBukkit start +import net.minecraft.network.protocol.game.PacketPlayOutEntityMetadata; +import net.minecraft.server.level.EntityPlayer; +// CraftBukkit end + public class DataWatcher { private static final Logger LOGGER = LogUtils.getLogger(); @@ -146,6 +151,13 @@ } + // CraftBukkit start - add method from above + public void markDirty(DataWatcherObject datawatcherobject) { + this.getItem(datawatcherobject).setDirty(true); + this.isDirty = true; + } + // CraftBukkit end + public boolean isDirty() { return this.isDirty; } @@ -227,7 +239,7 @@ if (!Objects.equals(datawatcher_b.serializer(), datawatcher_item.accessor.getSerializer())) { throw new IllegalStateException(String.format(Locale.ROOT, "Invalid entity data item type for field %d on entity %s: old=%s(%s), new=%s(%s)", datawatcher_item.accessor.getId(), this.entity, datawatcher_item.value, datawatcher_item.value.getClass(), datawatcher_b.value, datawatcher_b.value.getClass())); } else { - datawatcher_item.setValue(datawatcher_b.value); + datawatcher_item.setValue((T) datawatcher_b.value); // CraftBukkit - decompile error } } @@ -235,6 +247,18 @@ return this.itemsById.isEmpty(); } + // CraftBukkit start + public void refresh(EntityPlayer to) { + if (!this.isEmpty()) { + List> list = this.getNonDefaultValues(); + + if (list != null) { + to.connection.send(new PacketPlayOutEntityMetadata(this.entity.getId(), list)); + } + } + } + // CraftBukkit end + public static class Item { final DataWatcherObject accessor; @@ -277,7 +301,7 @@ } } - public static record b (int id, DataWatcherSerializer serializer, T value) { + public static record b(int id, DataWatcherSerializer serializer, T value) { // CraftBukkit - decompile error public static DataWatcher.b create(DataWatcherObject datawatcherobject, T t0) { DataWatcherSerializer datawatcherserializer = datawatcherobject.getSerializer();