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

@ -15,6 +15,7 @@ import lombok.Getter;
import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.DisguiseConfig;
import me.libraryaddict.disguise.LibsDisguises;
import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
import me.libraryaddict.disguise.utilities.LibsPremium;
import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue;
@ -250,7 +251,7 @@ public class FlagWatcher {
}
}
public List<WrappedWatchableObject> convert(List<WrappedWatchableObject> list) {
public List<WrappedWatchableObject> convert(Player player, List<WrappedWatchableObject> list) {
List<WrappedWatchableObject> newList = new ArrayList<>();
HashSet<Integer> sentValues = new HashSet<>();
boolean sendAllCustom = false;
@ -323,6 +324,15 @@ public class FlagWatcher {
}
newList.add(watch);
if (!sendAllCustom && getDisguise().isPlayerDisguise() && index == MetaIndex.LIVING_HEALTH) {
float health = ((Number) watch.getRawValue()).floatValue();
String name = DisguiseConfig.isScoreboardNames() ? ((PlayerDisguise) getDisguise()).getName() :
((PlayerDisguise) getDisguise()).getScoreboardName().getPlayer();
ReflectionManager.setScore(player.getScoreboard(), ReflectionManager.scoreboardCrtieriaHealth, name, (int) Math.ceil(health));
}
}
if (sendAllCustom) {
@ -346,7 +356,25 @@ public class FlagWatcher {
newList.add(watch);
}
if (getDisguise().isPlayerDisguise()) {
float health;
if (hasValue(MetaIndex.LIVING_HEALTH)) {
health = ((LivingWatcher) this).getHealth();
} else if (getDisguise().getEntity() instanceof LivingEntity) {
health = (float) ((LivingEntity) getDisguise().getEntity()).getHealth();
} else {
health = MetaIndex.LIVING_HEALTH.getDefault();
}
String name = !DisguiseConfig.isScoreboardNames() ? ((PlayerDisguise) getDisguise()).getName() :
((PlayerDisguise) getDisguise()).getScoreboardName().getPlayer();
ReflectionManager.setScore(player.getScoreboard(), ReflectionManager.scoreboardCrtieriaHealth, name, (int) Math.ceil(health));
}
}
// Here we check for if there is a health packet that says they died.
if (getDisguise().isSelfDisguiseVisible() && getDisguise().getEntity() != null && getDisguise().getEntity() instanceof Player) {
for (WrappedWatchableObject watch : newList) {

View File

@ -144,8 +144,7 @@ public class PlayerDisguise extends TargetedDisguise {
}
public String getProfileName() {
return isUpsideDown() ? "Dinnerbone" :
isDeadmau5Ears() ? "deadmau5" : hasScoreboardName() ? getScoreboardName().getPlayer() : getName();
return isUpsideDown() ? "Dinnerbone" : isDeadmau5Ears() ? "deadmau5" : hasScoreboardName() ? getScoreboardName().getPlayer() : getName();
}
public UUID getUUID() {
@ -246,8 +245,7 @@ public class PlayerDisguise extends TargetedDisguise {
if (currentLookup == null && gameProfile != null) {
disguise.skinToUse = getSkin();
disguise.gameProfile = ReflectionManager
.getGameProfileWithThisSkin(disguise.uuid, getGameProfile().getName(), getGameProfile());
disguise.gameProfile = ReflectionManager.getGameProfileWithThisSkin(disguise.uuid, getGameProfile().getName(), getGameProfile());
} else {
disguise.setSkin(getSkin());
}
@ -268,8 +266,7 @@ public class PlayerDisguise extends TargetedDisguise {
if (getSkin() != null) {
gameProfile = ReflectionManager.getGameProfile(uuid, getProfileName());
} else {
gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, getProfileName(),
DisguiseUtilities.getProfileFromMojang(this));
gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, getProfileName(), DisguiseUtilities.getProfileFromMojang(this));
}
}
@ -293,8 +290,7 @@ public class PlayerDisguise extends TargetedDisguise {
}
}
if (DisguiseConfig.isCopyPlayerTeamInfo() &&
(DisguiseConfig.getPlayerNameType() == DisguiseConfig.PlayerNameType.TEAMS ||
if (DisguiseConfig.isCopyPlayerTeamInfo() && (DisguiseConfig.getPlayerNameType() == DisguiseConfig.PlayerNameType.TEAMS ||
DisguiseConfig.getPlayerNameType() == DisguiseConfig.PlayerNameType.ARMORSTANDS)) {
name = DisguiseUtilities.getDisplayName(name);
}
@ -341,8 +337,7 @@ public class PlayerDisguise extends TargetedDisguise {
setScoreboardName(split);
}
resendDisguise = !DisguiseConfig.isScoreboardNames() || isStaticName(name) || isStaticName(getName()) ||
resendDisguise;
resendDisguise = !DisguiseConfig.isScoreboardNames() || isStaticName(name) || isStaticName(getName()) || resendDisguise;
if (resendDisguise) {
resendDisguise(name, false);
@ -473,8 +468,8 @@ public class PlayerDisguise extends TargetedDisguise {
}
};
WrappedGameProfile gameProfile = DisguiseUtilities.getProfileFromMojang(this.skinToUse, currentLookup,
LibsDisguises.getInstance().getConfig().getBoolean("ContactMojangServers", true));
WrappedGameProfile gameProfile = DisguiseUtilities
.getProfileFromMojang(this.skinToUse, currentLookup, LibsDisguises.getInstance().getConfig().getBoolean("ContactMojangServers", true));
if (gameProfile != null) {
setSkin(gameProfile);
@ -509,13 +504,11 @@ public class PlayerDisguise extends TargetedDisguise {
}
private WrappedGameProfile getProfile(String string) {
if (string != null && string.length() > 70 && string.startsWith("{\"id\":") && string.endsWith("}") &&
string.contains(",\"name\":")) {
if (string != null && string.length() > 70 && string.startsWith("{\"id\":") && string.endsWith("}") && string.contains(",\"name\":")) {
try {
return DisguiseUtilities.getGson().fromJson(string, WrappedGameProfile.class);
} catch (Exception ex) {
throw new IllegalStateException(
"Tried to parse " + string + " to a GameProfile, but it has been formatted incorrectly!");
throw new IllegalStateException("Tried to parse " + string + " to a GameProfile, but it has been formatted incorrectly!");
}
}
@ -641,8 +634,8 @@ public class PlayerDisguise extends TargetedDisguise {
}
};
WrappedGameProfile gameProfile = DisguiseUtilities.getProfileFromMojang(this.skinToUse, currentLookup,
LibsDisguises.getInstance().getConfig().getBoolean("ContactMojangServers", true));
WrappedGameProfile gameProfile = DisguiseUtilities
.getProfileFromMojang(this.skinToUse, currentLookup, LibsDisguises.getInstance().getConfig().getBoolean("ContactMojangServers", true));
if (gameProfile != null) {
setSkin(gameProfile);
@ -702,7 +695,17 @@ public class PlayerDisguise extends TargetedDisguise {
public boolean removeDisguise(boolean disguiseBeingReplaced) {
boolean result = super.removeDisguise(disguiseBeingReplaced);
if (result && hasScoreboardName()) {
if (!result) {
return result;
}
String name = !DisguiseConfig.isScoreboardNames() ? getName() : getScoreboardName().getPlayer();
if (Bukkit.getPlayer(name) == null) {
DisguiseUtilities.getAllScoreboards().forEach(s -> s.resetScores(name));
}
if (hasScoreboardName()) {
if (disguiseBeingReplaced) {
new BukkitRunnable() {
@Override

View File

@ -2778,11 +2778,11 @@ public class DisguiseUtilities {
/**
* Create a new datawatcher but with the 'correct' values
*/
public static WrappedDataWatcher createSanitizedDataWatcher(WrappedDataWatcher entityWatcher, FlagWatcher disguiseWatcher) {
public static WrappedDataWatcher createSanitizedDataWatcher(Player player, WrappedDataWatcher entityWatcher, FlagWatcher disguiseWatcher) {
WrappedDataWatcher newWatcher = new WrappedDataWatcher();
try {
List<WrappedWatchableObject> list = DisguiseConfig.isMetaPacketsEnabled() ? disguiseWatcher.convert(entityWatcher.getWatchableObjects()) :
List<WrappedWatchableObject> list = DisguiseConfig.isMetaPacketsEnabled() ? disguiseWatcher.convert(player, entityWatcher.getWatchableObjects()) :
disguiseWatcher.getWatchableObjects();
for (WrappedWatchableObject watchableObject : list) {

View File

@ -254,7 +254,7 @@ public class PlayerSkinHandler implements Listener {
private void addMetadata(Player player, PlayerSkin skin) throws InvocationTargetException {
PlayerDisguise disguise = skin.getDisguise().get();
Entity entity = disguise.getEntity();
WrappedDataWatcher watcher = DisguiseUtilities.createSanitizedDataWatcher(WrappedDataWatcher.getEntityWatcher(entity), disguise.getWatcher());
WrappedDataWatcher watcher = DisguiseUtilities.createSanitizedDataWatcher(player, WrappedDataWatcher.getEntityWatcher(entity), disguise.getWatcher());
PacketContainer metaPacket =
ProtocolLibrary.getProtocolManager().createPacketConstructor(PacketType.Play.Server.ENTITY_METADATA, entity.getEntityId(), watcher, true)

View File

@ -99,7 +99,7 @@ public class PacketHandlerEquipment implements IPacketHandler {
if (watch != null)
list.add(watch);
list = disguise.getWatcher().convert(list);
list = disguise.getWatcher().convert(observer, list);
} else {
for (WrappedWatchableObject obj : disguise.getWatcher().getWatchableObjects()) {
if (obj.getIndex() == MetaIndex.LIVING_HAND.getIndex()) {
@ -174,7 +174,7 @@ public class PacketHandlerEquipment implements IPacketHandler {
if (watch != null)
list.add(watch);
list = disguise.getWatcher().convert(list);
list = disguise.getWatcher().convert(observer, list);
} else {
for (WrappedWatchableObject obj : disguise.getWatcher().getWatchableObjects()) {
if (obj.getIndex() == toUse.getIndex()) {

View File

@ -40,7 +40,7 @@ public class PacketHandlerMetadata implements IPacketHandler {
}
List<WrappedWatchableObject> watchableObjects = disguise.getWatcher()
.convert(sentPacket.getWatchableCollectionModifier().read(0));
.convert(observer, sentPacket.getWatchableCollectionModifier().read(0));
PacketContainer metaPacket = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA);

View File

@ -236,7 +236,7 @@ public class PacketHandlerSpawn implements IPacketHandler {
// Set invis
toSend.setObject(obj, (byte) 32);
} else {
toSend = DisguiseUtilities.createSanitizedDataWatcher(WrappedDataWatcher.getEntityWatcher(disguisedEntity), disguise.getWatcher());
toSend = DisguiseUtilities.createSanitizedDataWatcher(observer, WrappedDataWatcher.getEntityWatcher(disguisedEntity), disguise.getWatcher());
}
if (NmsVersion.v1_15.isSupported()) {
@ -305,7 +305,7 @@ public class PacketHandlerSpawn implements IPacketHandler {
mods.write(11, yaw);
WrappedDataWatcher newWatcher =
DisguiseUtilities.createSanitizedDataWatcher(WrappedDataWatcher.getEntityWatcher(disguisedEntity), disguise.getWatcher());
DisguiseUtilities.createSanitizedDataWatcher(observer, WrappedDataWatcher.getEntityWatcher(disguisedEntity), disguise.getWatcher());
if (NmsVersion.v1_15.isSupported()) {
PacketContainer metaPacket = ProtocolLibrary.getProtocolManager()

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"))
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,8 +884,8 @@ 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)
return WrappedGameProfile.fromHandle(
session.getClass().getDeclaredMethod("fillProfileProperties", gameProfile.getHandleType(), boolean.class)
.invoke(session, gameProfile.getHandle(), true));
}
}
@ -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() &&
if (LibsPremium.isPremium() && ((LibsPremium.getPaidInformation() != null && LibsPremium.getPaidInformation().isPremium() &&
!LibsPremium.getPaidInformation().isLegit()) ||
(LibsPremium.getPluginInformation() != null &&
LibsPremium.getPluginInformation().isPremium() &&
(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");