Convert legacy reflection to its own class, make entity trackers an eyesore

This commit is contained in:
libraryaddict 2025-02-09 15:34:20 +13:00
parent 8a07ccff64
commit 66411563cf
18 changed files with 1276 additions and 1342 deletions

View File

@ -149,23 +149,10 @@ public class ReflectionManager extends ReflectionManagerAbstract {
} }
@Override @Override
public AABB getBoundingBox(Entity entity) { public double[] getBoundingBox(Entity entity) {
return ((CraftEntity) entity).getHandle().getBoundingBox(); AABB aabb = ((CraftEntity) entity).getHandle().getBoundingBox();
}
@Override return new double[]{aabb.maxX - aabb.minX, aabb.maxY - aabb.minY, aabb.maxZ - aabb.minZ};
public double getXBoundingBox(Entity entity) {
return getBoundingBox(entity).maxX - getBoundingBox(entity).minX;
}
@Override
public double getYBoundingBox(Entity entity) {
return getBoundingBox(entity).maxY - getBoundingBox(entity).minY;
}
@Override
public double getZBoundingBox(Entity entity) {
return getBoundingBox(entity).maxZ - getBoundingBox(entity).minZ;
} }
@Override @Override

View File

@ -150,23 +150,10 @@ public class ReflectionManager extends ReflectionManagerAbstract {
} }
@Override @Override
public AABB getBoundingBox(Entity entity) { public double[] getBoundingBox(Entity entity) {
return ((CraftEntity) entity).getHandle().getBoundingBox(); AABB aabb = ((CraftEntity) entity).getHandle().getBoundingBox();
}
@Override return new double[]{aabb.maxX - aabb.minX, aabb.maxY - aabb.minY, aabb.maxZ - aabb.minZ};
public double getXBoundingBox(Entity entity) {
return getBoundingBox(entity).maxX - getBoundingBox(entity).minX;
}
@Override
public double getYBoundingBox(Entity entity) {
return getBoundingBox(entity).maxY - getBoundingBox(entity).minY;
}
@Override
public double getZBoundingBox(Entity entity) {
return getBoundingBox(entity).maxZ - getBoundingBox(entity).minZ;
} }
@Override @Override

View File

@ -151,23 +151,10 @@ public class ReflectionManager extends ReflectionManagerAbstract {
} }
@Override @Override
public AABB getBoundingBox(Entity entity) { public double[] getBoundingBox(Entity entity) {
return ((CraftEntity) entity).getHandle().getBoundingBox(); AABB aabb = ((CraftEntity) entity).getHandle().getBoundingBox();
}
@Override return new double[]{aabb.maxX - aabb.minX, aabb.maxY - aabb.minY, aabb.maxZ - aabb.minZ};
public double getXBoundingBox(Entity entity) {
return getBoundingBox(entity).maxX - getBoundingBox(entity).minX;
}
@Override
public double getYBoundingBox(Entity entity) {
return getBoundingBox(entity).maxY - getBoundingBox(entity).minY;
}
@Override
public double getZBoundingBox(Entity entity) {
return getBoundingBox(entity).maxZ - getBoundingBox(entity).minZ;
} }
@Override @Override

View File

@ -151,23 +151,10 @@ public class ReflectionManager extends ReflectionManagerAbstract {
} }
@Override @Override
public AABB getBoundingBox(Entity entity) { public double[] getBoundingBox(Entity entity) {
return ((CraftEntity) entity).getHandle().getBoundingBox(); AABB aabb = ((CraftEntity) entity).getHandle().getBoundingBox();
}
@Override return new double[]{aabb.maxX - aabb.minX, aabb.maxY - aabb.minY, aabb.maxZ - aabb.minZ};
public double getXBoundingBox(Entity entity) {
return getBoundingBox(entity).maxX - getBoundingBox(entity).minX;
}
@Override
public double getYBoundingBox(Entity entity) {
return getBoundingBox(entity).maxY - getBoundingBox(entity).minY;
}
@Override
public double getZBoundingBox(Entity entity) {
return getBoundingBox(entity).maxZ - getBoundingBox(entity).minZ;
} }
@Override @Override

View File

