diff --git a/README.md b/README.md
index 3b89d3d..c37341b 100644
--- a/README.md
+++ b/README.md
@@ -107,6 +107,7 @@ Once this list is complete, i will release a stable version of the library.
- [ ] WrapperEntities must seamlessly send packet updates to viewers, currently they are not.
- [ ] Add support for more actions using WrapperEntities.
- [ ] More javadocs.
+- [ ] Make ObjectData actually useful.
### Credits
- PacketEvents for providing the API and retrooper being a cool guy in general
diff --git a/src/main/java/me/tofaa/entitylib/EntityLib.java b/src/main/java/me/tofaa/entitylib/EntityLib.java
index 2e3b52a..8cab681 100644
--- a/src/main/java/me/tofaa/entitylib/EntityLib.java
+++ b/src/main/java/me/tofaa/entitylib/EntityLib.java
@@ -21,6 +21,16 @@ import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiFunction;
+/**
+ * Base API class for EntityLib, contains all the methods to interact with the library.
+ *
+ * Initialization should be done before PacketEvents. After PE is initialized, call {@link EntityLib#init(PacketEventsAPI)} to initialize EntityLib.
+ *
+ * To enable entity interactions, call {@link EntityLib#enableEntityInteractions()}. these will help you interact with a {@link WrapperEntity} object.
+ *
+ * By default, EntityLib does not persistently store data, this is planned for a future feature but for now you must store your own data if you want it to persist after restart.
+ *
+ */
public final class EntityLib {
private EntityLib() {}
diff --git a/src/main/java/me/tofaa/entitylib/MetaConverterRegistry.java b/src/main/java/me/tofaa/entitylib/MetaConverterRegistry.java
index 782f8e6..ce6d4be 100644
--- a/src/main/java/me/tofaa/entitylib/MetaConverterRegistry.java
+++ b/src/main/java/me/tofaa/entitylib/MetaConverterRegistry.java
@@ -1,6 +1,7 @@
package me.tofaa.entitylib;
import com.github.retrooper.packetevents.protocol.entity.type.EntityType;
+import com.sun.org.apache.bcel.internal.generic.PUTFIELD;
import me.tofaa.entitylib.meta.EntityMeta;
import me.tofaa.entitylib.meta.Metadata;
import me.tofaa.entitylib.meta.mobs.*;
@@ -22,16 +23,15 @@ import me.tofaa.entitylib.meta.mobs.monster.zombie.*;
import me.tofaa.entitylib.meta.mobs.passive.*;
import me.tofaa.entitylib.meta.mobs.water.*;
import me.tofaa.entitylib.meta.mobs.minecart.*;
-import me.tofaa.entitylib.meta.mobs.other.*;
import me.tofaa.entitylib.meta.mobs.tameable.CatMeta;
import me.tofaa.entitylib.meta.mobs.tameable.ParrotMeta;
import me.tofaa.entitylib.meta.mobs.tameable.WolfMeta;
import me.tofaa.entitylib.meta.mobs.villager.VillagerMeta;
import me.tofaa.entitylib.meta.mobs.villager.WanderingTraderMeta;
+import me.tofaa.entitylib.meta.other.*;
import me.tofaa.entitylib.meta.projectile.*;
import me.tofaa.entitylib.meta.types.PlayerMeta;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Map;
@@ -45,6 +45,10 @@ final class MetaConverterRegistry {
private final Map> metaClasses = new HashMap<>();
MetaConverterRegistry() {
+ put(INTERACTION, InteractionMeta.class, InteractionMeta::new);
+ put(BLOCK_DISPLAY, BlockDisplayMeta.class, BlockDisplayMeta::new);
+ put(ITEM_DISPLAY, ItemDisplayMeta.class, ItemDisplayMeta::new);
+ put(TEXT_DISPLAY, TextDisplayMeta.class, TextDisplayMeta::new);
put(AREA_EFFECT_CLOUD, AreaEffectCloudMeta.class, AreaEffectCloudMeta::new);
put(ARMOR_STAND, ArmorStandMeta.class, ArmorStandMeta::new);
put(BOAT, BoatMeta.class, BoatMeta::new);
diff --git a/src/main/java/me/tofaa/entitylib/meta/EntityMeta.java b/src/main/java/me/tofaa/entitylib/meta/EntityMeta.java
index b90cbe1..dfee9c4 100644
--- a/src/main/java/me/tofaa/entitylib/meta/EntityMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/EntityMeta.java
@@ -138,6 +138,14 @@ public class EntityMeta implements EntityMetadataProvider {
this.metadata.setIndex(offset(OFFSET, 6), EntityDataTypes.ENTITY_POSE, value);
}
+ public int getTicksFrozenInPowderedSnow() {
+ return this.metadata.getIndex(offset(OFFSET, 7), 0);
+ }
+
+ public void setTicksFrozenInPowderedSnow(int value) {
+ this.metadata.setIndex(offset(OFFSET, 7), EntityDataTypes.INT, value);
+ }
+
public WrapperPlayServerEntityMetadata createPacket() {
return metadata.createPacket();
}
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/AreaEffectCloudMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/AreaEffectCloudMeta.java
similarity index 96%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/AreaEffectCloudMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/AreaEffectCloudMeta.java
index d5e288f..19e3564 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/AreaEffectCloudMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/AreaEffectCloudMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import me.tofaa.entitylib.meta.EntityMeta;
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/ArmorStandMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/ArmorStandMeta.java
similarity index 98%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/ArmorStandMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/ArmorStandMeta.java
index b1660bb..75520c9 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/ArmorStandMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/ArmorStandMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import com.github.retrooper.packetevents.util.Vector3f;
diff --git a/src/main/java/me/tofaa/entitylib/meta/other/BlockDisplayMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/BlockDisplayMeta.java
new file mode 100644
index 0000000..fa91854
--- /dev/null
+++ b/src/main/java/me/tofaa/entitylib/meta/other/BlockDisplayMeta.java
@@ -0,0 +1,24 @@
+package me.tofaa.entitylib.meta.other;
+
+import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
+import me.tofaa.entitylib.meta.Metadata;
+import me.tofaa.entitylib.meta.types.DisplayMeta;
+
+public class BlockDisplayMeta extends DisplayMeta {
+
+ public static final byte OFFSET = DisplayMeta.MAX_OFFSET;
+ public static final byte MAX_OFFSET = OFFSET + 1;
+
+ public BlockDisplayMeta(int entityId, Metadata metadata) {
+ super(entityId, metadata);
+ }
+
+ public int getBlockId() {
+ return super.metadata.getIndex(OFFSET, 0);
+ }
+
+ public void setBlockId(int blockId) {
+ super.metadata.setIndex(OFFSET, EntityDataTypes.INT, blockId);
+ }
+
+}
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/BoatMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/BoatMeta.java
similarity index 98%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/BoatMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/BoatMeta.java
index e8d794f..a69efbb 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/BoatMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/BoatMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import me.tofaa.entitylib.meta.EntityMeta;
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/EndCrystalMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/EndCrystalMeta.java
similarity index 96%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/EndCrystalMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/EndCrystalMeta.java
index 3e9ee75..c7e09f1 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/EndCrystalMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/EndCrystalMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import com.github.retrooper.packetevents.util.Vector3i;
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/EnderDragonMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/EnderDragonMeta.java
similarity index 96%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/EnderDragonMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/EnderDragonMeta.java
index 017c8c0..e505bb1 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/EnderDragonMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/EnderDragonMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import me.tofaa.entitylib.meta.Metadata;
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/EvokerFangsMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/EvokerFangsMeta.java
similarity index 89%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/EvokerFangsMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/EvokerFangsMeta.java
index 432633c..6d09c26 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/EvokerFangsMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/EvokerFangsMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import me.tofaa.entitylib.meta.EntityMeta;
import me.tofaa.entitylib.meta.Metadata;
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/FallingBlockMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/FallingBlockMeta.java
similarity index 96%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/FallingBlockMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/FallingBlockMeta.java
index 6fe0004..ff556ff 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/FallingBlockMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/FallingBlockMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import com.github.retrooper.packetevents.util.Vector3i;
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/FireworkRocketMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/FireworkRocketMeta.java
similarity index 97%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/FireworkRocketMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/FireworkRocketMeta.java
index bdb6bb9..76b36a5 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/FireworkRocketMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/FireworkRocketMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import com.github.retrooper.packetevents.protocol.item.ItemStack;
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/FishingHookMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/FishingHookMeta.java
similarity index 96%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/FishingHookMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/FishingHookMeta.java
index 29ea6f2..61f3242 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/FishingHookMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/FishingHookMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import me.tofaa.entitylib.meta.EntityMeta;
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/GlowItemFrameMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/GlowItemFrameMeta.java
similarity index 88%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/GlowItemFrameMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/GlowItemFrameMeta.java
index 7b73ff9..96fc2d7 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/GlowItemFrameMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/GlowItemFrameMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import me.tofaa.entitylib.meta.Metadata;
diff --git a/src/main/java/me/tofaa/entitylib/meta/other/InteractionMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/InteractionMeta.java
new file mode 100644
index 0000000..77318f9
--- /dev/null
+++ b/src/main/java/me/tofaa/entitylib/meta/other/InteractionMeta.java
@@ -0,0 +1,41 @@
+package me.tofaa.entitylib.meta.other;
+
+import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
+import me.tofaa.entitylib.meta.EntityMeta;
+import me.tofaa.entitylib.meta.Metadata;
+
+public class InteractionMeta extends EntityMeta {
+
+ public static final byte OFFSET = EntityMeta.MAX_OFFSET;
+ public static final byte MAX_OFFSET = OFFSET + 3;
+
+ public InteractionMeta(int entityId, Metadata metadata) {
+ super(entityId, metadata);
+ }
+
+ public float getWidth() {
+ return super.metadata.getIndex(OFFSET, 1.0F);
+ }
+
+ public void setWidth(float value) {
+ super.metadata.setIndex(OFFSET, EntityDataTypes.FLOAT, value);
+ }
+
+ public float getHeight() {
+ return super.metadata.getIndex(offset(OFFSET, 1), 1.0F);
+ }
+
+ public void setHeight(float value) {
+ super.metadata.setIndex(offset(OFFSET, 1), EntityDataTypes.FLOAT, value);
+ }
+
+ public boolean isResponsive() {
+ return super.metadata.getIndex(offset(OFFSET, 2), false);
+ }
+
+ public void setResponsive(boolean value) {
+ super.metadata.setIndex(offset(OFFSET, 2), EntityDataTypes.BOOLEAN, value);
+ }
+
+
+}
diff --git a/src/main/java/me/tofaa/entitylib/meta/other/ItemDisplayMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/ItemDisplayMeta.java
new file mode 100644
index 0000000..204fe7d
--- /dev/null
+++ b/src/main/java/me/tofaa/entitylib/meta/other/ItemDisplayMeta.java
@@ -0,0 +1,39 @@
+package me.tofaa.entitylib.meta.other;
+
+import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
+import me.tofaa.entitylib.meta.Metadata;
+import me.tofaa.entitylib.meta.types.DisplayMeta;
+
+public class ItemDisplayMeta extends DisplayMeta {
+
+ public static final byte OFFSET = DisplayMeta.MAX_OFFSET;
+ public static final byte MAX_OFFSET = OFFSET + 1;
+
+
+ public ItemDisplayMeta(int entityId, Metadata metadata) {
+ super(entityId, metadata);
+ }
+
+ public DisplayType getDisplayType() {
+ return DisplayType.VALUES[super.metadata.getIndex(OFFSET, 0)];
+ }
+
+ public void setDisplayType(DisplayType displayType) {
+ super.metadata.setIndex(OFFSET, EntityDataTypes.BYTE, (byte) displayType.ordinal());
+ }
+
+ public enum DisplayType {
+ NONE,
+ THIRD_PERSON_LEFT_HAND,
+ THIRD_PERSON_RIGHT_HAND,
+ FIRST_PERSON_LEFT_HAND,
+ FIRST_PERSON_RIGHT_HAND,
+ HEAD,
+ GUI,
+ GROUND,
+ FIXED;
+
+ private static final DisplayType[] VALUES = values();
+ }
+
+}
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/ItemFrameMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/ItemFrameMeta.java
similarity index 97%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/ItemFrameMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/ItemFrameMeta.java
index 00ec3b7..ad15d4c 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/ItemFrameMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/ItemFrameMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import com.github.retrooper.packetevents.protocol.item.ItemStack;
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/LeashKnotMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/LeashKnotMeta.java
similarity index 88%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/LeashKnotMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/LeashKnotMeta.java
index 18260a2..551bfde 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/LeashKnotMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/LeashKnotMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import me.tofaa.entitylib.meta.EntityMeta;
import me.tofaa.entitylib.meta.Metadata;
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/LightningBoltMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/LightningBoltMeta.java
similarity index 89%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/LightningBoltMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/LightningBoltMeta.java
index 4ec7add..36b2fdc 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/LightningBoltMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/LightningBoltMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import me.tofaa.entitylib.meta.EntityMeta;
import me.tofaa.entitylib.meta.Metadata;
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/LlamaSpitMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/LlamaSpitMeta.java
similarity index 93%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/LlamaSpitMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/LlamaSpitMeta.java
index ad61c8e..1f386e0 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/LlamaSpitMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/LlamaSpitMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import me.tofaa.entitylib.meta.EntityMeta;
import me.tofaa.entitylib.meta.Metadata;
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/MarkerMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/MarkerMeta.java
similarity index 88%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/MarkerMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/MarkerMeta.java
index 5bc64b5..2656e23 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/MarkerMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/MarkerMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import me.tofaa.entitylib.meta.EntityMeta;
import me.tofaa.entitylib.meta.Metadata;
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/PaintingMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/PaintingMeta.java
similarity index 98%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/PaintingMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/PaintingMeta.java
index f0f4df4..cd0e64c 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/PaintingMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/PaintingMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import com.github.retrooper.packetevents.protocol.world.Direction;
import me.tofaa.entitylib.meta.EntityMeta;
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/PrimedTntMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/PrimedTntMeta.java
similarity index 93%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/PrimedTntMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/other/PrimedTntMeta.java
index 162dee5..0f87fa0 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/PrimedTntMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/other/PrimedTntMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.other;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import me.tofaa.entitylib.meta.EntityMeta;
diff --git a/src/main/java/me/tofaa/entitylib/meta/other/TextDisplayMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/TextDisplayMeta.java
new file mode 100644
index 0000000..4c77d23
--- /dev/null
+++ b/src/main/java/me/tofaa/entitylib/meta/other/TextDisplayMeta.java
@@ -0,0 +1,96 @@
+package me.tofaa.entitylib.meta.other;
+
+import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
+import me.tofaa.entitylib.meta.Metadata;
+import me.tofaa.entitylib.meta.types.DisplayMeta;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
+
+public class TextDisplayMeta extends DisplayMeta {
+
+ public static final byte OFFSET = DisplayMeta.MAX_OFFSET;
+ public static final byte MAX_OFFSET = OFFSET + 5;
+
+ private static final byte SHADOW = 1;
+ private static final byte SEE_THROUGH = 2;
+ private static final byte USE_DEFAULT_BACKGROUND = 4;
+ private static final byte ALIGN_LEFT = 8;
+ private static final byte ALIGN_RIGHT = 16;
+
+ public TextDisplayMeta(int entityId, Metadata metadata) {
+ super(entityId, metadata);
+ }
+
+
+ public Component getText() {
+ return metadata.getIndex(OFFSET, Component.empty());
+ }
+
+ public void setComponent(Component component) {
+ metadata.setIndex(OFFSET, EntityDataTypes.COMPONENT, GsonComponentSerializer.gson().serialize(component));
+ }
+
+ public int getLineWidth() {
+ return metadata.getIndex(offset(OFFSET, 1), 200);
+ }
+
+ public void setLineWidth(int value) {
+ metadata.setIndex(offset(OFFSET, 1), EntityDataTypes.INT, value);
+ }
+
+ public int getBackgroundColor() {
+ return metadata.getIndex(offset(OFFSET, 2), 0);
+ }
+
+ public void setBackgroundColor(int value) {
+ metadata.setIndex(offset(OFFSET, 2), EntityDataTypes.INT, value);
+ }
+
+ public byte getTextOpacity() {
+ return metadata.getIndex(offset(OFFSET, 3), (byte) -1);
+ }
+
+ public void setTextOpacity(byte value) {
+ metadata.setIndex(offset(OFFSET, 3), EntityDataTypes.BYTE, value);
+ }
+
+ public boolean isShadow() {
+ return getMaskBit(offset(OFFSET, 4), SHADOW);
+ }
+
+ public void setShadow(boolean value) {
+ setMaskBit(offset(OFFSET, 4), SHADOW, value);
+ }
+
+ public boolean isSeeThrough() {
+ return getMaskBit(offset(OFFSET, 4), SEE_THROUGH);
+ }
+
+ public void setSeeThrough(boolean value) {
+ setMaskBit(offset(OFFSET, 4), SEE_THROUGH, value);
+ }
+
+ public boolean isUseDefaultBackground() {
+ return getMaskBit(offset(OFFSET, 4), USE_DEFAULT_BACKGROUND);
+ }
+
+ public void setUseDefaultBackground(boolean value) {
+ setMaskBit(offset(OFFSET, 4), USE_DEFAULT_BACKGROUND, value);
+ }
+
+ public boolean isAlignLeft() {
+ return getMaskBit(offset(OFFSET, 4), ALIGN_LEFT);
+ }
+
+ public void setAlignLeft(boolean value) {
+ setMaskBit(OFFSET + 4, ALIGN_LEFT, value);
+ }
+
+ public boolean isAlignRight() {
+ return getMaskBit(offset(OFFSET, 4), ALIGN_RIGHT);
+ }
+
+ public void setAlignRight(boolean value) {
+ setMaskBit(offset(OFFSET, 4), ALIGN_RIGHT, value);
+ }
+}
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/DragonFireballMeta.java b/src/main/java/me/tofaa/entitylib/meta/projectile/DragonFireballMeta.java
similarity index 95%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/DragonFireballMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/projectile/DragonFireballMeta.java
index 62b361e..19d05f9 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/DragonFireballMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/projectile/DragonFireballMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.projectile;
import me.tofaa.entitylib.meta.EntityMeta;
import me.tofaa.entitylib.meta.Metadata;
diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/WitherSkullMeta.java b/src/main/java/me/tofaa/entitylib/meta/projectile/WitherSkullMeta.java
similarity index 96%
rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/WitherSkullMeta.java
rename to src/main/java/me/tofaa/entitylib/meta/projectile/WitherSkullMeta.java
index c53372d..985a274 100644
--- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/WitherSkullMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/projectile/WitherSkullMeta.java
@@ -1,4 +1,4 @@
-package me.tofaa.entitylib.meta.mobs.other;
+package me.tofaa.entitylib.meta.projectile;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import me.tofaa.entitylib.meta.EntityMeta;
diff --git a/src/main/java/me/tofaa/entitylib/meta/types/DisplayMeta.java b/src/main/java/me/tofaa/entitylib/meta/types/DisplayMeta.java
new file mode 100644
index 0000000..0f3ed1a
--- /dev/null
+++ b/src/main/java/me/tofaa/entitylib/meta/types/DisplayMeta.java
@@ -0,0 +1,148 @@
+package me.tofaa.entitylib.meta.types;
+
+import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
+import com.github.retrooper.packetevents.util.Quaternion4f;
+import com.github.retrooper.packetevents.util.Vector3f;
+import me.tofaa.entitylib.meta.EntityMeta;
+import me.tofaa.entitylib.meta.Metadata;
+
+public class DisplayMeta extends EntityMeta {
+
+ public static final byte OFFSET = EntityMeta.MAX_OFFSET;
+ public static final byte MAX_OFFSET = OFFSET + 13;
+
+ public DisplayMeta(int entityId, Metadata metadata) {
+ super(entityId, metadata);
+ }
+
+ public int getInterpolationDelay() {
+ return super.metadata.getIndex(OFFSET, 0);
+ }
+
+ public void setInterpolationDelay(int value) {
+ super.metadata.setIndex(OFFSET, EntityDataTypes.INT, value);
+ }
+
+ public int getTransformationInterpolationDuration() {
+ return super.metadata.getIndex(offset(OFFSET, 1), 0);
+ }
+
+ public void setTransformationInterpolationDuration(int value) {
+ super.metadata.setIndex(offset(OFFSET, 1), EntityDataTypes.INT, value);
+ }
+
+ public int getPositionRotationInterpolationDuration() {
+ return super.metadata.getIndex(offset(OFFSET, 2), 0);
+ }
+
+ public void setPositionRotationInterpolationDuration(int value) {
+ super.metadata.setIndex(offset(OFFSET, 2), EntityDataTypes.INT, value);
+ }
+
+ public Vector3f getTranslation() {
+ return super.metadata.getIndex(offset(OFFSET, 3), Vector3f.zero());
+ }
+
+ public void setTranslation(Vector3f value) {
+ super.metadata.setIndex(offset(OFFSET, 3), EntityDataTypes.VECTOR3F, value);
+ }
+
+ public Vector3f getScale() {
+ return super.metadata.getIndex(offset(OFFSET, 4), new Vector3f(1.0f, 1.0f, 1.0f));
+ }
+
+ public void setScale(Vector3f value) {
+ super.metadata.setIndex(offset(OFFSET, 4), EntityDataTypes.VECTOR3F, value);
+ }
+
+ public Quaternion4f getLeftRotation() {
+ return super.metadata.getIndex(offset(OFFSET, 5), new Quaternion4f(0.0f, 0.0f, 0.0f, 1.0f));
+ }
+
+ public void setLeftRotation(Quaternion4f value) {
+ super.metadata.setIndex(offset(OFFSET, 5), EntityDataTypes.QUATERNION, value);
+ }
+
+ public Quaternion4f getRightRotation() {
+ return super.metadata.getIndex(offset(OFFSET, 6), new Quaternion4f(0.0f, 0.0f, 0.0f, 1.0f));
+ }
+
+ public void setRightRotation(Quaternion4f value) {
+ super.metadata.setIndex(offset(OFFSET, 6), EntityDataTypes.QUATERNION, value);
+ }
+
+ public BillboardConstraints getBillboardConstraints() {
+ return BillboardConstraints.VALUES[super.metadata.getIndex(offset(OFFSET, 7), (byte) 0)];
+ }
+
+ public void setBillboardConstraints(BillboardConstraints value) {
+ super.metadata.setIndex(offset(OFFSET, 7), EntityDataTypes.BYTE, (byte) value.ordinal());
+ }
+
+ //(blockLight << 4 | skyLight << 20)
+ public int getBrightnessOverride() {
+ return super.metadata.getIndex(offset(OFFSET, 8), -1);
+ }
+
+ public void setBrightnessOverride(int value) {
+ super.metadata.setIndex(offset(OFFSET, 8), EntityDataTypes.INT, value);
+ }
+
+ public float getViewRange() {
+ return super.metadata.getIndex(offset(OFFSET, 9), 1.0f);
+ }
+
+ public void setViewRange(float value) {
+ super.metadata.setIndex(offset(OFFSET, 9), EntityDataTypes.FLOAT, value);
+ }
+
+ public float getShadowRadius() {
+ return super.metadata.getIndex(offset(OFFSET, 10), 0.0f);
+ }
+
+ public void setShadowRadius(float value) {
+ super.metadata.setIndex(offset(OFFSET, 10), EntityDataTypes.FLOAT, value);
+ }
+
+ public float getShadowStrength() {
+ return super.metadata.getIndex(offset(OFFSET, 11), 1.0f);
+ }
+
+ public void setShadowStrength(float value) {
+ super.metadata.setIndex(offset(OFFSET, 11), EntityDataTypes.FLOAT, value);
+ }
+
+ public float getWidth() {
+ return super.metadata.getIndex(offset(OFFSET, 12), 0.0f);
+ }
+
+ public void setWidth(float value) {
+ super.metadata.setIndex(offset(OFFSET, 12), EntityDataTypes.FLOAT, value);
+ }
+
+ public float getHeight() {
+ return super.metadata.getIndex(offset(OFFSET, 13), 0.0f);
+ }
+
+ public void setHeight(float value) {
+ super.metadata.setIndex(offset(OFFSET, 13), EntityDataTypes.FLOAT, value);
+ }
+
+ public int getGlowColorOverride() {
+ return super.metadata.getIndex(offset(OFFSET, 14), -1);
+ }
+
+ public void setGlowColorOverride(int value) {
+ super.metadata.setIndex(offset(OFFSET, 14), EntityDataTypes.INT, value);
+ }
+
+ public enum BillboardConstraints {
+ FIXED,
+ VERTICAL,
+ HORIZONTAL,
+ CENTER;
+
+ private static final BillboardConstraints[] VALUES = values();
+ }
+
+}
diff --git a/test-plugin/src/main/java/me/tofaa/entitylib/EntityLibPlugin.java b/test-plugin/src/main/java/me/tofaa/entitylib/EntityLibPlugin.java
index 4803a82..5798521 100644
--- a/test-plugin/src/main/java/me/tofaa/entitylib/EntityLibPlugin.java
+++ b/test-plugin/src/main/java/me/tofaa/entitylib/EntityLibPlugin.java
@@ -1,7 +1,13 @@
package me.tofaa.entitylib;
import com.github.retrooper.packetevents.PacketEvents;
+import com.github.retrooper.packetevents.protocol.player.InteractionHand;
+import com.github.retrooper.packetevents.protocol.player.User;
+import com.github.retrooper.packetevents.wrapper.play.client.WrapperPlayClientInteractEntity;
+import me.tofaa.entitylib.entity.EntityInteractionProcessor;
+import me.tofaa.entitylib.entity.WrapperEntity;
import org.bukkit.plugin.java.JavaPlugin;
+import org.jetbrains.annotations.NotNull;
public final class EntityLibPlugin extends JavaPlugin {
@@ -10,6 +16,8 @@ public final class EntityLibPlugin extends JavaPlugin {
@Override
public void onEnable() {
EntityLib.init(PacketEvents.getAPI());
+ EntityLib.enableEntityInteractions();
+ EntityLib.setInteractionProcessor((entity, action, hand, user) -> user.sendMessage("Hello World"));
getCommand("testapi").setExecutor(new TestCommand());
getCommand("testentity").setExecutor(new TestEntityCommand());
instance = this;