diff --git a/src/main/java/net/minestom/server/data/DataContainer.java b/src/main/java/net/minestom/server/data/DataContainer.java index e5dbddbde..050712399 100644 --- a/src/main/java/net/minestom/server/data/DataContainer.java +++ b/src/main/java/net/minestom/server/data/DataContainer.java @@ -6,7 +6,10 @@ import org.jetbrains.annotations.Nullable; * Represents an element which can have a {@link Data} attached to it. *

* The data will always be optional and can therefore be null. + * + * @deprecated switch to the Tag API instead */ +@Deprecated public interface DataContainer { /** diff --git a/src/main/java/net/minestom/server/entity/Entity.java b/src/main/java/net/minestom/server/entity/Entity.java index ddd0a833a..eec74abf0 100644 --- a/src/main/java/net/minestom/server/entity/Entity.java +++ b/src/main/java/net/minestom/server/entity/Entity.java @@ -33,6 +33,8 @@ import net.minestom.server.permission.PermissionHandler; import net.minestom.server.potion.Potion; import net.minestom.server.potion.PotionEffect; import net.minestom.server.potion.TimedPotion; +import net.minestom.server.tag.Tag; +import net.minestom.server.tag.TagHandler; import net.minestom.server.thread.ThreadProvider; import net.minestom.server.utils.BlockPosition; import net.minestom.server.utils.Position; @@ -49,6 +51,7 @@ import net.minestom.server.utils.validate.Check; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jglrxavpok.hephaistos.nbt.NBTCompound; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -64,7 +67,7 @@ import java.util.function.UnaryOperator; *

* To create your own entity you probably want to extends {@link LivingEntity} or {@link EntityCreature} instead. */ -public class Entity implements Viewable, Tickable, EventHandler, DataContainer, PermissionHandler, HoverEventSource, Sound.Emitter { +public class Entity implements Viewable, Tickable, EventHandler, DataContainer, TagHandler, PermissionHandler, HoverEventSource, Sound.Emitter { private static final Map ENTITY_BY_ID = new ConcurrentHashMap<>(); private static final Map ENTITY_BY_UUID = new ConcurrentHashMap<>(); @@ -102,6 +105,7 @@ public class Entity implements Viewable, Tickable, EventHandler, Da protected final Set viewers = ConcurrentHashMap.newKeySet(); private final Set unmodifiableViewers = Collections.unmodifiableSet(viewers); private Data data; + private final NBTCompound nbtCompound = new NBTCompound(); private final Set permissions = new CopyOnWriteArraySet<>(); protected UUID uuid; @@ -1629,6 +1633,16 @@ public class Entity implements Viewable, Tickable, EventHandler, Da return (Acquirable) acquirable; } + @Override + public @Nullable T getTag(@NotNull Tag tag) { + return tag.read(nbtCompound); + } + + @Override + public void setTag(@NotNull Tag tag, @Nullable T value) { + tag.write(nbtCompound, value); + } + public enum Pose { STANDING, FALL_FLYING,