From 49d8b3d0666f79fdf5d4a3ba3a8c38b887e06182 Mon Sep 17 00:00:00 2001
From: Tofaa <82680183+Tofaa2@users.noreply.github.com>
Date: Mon, 22 Jan 2024 23:30:16 +0300
Subject: [PATCH] fix types not all though

---
 .idea/workspace.xml                           | 20 +++++-
 .../me/tofaa/entitylib/meta/EntityMeta.java   | 15 ++--
 .../meta/display/BlockDisplayMeta.java        |  2 +-
 .../meta/display/ItemDisplayMeta.java         |  2 +-
 .../meta/display/TextDisplayMeta.java         |  2 +-
 .../entitylib/meta/types/DisplayMeta.java     | 71 ++++++++++++++++---
 test-plugin/build.gradle                      |  2 +-
 .../java/me/tofaa/entitylib/TestCommand.java  |  2 +-
 .../tofaa/entitylib/TestDisplayCommand.java   |  1 +
 test-plugin/src/main/resources/plugin.yml     |  2 +-
 10 files changed, 94 insertions(+), 25 deletions(-)

diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 3f792c6..addaac9 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,7 +5,16 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="9d5d9b6f-43c8-41a4-bb42-a66ffc96c9b0" name="Changes" comment="">
+      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/me/tofaa/entitylib/meta/EntityMeta.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/tofaa/entitylib/meta/EntityMeta.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/me/tofaa/entitylib/meta/display/BlockDisplayMeta.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/tofaa/entitylib/meta/display/BlockDisplayMeta.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/me/tofaa/entitylib/meta/display/ItemDisplayMeta.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/tofaa/entitylib/meta/display/ItemDisplayMeta.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/me/tofaa/entitylib/meta/display/TextDisplayMeta.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/tofaa/entitylib/meta/display/TextDisplayMeta.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/me/tofaa/entitylib/meta/types/DisplayMeta.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/tofaa/entitylib/meta/types/DisplayMeta.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/test-plugin/build.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/test-plugin/build.gradle" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/test-plugin/src/main/java/me/tofaa/entitylib/TestCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/test-plugin/src/main/java/me/tofaa/entitylib/TestCommand.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/test-plugin/src/main/java/me/tofaa/entitylib/TestDisplayCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/test-plugin/src/main/java/me/tofaa/entitylib/TestDisplayCommand.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/test-plugin/src/main/resources/plugin.yml" beforeDir="false" afterPath="$PROJECT_DIR$/test-plugin/src/main/resources/plugin.yml" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -211,7 +220,7 @@
       <workItem from="1705534524814" duration="15424000" />
       <workItem from="1705578156456" duration="78000" />
       <workItem from="1705636302508" duration="7111000" />
-      <workItem from="1705951390204" duration="2550000" />
+      <workItem from="1705951390204" duration="3936000" />
     </task>
     <servers />
   </component>
@@ -226,6 +235,15 @@
           <line>6787</line>
           <option name="timeStamp" value="1" />
         </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-method">
+          <url>file://$PROJECT_DIR$/src/main/java/me/tofaa/entitylib/meta/types/DisplayMeta.java</url>
+          <line>153</line>
+          <properties class="me.tofaa.entitylib.meta.types.DisplayMeta" method="setShadowRadius">
+            <option name="EMULATED" value="true" />
+            <option name="WATCH_EXIT" value="false" />
+          </properties>
+          <option name="timeStamp" value="2" />
+        </line-breakpoint>
       </breakpoints>
     </breakpoint-manager>
   </component>
diff --git a/src/main/java/me/tofaa/entitylib/meta/EntityMeta.java b/src/main/java/me/tofaa/entitylib/meta/EntityMeta.java
index 96deb40..c759d5c 100644
--- a/src/main/java/me/tofaa/entitylib/meta/EntityMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/EntityMeta.java
@@ -152,13 +152,6 @@ public class EntityMeta implements EntityMetadataProvider {
         return metadata.createPacket();
     }
 
