2024-12-11 22:26:55 +01:00
--- a/net/minecraft/network/syncher/SynchedEntityData.java
+++ b/net/minecraft/network/syncher/SynchedEntityData.java
2022-12-07 23:25:19 +01:00
@@ -50,8 +50,8 @@
}
2024-12-11 22:26:55 +01:00
}
2022-12-07 23:25:19 +01:00
- private <T> SynchedEntityData.DataItem<T> getItem(EntityDataAccessor<T> key) {
2024-12-11 22:26:55 +01:00
- return this.itemsById[key.id()];
2022-12-07 23:25:19 +01:00
+ public <T> SynchedEntityData.DataItem<T> getItem(EntityDataAccessor<T> key) { // Paper - public
2024-12-11 22:26:55 +01:00
+ return (SynchedEntityData.DataItem<T>) this.itemsById[key.id()]; // CraftBukkit - decompile error
}
public <T> T get(EntityDataAccessor<T> data) {
@@ -74,6 +74,13 @@
}
+ // CraftBukkit start - add method from above
+ public <T> void markDirty(EntityDataAccessor<T> datawatcherobject) {
+ this.getItem(datawatcherobject).setDirty(true);
+ this.isDirty = true;
+ }
+ // CraftBukkit end
+
public boolean isDirty() {
return this.isDirty;
}
2022-12-07 23:25:19 +01:00
@@ -140,10 +147,24 @@
2024-12-11 22:26:55 +01:00
if (!Objects.equals(from.serializer(), to.accessor.serializer())) {
throw new IllegalStateException(String.format(Locale.ROOT, "Invalid entity data item type for field %d on entity %s: old=%s(%s), new=%s(%s)", to.accessor.id(), this.entity, to.value, to.value.getClass(), from.value, from.value.getClass()));
} else {
- to.setValue(from.value);
+ to.setValue((T) from.value); // CraftBukkit - decompile error
}
}
2022-12-07 23:25:19 +01:00
+ // Paper start
+ // We need to pack all as we cannot rely on "non default values" or "dirty" ones.
+ // Because these values can possibly be desynced on the client.
+ @Nullable
+ public List<SynchedEntityData.DataValue<?>> packAll() {
+ final List<SynchedEntityData.DataValue<?>> list = new ArrayList<>();
+ for (final DataItem<?> dataItem : this.itemsById) {
+ list.add(dataItem.value());
+ }
+
+ return list;
+ }
+ // Paper end
+
public static class DataItem<T> {
final EntityDataAccessor<T> accessor;