mirror of
https://github.com/filoghost/HolographicDisplays.git
synced 2025-02-02 21:21:22 +01:00
Simplify reflection handling
This commit is contained in:
parent
4237707b62
commit
df5d3f9c26
@ -4,8 +4,8 @@ import org.bukkit.craftbukkit.v1_10_R1.entity.CraftEntity;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectionUtils;
|
||||
|
||||
import net.minecraft.server.v1_10_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_10_R1.DamageSource;
|
||||
|
@ -10,8 +10,8 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBa
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ItemUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_10_R1.Blocks;
|
||||
import net.minecraft.server.v1_10_R1.DamageSource;
|
||||
@ -29,6 +29,8 @@ import net.minecraft.server.v1_10_R1.AxisAlignedBB;
|
||||
|
||||
public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
|
||||
private static final ReflectField<Entity> VEHICLE_FIELD = new ReflectField<Entity>(Entity.class, "au");
|
||||
|
||||
private boolean lockTick;
|
||||
private ItemLine parentPiece;
|
||||
private ItemPickupManager itemPickupManager;
|
||||
@ -249,11 +251,11 @@ public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
try {
|
||||
if (super.bB() != null) {
|
||||
Entity oldVehicle = super.bB();
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "au", null);
|
||||
VEHICLE_FIELD.set(this, null);
|
||||
oldVehicle.passengers.remove(this);
|
||||
}
|
||||
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "au", entity);
|
||||
VEHICLE_FIELD.set(this, entity);
|
||||
entity.passengers.clear();
|
||||
entity.passengers.add(this);
|
||||
|
||||
|
@ -8,8 +8,8 @@ import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_10_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_10_R1.DamageSource;
|
||||
@ -23,6 +23,8 @@ import net.minecraft.server.v1_10_R1.SoundEffect;
|
||||
import net.minecraft.server.v1_10_R1.World;
|
||||
|
||||
public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
|
||||
private static final ReflectField<Entity> VEHICLE_FIELD = new ReflectField<Entity>(Entity.class, "au");
|
||||
|
||||
private boolean lockTick;
|
||||
private HologramLine parentPiece;
|
||||
@ -214,11 +216,11 @@ public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
try {
|
||||
if (super.bB() != null) {
|
||||
Entity oldVehicle = super.bB();
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "au", null);
|
||||
VEHICLE_FIELD.set(this, null);
|
||||
oldVehicle.passengers.remove(this);
|
||||
}
|
||||
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "au", entity);
|
||||
VEHICLE_FIELD.set(this, entity);
|
||||
entity.passengers.clear();
|
||||
entity.passengers.add(this);
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_10_R1;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
@ -18,8 +19,9 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorSta
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_10_R1.Entity;
|
||||
import net.minecraft.server.v1_10_R1.EntityTypes;
|
||||
import net.minecraft.server.v1_10_R1.MathHelper;
|
||||
@ -27,6 +29,9 @@ import net.minecraft.server.v1_10_R1.World;
|
||||
import net.minecraft.server.v1_10_R1.WorldServer;
|
||||
|
||||
public class NmsManagerImpl implements NMSManager {
|
||||
|
||||
private static final ReflectField<Map<Class<?>, String>> ENTITY_NAMES_BY_CLASS_FIELD = new ReflectField<Map<Class<?>, String>>(EntityTypes.class, "d");
|
||||
private static final ReflectField<Map<Class<?>, Integer>> ENTITY_IDS_BY_CLASS_FIELD = new ReflectField<Map<Class<?>, Integer>>(EntityTypes.class, "f");
|
||||
|
||||
private Method validateEntityMethod;
|
||||
|
||||
@ -41,8 +46,8 @@ public class NmsManagerImpl implements NMSManager {
|
||||
}
|
||||
|
||||
public void registerCustomEntity(Class<?> entityClass, String name, int id) throws Exception {
|
||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "d", entityClass, name);
|
||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "f", entityClass, Integer.valueOf(id));
|
||||
ENTITY_NAMES_BY_CLASS_FIELD.getStatic().put(entityClass, name);
|
||||
ENTITY_IDS_BY_CLASS_FIELD.getStatic().put(entityClass, Integer.valueOf(id));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -4,8 +4,8 @@ import org.bukkit.craftbukkit.v1_11_R1.entity.CraftEntity;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectionUtils;
|
||||
|
||||
import net.minecraft.server.v1_11_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_11_R1.DamageSource;
|
||||
|
@ -10,7 +10,7 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBa
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ItemUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_11_R1.Blocks;
|
||||
import net.minecraft.server.v1_11_R1.DamageSource;
|
||||
@ -27,6 +27,8 @@ import net.minecraft.server.v1_11_R1.AxisAlignedBB;
|
||||
|
||||
public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
|
||||
private static final ReflectField<Entity> VEHICLE_FIELD = new ReflectField<Entity>(Entity.class, "au");
|
||||
|
||||
private boolean lockTick;
|
||||
private ItemLine parentPiece;
|
||||
private ItemPickupManager itemPickupManager;
|
||||
@ -225,11 +227,11 @@ public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
try {
|
||||
if (super.bB() != null) {
|
||||
Entity oldVehicle = super.bB();
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "au", null);
|
||||
VEHICLE_FIELD.set(this, null);
|
||||
oldVehicle.passengers.remove(this);
|
||||
}
|
||||
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "au", entity);
|
||||
VEHICLE_FIELD.set(this, entity);
|
||||
entity.passengers.clear();
|
||||
entity.passengers.add(this);
|
||||
|
||||
|
@ -8,7 +8,7 @@ import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_11_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_11_R1.DamageSource;
|
||||
@ -21,6 +21,8 @@ import net.minecraft.server.v1_11_R1.SoundEffect;
|
||||
import net.minecraft.server.v1_11_R1.World;
|
||||
|
||||
public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
|
||||
private static final ReflectField<Entity> VEHICLE_FIELD = new ReflectField<Entity>(Entity.class, "au");
|
||||
|
||||
private boolean lockTick;
|
||||
private HologramLine parentPiece;
|
||||
@ -199,11 +201,11 @@ public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
try {
|
||||
if (super.bB() != null) {
|
||||
Entity oldVehicle = super.bB();
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "au", null);
|
||||
VEHICLE_FIELD.set(this, null);
|
||||
oldVehicle.passengers.remove(this);
|
||||
}
|
||||
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "au", entity);
|
||||
VEHICLE_FIELD.set(this, entity);
|
||||
entity.passengers.clear();
|
||||
entity.passengers.add(this);
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_11_R1;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.craftbukkit.v1_11_R1.CraftChunk;
|
||||
@ -18,8 +17,9 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorSta
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_11_R1.Entity;
|
||||
import net.minecraft.server.v1_11_R1.EntityTypes;
|
||||
import net.minecraft.server.v1_11_R1.MathHelper;
|
||||
@ -29,6 +29,9 @@ import net.minecraft.server.v1_11_R1.World;
|
||||
import net.minecraft.server.v1_11_R1.WorldServer;
|
||||
|
||||
public class NmsManagerImpl implements NMSManager {
|
||||
|
||||
private static final ReflectField<RegistryID<Class<? extends Entity>>> REGISTRY_ID_FIELD = new ReflectField<RegistryID<Class<? extends Entity>>>(RegistryMaterials.class, "a");
|
||||
private static final ReflectField<Object[]> ID_TO_CLASS_MAP_FIELD = new ReflectField<Object[]>(RegistryID.class, "d");
|
||||
|
||||
private Method validateEntityMethod;
|
||||
|
||||
@ -40,11 +43,10 @@ public class NmsManagerImpl implements NMSManager {
|
||||
registerCustomEntity(EntityNMSSlime.class, 55);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void registerCustomEntity(Class<? extends Entity> entityClass, int id) throws Exception {
|
||||
// Use reflection to get the RegistryID of entities.
|
||||
RegistryID<Class<? extends Entity>> registryID = (RegistryID<Class<? extends Entity>>) ReflectionUtils.getPrivateField(RegistryMaterials.class, EntityTypes.b, "a");
|
||||
Object[] idToClassMap = (Object[]) ReflectionUtils.getPrivateField(RegistryID.class, registryID, "d");
|
||||
RegistryID<Class<? extends Entity>> registryID = REGISTRY_ID_FIELD.get(EntityTypes.b);
|
||||
Object[] idToClassMap = ID_TO_CLASS_MAP_FIELD.get(registryID);
|
||||
|
||||
// Save the the ID -> entity class mapping before the registration.
|
||||
Object oldValue = idToClassMap[id];
|
||||
|
@ -4,8 +4,8 @@ import org.bukkit.craftbukkit.v1_12_R1.entity.CraftEntity;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectionUtils;
|
||||
|
||||
import net.minecraft.server.v1_12_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_12_R1.DamageSource;
|
||||
|
@ -10,7 +10,7 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBa
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ItemUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_12_R1.Blocks;
|
||||
import net.minecraft.server.v1_12_R1.DamageSource;
|
||||
@ -27,6 +27,8 @@ import net.minecraft.server.v1_12_R1.AxisAlignedBB;
|
||||
|
||||
public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
|
||||
private static final ReflectField<Entity> VEHICLE_FIELD = new ReflectField<Entity>(Entity.class, "au");
|
||||
|
||||
private boolean lockTick;
|
||||
private ItemLine parentPiece;
|
||||
private ItemPickupManager itemPickupManager;
|
||||
@ -225,11 +227,11 @@ public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
try {
|
||||
if (super.bJ() != null) {
|
||||
Entity oldVehicle = super.bJ();
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "au", null);
|
||||
VEHICLE_FIELD.set(this, null);
|
||||
oldVehicle.passengers.remove(this);
|
||||
}
|
||||
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "au", entity);
|
||||
VEHICLE_FIELD.set(this, entity);
|
||||
entity.passengers.clear();
|
||||
entity.passengers.add(this);
|
||||
|
||||
|
@ -8,7 +8,7 @@ import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_12_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_12_R1.DamageSource;
|
||||
@ -21,6 +21,8 @@ import net.minecraft.server.v1_12_R1.SoundEffect;
|
||||
import net.minecraft.server.v1_12_R1.World;
|
||||
|
||||
public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
|
||||
private static final ReflectField<Entity> VEHICLE_FIELD = new ReflectField<Entity>(Entity.class, "au");
|
||||
|
||||
private boolean lockTick;
|
||||
private HologramLine parentPiece;
|
||||
@ -199,11 +201,11 @@ public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
try {
|
||||
if (super.bJ() != null) {
|
||||
Entity oldVehicle = super.bJ();
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "au", null);
|
||||
VEHICLE_FIELD.set(this, null);
|
||||
oldVehicle.passengers.remove(this);
|
||||
}
|
||||
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "au", entity);
|
||||
VEHICLE_FIELD.set(this, entity);
|
||||
entity.passengers.clear();
|
||||
entity.passengers.add(this);
|
||||
|
||||
|
@ -18,8 +18,9 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorSta
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_12_R1.Entity;
|
||||
import net.minecraft.server.v1_12_R1.EntityTypes;
|
||||
import net.minecraft.server.v1_12_R1.MathHelper;
|
||||
@ -29,6 +30,9 @@ import net.minecraft.server.v1_12_R1.World;
|
||||
import net.minecraft.server.v1_12_R1.WorldServer;
|
||||
|
||||
public class NmsManagerImpl implements NMSManager {
|
||||
|
||||
private static final ReflectField<RegistryID<Class<? extends Entity>>> REGISTRY_ID_FIELD = new ReflectField<RegistryID<Class<? extends Entity>>>(RegistryMaterials.class, "a");
|
||||
private static final ReflectField<Object[]> ID_TO_CLASS_MAP_FIELD = new ReflectField<Object[]>(RegistryID.class, "d");
|
||||
|
||||
private Method validateEntityMethod;
|
||||
|
||||
@ -40,11 +44,10 @@ public class NmsManagerImpl implements NMSManager {
|
||||
registerCustomEntity(EntityNMSSlime.class, 55);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void registerCustomEntity(Class<? extends Entity> entityClass, int id) throws Exception {
|
||||
// Use reflection to get the RegistryID of entities.
|
||||
RegistryID<Class<? extends Entity>> registryID = (RegistryID<Class<? extends Entity>>) ReflectionUtils.getPrivateField(RegistryMaterials.class, EntityTypes.b, "a");
|
||||
Object[] idToClassMap = (Object[]) ReflectionUtils.getPrivateField(RegistryID.class, registryID, "d");
|
||||
RegistryID<Class<? extends Entity>> registryID = REGISTRY_ID_FIELD.get(EntityTypes.b);
|
||||
Object[] idToClassMap = ID_TO_CLASS_MAP_FIELD.get(registryID);
|
||||
|
||||
// Save the the ID -> entity class mapping before the registration.
|
||||
Object oldValue = idToClassMap[id];
|
||||
|
@ -5,8 +5,8 @@ import org.bukkit.craftbukkit.v1_13_R1.util.CraftChatMessage;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectionUtils;
|
||||
|
||||
import net.minecraft.server.v1_13_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_13_R1.DamageSource;
|
||||
|
@ -10,7 +10,7 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBa
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ItemUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_13_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_13_R1.Blocks;
|
||||
@ -27,6 +27,8 @@ import net.minecraft.server.v1_13_R1.World;
|
||||
|
||||
public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
|
||||
private static final ReflectField<Entity> VEHICLE_FIELD = new ReflectField<Entity>(Entity.class, "ax");
|
||||
|
||||
private boolean lockTick;
|
||||
private ItemLine parentPiece;
|
||||
private ItemPickupManager itemPickupManager;
|
||||
@ -225,11 +227,11 @@ public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
try {
|
||||
if (super.getVehicle() != null) {
|
||||
Entity oldVehicle = super.getVehicle();
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "ax", null);
|
||||
VEHICLE_FIELD.set(this, null);
|
||||
oldVehicle.passengers.remove(this);
|
||||
}
|
||||
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "ax", entity);
|
||||
VEHICLE_FIELD.set(this, entity);
|
||||
entity.passengers.clear();
|
||||
entity.passengers.add(this);
|
||||
|
||||
|
@ -8,7 +8,7 @@ import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_13_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_13_R1.DamageSource;
|
||||
@ -22,6 +22,8 @@ import net.minecraft.server.v1_13_R1.SoundEffect;
|
||||
import net.minecraft.server.v1_13_R1.World;
|
||||
|
||||
public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
|
||||
private static final ReflectField<Entity> VEHICLE_FIELD = new ReflectField<Entity>(Entity.class, "ax");
|
||||
|
||||
private boolean lockTick;
|
||||
private HologramLine parentPiece;
|
||||
@ -200,11 +202,11 @@ public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
try {
|
||||
if (super.getVehicle() != null) {
|
||||
Entity oldVehicle = super.getVehicle();
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "ax", null);
|
||||
VEHICLE_FIELD.set(this, null);
|
||||
oldVehicle.passengers.remove(this);
|
||||
}
|
||||
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "ax", entity);
|
||||
VEHICLE_FIELD.set(this, entity);
|
||||
entity.passengers.clear();
|
||||
entity.passengers.add(this);
|
||||
|
||||
|
@ -19,8 +19,9 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorSta
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_13_R1.Entity;
|
||||
import net.minecraft.server.v1_13_R1.EntityTypes;
|
||||
import net.minecraft.server.v1_13_R1.MathHelper;
|
||||
@ -30,6 +31,9 @@ import net.minecraft.server.v1_13_R1.World;
|
||||
import net.minecraft.server.v1_13_R1.WorldServer;
|
||||
|
||||
public class NmsManagerImpl implements NMSManager {
|
||||
|
||||
private static final ReflectField<RegistryID<EntityTypes<?>>> REGISTRY_ID_FIELD = new ReflectField<RegistryID<EntityTypes<?>>>(RegistryMaterials.class, "a");
|
||||
private static final ReflectField<Object[]> ID_TO_CLASS_MAP_FIELD = new ReflectField<Object[]>(RegistryID.class, "d");
|
||||
|
||||
private Method validateEntityMethod;
|
||||
|
||||
@ -41,11 +45,10 @@ public class NmsManagerImpl implements NMSManager {
|
||||
registerCustomEntity(EntityNMSSlime.class, 55);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void registerCustomEntity(Class<? extends Entity> entityClass, int id) throws Exception {
|
||||
// Use reflection to get the RegistryID of entities.
|
||||
RegistryID<EntityTypes<?>> registryID = (RegistryID<EntityTypes<?>>) ReflectionUtils.getPrivateField(RegistryMaterials.class, EntityTypes.REGISTRY, "a");
|
||||
Object[] idToClassMap = (Object[]) ReflectionUtils.getPrivateField(RegistryID.class, registryID, "d");
|
||||
RegistryID<EntityTypes<?>> registryID = REGISTRY_ID_FIELD.get(EntityTypes.REGISTRY);
|
||||
Object[] idToClassMap = ID_TO_CLASS_MAP_FIELD.get(registryID);
|
||||
|
||||
// Save the the ID -> EntityTypes mapping before the registration.
|
||||
Object oldValue = idToClassMap[id];
|
||||
|
@ -4,8 +4,9 @@ import org.bukkit.craftbukkit.v1_8_R1.entity.CraftEntity;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectionUtils;
|
||||
|
||||
import net.minecraft.server.v1_8_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_8_R1.DamageSource;
|
||||
@ -21,6 +22,8 @@ import net.minecraft.server.v1_8_R1.World;
|
||||
|
||||
public class EntityNMSArmorStand extends EntityArmorStand implements NMSArmorStand {
|
||||
|
||||
private static final ReflectField<Integer> DISABLED_SLOTS_FIELD = new ReflectField<Integer>(EntityArmorStand.class, "bg");
|
||||
|
||||
private boolean lockTick;
|
||||
private HologramLine parentPiece;
|
||||
|
||||
@ -34,7 +37,7 @@ public class EntityNMSArmorStand extends EntityArmorStand implements NMSArmorSta
|
||||
// There is no "Marker" tag in v1_8_R1
|
||||
this.parentPiece = parentPiece;
|
||||
try {
|
||||
ReflectionUtils.setPrivateField(EntityArmorStand.class, this, "bg", Integer.MAX_VALUE);
|
||||
DISABLED_SLOTS_FIELD.set(this, Integer.MAX_VALUE);
|
||||
} catch (Exception e) {
|
||||
// There's still the overridden method.
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBa
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ItemUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_8_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_8_R1.Blocks;
|
||||
@ -27,6 +27,9 @@ import net.minecraft.server.v1_8_R1.World;
|
||||
|
||||
public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
|
||||
private static final ReflectField<Double> RIDER_PITCH_DELTA = new ReflectField<Double>(Entity.class, "ap");
|
||||
private static final ReflectField<Double> RIDER_YAW_DELTA = new ReflectField<Double>(Entity.class, "aq");
|
||||
|
||||
private boolean lockTick;
|
||||
private ItemLine parentPiece;
|
||||
private ItemPickupManager itemPickupManager;
|
||||
@ -208,8 +211,8 @@ public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
Entity entity = (Entity) vehicleBase;
|
||||
|
||||
try {
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "ap", (double) 0.0);
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "aq", (double) 0.0);
|
||||
RIDER_PITCH_DELTA.set(this, 0.0);
|
||||
RIDER_YAW_DELTA.set(this, 0.0);
|
||||
} catch (Exception ex) {
|
||||
DebugHandler.handleDebugException(ex);
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_8_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_8_R1.DamageSource;
|
||||
@ -20,6 +20,9 @@ import net.minecraft.server.v1_8_R1.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R1.World;
|
||||
|
||||
public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
|
||||
private static final ReflectField<Double> RIDER_PITCH_DELTA = new ReflectField<Double>(Entity.class, "ap");
|
||||
private static final ReflectField<Double> RIDER_YAW_DELTA = new ReflectField<Double>(Entity.class, "aq");
|
||||
|
||||
private boolean lockTick;
|
||||
private HologramLine parentPiece;
|
||||
@ -175,8 +178,8 @@ public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
Entity entity = (Entity) vehicleBase;
|
||||
|
||||
try {
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "ap", (double) 0.0);
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "aq", (double) 0.0);
|
||||
RIDER_PITCH_DELTA.set(this, 0.0);
|
||||
RIDER_YAW_DELTA.set(this, 0.0);
|
||||
} catch (Exception ex) {
|
||||
DebugHandler.handleDebugException(ex);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_8_R1;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
@ -18,8 +19,9 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorSta
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_8_R1.Entity;
|
||||
import net.minecraft.server.v1_8_R1.EntityTypes;
|
||||
import net.minecraft.server.v1_8_R1.MathHelper;
|
||||
@ -27,6 +29,9 @@ import net.minecraft.server.v1_8_R1.World;
|
||||
import net.minecraft.server.v1_8_R1.WorldServer;
|
||||
|
||||
public class NmsManagerImpl implements NMSManager {
|
||||
|
||||
private static final ReflectField<Map<Class<?>, String>> ENTITY_NAMES_BY_CLASS_FIELD = new ReflectField<Map<Class<?>, String>>(EntityTypes.class, "d");
|
||||
private static final ReflectField<Map<Class<?>, Integer>> ENTITY_IDS_BY_CLASS_FIELD = new ReflectField<Map<Class<?>, Integer>>(EntityTypes.class, "f");
|
||||
|
||||
private Method validateEntityMethod;
|
||||
|
||||
@ -41,8 +46,8 @@ public class NmsManagerImpl implements NMSManager {
|
||||
}
|
||||
|
||||
public void registerCustomEntity(Class<?> entityClass, String name, int id) throws Exception {
|
||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "d", entityClass, name);
|
||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "f", entityClass, Integer.valueOf(id));
|
||||
ENTITY_NAMES_BY_CLASS_FIELD.getStatic().put(entityClass, name);
|
||||
ENTITY_IDS_BY_CLASS_FIELD.getStatic().put(entityClass, Integer.valueOf(id));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -4,8 +4,11 @@ import org.bukkit.craftbukkit.v1_8_R2.entity.CraftEntity;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectMethod;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectionUtils;
|
||||
|
||||
import net.minecraft.server.v1_8_R2.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_8_R2.DamageSource;
|
||||
@ -20,6 +23,9 @@ import net.minecraft.server.v1_8_R2.Vec3D;
|
||||
import net.minecraft.server.v1_8_R2.World;
|
||||
|
||||
public class EntityNMSArmorStand extends EntityArmorStand implements NMSArmorStand {
|
||||
|
||||
private static final ReflectField<Integer> DISABLED_SLOTS_FIELD = new ReflectField<Integer>(EntityArmorStand.class, "bi");
|
||||
private static final ReflectMethod<Void> SET_MARKER_METHOD = new ReflectMethod<Void>(EntityArmorStand.class, "n", boolean.class);
|
||||
|
||||
private boolean lockTick;
|
||||
private HologramLine parentPiece;
|
||||
@ -32,14 +38,14 @@ public class EntityNMSArmorStand extends EntityArmorStand implements NMSArmorSta
|
||||
setGravity(true);
|
||||
setBasePlate(true);
|
||||
try {
|
||||
ReflectionUtils.callPrivateMethod(EntityArmorStand.class, this, "n", new Class[]{ boolean.class }, new Object[]{ true }); // n() = setMarker()
|
||||
SET_MARKER_METHOD.invoke(this, true);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
// It will still work.
|
||||
DebugHandler.handleDebugException(e);
|
||||
// It will still work, but the offset will be wrong.
|
||||
}
|
||||
this.parentPiece = parentPiece;
|
||||
try {
|
||||
ReflectionUtils.setPrivateField(EntityArmorStand.class, this, "bi", Integer.MAX_VALUE);
|
||||
DISABLED_SLOTS_FIELD.set(this, Integer.MAX_VALUE);
|
||||
} catch (Exception e) {
|
||||
// There's still the overridden method.
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBa
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ItemUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_8_R2.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_8_R2.Blocks;
|
||||
@ -27,6 +27,9 @@ import net.minecraft.server.v1_8_R2.World;
|
||||
|
||||
public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
|
||||
private static final ReflectField<Double> RIDER_PITCH_DELTA = new ReflectField<Double>(Entity.class, "ar");
|
||||
private static final ReflectField<Double> RIDER_YAW_DELTA = new ReflectField<Double>(Entity.class, "as");
|
||||
|
||||
private boolean lockTick;
|
||||
private ItemLine parentPiece;
|
||||
private ItemPickupManager itemPickupManager;
|
||||
@ -208,8 +211,8 @@ public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
Entity entity = (Entity) vehicleBase;
|
||||
|
||||
try {
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "ar", 0.0);
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "as", 0.0);
|
||||
RIDER_PITCH_DELTA.set(this, 0.0);
|
||||
RIDER_YAW_DELTA.set(this, 0.0);
|
||||
} catch (Exception ex) {
|
||||
DebugHandler.handleDebugException(ex);
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_8_R2.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_8_R2.DamageSource;
|
||||
@ -20,6 +20,9 @@ import net.minecraft.server.v1_8_R2.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R2.World;
|
||||
|
||||
public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
|
||||
private static final ReflectField<Double> RIDER_PITCH_DELTA = new ReflectField<Double>(Entity.class, "ar");
|
||||
private static final ReflectField<Double> RIDER_YAW_DELTA = new ReflectField<Double>(Entity.class, "as");
|
||||
|
||||
private boolean lockTick;
|
||||
private HologramLine parentPiece;
|
||||
@ -175,8 +178,8 @@ public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
Entity entity = (Entity) vehicleBase;
|
||||
|
||||
try {
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "ar", 0.0);
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "as", 0.0);
|
||||
RIDER_PITCH_DELTA.set(this, 0.0);
|
||||
RIDER_YAW_DELTA.set(this, 0.0);
|
||||
} catch (Exception ex) {
|
||||
DebugHandler.handleDebugException(ex);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_8_R2;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
@ -18,8 +19,9 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorSta
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_8_R2.Entity;
|
||||
import net.minecraft.server.v1_8_R2.EntityTypes;
|
||||
import net.minecraft.server.v1_8_R2.MathHelper;
|
||||
@ -27,6 +29,9 @@ import net.minecraft.server.v1_8_R2.World;
|
||||
import net.minecraft.server.v1_8_R2.WorldServer;
|
||||
|
||||
public class NmsManagerImpl implements NMSManager {
|
||||
|
||||
private static final ReflectField<Map<Class<?>, String>> ENTITY_NAMES_BY_CLASS_FIELD = new ReflectField<Map<Class<?>, String>>(EntityTypes.class, "d");
|
||||
private static final ReflectField<Map<Class<?>, Integer>> ENTITY_IDS_BY_CLASS_FIELD = new ReflectField<Map<Class<?>, Integer>>(EntityTypes.class, "f");
|
||||
|
||||
private Method validateEntityMethod;
|
||||
|
||||
@ -41,8 +46,8 @@ public class NmsManagerImpl implements NMSManager {
|
||||
}
|
||||
|
||||
public void registerCustomEntity(Class<?> entityClass, String name, int id) throws Exception {
|
||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "d", entityClass, name);
|
||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "f", entityClass, Integer.valueOf(id));
|
||||
ENTITY_NAMES_BY_CLASS_FIELD.getStatic().put(entityClass, name);
|
||||
ENTITY_IDS_BY_CLASS_FIELD.getStatic().put(entityClass, Integer.valueOf(id));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -4,8 +4,11 @@ import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectMethod;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectionUtils;
|
||||
|
||||
import net.minecraft.server.v1_8_R3.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_8_R3.DamageSource;
|
||||
@ -20,6 +23,9 @@ import net.minecraft.server.v1_8_R3.Vec3D;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class EntityNMSArmorStand extends EntityArmorStand implements NMSArmorStand {
|
||||
|
||||
private static final ReflectField<Integer> DISABLED_SLOTS_FIELD = new ReflectField<Integer>(EntityArmorStand.class, "bi");
|
||||
private static final ReflectMethod<Void> SET_MARKER_METHOD = new ReflectMethod<Void>(EntityArmorStand.class, "n", boolean.class);
|
||||
|
||||
private boolean lockTick;
|
||||
private HologramLine parentPiece;
|
||||
@ -32,14 +38,14 @@ public class EntityNMSArmorStand extends EntityArmorStand implements NMSArmorSta
|
||||
setGravity(true);
|
||||
setBasePlate(true);
|
||||
try {
|
||||
ReflectionUtils.callPrivateMethod(EntityArmorStand.class, this, "n", new Class[]{ boolean.class }, new Object[]{ true }); // n() = setMarker()
|
||||
SET_MARKER_METHOD.invoke(this, true);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
// It will still work.
|
||||
DebugHandler.handleDebugException(e);
|
||||
// It will still work, but the offset will be wrong.
|
||||
}
|
||||
this.parentPiece = parentPiece;
|
||||
try {
|
||||
ReflectionUtils.setPrivateField(EntityArmorStand.class, this, "bi", Integer.MAX_VALUE);
|
||||
DISABLED_SLOTS_FIELD.set(this, Integer.MAX_VALUE);
|
||||
} catch (Exception e) {
|
||||
// There's still the overridden method.
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBa
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ItemUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_8_R3.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_8_R3.Blocks;
|
||||
@ -27,6 +27,9 @@ import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
|
||||
private static final ReflectField<Double> RIDER_PITCH_DELTA = new ReflectField<Double>(Entity.class, "ar");
|
||||
private static final ReflectField<Double> RIDER_YAW_DELTA = new ReflectField<Double>(Entity.class, "as");
|
||||
|
||||
private boolean lockTick;
|
||||
private ItemLine parentPiece;
|
||||
private ItemPickupManager itemPickupManager;
|
||||
@ -208,8 +211,8 @@ public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
Entity entity = (Entity) vehicleBase;
|
||||
|
||||
try {
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "ar", 0.0);
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "as", 0.0);
|
||||
RIDER_PITCH_DELTA.set(this, 0.0);
|
||||
RIDER_YAW_DELTA.set(this, 0.0);
|
||||
} catch (Exception ex) {
|
||||
DebugHandler.handleDebugException(ex);
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_8_R3.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_8_R3.DamageSource;
|
||||
@ -20,6 +20,9 @@ import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
|
||||
private static final ReflectField<Double> RIDER_PITCH_DELTA = new ReflectField<Double>(Entity.class, "ar");
|
||||
private static final ReflectField<Double> RIDER_YAW_DELTA = new ReflectField<Double>(Entity.class, "as");
|
||||
|
||||
private boolean lockTick;
|
||||
private HologramLine parentPiece;
|
||||
@ -175,8 +178,8 @@ public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
Entity entity = (Entity) vehicleBase;
|
||||
|
||||
try {
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "ar", (double) 0.0);
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "as", (double) 0.0);
|
||||
RIDER_PITCH_DELTA.set(this, 0.0);
|
||||
RIDER_YAW_DELTA.set(this, 0.0);
|
||||
} catch (Exception ex) {
|
||||
DebugHandler.handleDebugException(ex);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_8_R3;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
@ -18,8 +19,9 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorSta
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_8_R3.Entity;
|
||||
import net.minecraft.server.v1_8_R3.EntityTypes;
|
||||
import net.minecraft.server.v1_8_R3.MathHelper;
|
||||
@ -27,6 +29,9 @@ import net.minecraft.server.v1_8_R3.World;
|
||||
import net.minecraft.server.v1_8_R3.WorldServer;
|
||||
|
||||
public class NmsManagerImpl implements NMSManager {
|
||||
|
||||
private static final ReflectField<Map<Class<?>, String>> ENTITY_NAMES_BY_CLASS_FIELD = new ReflectField<Map<Class<?>, String>>(EntityTypes.class, "d");
|
||||
private static final ReflectField<Map<Class<?>, Integer>> ENTITY_IDS_BY_CLASS_FIELD = new ReflectField<Map<Class<?>, Integer>>(EntityTypes.class, "f");
|
||||
|
||||
private Method validateEntityMethod;
|
||||
|
||||
@ -41,8 +46,8 @@ public class NmsManagerImpl implements NMSManager {
|
||||
}
|
||||
|
||||
public void registerCustomEntity(Class<?> entityClass, String name, int id) throws Exception {
|
||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "d", entityClass, name);
|
||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "f", entityClass, Integer.valueOf(id));
|
||||
ENTITY_NAMES_BY_CLASS_FIELD.getStatic().put(entityClass, name);
|
||||
ENTITY_IDS_BY_CLASS_FIELD.getStatic().put(entityClass, Integer.valueOf(id));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -4,8 +4,9 @@ import org.bukkit.craftbukkit.v1_9_R1.entity.CraftEntity;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectionUtils;
|
||||
|
||||
import net.minecraft.server.v1_9_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_9_R1.DamageSource;
|
||||
@ -23,6 +24,8 @@ import net.minecraft.server.v1_9_R1.Vec3D;
|
||||
import net.minecraft.server.v1_9_R1.World;
|
||||
|
||||
public class EntityNMSArmorStand extends EntityArmorStand implements NMSArmorStand {
|
||||
|
||||
private static final ReflectField<Integer> DISABLED_SLOTS_FIELD = new ReflectField<Integer>(EntityArmorStand.class, "bz");
|
||||
|
||||
private boolean lockTick;
|
||||
private HologramLine parentPiece;
|
||||
@ -37,7 +40,7 @@ public class EntityNMSArmorStand extends EntityArmorStand implements NMSArmorSta
|
||||
super.setMarker(true);
|
||||
this.parentPiece = parentPiece;
|
||||
try {
|
||||
ReflectionUtils.setPrivateField(EntityArmorStand.class, this, "bz", Integer.MAX_VALUE);
|
||||
DISABLED_SLOTS_FIELD.set(this, Integer.MAX_VALUE);
|
||||
} catch (Exception e) {
|
||||
// There's still the overridden method.
|
||||
}
|
||||
|
@ -10,8 +10,8 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBa
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ItemUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_9_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_9_R1.Blocks;
|
||||
@ -29,6 +29,8 @@ import net.minecraft.server.v1_9_R1.World;
|
||||
|
||||
public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
|
||||
private static final ReflectField<Entity> VEHICLE_FIELD = new ReflectField<Entity>(Entity.class, "as");
|
||||
|
||||
private boolean lockTick;
|
||||
private ItemLine parentPiece;
|
||||
private ItemPickupManager itemPickupManager;
|
||||
@ -248,11 +250,11 @@ public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
try {
|
||||
if (super.by() != null) {
|
||||
Entity oldVehicle = super.by();
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "as", null);
|
||||
VEHICLE_FIELD.set(this, null);
|
||||
oldVehicle.passengers.remove(this);
|
||||
}
|
||||
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "as", entity);
|
||||
VEHICLE_FIELD.set(this, entity);
|
||||
entity.passengers.clear();
|
||||
entity.passengers.add(this);
|
||||
|
||||
|
@ -8,8 +8,8 @@ import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_9_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_9_R1.DamageSource;
|
||||
@ -23,6 +23,8 @@ import net.minecraft.server.v1_9_R1.SoundEffect;
|
||||
import net.minecraft.server.v1_9_R1.World;
|
||||
|
||||
public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
|
||||
private static final ReflectField<Entity> VEHICLE_FIELD = new ReflectField<Entity>(Entity.class, "as");
|
||||
|
||||
private boolean lockTick;
|
||||
private HologramLine parentPiece;
|
||||
@ -212,11 +214,11 @@ public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
try {
|
||||
if (super.by() != null) {
|
||||
Entity oldVehicle = super.by();
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "as", null);
|
||||
VEHICLE_FIELD.set(this, null);
|
||||
oldVehicle.passengers.remove(this);
|
||||
}
|
||||
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "as", entity);
|
||||
VEHICLE_FIELD.set(this, entity);
|
||||
entity.passengers.clear();
|
||||
entity.passengers.add(this);
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_9_R1;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
@ -17,8 +18,8 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorSta
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_9_R1.Entity;
|
||||
import net.minecraft.server.v1_9_R1.EntityTypes;
|
||||
@ -27,6 +28,9 @@ import net.minecraft.server.v1_9_R1.World;
|
||||
import net.minecraft.server.v1_9_R1.WorldServer;
|
||||
|
||||
public class NmsManagerImpl implements NMSManager {
|
||||
|
||||
private static final ReflectField<Map<Class<?>, String>> ENTITY_NAMES_BY_CLASS_FIELD = new ReflectField<Map<Class<?>, String>>(EntityTypes.class, "d");
|
||||
private static final ReflectField<Map<Class<?>, Integer>> ENTITY_IDS_BY_CLASS_FIELD = new ReflectField<Map<Class<?>, Integer>>(EntityTypes.class, "f");
|
||||
|
||||
private Method validateEntityMethod;
|
||||
|
||||
@ -41,8 +45,8 @@ public class NmsManagerImpl implements NMSManager {
|
||||
}
|
||||
|
||||
public void registerCustomEntity(Class<?> entityClass, String name, int id) throws Exception {
|
||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "d", entityClass, name);
|
||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "f", entityClass, Integer.valueOf(id));
|
||||
ENTITY_NAMES_BY_CLASS_FIELD.getStatic().put(entityClass, name);
|
||||
ENTITY_IDS_BY_CLASS_FIELD.getStatic().put(entityClass, Integer.valueOf(id));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -4,8 +4,8 @@ import org.bukkit.craftbukkit.v1_9_R2.entity.CraftEntity;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectionUtils;
|
||||
|
||||
import net.minecraft.server.v1_9_R2.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_9_R2.DamageSource;
|
||||
|
@ -10,8 +10,8 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBa
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ItemUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_9_R2.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_9_R2.Blocks;
|
||||
@ -29,6 +29,8 @@ import net.minecraft.server.v1_9_R2.World;
|
||||
|
||||
public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
|
||||
private static final ReflectField<Entity> VEHICLE_FIELD = new ReflectField<Entity>(Entity.class, "at");
|
||||
|
||||
private boolean lockTick;
|
||||
private ItemLine parentPiece;
|
||||
private ItemPickupManager itemPickupManager;
|
||||
@ -249,11 +251,11 @@ public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
try {
|
||||
if (super.bz() != null) {
|
||||
Entity oldVehicle = super.bz();
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "at", null);
|
||||
VEHICLE_FIELD.set(this, null);
|
||||
oldVehicle.passengers.remove(this);
|
||||
}
|
||||
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "at", entity);
|
||||
VEHICLE_FIELD.set(this, entity);
|
||||
entity.passengers.clear();
|
||||
entity.passengers.add(this);
|
||||
|
||||
|
@ -8,8 +8,8 @@ import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_9_R2.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_9_R2.DamageSource;
|
||||
@ -23,6 +23,8 @@ import net.minecraft.server.v1_9_R2.SoundEffect;
|
||||
import net.minecraft.server.v1_9_R2.World;
|
||||
|
||||
public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
|
||||
private static final ReflectField<Entity> VEHICLE_FIELD = new ReflectField<Entity>(Entity.class, "at");
|
||||
|
||||
private boolean lockTick;
|
||||
private HologramLine parentPiece;
|
||||
@ -213,11 +215,11 @@ public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
try {
|
||||
if (super.bz() != null) {
|
||||
Entity oldVehicle = super.bz();
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "at", null);
|
||||
VEHICLE_FIELD.set(this, null);
|
||||
oldVehicle.passengers.remove(this);
|
||||
}
|
||||
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "at", entity);
|
||||
VEHICLE_FIELD.set(this, entity);
|
||||
entity.passengers.clear();
|
||||
entity.passengers.add(this);
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_9_R2;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
@ -18,8 +19,9 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorSta
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||
import com.gmail.filoghost.holographicdisplays.util.reflection.ReflectField;
|
||||
|
||||
import net.minecraft.server.v1_9_R2.Entity;
|
||||
import net.minecraft.server.v1_9_R2.EntityTypes;
|
||||
import net.minecraft.server.v1_9_R2.MathHelper;
|
||||
@ -28,6 +30,9 @@ import net.minecraft.server.v1_9_R2.WorldServer;
|
||||
|
||||
public class NmsManagerImpl implements NMSManager {
|
||||
|
||||
private static final ReflectField<Map<Class<?>, String>> ENTITY_NAMES_BY_CLASS_FIELD = new ReflectField<Map<Class<?>, String>>(EntityTypes.class, "d");
|
||||
private static final ReflectField<Map<Class<?>, Integer>> ENTITY_IDS_BY_CLASS_FIELD = new ReflectField<Map<Class<?>, Integer>>(EntityTypes.class, "f");
|
||||
|
||||
private Method validateEntityMethod;
|
||||
|
||||
@Override
|
||||
@ -41,8 +46,8 @@ public class NmsManagerImpl implements NMSManager {
|
||||
}
|
||||
|
||||
public void registerCustomEntity(Class<?> entityClass, String name, int id) throws Exception {
|
||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "d", entityClass, name);
|
||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "f", entityClass, Integer.valueOf(id));
|
||||
ENTITY_NAMES_BY_CLASS_FIELD.getStatic().put(entityClass, name);
|
||||
ENTITY_IDS_BY_CLASS_FIELD.getStatic().put(entityClass, Integer.valueOf(id));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -0,0 +1,45 @@
|
||||
package com.gmail.filoghost.holographicdisplays.util.reflection;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public class ReflectField<T> {
|
||||
|
||||
private final Class<?> clazz;
|
||||
private final String name;
|
||||
|
||||
private Field field;
|
||||
|
||||
public ReflectField(Class<?> clazz, String name) {
|
||||
this.clazz = clazz;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
private void init() throws Exception {
|
||||
if (field == null) {
|
||||
field = clazz.getDeclaredField(name);
|
||||
field.setAccessible(true);
|
||||
}
|
||||
}
|
||||
|
||||
public T get(Object instance) throws Exception {
|
||||
init();
|
||||
return (T) field.get(instance);
|
||||
}
|
||||
|
||||
public T getStatic() throws Exception {
|
||||
init();
|
||||
return (T) field.get(null);
|
||||
}
|
||||
|
||||
public void set(Object instance, T value) throws Exception {
|
||||
init();
|
||||
field.set(instance, value);
|
||||
}
|
||||
|
||||
public void setStatic(T value) throws Exception {
|
||||
init();
|
||||
field.set(null, value);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.gmail.filoghost.holographicdisplays.util.reflection;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public class ReflectMethod<T> {
|
||||
|
||||
private final Class<?> clazz;
|
||||
private final String name;
|
||||
private final Class<?>[] parameterTypes;
|
||||
|
||||
private Method method;
|
||||
|
||||
public ReflectMethod(Class<?> clazz, String name, Class<?>... parameterTypes) {
|
||||
this.clazz = clazz;
|
||||
this.name = name;
|
||||
this.parameterTypes = parameterTypes;
|
||||
}
|
||||
|
||||
private void init() throws Exception {
|
||||
if (method == null) {
|
||||
method = clazz.getDeclaredMethod(name, parameterTypes);
|
||||
method.setAccessible(true);
|
||||
}
|
||||
}
|
||||
|
||||
public T invoke(Object instance, Object... args) throws Exception {
|
||||
init();
|
||||
return (T) method.invoke(instance, args);
|
||||
}
|
||||
|
||||
public T invokeStatic(Object... args) throws Exception {
|
||||
init();
|
||||
return (T) method.invoke(null, args);
|
||||
}
|
||||
|
||||
}
|
@ -1,45 +1,18 @@
|
||||
package com.gmail.filoghost.holographicdisplays.util;
|
||||
package com.gmail.filoghost.holographicdisplays.util.reflection;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
public class ReflectionUtils {
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
public static void putInPrivateStaticMap(Class<?> clazz, String fieldName, Object key, Object value) throws Exception {
|
||||
Field field = clazz.getDeclaredField(fieldName);
|
||||
field.setAccessible(true);
|
||||
Map map = (Map) field.get(null);
|
||||
map.put(key, value);
|
||||
}
|
||||
|
||||
public static void setPrivateField(Class<?> clazz, Object handle, String fieldName, Object value) throws Exception {
|
||||
Field field = clazz.getDeclaredField(fieldName);
|
||||
field.setAccessible(true);
|
||||
field.set(handle, value);
|
||||
}
|
||||
|
||||
public static Object getPrivateField(Class<?> clazz, Object handle, String fieldName) throws Exception {
|
||||
Field field = clazz.getDeclaredField(fieldName);
|
||||
field.setAccessible(true);
|
||||
return field.get(handle);
|
||||
}
|
||||
|
||||
public static Object callPrivateMethod(Class<?> clazz, Object handle, String methodName, Class<?>[] parameterTypes, Object[] args) throws Exception {
|
||||
Method method = clazz.getDeclaredMethod(methodName, parameterTypes);
|
||||
method.setAccessible(true);
|
||||
return method.invoke(handle, args);
|
||||
}
|
||||
|
||||
private static Method getStackTraceElementMethod;
|
||||
private static Method getStackTraceDepthMethod;
|
||||
|
||||
private static boolean stackTraceErrorPrinted;
|
||||
|
||||
|
||||
/**
|
||||
* If you only need one stack trace element this is faster than Throwable.getStackTrace()[element],
|
||||
* it doesn't generate the full stack trace.
|
Loading…
Reference in New Issue
Block a user