@ -167,23 +167,10 @@ public class ReflectionManager extends ReflectionManagerAbstract {
} }
@Override @Override
public AABB getBoundingBox(Entity entity) { public double[] getBoundingBox(Entity entity) {
return ((CraftEntity) entity).getHandle().getBoundingBox(); AABB aabb = ((CraftEntity) entity).getHandle().getBoundingBox();
}
@Override return new double[]{aabb.maxX - aabb.minX, aabb.maxY - aabb.minY, aabb.maxZ - aabb.minZ};
public double getXBoundingBox(Entity entity) {
return getBoundingBox(entity).maxX - getBoundingBox(entity).minX;
}
@Override
public double getYBoundingBox(Entity entity) {
return getBoundingBox(entity).maxY - getBoundingBox(entity).minY;
}
@Override
public double getZBoundingBox(Entity entity) {
return getBoundingBox(entity).maxZ - getBoundingBox(entity).minZ;
} }
@Override @Override

View File

@ -162,23 +162,10 @@ public class ReflectionManager extends ReflectionManagerAbstract {
} }
@Override @Override
public AABB getBoundingBox(Entity entity) { public double[] getBoundingBox(Entity entity) {
return ((CraftEntity) entity).getHandle().getBoundingBox(); AABB aabb = ((CraftEntity) entity).getHandle().getBoundingBox();
}
@Override return new double[]{aabb.maxX - aabb.minX, aabb.maxY - aabb.minY, aabb.maxZ - aabb.minZ};
public double getXBoundingBox(Entity entity) {
return getBoundingBox(entity).maxX - getBoundingBox(entity).minX;
}
@Override
public double getYBoundingBox(Entity entity) {
return getBoundingBox(entity).maxY - getBoundingBox(entity).minY;
}
@Override
public double getZBoundingBox(Entity entity) {
return getBoundingBox(entity).maxZ - getBoundingBox(entity).minZ;
} }
@Override @Override

View File

@ -94,7 +94,6 @@ public class ReflectionManager extends ReflectionManagerAbstract {
Class<?> aClass = Class.forName("org.bukkit.craftbukkit.v1_20_R1.inventory.CraftMetaItem$SerializableMeta"); Class<?> aClass = Class.forName("org.bukkit.craftbukkit.v1_20_R1.inventory.CraftMetaItem$SerializableMeta");
itemMetaDeserialize = aClass.getDeclaredMethod("deserialize", Map.class); itemMetaDeserialize = aClass.getDeclaredMethod("deserialize", Map.class);
} }
@Override @Override
@ -163,23 +162,10 @@ public class ReflectionManager extends ReflectionManagerAbstract {
} }
@Override @Override
public AABB getBoundingBox(Entity entity) { public double[] getBoundingBox(Entity entity) {
return ((CraftEntity) entity).getHandle().getBoundingBox(); AABB aabb = ((CraftEntity) entity).getHandle().getBoundingBox();
}
@Override return new double[]{aabb.maxX - aabb.minX, aabb.maxY - aabb.minY, aabb.maxZ - aabb.minZ};
public double getXBoundingBox(Entity entity) {
return getBoundingBox(entity).maxX - getBoundingBox(entity).minX;
}
@Override
public double getYBoundingBox(Entity entity) {
return getBoundingBox(entity).maxY - getBoundingBox(entity).minY;
}
@Override
public double getZBoundingBox(Entity entity) {
return getBoundingBox(entity).maxZ - getBoundingBox(entity).minZ;
} }
@Override @Override

View File

@ -173,23 +173,10 @@ public class ReflectionManager extends ReflectionManagerAbstract {
} }
@Override @Override
public AABB getBoundingBox(Entity entity) { public double[] getBoundingBox(Entity entity) {
return ((CraftEntity) entity).getHandle().getBoundingBox(); AABB aabb = ((CraftEntity) entity).getHandle().getBoundingBox();
}
@Override return new double[]{aabb.maxX - aabb.minX, aabb.maxY - aabb.minY, aabb.maxZ - aabb.minZ};
public double getXBoundingBox(Entity entity) {
return getBoundingBox(entity).maxX - getBoundingBox(entity).minX;
}
@Override
public double getYBoundingBox(Entity entity) {
return getBoundingBox(entity).maxY - getBoundingBox(entity).minY;
}
@Override
public double getZBoundingBox(Entity entity) {
return getBoundingBox(entity).maxZ - getBoundingBox(entity).minZ;
} }
@Override @Override

View File

