Metadata utilities

This commit is contained in:
= 2024-11-14 19:37:33 +02:00
parent 9e530ebed8
commit f7fe6a3187
3 changed files with 32 additions and 3 deletions

View file

@ -63,6 +63,15 @@ public class EntityMeta implements EntityMetadataProvider {
this.metadata = metadata; this.metadata = metadata;
} }
public EntityMeta(EntityMeta other) {
this(other.entityId, new Metadata(other.entityId));
metadata.setMetaFromPacket(other.createPacket());
}
public EntityMeta(int entityId) {
this(entityId, new Metadata(entityId));
}
public void setNotifyAboutChanges(boolean notifyAboutChanges) { public void setNotifyAboutChanges(boolean notifyAboutChanges) {
metadata.setNotifyAboutChanges(notifyAboutChanges); metadata.setNotifyAboutChanges(notifyAboutChanges);
} }

View file

@ -19,13 +19,33 @@ public class Metadata {
private final int entityId; private final int entityId;
private volatile boolean notifyAboutChanges = true; private volatile boolean notifyAboutChanges = true;
private final Map<Byte, EntityData> notNotifiedChanges = new HashMap<>(); private final HashMap<Byte, EntityData> notNotifiedChanges = new HashMap<>();
private final Map<Byte, EntityData> metadataMap = new ConcurrentHashMap<>(); private final ConcurrentHashMap<Byte, EntityData> metadataMap = new ConcurrentHashMap<>();
public Metadata(int entityId) { public Metadata(int entityId) {
this.entityId = entityId; this.entityId = entityId;
} }
public void copyTo(Metadata other) {
other.clear();
synchronized (other.notNotifiedChanges) {
other.notNotifiedChanges.putAll(notNotifiedChanges);
}
other.metadataMap.putAll(metadataMap);
}
public void copyFrom(Metadata other) {
other.copyTo(this); // Scuffed pepelaugh
}
/**
* Clears the internal metadata map, is not responsible for informing the clients entity view with the newly reset information
*/
public void clear() {
this.metadataMap.clear();
this.notNotifiedChanges.clear();
}
public <T> T getIndex(byte index, @Nullable T defaultValue) { public <T> T getIndex(byte index, @Nullable T defaultValue) {
EntityData value = this.metadataMap.get(index); EntityData value = this.metadataMap.get(index);
return value != null ? (T) value.getValue() : defaultValue; return value != null ? (T) value.getValue() : defaultValue;

View file

@ -1,6 +1,6 @@
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
val fullVersion = "3.0.0" val fullVersion = "3.0.1"
val snapshot = true val snapshot = true
group = "me.tofaa.entitylib" group = "me.tofaa.entitylib"