Add support for health below names

This commit is contained in:
libraryaddict
2021-01-27 19:19:24 +13:00
parent b872ddc137
commit 438e9cffd9
8 changed files with 152 additions and 141 deletions

View File

@@ -29,6 +29,7 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.SimplePluginManager;
import org.bukkit.potion.PotionEffect;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.util.Vector;
import java.io.*;
@@ -37,6 +38,7 @@ import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.stream.Collectors;
@@ -103,19 +105,19 @@ public class ReflectionManager {
private static Field noDamageTicks;
private static Method isInvul;
private static Object genericDamage;
private static Field boardField;
public static Object scoreboardCrtieriaHealth;
private static Method getObjectives;
private static Method setScore;
public static void init() {
try {
boundingBoxConstructor =
getNmsConstructor("AxisAlignedBB", double.class, double.class, double.class, double.class,
double.class, double.class);
boundingBoxConstructor = getNmsConstructor("AxisAlignedBB", double.class, double.class, double.class, double.class, double.class, double.class);
setBoundingBoxMethod = getNmsMethod("Entity", "a", getNmsClass("AxisAlignedBB"));
entityCountField = getNmsField("Entity", "entityCount");
mobEffectConstructor =
getNmsConstructor("MobEffect", getNmsClass("MobEffectList"), Integer.TYPE, Integer.TYPE,
Boolean.TYPE, Boolean.TYPE);
mobEffectConstructor = getNmsConstructor("MobEffect", getNmsClass("MobEffectList"), Integer.TYPE, Integer.TYPE, Boolean.TYPE, Boolean.TYPE);
mobEffectList = getNmsMethod("MobEffectList", "fromId", Integer.TYPE);
boundingBoxMethod = getNmsMethod("Entity", "getBoundingBox");
bukkitEntityMethod = getNmsMethod("Entity", "getBukkitEntity");
@@ -125,19 +127,15 @@ public class ReflectionManager {
itemAsNmsCopyMethod = getCraftMethod(craftItemClass, "asNMSCopy", ItemStack.class);
itemAsBukkitMethod = getCraftMethod(craftItemClass, "asBukkitCopy", getNmsClass("ItemStack"));
getServerMethod = getCraftMethod("CraftServer", "getServer");
getEnumArtMethod = getCraftMethod("CraftArt", "BukkitToNotch", Art.class);
blockPositionConstructor = getNmsConstructor("BlockPosition", int.class, int.class, int.class);
enumDirectionMethod = getNmsMethod("EnumDirection", "fromType2", int.class);
enumPlayerInfoAction =
(Enum[]) getNmsClass("PacketPlayOutPlayerInfo$EnumPlayerInfoAction").getEnumConstants();
enumPlayerInfoAction = (Enum[]) getNmsClass("PacketPlayOutPlayerInfo$EnumPlayerInfoAction").getEnumConstants();
chatComponentConstructor = getNmsConstructor("ChatComponentText", String.class);
packetPlayOutConstructor =
getNmsConstructor("PacketPlayOutPlayerInfo$PlayerInfoData", getNmsClass("PacketPlayOutPlayerInfo"),
GameProfile.class, int.class, getNmsClass("EnumGamemode"),
getNmsClass("IChatBaseComponent"));
getNmsConstructor("PacketPlayOutPlayerInfo$PlayerInfoData", getNmsClass("PacketPlayOutPlayerInfo"), GameProfile.class, int.class,
getNmsClass("EnumGamemode"), getNmsClass("IChatBaseComponent"));
enumGamemode = (Enum[]) getNmsClass("EnumGamemode").getEnumConstants();
getNmsEntityMethod = getCraftMethod("entity.CraftEntity", "getHandle");
enumItemSlots = (Enum[]) getNmsClass("EnumItemSlot").getEnumConstants();
@@ -145,8 +143,8 @@ public class ReflectionManager {
Class craftSound = getCraftClass("CraftSound");
try {
soundGetMethod = craftSound.getMethod("getSound",Sound.class);
}catch (Exception ex) {
soundGetMethod = craftSound.getMethod("getSound", Sound.class);
} catch (Exception ex) {
soundEffectGetMethod = getCraftMethod("CraftSound", "getSoundEffect", Sound.class);
soundEffectGetKey = getNmsField("SoundEffect", "b");
}
@@ -165,31 +163,32 @@ public class ReflectionManager {
if (NmsVersion.v1_14.isSupported()) {
entityPoseClass = getNmsClass("EntityPose");
registryBlocksGetMethod = getNmsMethod("RegistryBlocks", "get", getNmsClass("MinecraftKey"));
villagerDataConstructor = getNmsConstructor("VillagerData", getNmsClass("VillagerType"),
getNmsClass("VillagerProfession"), int.class);
villagerDataConstructor = getNmsConstructor("VillagerData", getNmsClass("VillagerType"), getNmsClass("VillagerProfession"), int.class);
villagerProfessionRegistry = getNmsField("IRegistry", "VILLAGER_PROFESSION").get(null);
villagerTypeRegistry = getNmsField("IRegistry", "VILLAGER_TYPE").get(null);
} else {
registryBlocksGetMethod =
getNmsMethod("RegistryBlocks", "getOrDefault", getNmsClass("MinecraftKey"));
registryBlocksGetMethod = getNmsMethod("RegistryBlocks", "getOrDefault", getNmsClass("MinecraftKey"));
}
}
bukkitKeyToNms = getCraftMethod("util.CraftNamespacedKey", "toMinecraft", NamespacedKey.class);
dataWatcherItemConstructor =
getNmsConstructor("DataWatcher$Item", getNmsClass("DataWatcherObject"), Object.class);
dataWatcherItemConstructor = getNmsConstructor("DataWatcher$Item", getNmsClass("DataWatcherObject"), Object.class);
vec3DConstructor = getNmsConstructor("Vec3D", double.class, double.class, double.class);
getOldItemAsBlock = getNmsMethod(getNmsClass("Block"), "asBlock", getNmsClass("Item"));
getNmsItem = getNmsMethod("ItemStack", "getItem");
getBlockDataAsId = getNmsMethod("Block", "getCombinedId", getNmsClass("IBlockData"));
getNmsWorld = getCraftMethod("CraftWorld", "getHandle");
deserializedItemMeta =
getCraftMethod(getCraftClass("inventory.CraftMetaItem$SerializableMeta"), "deserialize", Map.class);
deserializedItemMeta = getCraftMethod(getCraftClass("inventory.CraftMetaItem$SerializableMeta"), "deserialize", Map.class);
noDamageTicks = getNmsField("Entity", "noDamageTicks");
isInvul = getNmsMethod("Entity", "isInvulnerable", getNmsClass("DamageSource"));
genericDamage = getNmsField("DamageSource", "GENERIC").get(null);
boardField = getCraftClass("scoreboard.CraftScoreboard").getDeclaredField("board");
boardField.setAccessible(true);
scoreboardCrtieriaHealth = getNmsField("IScoreboardCriteria", "HEALTH").get(null);
setScore = getNmsMethod("ScoreboardScore", "setScore", int.class);
getObjectives = getNmsMethod("Scoreboard", "getObjectivesForCriteria", getNmsClass("IScoreboardCriteria"), String.class, Consumer.class);
Method method = getNmsMethod("SoundCategory", "a");
@@ -315,8 +314,7 @@ public class ReflectionManager {
JarEntry entry = jar.getJarEntry(fileName);
try (InputStream stream = jar.getInputStream(entry)) {
return new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8)).lines()
.collect(Collectors.joining("\n"));
return new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8)).lines().collect(Collectors.joining("\n"));
}
} catch (Exception ex) {
ex.printStackTrace();
@@ -385,33 +383,27 @@ public class ReflectionManager {
if (entityName.equals("Player")) {
Object minecraftServer = getNmsMethod("MinecraftServer", "getServer").invoke(null);
Object playerinteractmanager = getNmsClass("PlayerInteractManager")
.getDeclaredConstructor(getNmsClass(NmsVersion.v1_14.isSupported() ? "WorldServer" : "World"))
.newInstance(world);
Object playerinteractmanager =
getNmsClass("PlayerInteractManager").getDeclaredConstructor(getNmsClass(NmsVersion.v1_14.isSupported() ? "WorldServer" : "World"))
.newInstance(world);
WrappedGameProfile gameProfile = getGameProfile(new UUID(0, 0), "Steve");
entityObject = entityClass
.getDeclaredConstructor(getNmsClass("MinecraftServer"), getNmsClass("WorldServer"),
gameProfile.getHandleType(), playerinteractmanager.getClass())
.newInstance(minecraftServer, world, gameProfile.getHandle(), playerinteractmanager);
entityObject = entityClass.getDeclaredConstructor(getNmsClass("MinecraftServer"), getNmsClass("WorldServer"), gameProfile.getHandleType(),
playerinteractmanager.getClass()).newInstance(minecraftServer, world, gameProfile.getHandle(), playerinteractmanager);
} else if (entityName.equals("EnderPearl")) {
entityObject = entityClass.getDeclaredConstructor(getNmsClass("World"), getNmsClass("EntityLiving"))
.newInstance(world, createEntityInstance(DisguiseType.COW, "Cow"));
} else if (entityName.equals("FishingHook")) {
if (NmsVersion.v1_14.isSupported()) {
entityObject = entityClass
.getDeclaredConstructor(getNmsClass("EntityHuman"), getNmsClass("World"), int.class,
int.class)
entityObject = entityClass.getDeclaredConstructor(getNmsClass("EntityHuman"), getNmsClass("World"), int.class, int.class)
.newInstance(createEntityInstance(DisguiseType.PLAYER, "Player"), world, 0, 0);
} else {
entityObject = entityClass.getDeclaredConstructor(getNmsClass("World"), getNmsClass("EntityHuman"))
.newInstance(world, createEntityInstance(DisguiseType.PLAYER, "Player"));
}
} else if (!NmsVersion.v1_14.isSupported() && entityName.equals("Potion")) {
entityObject = entityClass
.getDeclaredConstructor(getNmsClass("World"), Double.TYPE, Double.TYPE, Double.TYPE,
getNmsClass("ItemStack"))
entityObject = entityClass.getDeclaredConstructor(getNmsClass("World"), Double.TYPE, Double.TYPE, Double.TYPE, getNmsClass("ItemStack"))
.newInstance(world, 0d, 0d, 0d, getNmsItem(new ItemStack(Material.SPLASH_POTION)));
} else {
if (NmsVersion.v1_14.isSupported()) {
@@ -423,15 +415,12 @@ public class ReflectionManager {
}
// Workaround for paper being 2 smart 4 me
getNmsMethod("Entity", "setPosition", double.class, double.class, double.class)
.invoke(entityObject, 1, 1, 1);
getNmsMethod("Entity", "setPosition", double.class, double.class, double.class)
.invoke(entityObject, 0, 0, 0);
getNmsMethod("Entity", "setPosition", double.class, double.class, double.class).invoke(entityObject, 1, 1, 1);
getNmsMethod("Entity", "setPosition", double.class, double.class, double.class).invoke(entityObject, 0, 0, 0);
return entityObject;
} catch (Exception e) {
DisguiseUtilities.getLogger()
.warning("Error while attempting to create entity instance for " + disguiseType.name());
DisguiseUtilities.getLogger().warning("Error while attempting to create entity instance for " + disguiseType.name());
e.printStackTrace();
}
@@ -449,8 +438,7 @@ public class ReflectionManager {
}
public static Object createMobEffect(PotionEffect effect) {
return createMobEffect(effect.getType().getId(), effect.getDuration(), effect.getAmplifier(),
effect.isAmbient(), effect.hasParticles());
return createMobEffect(effect.getType().getId(), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles());
}
public static Object createMobEffect(int id, int duration, int amplification, boolean ambient, boolean particles) {
@@ -681,8 +669,7 @@ public class ReflectionManager {
try {
Object playerListName = chatComponentConstructor.newInstance(gameProfile.getName());
return packetPlayOutConstructor
.newInstance(playerInfoPacket, gameProfile.getHandle(), 0, enumGamemode[1], playerListName);
return packetPlayOutConstructor.newInstance(playerInfoPacket, gameProfile.getHandle(), 0, enumGamemode[1], playerListName);
} catch (Exception ex) {
ex.printStackTrace();
}
@@ -707,8 +694,7 @@ public class ReflectionManager {
return getGameProfileWithThisSkin(null, gameProfile.getName(), gameProfile);
}
public static WrappedGameProfile getGameProfileWithThisSkin(UUID uuid, String playerName,
WrappedGameProfile profileWithSkin) {
public static WrappedGameProfile getGameProfileWithThisSkin(UUID uuid, String playerName, WrappedGameProfile profileWithSkin) {
try {
WrappedGameProfile gameProfile = new WrappedGameProfile(uuid != null ? uuid : getRandomUUID(), playerName);
@@ -898,9 +884,9 @@ public class ReflectionManager {
if (method.getReturnType().getSimpleName().equals("MinecraftSessionService")) {
Object session = method.invoke(minecraftServer);
return WrappedGameProfile.fromHandle(session.getClass()
.getDeclaredMethod("fillProfileProperties", gameProfile.getHandleType(), boolean.class)
.invoke(session, gameProfile.getHandle(), true));
return WrappedGameProfile.fromHandle(
session.getClass().getDeclaredMethod("fillProfileProperties", gameProfile.getHandleType(), boolean.class)
.invoke(session, gameProfile.getHandle(), true));
}
}
} catch (Exception ex) {
@@ -932,8 +918,8 @@ public class ReflectionManager {
LibsProfileLookupCaller callback = new LibsProfileLookupCaller();
Object profileRepo = method.invoke(minecraftServer);
method.getReturnType().getMethod("findProfilesByNames", String[].class, agent.getClass(),
Class.forName("com.mojang.authlib.ProfileLookupCallback"))
method.getReturnType()
.getMethod("findProfilesByNames", String[].class, agent.getClass(), Class.forName("com.mojang.authlib.ProfileLookupCallback"))
.invoke(profileRepo, new String[]{playername}, agent, callback);
if (callback.getGameProfile() != null) {
@@ -955,9 +941,8 @@ public class ReflectionManager {
Location loc = entity.getLocation();
Object boundingBox = boundingBoxConstructor
.newInstance(loc.getX() - (newBox.getX() / 2), loc.getY(), loc.getZ() - (newBox.getZ() / 2),
loc.getX() + (newBox.getX() / 2), loc.getY() + newBox.getY(),
loc.getZ() + (newBox.getZ() / 2));
.newInstance(loc.getX() - (newBox.getX() / 2), loc.getY(), loc.getZ() - (newBox.getZ() / 2), loc.getX() + (newBox.getX() / 2),
loc.getY() + newBox.getY(), loc.getZ() + (newBox.getZ() / 2));
setBoundingBoxMethod.invoke(getNmsEntity(entity), boundingBox);
} catch (Exception ex) {
@@ -1196,8 +1181,7 @@ public class ReflectionManager {
public static Material getMaterial(String name) {
try {
if (!NmsVersion.v1_13.isSupported()) {
Method toMinecraft =
getCraftMethod("util.CraftMagicNumbers", "getMaterialFromInternalName", String.class);
Method toMinecraft = getCraftMethod("util.CraftMagicNumbers", "getMaterialFromInternalName", String.class);
Object instance = toMinecraft.getDeclaringClass().getField("INSTANCE").get(null);
@@ -1246,8 +1230,7 @@ public class ReflectionManager {
registry = getNmsField("Item", "REGISTRY").get(null);
}
Method getMethod =
getNmsMethod(registry.getClass(), NmsVersion.v1_13.isSupported() ? "getKey" : "b", Object.class);
Method getMethod = getNmsMethod(registry.getClass(), NmsVersion.v1_13.isSupported() ? "getKey" : "b", Object.class);
Object mcKey = getMethod.invoke(registry, item);
@@ -1360,8 +1343,7 @@ public class ReflectionManager {
@Deprecated
public static Object createSoundEffect(String minecraftKey) {
try {
return getNmsConstructor("SoundEffect", getNmsClass("MinecraftKey"))
.newInstance(createMinecraftKey(minecraftKey));
return getNmsConstructor("SoundEffect", getNmsClass("MinecraftKey")).newInstance(createMinecraftKey(minecraftKey));
} catch (Exception ex) {
ex.printStackTrace();
}
@@ -1391,9 +1373,7 @@ public class ReflectionManager {
public static Object getEntityType(EntityType entityType) {
try {
Object val = entityTypesAMethod.invoke(null,
entityType.getName() == null ? entityType.name().toLowerCase(Locale.ENGLISH) :
entityType.getName());
Object val = entityTypesAMethod.invoke(null, entityType.getName() == null ? entityType.name().toLowerCase(Locale.ENGLISH) : entityType.getName());
if (NmsVersion.v1_14.isSupported()) {
return ((Optional<Object>) val).orElse(null);
@@ -1436,8 +1416,7 @@ public class ReflectionManager {
break;
}
typesClass.getMethod("a", typesClass, mcKey.getClass(), Object.class)
.invoke(null, registry, mcKey, entityType);
typesClass.getMethod("a", typesClass, mcKey.getClass(), Object.class).invoke(null, registry, mcKey, entityType);
return entityType;
} catch (Exception e) {
@@ -1497,8 +1476,7 @@ public class ReflectionManager {
}
public static Object getNmsEntityPose(EntityPose entityPose) {
return Enum.valueOf(entityPoseClass,
entityPose == EntityPose.SNEAKING && NmsVersion.v1_15.isSupported() ? "CROUCHING" : entityPose.name());
return Enum.valueOf(entityPoseClass, entityPose == EntityPose.SNEAKING && NmsVersion.v1_15.isSupported() ? "CROUCHING" : entityPose.name());
}
public static EntityPose getEntityPose(Object nmsEntityPose) {
@@ -1558,8 +1536,7 @@ public class ReflectionManager {
Object iBlockData = idMethod.invoke(null, id);
Class iBlockClass = getNmsClass("IBlockData");
return (BlockData) getCraftMethod("block.data.CraftBlockData", "fromData", iBlockClass)
.invoke(null, iBlockData);
return (BlockData) getCraftMethod("block.data.CraftBlockData", "fromData", iBlockClass).invoke(null, iBlockData);
} catch (Exception ex) {
ex.printStackTrace();
}
@@ -1662,9 +1639,8 @@ public class ReflectionManager {
watcherClass = PufferFishWatcher.class;
break;
default:
watcherClass = (Class<? extends FlagWatcher>) Class.forName(
"me.libraryaddict.disguise.disguisetypes.watchers." + toReadable(disguiseType.name()) +
"Watcher");
watcherClass = (Class<? extends FlagWatcher>) Class
.forName("me.libraryaddict.disguise.disguisetypes.watchers." + toReadable(disguiseType.name()) + "Watcher");
break;
}
} catch (ClassNotFoundException ex) {
@@ -1707,21 +1683,17 @@ public class ReflectionManager {
Class watcherClass = getFlagWatcher(disguiseType);
if (watcherClass == null) {
DisguiseUtilities.getLogger()
.severe("Error loading " + disguiseType.name() + ", FlagWatcher not assigned");
DisguiseUtilities.getLogger().severe("Error loading " + disguiseType.name() + ", FlagWatcher not assigned");
continue;
}
// Invalidate invalid distribution
if (LibsPremium.isPremium() &&
((LibsPremium.getPaidInformation() != null && LibsPremium.getPaidInformation().isPremium() &&
!LibsPremium.getPaidInformation().isLegit()) ||
(LibsPremium.getPluginInformation() != null &&
LibsPremium.getPluginInformation().isPremium() &&
!LibsPremium.getPluginInformation().isLegit()))) {
if (LibsPremium.isPremium() && ((LibsPremium.getPaidInformation() != null && LibsPremium.getPaidInformation().isPremium() &&
!LibsPremium.getPaidInformation().isLegit()) ||
(LibsPremium.getPluginInformation() != null && LibsPremium.getPluginInformation().isPremium() &&
!LibsPremium.getPluginInformation().isLegit()))) {
throw new IllegalStateException(
"Error while checking pi rate on startup! Please re-download the jar from SpigotMC before " +
"reporting this error!");
"Error while checking pi rate on startup! Please re-download the jar from SpigotMC before " + "reporting this error!");
}
disguiseType.setWatcherClass(watcherClass);
@@ -1870,8 +1842,8 @@ public class ReflectionManager {
Entity bukkitEntity = ReflectionManager.getBukkitEntity(nmsEntity);
DisguiseValues disguiseValues = new DisguiseValues(disguiseType,
bukkitEntity instanceof Damageable ? ((Damageable) bukkitEntity).getMaxHealth() : 0);
DisguiseValues disguiseValues =
new DisguiseValues(disguiseType, bukkitEntity instanceof Damageable ? ((Damageable) bukkitEntity).getMaxHealth() : 0);
WrappedDataWatcher watcher = WrappedDataWatcher.getEntityWatcher(bukkitEntity);
ArrayList<MetaIndex> indexes = MetaIndex.getMetaIndexes(disguiseType.getWatcherClass());
@@ -1881,11 +1853,10 @@ public class ReflectionManager {
MetaIndex flagType = MetaIndex.getMetaIndex(disguiseType.getWatcherClass(), watch.getIndex());
if (flagType == null) {
DisguiseUtilities.getLogger().severe("MetaIndex not found for " + disguiseType + "! Index: " + watch.getIndex());
DisguiseUtilities.getLogger()
.severe("MetaIndex not found for " + disguiseType + "! Index: " + watch.getIndex());
DisguiseUtilities.getLogger()
.severe("Value: " + watch.getRawValue() + " (" + watch.getRawValue().getClass() + ") (" +
nmsEntity.getClass() + ") & " + disguiseType.getWatcherClass().getSimpleName());
.severe("Value: " + watch.getRawValue() + " (" + watch.getRawValue().getClass() + ") (" + nmsEntity.getClass() + ") & " +
disguiseType.getWatcherClass().getSimpleName());
continue;
}
@@ -1898,33 +1869,26 @@ public class ReflectionManager {
if (ourValue.getClass() != nmsValue.getClass()) {
if (!loggedName) {
DisguiseUtilities.getLogger().severe(StringUtils.repeat("=", 20));
DisguiseUtilities.getLogger()
.severe("MetaIndex mismatch! Disguise " + disguiseType + ", Entity " + nmsEntityName);
DisguiseUtilities.getLogger().severe("MetaIndex mismatch! Disguise " + disguiseType + ", Entity " + nmsEntityName);
loggedName = true;
}
DisguiseUtilities.getLogger().severe(StringUtils.repeat("-", 20));
DisguiseUtilities.getLogger()
.severe("Index: " + watch.getIndex() + " | " + flagType.getFlagWatcher().getSimpleName() +
" | " + MetaIndex.getName(flagType));
.severe("Index: " + watch.getIndex() + " | " + flagType.getFlagWatcher().getSimpleName() + " | " + MetaIndex.getName(flagType));
Object flagDefault = flagType.getDefault();
DisguiseUtilities.getLogger()
.severe("LibsDisguises: " + flagDefault + " (" + flagDefault.getClass() + ")");
DisguiseUtilities.getLogger()
.severe("LibsDisguises Converted: " + ourValue + " (" + ourValue.getClass() + ")");
DisguiseUtilities.getLogger()
.severe("Minecraft: " + watch.getRawValue() + " (" + watch.getRawValue().getClass() + ")");
DisguiseUtilities.getLogger()
.severe("Minecraft Converted: " + nmsValue + " (" + nmsValue.getClass() + ")");
DisguiseUtilities.getLogger().severe("LibsDisguises: " + flagDefault + " (" + flagDefault.getClass() + ")");
DisguiseUtilities.getLogger().severe("LibsDisguises Converted: " + ourValue + " (" + ourValue.getClass() + ")");
DisguiseUtilities.getLogger().severe("Minecraft: " + watch.getRawValue() + " (" + watch.getRawValue().getClass() + ")");
DisguiseUtilities.getLogger().severe("Minecraft Converted: " + nmsValue + " (" + nmsValue.getClass() + ")");
DisguiseUtilities.getLogger().severe(StringUtils.repeat("-", 20));
}
}
for (MetaIndex index : indexes) {
DisguiseUtilities.getLogger().warning(
disguiseType + " has MetaIndex remaining! " + index.getFlagWatcher().getSimpleName() +
" at index " + index.getIndex());
DisguiseUtilities.getLogger()
.warning(disguiseType + " has MetaIndex remaining! " + index.getFlagWatcher().getSimpleName() + " at index " + index.getIndex());
}
SoundGroup sound = SoundGroup.getGroup(disguiseType.name());
@@ -1954,18 +1918,34 @@ public class ReflectionManager {
disguiseValues.setBabyBox(ReflectionManager.getBoundingBox(bukkitEntity));
}
} catch (SecurityException | IllegalArgumentException | FieldAccessException ex) {
DisguiseUtilities.getLogger().severe("Uh oh! Trouble while making values for the disguise " + disguiseType.name() + "!");
DisguiseUtilities.getLogger()
.severe("Uh oh! Trouble while making values for the disguise " + disguiseType.name() + "!");
DisguiseUtilities.getLogger().severe("Before reporting this error, " +
"please make sure you are using the latest version of LibsDisguises and ProtocolLib.");
.severe("Before reporting this error, " + "please make sure you are using the latest version of LibsDisguises and ProtocolLib.");
DisguiseUtilities.getLogger().severe("Development builds are available at (ProtocolLib) " +
"http://ci.dmulloy2.net/job/ProtocolLib/ and (LibsDisguises) https://ci.md-5" +
".net/job/LibsDisguises/");
"http://ci.dmulloy2.net/job/ProtocolLib/ and (LibsDisguises) https://ci.md-5" + ".net/job/LibsDisguises/");
ex.printStackTrace();
}
}
public static void setScore(Scoreboard scoreboard, Object criteria, String name, int score) {
try {
Object board = boardField.get(scoreboard);
Consumer con = o -> {
try {
setScore.invoke(o, score);
} catch (Exception e) {
e.printStackTrace();
}
};
getObjectives.invoke(board, criteria, name, con);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static Map<String, Command> getCommands(CommandMap map) {
try {
Field field = SimpleCommandMap.class.getDeclaredField("knownCommands");