@ -174,23 +174,10 @@ public class ReflectionManager extends ReflectionManagerAbstract {
} }
@Override @Override
public AABB getBoundingBox(Entity entity) { public double[] getBoundingBox(Entity entity) {
return ((CraftEntity) entity).getHandle().getBoundingBox(); AABB aabb = ((CraftEntity) entity).getHandle().getBoundingBox();
}
@Override return new double[]{aabb.maxX - aabb.minX, aabb.maxY - aabb.minY, aabb.maxZ - aabb.minZ};
public double getXBoundingBox(Entity entity) {
return getBoundingBox(entity).maxX - getBoundingBox(entity).minX;
}
@Override
public double getYBoundingBox(Entity entity) {
return getBoundingBox(entity).maxY - getBoundingBox(entity).minY;
}
@Override
public double getZBoundingBox(Entity entity) {
return getBoundingBox(entity).maxZ - getBoundingBox(entity).minZ;
} }
@Override @Override

View File

@ -174,23 +174,10 @@ public class ReflectionManager extends ReflectionManagerAbstract {
} }
@Override @Override
public AABB getBoundingBox(Entity entity) { public double[] getBoundingBox(Entity entity) {
return ((CraftEntity) entity).getHandle().getBoundingBox(); AABB aabb = ((CraftEntity) entity).getHandle().getBoundingBox();
}
@Override return new double[]{aabb.maxX - aabb.minX, aabb.maxY - aabb.minY, aabb.maxZ - aabb.minZ};
public double getXBoundingBox(Entity entity) {
return getBoundingBox(entity).maxX - getBoundingBox(entity).minX;
}
@Override
public double getYBoundingBox(Entity entity) {
return getBoundingBox(entity).maxY - getBoundingBox(entity).minY;
}
@Override
public double getZBoundingBox(Entity entity) {
return getBoundingBox(entity).maxZ - getBoundingBox(entity).minZ;
} }
@Override @Override

View File

@ -174,23 +174,10 @@ public class ReflectionManager extends ReflectionManagerAbstract {
} }
@Override @Override
public AABB getBoundingBox(Entity entity) { public double[] getBoundingBox(Entity entity) {
return ((CraftEntity) entity).getHandle().getBoundingBox(); AABB aabb = ((CraftEntity) entity).getHandle().getBoundingBox();
}
@Override return new double[]{aabb.maxX - aabb.minX, aabb.maxY - aabb.minY, aabb.maxZ - aabb.minZ};
public double getXBoundingBox(Entity entity) {
return getBoundingBox(entity).maxX - getBoundingBox(entity).minX;
}
@Override
public double getYBoundingBox(Entity entity) {
return getBoundingBox(entity).maxY - getBoundingBox(entity).minY;
}
@Override
public double getZBoundingBox(Entity entity) {
return getBoundingBox(entity).maxZ - getBoundingBox(entity).minZ;
} }
@Override @Override

View File

@ -176,23 +176,10 @@ public class ReflectionManager extends ReflectionManagerAbstract {
} }
@Override @Override
public AABB getBoundingBox(Entity entity) { public double[] getBoundingBox(Entity entity) {
return ((CraftEntity) entity).getHandle().getBoundingBox(); AABB aabb = ((CraftEntity) entity).getHandle().getBoundingBox();
}
@Override return new double[]{aabb.maxX - aabb.minX, aabb.maxY - aabb.minY, aabb.maxZ - aabb.minZ};
public double getXBoundingBox(Entity entity) {
return getBoundingBox(entity).maxX - getBoundingBox(entity).minX;
}
@Override
public double getYBoundingBox(Entity entity) {
return getBoundingBox(entity).maxY - getBoundingBox(entity).minY;
}
@Override
public double getZBoundingBox(Entity entity) {
return getBoundingBox(entity).maxZ - getBoundingBox(entity).minZ;
} }
@Override @Override

View File

@ -176,23 +176,10 @@ public class ReflectionManager extends ReflectionManagerAbstract {
} }
@Override @Override
public AABB getBoundingBox(Entity entity) { public double[] getBoundingBox(Entity entity) {
return ((CraftEntity) entity).getHandle().getBoundingBox(); AABB aabb = ((CraftEntity) entity).getHandle().getBoundingBox();
}
@Override return new double[]{aabb.maxX - aabb.minX, aabb.maxY - aabb.minY, aabb.maxZ - aabb.minZ};
public double getXBoundingBox(Entity entity) {
return getBoundingBox(entity).maxX - getBoundingBox(entity).minX;
}
@Override
public double getYBoundingBox(Entity entity) {
return getBoundingBox(entity).maxY - getBoundingBox(entity).minY;
}
@Override
public double getZBoundingBox(Entity entity) {
return getBoundingBox(entity).maxZ - getBoundingBox(entity).minZ;
} }
@Override @Override