-
-    protected static void isVersion(ServerVersion version) {
-        if (!EntityLib.getPacketEvents().getServerManager().getVersion().is(VersionComparison.EQUALS, version)) {
-            throw new InvalidVersionException("This method is only available for " + version.name() + " and above.");
-        }
-    }
-
     protected static void isVersionOlder(ServerVersion version) {
         if (!EntityLib.getPacketEvents().getServerManager().getVersion().is(VersionComparison.OLDER_THAN, version)) {
             throw new InvalidVersionException("This method is only available for versions older than " + version.name() + ".");
@@ -171,6 +164,14 @@ public class EntityMeta implements EntityMetadataProvider {
         }
     }
 
+    protected static boolean isVersion(ServerVersion version, VersionComparison comparison) {
+        return EntityLib.getPacketEvents().getServerManager().getVersion().is(comparison, version);
+    }
+
+    protected static boolean isVersion(ServerVersion version) {
+        return EntityLib.getPacketEvents().getServerManager().getVersion().is(VersionComparison.EQUALS, version);
+    }
+
     /**
      * Annoying java 8 not letting me do OFFSET + amount in the method call so this is a workaround
      * @param value the value to offset
diff --git a/src/main/java/me/tofaa/entitylib/meta/display/BlockDisplayMeta.java b/src/main/java/me/tofaa/entitylib/meta/display/BlockDisplayMeta.java
index 6a7330b..80cf218 100644
--- a/src/main/java/me/tofaa/entitylib/meta/display/BlockDisplayMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/display/BlockDisplayMeta.java
@@ -7,7 +7,7 @@ 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 static final byte MAX_OFFSET = offset(OFFSET, 1);
 
     public BlockDisplayMeta(int entityId, Metadata metadata) {
         super(entityId, metadata);
diff --git a/src/main/java/me/tofaa/entitylib/meta/display/ItemDisplayMeta.java b/src/main/java/me/tofaa/entitylib/meta/display/ItemDisplayMeta.java
index 79330c9..eee43fe 100644
--- a/src/main/java/me/tofaa/entitylib/meta/display/ItemDisplayMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/display/ItemDisplayMeta.java
@@ -8,7 +8,7 @@ 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 static final byte MAX_OFFSET = offset(OFFSET, 1);
 
     public ItemDisplayMeta(int entityId, Metadata metadata) {
         super(entityId, metadata);
diff --git a/src/main/java/me/tofaa/entitylib/meta/display/TextDisplayMeta.java b/src/main/java/me/tofaa/entitylib/meta/display/TextDisplayMeta.java
index 94ead89..314323b 100644
--- a/src/main/java/me/tofaa/entitylib/meta/display/TextDisplayMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/display/TextDisplayMeta.java
@@ -8,7 +8,7 @@ import net.kyori.adventure.text.Component;
 public class TextDisplayMeta extends DisplayMeta {
 
     public static final byte OFFSET = DisplayMeta.MAX_OFFSET;
-    public static final byte MAX_OFFSET = OFFSET + 5;
+    public static final byte MAX_OFFSET = offset(OFFSET, 5);
 
     private static final byte SHADOW = 1;
     private static final byte SEE_THROUGH = 2;
diff --git a/src/main/java/me/tofaa/entitylib/meta/types/DisplayMeta.java b/src/main/java/me/tofaa/entitylib/meta/types/DisplayMeta.java
index 957bbb2..cd450bc 100644
--- a/src/main/java/me/tofaa/entitylib/meta/types/DisplayMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/types/DisplayMeta.java
@@ -1,6 +1,7 @@
 package me.tofaa.entitylib.meta.types;
 
 import com.github.retrooper.packetevents.manager.server.ServerVersion;
+import com.github.retrooper.packetevents.manager.server.VersionComparison;
 import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
 import com.github.retrooper.packetevents.util.Quaternion4f;
 import com.github.retrooper.packetevents.util.Vector3f;
@@ -10,7 +11,15 @@ 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 + 15;
+    public static final byte MAX_OFFSET;
+    static {
+        if (isVersion(ServerVersion.V_1_20_2, VersionComparison.NEWER_THAN_OR_EQUALS)) {
+            MAX_OFFSET =  OFFSET + 15;
+        }
+        else {
+            MAX_OFFSET = OFFSET + 14;
+        }
+    }
 
     public DisplayMeta(int entityId, Metadata metadata) {
         super(entityId, metadata);
@@ -42,43 +51,83 @@ public class DisplayMeta extends EntityMeta {
     }
 
     public Vector3f getTranslation() {
-        return super.metadata.getIndex(offset(OFFSET, 3), Vector3f.zero());
+        byte offset = offset(OFFSET, 3);
+        if (isVersion(ServerVersion.V_1_20_2, VersionComparison.OLDER_THAN)) {
+            offset = offset(OFFSET, 2);
+        }
+        return super.metadata.getIndex(offset, Vector3f.zero());
     }
 
     public void setTranslation(Vector3f value) {
-        super.metadata.setIndex(offset(OFFSET, 3), EntityDataTypes.VECTOR3F, value);
+        byte offset = offset(OFFSET, 3);
+        if (isVersion(ServerVersion.V_1_20_2, VersionComparison.OLDER_THAN)) {
+            offset = offset(OFFSET, 2);
+        }
+        super.metadata.setIndex(offset, EntityDataTypes.VECTOR3F, value);
     }
 
     public Vector3f getScale() {
-        return super.metadata.getIndex(offset(OFFSET, 4), new Vector3f(1.0f, 1.0f, 1.0f));
+        byte offset = offset(OFFSET, 4);
+        if (isVersion(ServerVersion.V_1_20_2, VersionComparison.OLDER_THAN)) {
+            offset = offset(OFFSET, 3);
+        }
+        return super.metadata.getIndex(offset, new Vector3f(1.0f, 1.0f, 1.0f));
     }
 
     public void setScale(Vector3f value) {
-        super.metadata.setIndex(offset(OFFSET, 4), EntityDataTypes.VECTOR3F, value);
+        byte offset = offset(OFFSET, 4);
+        if (isVersion(ServerVersion.V_1_20_2, VersionComparison.OLDER_THAN)) {
+            offset = offset(OFFSET, 3);
+        }
+        super.metadata.setIndex(offset, EntityDataTypes.VECTOR3F, value);
     }
 
     public Quaternion4f getLeftRotation() {
-        return super.metadata.getIndex(offset(OFFSET, 5), new Quaternion4f(0.0f, 0.0f, 0.0f, 1.0f));
+        byte offset = offset(OFFSET, 5);
+        if (isVersion(ServerVersion.V_1_20_2, VersionComparison.OLDER_THAN)) {
+            offset = offset(OFFSET, 4);
+        }
+        return super.metadata.getIndex(offset, new Quaternion4f(0.0f, 0.0f, 0.0f, 1.0f));
     }
 
     public void setLeftRotation(Quaternion4f value) {
-        super.metadata.setIndex(offset(OFFSET, 5), EntityDataTypes.QUATERNION, value);
+        byte offset = offset(OFFSET, 5);
+        if (isVersion(ServerVersion.V_1_20_2, VersionComparison.OLDER_THAN)) {
+            offset = offset(OFFSET, 4);
+        }
+        super.metadata.setIndex(offset, EntityDataTypes.QUATERNION, value);
     }
 
     public Quaternion4f getRightRotation() {
-        return super.metadata.getIndex(offset(OFFSET, 6), new Quaternion4f(0.0f, 0.0f, 0.0f, 1.0f));
+        byte offset = offset(OFFSET, 6);
+        if (isVersion(ServerVersion.V_1_20_2, VersionComparison.OLDER_THAN)) {
+            offset = offset(OFFSET, 5);
+        }
+        return super.metadata.getIndex(offset, new Quaternion4f(0.0f, 0.0f, 0.0f, 1.0f));
     }
 
     public void setRightRotation(Quaternion4f value) {
-        super.metadata.setIndex(offset(OFFSET, 6), EntityDataTypes.QUATERNION, value);
+        byte offset = offset(OFFSET, 6);
+        if (isVersion(ServerVersion.V_1_20_2, VersionComparison.OLDER_THAN)) {
+            offset = offset(OFFSET, 5);
+        }
+        super.metadata.setIndex(offset, EntityDataTypes.QUATERNION, value);
     }
 
     public BillboardConstraints getBillboardConstraints() {
-        return BillboardConstraints.VALUES[super.metadata.getIndex(offset(OFFSET, 7), (byte) 0)];
+        byte offset = offset(OFFSET, 7);
+        if (isVersion(ServerVersion.V_1_20_2, VersionComparison.OLDER_THAN)) {
+            offset = offset(OFFSET, 6);
+        }
+        return BillboardConstraints.VALUES[super.metadata.getIndex(offset, (byte) 0)];
     }
 
     public void setBillboardConstraints(BillboardConstraints value) {
-        super.metadata.setIndex(offset(OFFSET, 7), EntityDataTypes.BYTE, (byte) value.ordinal());
+        byte offset = offset(OFFSET, 7);
+        if (isVersion(ServerVersion.V_1_20_2, VersionComparison.OLDER_THAN)) {
+            offset = offset(OFFSET, 6);
+        }
+        super.metadata.setIndex(offset, EntityDataTypes.BYTE, (byte) value.ordinal());
     }
 
     //(blockLight << 4 | skyLight << 20)
diff --git a/test-plugin/build.gradle b/test-plugin/build.gradle
index 4e03610..f8a7b47 100644
--- a/test-plugin/build.gradle
+++ b/test-plugin/build.gradle
@@ -32,6 +32,6 @@ dependencies {
 
 tasks {
     runServer {
-        minecraftVersion("1.20.4")
+        minecraftVersion("1.19.4")
     }
 }
\ No newline at end of file
diff --git a/test-plugin/src/main/java/me/tofaa/entitylib/TestCommand.java b/test-plugin/src/main/java/me/tofaa/entitylib/TestCommand.java
index d5e13f8..60d4267 100644
--- a/test-plugin/src/main/java/me/tofaa/entitylib/TestCommand.java
+++ b/test-plugin/src/main/java/me/tofaa/entitylib/TestCommand.java
@@ -40,7 +40,7 @@ public class TestCommand implements CommandExecutor {
         passenger.addViewer(player.getUniqueId());
         base.spawn(location);
         passenger.spawn(pass);
-        base.addPassenger(passenger);
+        base.addPassenger(player.getEntityId());
         player.sendMessage("Spawned");
 
         return true;
diff --git a/test-plugin/src/main/java/me/tofaa/entitylib/TestDisplayCommand.java b/test-plugin/src/main/java/me/tofaa/entitylib/TestDisplayCommand.java
index 0a97087..b003f08 100644
--- a/test-plugin/src/main/java/me/tofaa/entitylib/TestDisplayCommand.java
+++ b/test-plugin/src/main/java/me/tofaa/entitylib/TestDisplayCommand.java
@@ -66,6 +66,7 @@ public class TestDisplayCommand implements CommandExecutor, TabCompleter {
         meta.setHasGlowingEffect(true);
         meta.setText(Component.text("Hello World!"));
         meta.setBillboardConstraints(DisplayMeta.BillboardConstraints.CENTER);
+        meta.setTranslation(new Vector3f(4.0f, 0.0f, 0.0f));
         meta.setScale(new Vector3f(2, 2, 2));
         e.addViewer(player.getUniqueId());
         e.spawn(fromPlayer(player));
diff --git a/test-plugin/src/main/resources/plugin.yml b/test-plugin/src/main/resources/plugin.yml
index 7467116..6fbc2c9 100644
--- a/test-plugin/src/main/resources/plugin.yml
+++ b/test-plugin/src/main/resources/plugin.yml
@@ -3,7 +3,7 @@ version: 1.0.0
 depend:
   - packetevents
 main: me.tofaa.entitylib.EntityLibPlugin
-api-version: 1.20
+api-version: "1.19"
 commands:
   testapi:
     description: Test PEEntityMeta API