View File

@ -730,7 +730,6 @@ public class DisguiseUtilities {
} }
PacketEvents.getAPI().getPlayerManager().sendPacketSilently(player, packet); PacketEvents.getAPI().getPlayerManager().sendPacketSilently(player, packet);
} }
if (NmsVersion.v1_15.isSupported()) { if (NmsVersion.v1_15.isSupported()) {
@ -2048,8 +2047,7 @@ public class DisguiseUtilities {
}, 2); }, 2);
} else { } else {
final Object entityTracker = ReflectionManager.getEntityTracker(disguise.getEntity()); final Object entityTracker = ReflectionManager.getEntityTracker(disguise.getEntity());
final Object entityTrackerEntry = !NmsVersion.v1_14.isSupported() ? entityTracker : final Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(disguise.getEntity(), entityTracker);
ReflectionManager.getEntityTrackerEntry(disguise.getEntity(), entityTracker);
if (entityTrackerEntry == null) { if (entityTrackerEntry == null) {
return; return;
@ -2065,7 +2063,7 @@ public class DisguiseUtilities {
continue; continue;
} }
ReflectionManager.clearEntityTracker(entityTracker, p); ReflectionManager.clearEntityTracker(entityTracker, entityTrackerEntry, p);
WrapperPlayServerDestroyEntities destroyPacket = getDestroyPacket(disguise.getEntity().getEntityId()); WrapperPlayServerDestroyEntities destroyPacket = getDestroyPacket(disguise.getEntity().getEntityId());
@ -2073,7 +2071,7 @@ public class DisguiseUtilities {
Bukkit.getScheduler().scheduleSyncDelayedTask(LibsDisguises.getInstance(), () -> { Bukkit.getScheduler().scheduleSyncDelayedTask(LibsDisguises.getInstance(), () -> {
try { try {
ReflectionManager.addEntityTracker(entityTracker, p); ReflectionManager.addEntityTracker(entityTracker, entityTrackerEntry, p);
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
@ -2099,8 +2097,7 @@ public class DisguiseUtilities {
if (entity.isValid()) { if (entity.isValid()) {
try { try {
final Object entityTracker = ReflectionManager.getEntityTracker(entity); final Object entityTracker = ReflectionManager.getEntityTracker(entity);
final Object entityTrackerEntry = final Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(entity, entityTracker);
NmsVersion.v1_14.isSupported() ? entityTracker : ReflectionManager.getEntityTrackerEntry(entity, entityTracker);
if (entityTrackerEntry != null) { if (entityTrackerEntry != null) {
Set trackedPlayers = ReflectionManager.getClonedTrackedPlayers(entityTracker, entityTrackerEntry); Set trackedPlayers = ReflectionManager.getClonedTrackedPlayers(entityTracker, entityTrackerEntry);
@ -2113,19 +2110,18 @@ public class DisguiseUtilities {
continue; continue;
} }
ReflectionManager.clearEntityTracker(entityTracker, p); ReflectionManager.clearEntityTracker(entityTracker, entityTrackerEntry, p);
WrapperPlayServerDestroyEntities destroyPacket = getDestroyPacket(entity.getEntityId()); WrapperPlayServerDestroyEntities destroyPacket = getDestroyPacket(entity.getEntityId());
PacketEvents.getAPI().getPlayerManager().sendPacket(player, destroyPacket); PacketEvents.getAPI().getPlayerManager().sendPacket(player, destroyPacket);
Bukkit.getScheduler().scheduleSyncDelayedTask(LibsDisguises.getInstance(), () -> { Bukkit.getScheduler().scheduleSyncDelayedTask(LibsDisguises.getInstance(), () -> {
try { try {
ReflectionManager.addEntityTracker(entityTracker, p); ReflectionManager.addEntityTracker(entityTracker, entityTrackerEntry, p);
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
}, 2); }, 2);
} }
} }
} catch (Exception ex) { } catch (Exception ex) {
@ -2177,14 +2173,14 @@ public class DisguiseUtilities {
continue; continue;
} }
ReflectionManager.clearEntityTracker(entityTracker, p); ReflectionManager.clearEntityTracker(entityTracker, entityTrackerEntry, p);
WrapperPlayServerDestroyEntities destroyPacket = getDestroyPacket(disguise.getEntity().getEntityId()); WrapperPlayServerDestroyEntities destroyPacket = getDestroyPacket(disguise.getEntity().getEntityId());
PacketEvents.getAPI().getPlayerManager().sendPacket(player, destroyPacket); PacketEvents.getAPI().getPlayerManager().sendPacket(player, destroyPacket);
Bukkit.getScheduler().scheduleSyncDelayedTask(LibsDisguises.getInstance(), () -> { Bukkit.getScheduler().scheduleSyncDelayedTask(LibsDisguises.getInstance(), () -> {
try { try {
ReflectionManager.addEntityTracker(entityTracker, p); ReflectionManager.addEntityTracker(entityTracker, entityTrackerEntry, p);
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} }

View File

@ -1,16 +1,5 @@
package me.libraryaddict.disguise.utilities.reflection; package me.libraryaddict.disguise.utilities.reflection;
import com.github.retrooper.packetevents.protocol.nbt.NBT;
import com.github.retrooper.packetevents.protocol.nbt.NBTByteArray;
import com.github.retrooper.packetevents.protocol.nbt.NBTCompound;
import com.github.retrooper.packetevents.protocol.nbt.NBTIntArray;
import com.github.retrooper.packetevents.protocol.nbt.NBTList;
import com.github.retrooper.packetevents.protocol.nbt.NBTLongArray;
import com.github.retrooper.packetevents.protocol.nbt.NBTNumber;
import com.github.retrooper.packetevents.protocol.nbt.NBTString;
import com.github.retrooper.packetevents.protocol.nbt.NBTType;
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
import org.apache.commons.lang.StringUtils;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.ArrayList; import java.util.ArrayList;
@ -28,25 +17,17 @@ public class ItemStackSerializer {
String type = ReflectionManager.getItemName(item.getType()); String type = ReflectionManager.getItemName(item.getType());
if (item.hasItemMeta() && NmsVersion.v1_13.isSupported()) { if (item.hasItemMeta() && NmsVersion.v1_13.isSupported()) {
if (ReflectionManager.getNmsReflection() != null) { String asString = ReflectionManager.getNmsReflection().getDataAsString(item);
String asString = ReflectionManager.getNmsReflection().getDataAsString(item);
if (asString != null && asString.length() > 2) { if (asString != null && asString.length() > 2) {
// Vanilla seems to turn this into a string that contains for UUID // Vanilla seems to turn this into a string that contains for UUID
// : [I; 772059800, // : [I; 772059800,
// And there should be no space, so we must strip all spaces that are unneeded. // And there should be no space, so we must strip all spaces that are unneeded.
type += stripSpacesFromString(asString); if (NmsVersion.v1_17.isSupported()) {
asString = stripSpacesFromString(asString);
} }
} else {
NBT nbt = DisguiseUtilities.fromBukkitItemStack(item).getNBT();
if (nbt != null) { type += asString;
String asString = serialize(nbt);
if (asString.length() > 2) {
type += asString;
}
}
} }
} }
@ -62,14 +43,10 @@ public class ItemStackSerializer {
} }
if (item.hasItemMeta()) { if (item.hasItemMeta()) {
NBT nbt = DisguiseUtilities.fromBukkitItemStack(item).getNBT(); String asString = ReflectionManager.getNmsReflection().getDataAsString(item);
if (nbt != null) { if (asString != null && asString.length() > 2) {
String asString = serialize(nbt); mcArray.add(asString);
if (asString.length() > 2) {
mcArray.add(serialize(nbt));
}
} }
} }
} }
@ -101,85 +78,4 @@ public class ItemStackSerializer {
return result.toString(); return result.toString();
} }
public static String serialize(NBT base) {
return serialize(0, base);
}
private static String serialize(int depth, NBT base) {
if (base.getType() == NBTType.COMPOUND) {
StringBuilder builder = new StringBuilder();
builder.append("{");
for (String key : ((NBTCompound) base).getTagNames()) {
NBT nbt = ((NBTCompound) base).getTagOrThrow(key);
String val = serialize(depth + 1, nbt);
// Skip root empty values
if (depth == 0 && val.matches("0(\\.0)?")) {
continue;
}
if (builder.length() > 1) {
builder.append(",");
}
builder.append(key).append(":").append(val);
}
builder.append("}");
return builder.toString();
} else if (base.getType() == NBTType.LIST) {
List<String> serialized = new ArrayList<>();
for (NBT something : ((NBTList<NBT>) base).getTags()) {
serialized.add(serialize(depth + 1, something));
}
return "[" + StringUtils.join(serialized, ",") + "]";
} else if (base.getType() == NBTType.BYTE_ARRAY) {
NBTByteArray byteArray = (NBTByteArray) base;
List<String> bytes = new ArrayList<>();
for (byte b : byteArray.getValue()) {
bytes.add(String.valueOf(b));
}
return "[B;" + String.join(",", bytes) + "]";
}
if (base.getType() == NBTType.INT_ARRAY) {
NBTIntArray byteArray = (NBTIntArray) base;
List<String> bytes = new ArrayList<>();
for (int b : byteArray.getValue()) {
bytes.add(String.valueOf(b));
}
return "[I;" + String.join(",", bytes) + "]";
}
if (base.getType() == NBTType.LONG_ARRAY) {
NBTLongArray byteArray = (NBTLongArray) base;
List<String> bytes = new ArrayList<>();
for (long b : byteArray.getValue()) {
bytes.add(String.valueOf(b));
}
return "[L;" + String.join(",", bytes) + "]";
} else if (base.getType() == NBTType.BYTE || base.getType() == NBTType.INT || base.getType() == NBTType.LONG ||
base.getType() == NBTType.FLOAT || base.getType() == NBTType.SHORT || base.getType() == NBTType.DOUBLE) {
NBTNumber number = (NBTNumber) base;
return number.getAsNumber().toString();
} else if (base.getType() == NBTType.STRING) {
String val = ((NBTString) base).getValue();
return "\"" + val.replace("\\", "\\\\").replace("\"", "\\\"") + "\"";
} else if (base.getType() == NBTType.END) {
return "";
} else {
throw new IllegalArgumentException();
}
}
} }

View File

@ -35,15 +35,13 @@ public abstract class ReflectionManagerAbstract {
public abstract Object getPlayerConnectionOrPlayer(Player player); public abstract Object getPlayerConnectionOrPlayer(Player player);
public abstract Object createEntityInstance(String entityName); public Object createEntityInstance(EntityType entityType, String entityName) {
return createEntityInstance(entityName);
}
public abstract Object getBoundingBox(Entity entity); protected abstract Object createEntityInstance(String entityName);
public abstract double getXBoundingBox(Entity entity); public abstract double[] getBoundingBox(Entity entity);
public abstract double getYBoundingBox(Entity entity);
public abstract double getZBoundingBox(Entity entity);
public abstract Object getPlayerFromPlayerConnection(Object nmsEntity); public abstract Object getPlayerFromPlayerConnection(Object nmsEntity);
@ -53,10 +51,6 @@ public abstract class ReflectionManagerAbstract {
public abstract ItemStack getCraftItem(ItemStack bukkitItem); public abstract ItemStack getCraftItem(ItemStack bukkitItem);
public abstract Object getEntityTracker(Entity target) throws Exception;
public abstract Object getTrackerEntryFromTracker(Object tracker) throws Exception;
public abstract Object getMinecraftServer(); public abstract Object getMinecraftServer();
public abstract Object getNmsEntity(Entity entity); public abstract Object getNmsEntity(Entity entity);
@ -158,9 +152,18 @@ public abstract class ReflectionManagerAbstract {
return itemStack.hasItemMeta() ? itemStack.getItemMeta().getAsString() : null; return itemStack.hasItemMeta() ? itemStack.getItemMeta().getAsString() : null;
} }
public abstract Object getEntityTracker(Entity target) throws Exception;
@Deprecated
public Object getEntityTrackerEntry(Entity target, Object entityTracker) throws Exception {
return getTrackerEntryFromTracker(entityTracker);
}
protected abstract Object getTrackerEntryFromTracker(Object tracker) throws Exception;
public abstract Set getTrackedEntities(Object trackedEntity);
public abstract void addEntityTracker(Object trackedEntity, Object serverPlayer); public abstract void addEntityTracker(Object trackedEntity, Object serverPlayer);
public abstract void clearEntityTracker(Object trackedEntity, Object serverPlayer); public abstract void clearEntityTracker(Object trackedEntity, Object serverPlayer);
public abstract Set getTrackedEntities(Object trackedEntity);
} }