From dd538b6c4c2df7137b0a1f9afe2cb81e442288c3 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sun, 27 Feb 2022 00:45:32 +1300 Subject: [PATCH 01/23] Fix sound groups --- .../packetlisteners/PacketListenerSounds.java | 122 ++---------------- 1 file changed, 8 insertions(+), 114 deletions(-) diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java index bf8c0134..45244747 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java @@ -1,7 +1,6 @@ package me.libraryaddict.disguise.utilities.packets.packetlisteners; import com.comphenix.protocol.PacketType.Play.Server; -import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.events.ListenerPriority; import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketContainer; @@ -9,7 +8,6 @@ import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.reflect.StructureModifier; import me.libraryaddict.disguise.LibsDisguises; import me.libraryaddict.disguise.disguisetypes.Disguise; -import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.disguisetypes.MobDisguise; import me.libraryaddict.disguise.disguisetypes.TargetedDisguise; import me.libraryaddict.disguise.utilities.DisguiseUtilities; @@ -21,7 +19,6 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; -import java.lang.reflect.InvocationTargetException; import java.util.Set; public class PacketListenerSounds extends PacketAdapter { @@ -33,7 +30,7 @@ public class PacketListenerSounds extends PacketAdapter { private static boolean cancelSound; public PacketListenerSounds(LibsDisguises plugin) { - super(plugin, ListenerPriority.NORMAL, Server.NAMED_SOUND_EFFECT, Server.ENTITY_STATUS); + super(plugin, ListenerPriority.NORMAL, Server.NAMED_SOUND_EFFECT); } @Override @@ -42,11 +39,7 @@ public class PacketListenerSounds extends PacketAdapter { return; } - if (event.getPacketType() == Server.ENTITY_STATUS) { - handleEntityStatus(event); - } else if (event.getPacketType() == Server.NAMED_SOUND_EFFECT) { - handleNamedSoundEffect(event); - } + handleNamedSoundEffect(event); } private void handleNamedSoundEffect(PacketEvent event) { @@ -118,13 +111,15 @@ public class PacketListenerSounds extends PacketAdapter { return; } - Object sound = null; SoundGroup disguiseSound = SoundGroup.getGroup(disguise); - if (disguiseSound != null) { - sound = disguiseSound.getSound(soundType); + if (disguiseSound == null) { + event.setCancelled(true); + return; } + Object sound = disguiseSound.getSound(soundType); + if (sound == null) { event.setCancelled(true); return; @@ -134,7 +129,7 @@ public class PacketListenerSounds extends PacketAdapter { float volume = (float) mods.read(5); float pitch = (float) mods.read(6); - // If the volume is the default + // If the volume is the default, set it to what the real disguise sound group expects if (volume == soundGroup.getDamageAndIdleSoundVolume()) { volume = disguiseSound.getDamageAndIdleSoundVolume(); } @@ -170,105 +165,4 @@ public class PacketListenerSounds extends PacketAdapter { event.setPacket(newPacket); } - - private void handleEntityStatus(PacketEvent event) { - StructureModifier mods = event.getPacket().getModifier(); - Player observer = event.getPlayer(); - - if ((byte) mods.read(1) != 2) { - return; - } - - // It made a damage animation - Disguise disguise = DisguiseUtilities.getDisguise(observer, event.getPacket().getIntegers().read(0)); - - if (disguise == null) { - return; - } - - Entity entity = disguise.getEntity(); - - if (disguise instanceof TargetedDisguise) { - Set discs = DisguiseUtilities.getDisguises().get(entity.getEntityId()); - - for (TargetedDisguise targetedDisguise : discs) { - if (targetedDisguise != disguise) { - continue; - } - - if (!targetedDisguise.canSee(observer)) { - return; - } - } - } - - SoundType soundType = SoundType.HURT; - - if (entity instanceof LivingEntity && ((LivingEntity) entity).getHealth() <= 0) { - soundType = SoundType.DEATH; - } - - if (entity == event.getPlayer() && !disguise.getType().isPlayer()) { - if (!disguise.isSelfDisguiseSoundsReplaced()) { - cancelSound = !cancelSound; - - if (cancelSound) { - return; - } - } - } - - SoundGroup entitySoundGroup = SoundGroup.getGroup(entity.getType().name()); - - if (entitySoundGroup == null) { - return; - } - - Object sound = entitySoundGroup.getSound(soundType); - - if (sound == null) { - return; - } - - SoundGroup disSound = SoundGroup.getGroup(disguise); - SoundGroup expectedGroup = SoundGroup.getGroup(disguise.getType().name()); - - if (disSound == null || disSound == expectedGroup) { - return; - } - - Location loc = entity.getLocation(); - PacketContainer packet = - new PacketContainer(sound.getClass().getSimpleName().equals("MinecraftKey") ? Server.CUSTOM_SOUND_EFFECT : Server.NAMED_SOUND_EFFECT); - - mods = packet.getModifier(); - - mods.write(0, sound); - mods.write(1, ReflectionManager.getSoundCategory(disguise.getType())); // Meh - mods.write(2, (int) (loc.getX() * 8D)); - mods.write(3, (int) (loc.getY() * 8D)); - mods.write(4, (int) (loc.getZ() * 8D)); - mods.write(5, disSound.getDamageAndIdleSoundVolume()); - - float pitch; - - if (disguise instanceof MobDisguise && !((MobDisguise) disguise).isAdult()) { - pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat()) * 0.2F + 1.4F; - } else { - pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat()) * 0.2F + 1.0F; - } - - if (disguise.getType() == DisguiseType.BAT) { - pitch *= 0.95F; - } - - mods.write(6, pitch); - - event.setCancelled(true); - try { - ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } - } } From 06f0a41f07df9239a38ae1880feabec0bd00c8b5 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sun, 27 Feb 2022 00:45:56 +1300 Subject: [PATCH 02/23] Optimize --- .../disguise/disguisetypes/watchers/PlayerWatcher.java | 1 - .../packets/packetlisteners/PacketListenerSounds.java | 6 ------ .../disguise/utilities/params/ParamInfoManager.java | 2 +- .../disguise/utilities/parser/DisguiseParser.java | 1 - .../disguise/utilities/parser/DisguisePermissions.java | 1 - 5 files changed, 1 insertion(+), 10 deletions(-) diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PlayerWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PlayerWatcher.java index 0a860c1b..14b12f9a 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PlayerWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PlayerWatcher.java @@ -4,7 +4,6 @@ import com.comphenix.protocol.wrappers.WrappedGameProfile; import com.comphenix.protocol.wrappers.nbt.NbtCompound; import com.comphenix.protocol.wrappers.nbt.NbtFactory; import me.libraryaddict.disguise.DisguiseConfig; -import me.libraryaddict.disguise.LibsDisguises; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; import me.libraryaddict.disguise.disguisetypes.PlayerDisguise; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java index 45244747..3b6bbcef 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java @@ -23,12 +23,6 @@ import java.util.Set; public class PacketListenerSounds extends PacketAdapter { - /** - * This is a fix for the stupidity that is "I can't separate the sounds from the sounds the player - * heard, and the sounds of the entity tracker heard" - */ - private static boolean cancelSound; - public PacketListenerSounds(LibsDisguises plugin) { super(plugin, ListenerPriority.NORMAL, Server.NAMED_SOUND_EFFECT); } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/ParamInfoManager.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/ParamInfoManager.java index 11957033..6121d5d4 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/ParamInfoManager.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/ParamInfoManager.java @@ -47,7 +47,7 @@ public class ParamInfoManager { } public static ParamInfo getParamInfo(WatcherMethod method) { - if (method.getName().equals("setSoundGroup")) { + if (method.getName().equalsIgnoreCase("setSoundGroup")) { return getParamInfoSoundGroup(); } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguiseParser.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguiseParser.java index 9ae13e33..02f6e143 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguiseParser.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguiseParser.java @@ -30,7 +30,6 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.inventory.EntityEquipment; import org.bukkit.inventory.ItemStack; -import org.bukkit.permissions.PermissionAttachmentInfo; import org.bukkit.potion.PotionEffectType; import java.lang.invoke.MethodHandle; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissions.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissions.java index 29cec77c..0c19a821 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissions.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissions.java @@ -2,7 +2,6 @@ package me.libraryaddict.disguise.utilities.parser; import me.libraryaddict.disguise.DisguiseConfig; import me.libraryaddict.disguise.disguisetypes.DisguiseType; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Ageable; import org.bukkit.entity.Animals; import org.bukkit.entity.Monster; From 6f97aa219d2da955b249c932c956b4f40eaed727 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sun, 27 Feb 2022 01:00:26 +1300 Subject: [PATCH 03/23] Fix tab complete on option values --- .../libraryaddict/disguise/commands/DisguiseBaseCommand.java | 2 ++ .../disguise/utilities/params/ParamInfoTypes.java | 4 ---- .../disguise/utilities/parser/DisguisePermissionsTest.java | 3 --- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/plugin/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java b/plugin/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java index fb3eea95..e1716952 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java @@ -233,6 +233,8 @@ public abstract class DisguiseBaseCommand implements CommandExecutor { tabs.add(value); } + } else { + tabs.addAll(wantToUse); } } } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/ParamInfoTypes.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/ParamInfoTypes.java index 03e4b85f..b06edde9 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/ParamInfoTypes.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/ParamInfoTypes.java @@ -72,10 +72,6 @@ public class ParamInfoTypes { return new ParamInfoItemBlock(ItemStack.class, "ItemStack", "ItemStack (Material)", "An ItemStack compromised of Material", getMaterials()); } - public ParamInfoSoundGroup getParamInfoSoundGroup() { - return new ParamInfoSoundGroup(); - } - /** * Constructor values are listed here for continuity */ diff --git a/plugin/src/test/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissionsTest.java b/plugin/src/test/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissionsTest.java index 85941dda..a8866b8e 100644 --- a/plugin/src/test/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissionsTest.java +++ b/plugin/src/test/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissionsTest.java @@ -2,9 +2,6 @@ package me.libraryaddict.disguise.utilities.parser; import me.libraryaddict.disguise.DisguiseConfig; import me.libraryaddict.disguise.disguisetypes.DisguiseType; -import me.libraryaddict.disguise.utilities.params.ParamInfoManager; -import me.libraryaddict.disguise.utilities.translations.LibsMsg; -import org.bukkit.Material; import org.bukkit.permissions.Permissible; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionAttachment; From 1c05d3d2cd20dff700d98e3ccc1c751a42fad8bd Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sun, 27 Feb 2022 01:26:01 +1300 Subject: [PATCH 04/23] Fix an error with sound group null, modified sound groups? --- .../packets/packetlisteners/PacketListenerSounds.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java index 3b6bbcef..086621a2 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java @@ -74,7 +74,7 @@ public class PacketListenerSounds extends PacketAdapter { disguisedEntity = entity; soundGroup = SoundGroup.getGroup(entity.getType().name()); - if (soundGroup.getSound(soundEffectObj) == null) { + if (soundGroup == null || soundGroup.getSound(soundEffectObj) == null) { return; } @@ -95,12 +95,6 @@ public class PacketListenerSounds extends PacketAdapter { return; } - // Blocks null and CANCEL, HURT and DEATH are 100% handled by entity status! - if (soundType != SoundType.STEP && soundType != SoundType.IDLE) { - //event.setCancelled(true); - // return; - } - if (disguisedEntity == observer && !disguise.isSelfDisguiseSoundsReplaced()) { return; } From c2a26dacc202f060e8dd31b6a4dfe7c40e968bfc Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sun, 27 Feb 2022 12:41:54 +1300 Subject: [PATCH 05/23] Fix empty strings not being quoted --- .../me/libraryaddict/disguise/utilities/DisguiseUtilities.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java index 4c99accd..9d10d3ae 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java @@ -2292,7 +2292,7 @@ public class DisguiseUtilities { return list.toArray(new String[0]); }*/ public static String quote(String string) { - if (!string.contains(" ") && !string.startsWith("\"") && !string.endsWith("\"")) { + if (!string.isEmpty() && !string.contains(" ") && !string.startsWith("\"") && !string.endsWith("\"")) { return string; } From 53b7e291716439af70b70d891642004b654e0b9e Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Mon, 28 Feb 2022 22:00:48 +1300 Subject: [PATCH 06/23] Don't bother checking if their sound type is a death or hurt or w/e --- .../packets/packetlisteners/PacketListenerSounds.java | 3 +-- .../disguise/utilities/sounds/SoundGroup.java | 10 ++-------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java index 086621a2..9c42dfc6 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java @@ -79,8 +79,7 @@ public class PacketListenerSounds extends PacketAdapter { } if ((!(entity instanceof LivingEntity)) || ((LivingEntity) entity).getHealth() > 0) { - boolean hasInvun = ReflectionManager.hasInvul(entity); - soundType = soundGroup.getType(soundEffectObj, !hasInvun); + soundType = soundGroup.getType(soundEffectObj); } else { soundType = SoundType.DEATH; } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/sounds/SoundGroup.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/sounds/SoundGroup.java index 4c1f539e..658c7236 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/sounds/SoundGroup.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/sounds/SoundGroup.java @@ -121,18 +121,12 @@ public class SoundGroup { /** * Used to check if this sound name is owned by this disguise sound. */ - public SoundType getType(Object sound, boolean ignoreDamage) { + public SoundType getType(Object sound) { if (sound == null) { return SoundType.CANCEL; } - SoundType soundType = getSound(sound); - - if (soundType == SoundType.DEATH || (ignoreDamage && soundType == SoundType.HURT)) { - return null; - } - - return soundType; + return getSound(sound); } public boolean isCancelSound(String sound) { From 3c650ffac26c93ef64caf71741728742dbd0991c Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Thu, 3 Mar 2022 16:49:25 +1300 Subject: [PATCH 07/23] Print what the cached file said --- .../libraryaddict/disguise/utilities/DisguiseUtilities.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java index 9d10d3ae..12f00223 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java @@ -807,9 +807,9 @@ public class DisguiseUtilities { return new Disguise[0]; } - try { - String cached; + String cached = null; + try { try (FileInputStream input = new FileInputStream(disguiseFile); InputStreamReader inputReader = new InputStreamReader(input, StandardCharsets.UTF_8); BufferedReader reader = new BufferedReader(inputReader)) { @@ -850,7 +850,7 @@ public class DisguiseUtilities { return disguises; } catch (Throwable e) { - getLogger().severe("Malformed disguise for " + entityUUID); + getLogger().severe("Malformed disguise for " + entityUUID + "(" + cached + ")"); e.printStackTrace(); } From 1ffe9c3d126037ba83bcd9cc876138628f9ab0b8 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Thu, 3 Mar 2022 19:25:13 +1300 Subject: [PATCH 08/23] Attempt to fix an error with weirdly named plugin folders --- .../me/libraryaddict/disguise/utilities/LibsPremium.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/LibsPremium.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/LibsPremium.java index 8d23d774..13e42a5c 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/LibsPremium.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/LibsPremium.java @@ -149,7 +149,13 @@ public class LibsPremium { } private static void doSecondaryCheck(String version) { - File[] files = new File("plugins/LibsDisguises/").listFiles(); + File pluginDir = new File("plugins/LibsDisguises/"); + + if (!pluginDir.exists() && LibsDisguises.getInstance() != null) { + pluginDir = LibsDisguises.getInstance().getDataFolder(); + } + + File[] files = pluginDir.listFiles(); boolean foundJar = false; if (files == null) { From 91147ed761787d05cd2704dc9607af3ecbe2122a Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 5 Mar 2022 06:39:59 +1300 Subject: [PATCH 09/23] Move the nms stuff into its own directory --- {v1_17_R1 => nms/v1_17_R1}/pom.xml | 4 ++-- .../utilities/reflection/v1_17/ReflectionManager.java | 0 {v1_18_R1 => nms/v1_18_R1}/pom.xml | 4 ++-- .../utilities/reflection/v1_18_1}/ReflectionManager.java | 2 +- pom.xml | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) rename {v1_17_R1 => nms/v1_17_R1}/pom.xml (94%) rename {v1_17_R1 => nms/v1_17_R1}/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_17/ReflectionManager.java (100%) rename {v1_18_R1 => nms/v1_18_R1}/pom.xml (94%) rename {v1_18_R1/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_18 => nms/v1_18_R1/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_18_1}/ReflectionManager.java (99%) diff --git a/v1_17_R1/pom.xml b/nms/v1_17_R1/pom.xml similarity index 94% rename from v1_17_R1/pom.xml rename to nms/v1_17_R1/pom.xml index 36bdbbd3..8450d8d7 100644 --- a/v1_17_R1/pom.xml +++ b/nms/v1_17_R1/pom.xml @@ -6,7 +6,7 @@ LibsDisguises LibsDisguises 10.0.27-SNAPSHOT - ../pom.xml + ../../pom.xml 4.0.0 @@ -72,7 +72,7 @@ remap-spigot - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar + target/v1_17_R1-10.0.27-SNAPSHOT-remapped-obf.jar org.spigotmc:minecraft-server:1.17.1-R0.1-SNAPSHOT:csrg:maps-spigot org.spigotmc:spigot:1.17.1-R0.1-SNAPSHOT:jar:remapped-obf true diff --git a/v1_17_R1/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_17/ReflectionManager.java b/nms/v1_17_R1/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_17/ReflectionManager.java similarity index 100% rename from v1_17_R1/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_17/ReflectionManager.java rename to nms/v1_17_R1/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_17/ReflectionManager.java diff --git a/v1_18_R1/pom.xml b/nms/v1_18_R1/pom.xml similarity index 94% rename from v1_18_R1/pom.xml rename to nms/v1_18_R1/pom.xml index 97975be6..4c5f6850 100644 --- a/v1_18_R1/pom.xml +++ b/nms/v1_18_R1/pom.xml @@ -6,7 +6,7 @@ LibsDisguises LibsDisguises 10.0.27-SNAPSHOT - ../pom.xml + ../../pom.xml 4.0.0 @@ -71,7 +71,7 @@ remap-spigot - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar + target/v1_18_R1-10.0.27-SNAPSHOT-remapped-obf.jar org.spigotmc:minecraft-server:1.18-R0.1-SNAPSHOT:csrg:maps-spigot org.spigotmc:spigot:1.18-R0.1-SNAPSHOT:jar:remapped-obf true diff --git a/v1_18_R1/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_18/ReflectionManager.java b/nms/v1_18_R1/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_18_1/ReflectionManager.java similarity index 99% rename from v1_18_R1/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_18/ReflectionManager.java rename to nms/v1_18_R1/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_18_1/ReflectionManager.java index 391388f9..40ccb8c3 100644 --- a/v1_18_R1/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_18/ReflectionManager.java +++ b/nms/v1_18_R1/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_18_1/ReflectionManager.java @@ -1,4 +1,4 @@ -package me.libraryaddict.disguise.utilities.reflection.v1_18; +package me.libraryaddict.disguise.utilities.reflection.v1_18_1; import com.comphenix.protocol.wrappers.BlockPosition; import com.comphenix.protocol.wrappers.EnumWrappers.Direction; diff --git a/pom.xml b/pom.xml index 5a2e13c4..1e29a61a 100644 --- a/pom.xml +++ b/pom.xml @@ -9,8 +9,8 @@ 10.0.27-SNAPSHOT shared - v1_17_R1 - v1_18_R1 + nms/v1_17_R1 + nms/v1_18_R1 plugin From 0411e4bcc62392f144d21a267f86a4d0574ddf30 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 5 Mar 2022 07:58:40 +1300 Subject: [PATCH 10/23] Add 1.18.2 and some pom cleanup --- nms/pom.xml | 21 + nms/v1_17_R1/pom.xml | 25 +- nms/v1_18_R1/pom.xml | 25 +- nms/v1_18_R2/pom.xml | 87 ++++ .../reflection/v1_18_2/ReflectionManager.java | 466 ++++++++++++++++++ plugin/pom.xml | 28 +- .../reflection/ReflectionManager.java | 12 +- pom.xml | 6 +- 8 files changed, 632 insertions(+), 38 deletions(-) create mode 100644 nms/pom.xml create mode 100644 nms/v1_18_R2/pom.xml create mode 100644 nms/v1_18_R2/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_18_2/ReflectionManager.java diff --git a/nms/pom.xml b/nms/pom.xml new file mode 100644 index 00000000..83677d99 --- /dev/null +++ b/nms/pom.xml @@ -0,0 +1,21 @@ + + + 4.0.0 + libsdisguises-nms + pom + + + LibsDisguises + LibsDisguises + 10.0.27-SNAPSHOT + ../pom.xml + + + + v1_17_R1 + v1_18_R1 + v1_18_R2 + + + diff --git a/nms/v1_17_R1/pom.xml b/nms/v1_17_R1/pom.xml index 8450d8d7..59268101 100644 --- a/nms/v1_17_R1/pom.xml +++ b/nms/v1_17_R1/pom.xml @@ -6,7 +6,7 @@ LibsDisguises LibsDisguises 10.0.27-SNAPSHOT - ../../pom.xml + ../pom.xml 4.0.0 @@ -17,20 +17,22 @@ 1.8 1.8 UTF-8 + + 1.17.1-R0.1-SNAPSHOT org.spigotmc spigot - 1.17.1-R0.1-SNAPSHOT + ${spigot.version} remapped-mojang provided org.spigotmc spigot-api - 1.17.1-R0.1-SNAPSHOT + ${spigot.version} provided @@ -49,7 +51,7 @@ net.md-5 specialsource-maven-plugin - 1.2.2 + 1.2.4 package @@ -58,11 +60,11 @@ remap-obf - org.spigotmc:minecraft-server:1.17.1-R0.1-SNAPSHOT:txt:maps-mojang + org.spigotmc:minecraft-server:${spigot.version}:txt:maps-mojang true - org.spigotmc:spigot:1.17.1-R0.1-SNAPSHOT:jar:remapped-mojang + org.spigotmc:spigot:${spigot.version}:jar:remapped-mojang + remapped-mojang true - remapped-obf @@ -72,16 +74,15 @@ remap-spigot - target/v1_17_R1-10.0.27-SNAPSHOT-remapped-obf.jar - org.spigotmc:minecraft-server:1.17.1-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.17.1-R0.1-SNAPSHOT:jar:remapped-obf - true + target/${build.finalName}-remapped-mojang.jar + org.spigotmc:minecraft-server:${spigot.version}:csrg:maps-spigot + org.spigotmc:spigot:${spigot.version}:jar:remapped-obf remapped-spigot + true - \ No newline at end of file diff --git a/nms/v1_18_R1/pom.xml b/nms/v1_18_R1/pom.xml index 4c5f6850..ca6a88c9 100644 --- a/nms/v1_18_R1/pom.xml +++ b/nms/v1_18_R1/pom.xml @@ -6,7 +6,7 @@ LibsDisguises LibsDisguises 10.0.27-SNAPSHOT - ../../pom.xml + ../pom.xml 4.0.0 @@ -16,20 +16,22 @@ 1.8 1.8 UTF-8 + + 1.18-R0.1-SNAPSHOT org.spigotmc spigot - 1.18-R0.1-SNAPSHOT + ${spigot.version} remapped-mojang provided org.spigotmc spigot-api - 1.18-R0.1-SNAPSHOT + ${spigot.version} provided @@ -48,7 +50,7 @@ net.md-5 specialsource-maven-plugin - 1.2.2 + 1.2.4 package @@ -57,11 +59,11 @@ remap-obf - org.spigotmc:minecraft-server:1.18-R0.1-SNAPSHOT:txt:maps-mojang + org.spigotmc:minecraft-server:${spigot.version}:txt:maps-mojang true - org.spigotmc:spigot:1.18-R0.1-SNAPSHOT:jar:remapped-mojang + org.spigotmc:spigot:${spigot.version}:jar:remapped-mojang + remapped-mojang true - remapped-obf @@ -71,16 +73,15 @@ remap-spigot - target/v1_18_R1-10.0.27-SNAPSHOT-remapped-obf.jar - org.spigotmc:minecraft-server:1.18-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.18-R0.1-SNAPSHOT:jar:remapped-obf - true + target/${build.finalName}-remapped-mojang.jar + org.spigotmc:minecraft-server:${spigot.version}:csrg:maps-spigot + org.spigotmc:spigot:${spigot.version}:jar:remapped-obf remapped-spigot + true - \ No newline at end of file diff --git a/nms/v1_18_R2/pom.xml b/nms/v1_18_R2/pom.xml new file mode 100644 index 00000000..09d0840b --- /dev/null +++ b/nms/v1_18_R2/pom.xml @@ -0,0 +1,87 @@ + + + + LibsDisguises + LibsDisguises + 10.0.27-SNAPSHOT + ../pom.xml + + + 4.0.0 + v1_18_R2 + + + 1.8 + 1.8 + UTF-8 + + 1.18.2-R0.1-SNAPSHOT + + + + + org.spigotmc + spigot + ${spigot.version} + remapped-mojang + provided + + + org.spigotmc + spigot-api + ${spigot.version} + provided + + + LibsDisguises + shared + ${project.version} + + + com.comphenix.protocol + ProtocolLib + + + + + + + net.md-5 + specialsource-maven-plugin + 1.2.4 + + + package + + remap + + remap-obf + + org.spigotmc:minecraft-server:${spigot.version}:txt:maps-mojang + true + org.spigotmc:spigot:${spigot.version}:jar:remapped-mojang + remapped-mojang + true + + + + package + + remap + + remap-spigot + + target/${build.finalName}-remapped-mojang.jar + org.spigotmc:minecraft-server:${spigot.version}:csrg:maps-spigot + org.spigotmc:spigot:${spigot.version}:jar:remapped-obf + remapped-spigot + true + + + + + + + \ No newline at end of file diff --git a/nms/v1_18_R2/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_18_2/ReflectionManager.java b/nms/v1_18_R2/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_18_2/ReflectionManager.java new file mode 100644 index 00000000..d60b2401 --- /dev/null +++ b/nms/v1_18_R2/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_18_2/ReflectionManager.java @@ -0,0 +1,466 @@ +package me.libraryaddict.disguise.utilities.reflection.v1_18_2; + +import com.comphenix.protocol.wrappers.BlockPosition; +import com.comphenix.protocol.wrappers.EnumWrappers.Direction; +import com.comphenix.protocol.wrappers.Vector3F; +import com.comphenix.protocol.wrappers.WrappedBlockData; +import com.comphenix.protocol.wrappers.WrappedChatComponent; +import com.comphenix.protocol.wrappers.WrappedDataWatcher; +import com.comphenix.protocol.wrappers.WrappedGameProfile; +import com.mojang.authlib.Agent; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.ProfileLookupCallback; +import com.mojang.authlib.minecraft.MinecraftSessionService; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Registry; +import net.minecraft.core.Vector3f; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.protocol.game.ClientboundPlayerInfoPacket; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.dedicated.DedicatedServer; +import net.minecraft.server.level.ChunkMap; +import net.minecraft.server.level.ServerChunkCache; +import net.minecraft.server.level.ServerEntity; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerGamePacketListenerImpl; +import net.minecraft.server.network.ServerPlayerConnection; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.npc.VillagerData; +import net.minecraft.world.entity.npc.VillagerProfession; +import net.minecraft.world.entity.npc.VillagerType; +import net.minecraft.world.level.GameType; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.bukkit.Art; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.block.data.BlockData; +import org.bukkit.craftbukkit.v1_18_R2.CraftArt; +import org.bukkit.craftbukkit.v1_18_R2.CraftServer; +import org.bukkit.craftbukkit.v1_18_R2.CraftSound; +import org.bukkit.craftbukkit.v1_18_R2.CraftWorld; +import org.bukkit.craftbukkit.v1_18_R2.block.data.CraftBlockData; +import org.bukkit.craftbukkit.v1_18_R2.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_18_R2.util.CraftMagicNumbers; +import org.bukkit.craftbukkit.v1_18_R2.util.CraftNamespacedKey; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.entity.Villager; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.util.EulerAngle; +import org.bukkit.util.Vector; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.Locale; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.atomic.AtomicInteger; + +public class ReflectionManager implements ReflectionManagerAbstract { + public boolean hasInvul(Entity entity) { + net.minecraft.world.entity.Entity nmsEntity = ((CraftEntity) entity).getHandle(); + + if (nmsEntity instanceof net.minecraft.world.entity.LivingEntity) { + return nmsEntity.invulnerableTime > 0; + } else { + return nmsEntity.isInvulnerableTo(DamageSource.GENERIC); + } + } + + public int getIncrementedStateId(Player player) { + ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); + return serverPlayer.containerMenu.incrementStateId(); // TODO Check correct container + } + + public int getNewEntityId() { + return getNewEntityId(true); + } + + public int getNewEntityId(boolean increment) { + try { + Field entityCounter = net.minecraft.world.entity.Entity.class.getDeclaredField("c"); + entityCounter.setAccessible(true); + AtomicInteger atomicInteger = (AtomicInteger) entityCounter.get(null); + if (increment) { + return atomicInteger.incrementAndGet(); + } else { + return atomicInteger.get(); + } + } catch (ReflectiveOperationException e) { + e.printStackTrace(); + } + + return -1; + } + + public ServerGamePacketListenerImpl getPlayerConnectionOrPlayer(Player player) { + return ((CraftPlayer) player).getHandle().connection; + } + + public net.minecraft.world.entity.Entity createEntityInstance(String entityName) { + Optional> optional = net.minecraft.world.entity.EntityType.byString(entityName.toLowerCase(Locale.ROOT)); + if (optional.isPresent()) { + net.minecraft.world.entity.EntityType entityType = optional.get(); + ServerLevel world = getWorldServer(Bukkit.getWorlds().get(0)); + net.minecraft.world.entity.Entity entity; + if (entityType == net.minecraft.world.entity.EntityType.PLAYER) { + WrappedGameProfile gameProfile = ReflectionManagerAbstract.getGameProfile(new UUID(0, 0), "Steve"); + entity = new ServerPlayer(getMinecraftServer(), world, (GameProfile) gameProfile.getHandle()); + }/* else if (entityType == net.minecraft.world.entity.EntityType.ENDER_PEARL) { + entity = new ThrownEnderpearl(world, (net.minecraft.world.entity.LivingEntity) createEntityInstance("cow")); + } else if (entityType == net.minecraft.world.entity.EntityType.FISHING_BOBBER) { + entity = new FishingHook((net.minecraft.world.entity.player.Player) createEntityInstance("player"), world, 0, 0); + }*/ else { + entity = entityType.create(world); + } + + // Workaround for paper being 2 smart 4 me + entity.setPos(1.0, 1.0, 1.0); + entity.setPos(0.0, 0.0, 0.0); + return entity; + } + + return null; + } + + public MobEffect getMobEffectList(int id) { + return MobEffect.byId(id); + } + + public MobEffectInstance createMobEffect(PotionEffect effect) { + return createMobEffect(effect.getType().getId(), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles()); + } + + public MobEffectInstance createMobEffect(int id, int duration, int amplification, boolean ambient, boolean particles) { + return new MobEffectInstance(getMobEffectList(id), duration, amplification, ambient, particles); + } + + public AABB getBoundingBox(Entity entity) { + return ((CraftEntity) entity).getHandle().getBoundingBox(); + } + + public double getXBoundingBox(Entity entity) { + return getBoundingBox(entity).maxX - getBoundingBox(entity).minX; + } + + public double getYBoundingBox(Entity entity) { + return getBoundingBox(entity).maxY - getBoundingBox(entity).minY; + } + + public double getZBoundingBox(Entity entity) { + return getBoundingBox(entity).maxZ - getBoundingBox(entity).minZ; + } + + public ServerPlayer getPlayerFromPlayerConnection(Object nmsEntity) { + return ((ServerPlayerConnection) nmsEntity).getPlayer(); + } + + public Entity getBukkitEntity(Object nmsEntity) { + return ((net.minecraft.world.entity.Entity) nmsEntity).getBukkitEntity(); + } + + public ItemStack getBukkitItem(Object nmsItem) { + return CraftItemStack.asBukkitCopy((net.minecraft.world.item.ItemStack) nmsItem); + } + + public ItemStack getCraftItem(ItemStack bukkitItem) { + return CraftItemStack.asCraftCopy(bukkitItem); + } + + public SoundEvent getCraftSound(Sound sound) { + return CraftSound.getSoundEffect(sound); + } + + public ServerEntity getEntityTrackerEntry(Entity target) throws Exception { + ServerLevel world = ((CraftWorld) target.getWorld()).getHandle(); + ServerChunkCache chunkSource = world.getChunkSource(); + ChunkMap chunkMap = chunkSource.chunkMap; + Int2ObjectMap entityMap = chunkMap.entityMap; + ChunkMap.TrackedEntity trackedEntity = entityMap.get(target.getEntityId()); + if (trackedEntity == null) { + return null; + } + + Field field = ChunkMap.TrackedEntity.class.getDeclaredField("b"); + field.setAccessible(true); + + return (ServerEntity) field.get(trackedEntity); + } + + public DedicatedServer getMinecraftServer() { + return ((CraftServer) Bukkit.getServer()).getServer(); + } + + public String getEnumArt(Art art) { + return Registry.MOTIVE.getKey(CraftArt.BukkitToNotch(art)).getPath(); + } + + public BlockPos getBlockPosition(int x, int y, int z) { + return new BlockPos(x, y, z); + } + + public net.minecraft.core.Direction getEnumDirection(int direction) { + return net.minecraft.core.Direction.from2DDataValue(direction); + } + + public ClientboundPlayerInfoPacket.Action getEnumPlayerInfoAction(int action) { + return ClientboundPlayerInfoPacket.Action.values()[action]; + } + + public ClientboundPlayerInfoPacket.PlayerUpdate getPlayerInfoData(WrappedGameProfile gameProfile) { + return new ClientboundPlayerInfoPacket.PlayerUpdate((GameProfile) gameProfile.getHandle(), 0, GameType.SURVIVAL, + new TextComponent(gameProfile.getName())); + } + + public Object getNmsEntity(Entity entity) { + return ((CraftEntity) entity).getHandle(); + } + + public double getPing(Player player) { + return player.getPing(); + } + + public float[] getSize(Entity entity) { + net.minecraft.world.entity.Entity nmsEntity = ((CraftEntity) entity).getHandle(); + EntityDimensions dimensions = nmsEntity.getDimensions(net.minecraft.world.entity.Pose.STANDING); + return new float[]{dimensions.width, nmsEntity.getEyeHeight()}; + } + + public WrappedGameProfile getSkullBlob(WrappedGameProfile gameProfile) { + DedicatedServer minecraftServer = getMinecraftServer(); + MinecraftSessionService sessionService = minecraftServer.getSessionService(); + return WrappedGameProfile.fromHandle(sessionService.fillProfileProperties((GameProfile) gameProfile.getHandle(), true)); + } + + public Float getSoundModifier(Object entity) { + if (!(entity instanceof net.minecraft.world.entity.LivingEntity)) { + return 0.0f; + } else { + try { + Method method = net.minecraft.world.entity.LivingEntity.class.getDeclaredMethod("eu"); + method.setAccessible(true); + + return (Float) method.invoke(entity); + } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + return 0f; + } + + public void injectCallback(String playername, ProfileLookupCallback callback) { + Agent agent = Agent.MINECRAFT; + getMinecraftServer().getProfileRepository().findProfilesByNames(new String[]{playername}, agent, callback); + } + + public void setBoundingBox(Entity entity, double x, double y, double z) { + Location loc = entity.getLocation(); + ((CraftEntity) entity).getHandle() + .setBoundingBox(new AABB(loc.getX() - x / 2, loc.getY() - y / 2, loc.getZ() - z / 2, loc.getX() + x / 2, loc.getY() + y / 2, loc.getZ() + z / 2)); + } + + public Enum getSoundCategory(String category) { + return Arrays.stream(SoundSource.values()).filter(soundSource -> category.equalsIgnoreCase(soundSource.getName())).findAny().get(); + } + + /** + * Creates the NMS object EnumItemSlot from an EquipmentSlot. + * + * @param slot + * @return null if the equipment slot is null + */ + public Enum createEnumItemSlot(EquipmentSlot slot) { + switch (slot) { + case HAND: + return net.minecraft.world.entity.EquipmentSlot.MAINHAND; + case OFF_HAND: + return net.minecraft.world.entity.EquipmentSlot.OFFHAND; + case FEET: + return net.minecraft.world.entity.EquipmentSlot.FEET; + case LEGS: + return net.minecraft.world.entity.EquipmentSlot.LEGS; + case CHEST: + return net.minecraft.world.entity.EquipmentSlot.CHEST; + case HEAD: + return net.minecraft.world.entity.EquipmentSlot.HEAD; + default: + return null; + } + } + + public Object getSoundString(Sound sound) { + return CraftSound.getSoundEffect(sound).getLocation().toString(); // TODO + } + + public Optional convertOptional(Object val) { + if (val instanceof BlockPosition) { + BlockPosition pos = (BlockPosition) val; + return Optional.of(getBlockPosition(pos.getX(), pos.getY(), pos.getZ())); + } else if (val instanceof WrappedBlockData) { + Object obj = ((WrappedBlockData) val).getHandle(); + return Optional.of(obj); + } else if (val instanceof ItemStack) { + Object obj = getNmsItem((ItemStack) val); + return Optional.of(obj); + } else if (val instanceof WrappedChatComponent) { + Object obj = ((WrappedChatComponent) val).getHandle(); + return Optional.of(obj); + } + + return Optional.of(val); + } + + public Vector3f convertVec3(Object object) { + if (object instanceof Vector3F) { + Vector3F vector3F = (Vector3F) object; + return new Vector3f(vector3F.getX(), vector3F.getY(), vector3F.getZ()); + } else if (object instanceof EulerAngle) { + EulerAngle eulerAngle = (EulerAngle) object; + return new Vector3f((float) eulerAngle.getX(), (float) eulerAngle.getY(), (float) eulerAngle.getZ()); + } + + return null; + } + + public net.minecraft.core.Direction convertDirection(Direction direction) { + return net.minecraft.core.Direction.from3DDataValue(direction.ordinal()); + } + + public Material getMaterial(String name) { + return CraftMagicNumbers.INSTANCE.getMaterial(name, CraftMagicNumbers.INSTANCE.getDataVersion()); + } + + public String getItemName(Material material) { + return Registry.ITEM.getKey(CraftMagicNumbers.getItem(material)).getPath(); + } + + public net.minecraft.world.item.ItemStack getNmsItem(ItemStack itemStack) { + return CraftItemStack.asNMSCopy(itemStack); + } + + public VillagerData getNmsVillagerData(Villager.Type villagerType, Villager.Profession villagerProfession) { + VillagerType nmsVillagerType = Registry.VILLAGER_TYPE.get(CraftNamespacedKey.toMinecraft(villagerType.getKey())); + VillagerProfession nmsVillagerProfession = Registry.VILLAGER_PROFESSION.get(CraftNamespacedKey.toMinecraft(villagerProfession.getKey())); + + return new net.minecraft.world.entity.npc.VillagerData(nmsVillagerType, nmsVillagerProfession, 1); + } + + public VillagerType getVillagerType(Villager.Type type) { + return Registry.VILLAGER_TYPE.get(CraftNamespacedKey.toMinecraft(type.getKey())); + } + + public VillagerProfession getVillagerProfession(Villager.Profession profession) { + return Registry.VILLAGER_PROFESSION.get(CraftNamespacedKey.toMinecraft(profession.getKey())); + } + + public SynchedEntityData.DataItem createDataWatcherItem(WrappedDataWatcher.WrappedDataWatcherObject wrappedDataWatcherObject, T metaItem) { + return new SynchedEntityData.DataItem<>((EntityDataAccessor) wrappedDataWatcherObject.getHandle(), metaItem); + } + + @Deprecated + public SoundEvent createSoundEffect(String minecraftKey) { + return new SoundEvent(new ResourceLocation(minecraftKey)); + } + + @Override + public ResourceLocation createMinecraftKey(String name) { + return new ResourceLocation(name); + } + + public Vec3 getVec3D(Vector vector) { + return new Vec3(vector.getX(), vector.getY(), vector.getZ()); + } + + public net.minecraft.world.entity.EntityType getEntityType(EntityType entityType) { + return net.minecraft.world.entity.EntityType.byString( + entityType.getName() == null ? entityType.name().toLowerCase(Locale.ENGLISH) : entityType.getName()).orElse(null); + } + + public Object registerEntityType(NamespacedKey key) { + net.minecraft.world.entity.EntityType newEntity = + new net.minecraft.world.entity.EntityType<>(null, null, false, false, false, false, null, null, 0, 0); + Registry.register(Registry.ENTITY_TYPE, CraftNamespacedKey.toMinecraft(key), newEntity); + newEntity.getDescriptionId(); + return newEntity; // TODO ??? Some reflection in legacy that I'm unsure about + } + + public int getEntityTypeId(Object entityTypes) { + net.minecraft.world.entity.EntityType entityType = (net.minecraft.world.entity.EntityType) entityTypes; + return Registry.ENTITY_TYPE.getId(entityType); + } + + public int getEntityTypeId(EntityType entityType) { + return getEntityTypeId(getEntityType(entityType)); + } + + public Object getEntityType(NamespacedKey name) { + return Registry.ENTITY_TYPE.get(CraftNamespacedKey.toMinecraft(name)); + } + + public Object getNmsEntityPose(String enumPose) { + return net.minecraft.world.entity.Pose.valueOf(enumPose); + } + + public int getCombinedIdByBlockData(BlockData data) { + BlockState state = ((CraftBlockData) data).getState(); + return Block.getId(state); + } + + public int getCombinedIdByItemStack(ItemStack itemStack) { + Block block = CraftMagicNumbers.getBlock(itemStack.getType()); + return Block.getId(block.defaultBlockState()); + } + + public BlockData getBlockDataByCombinedId(int id) { + return CraftBlockData.fromData(Block.stateById(id)); + } + + public ItemStack getItemStackByCombinedId(int id) { + return new ItemStack(CraftMagicNumbers.getMaterial(Block.stateById(id).getBlock())); + } + + public ServerLevel getWorldServer(World w) { + return ((CraftWorld) w).getHandle(); + } + + public ItemMeta getDeserializedItemMeta(Map meta) { + try { + Class aClass = Class.forName("org.bukkit.craftbukkit.v1_18_R1.inventory.CraftMetaItem$SerializableMeta"); + Method deserialize = aClass.getDeclaredMethod("deserialize", Map.class); + Object itemMeta = deserialize.invoke(null, meta); + + return (ItemMeta) itemMeta; + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } +} diff --git a/plugin/pom.xml b/plugin/pom.xml index 4e33734b..7192f4f2 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -179,22 +179,30 @@ LibsDisguises shared - 10.0.27-SNAPSHOT - compile - true - - - LibsDisguises - v1_18_R1 - 10.0.27-SNAPSHOT - remapped-spigot + ${project.version} compile true LibsDisguises v1_17_R1 - 10.0.27-SNAPSHOT + ${project.version} + remapped-spigot + compile + true + + + LibsDisguises + v1_18_R1 + ${project.version} + remapped-spigot + compile + true + + + LibsDisguises + v1_18_R2 + ${project.version} remapped-spigot compile true diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/ReflectionManager.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/ReflectionManager.java index a1c48d90..f923d3a6 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/ReflectionManager.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/ReflectionManager.java @@ -758,7 +758,17 @@ public class ReflectionManager { public static ReflectionManagerAbstract getReflectionManager(NmsVersion nmsVersion) { try { - Class aClass = Class.forName("me.libraryaddict.disguise.utilities.reflection." + nmsVersion.name() + ".ReflectionManager"); + String versionName = nmsVersion.name(); + + if (nmsVersion == NmsVersion.v1_18) { + if (Bukkit.getVersion().contains("1.18.1")) { + versionName += "_1"; + } else { + versionName += "_2"; + } + } + + Class aClass = Class.forName("me.libraryaddict.disguise.utilities.reflection." + versionName + ".ReflectionManager"); Object o = aClass.getConstructor().newInstance(); return (ReflectionManagerAbstract) o; diff --git a/pom.xml b/pom.xml index 1e29a61a..b0b614d5 100644 --- a/pom.xml +++ b/pom.xml @@ -7,10 +7,10 @@ LibsDisguises pom 10.0.27-SNAPSHOT + shared - nms/v1_17_R1 - nms/v1_18_R1 + nms plugin @@ -24,7 +24,7 @@ 1.18.22 4.7.0 - 1.18.1-R0.1-SNAPSHOT + 1.18.2-R0.1-SNAPSHOT 4.13.2 1.16.5-R0.1-SNAPSHOT 1.12-SNAPSHOT From d69b920ec7fd9e394130b6c7150fe8ad72c141cd Mon Sep 17 00:00:00 2001 From: Doc Date: Fri, 4 Mar 2022 17:55:44 -0300 Subject: [PATCH 11/23] Fix ReflectionManager for 1.18.2 --- .../utilities/reflection/v1_18_2/ReflectionManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nms/v1_18_R2/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_18_2/ReflectionManager.java b/nms/v1_18_R2/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_18_2/ReflectionManager.java index d60b2401..f668f4f4 100644 --- a/nms/v1_18_R2/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_18_2/ReflectionManager.java +++ b/nms/v1_18_R2/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_18_2/ReflectionManager.java @@ -452,7 +452,7 @@ public class ReflectionManager implements ReflectionManagerAbstract { public ItemMeta getDeserializedItemMeta(Map meta) { try { - Class aClass = Class.forName("org.bukkit.craftbukkit.v1_18_R1.inventory.CraftMetaItem$SerializableMeta"); + Class aClass = Class.forName("org.bukkit.craftbukkit.v1_18_R2.inventory.CraftMetaItem$SerializableMeta"); Method deserialize = aClass.getDeclaredMethod("deserialize", Map.class); Object itemMeta = deserialize.invoke(null, meta); From a84bbe39919381f024f061e44b1a3365a65aac0a Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 5 Mar 2022 14:22:55 +1300 Subject: [PATCH 12/23] Update stuff --- nms/v1_17_R1/pom.xml | 2 +- nms/v1_18_R1/pom.xml | 2 +- nms/v1_18_R2/pom.xml | 2 +- pom.xml | 6 ++++++ 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/nms/v1_17_R1/pom.xml b/nms/v1_17_R1/pom.xml index 59268101..deee0c7e 100644 --- a/nms/v1_17_R1/pom.xml +++ b/nms/v1_17_R1/pom.xml @@ -74,7 +74,7 @@ remap-spigot - target/${build.finalName}-remapped-mojang.jar + target/${project.build.finalName}-remapped-mojang.jar org.spigotmc:minecraft-server:${spigot.version}:csrg:maps-spigot org.spigotmc:spigot:${spigot.version}:jar:remapped-obf remapped-spigot diff --git a/nms/v1_18_R1/pom.xml b/nms/v1_18_R1/pom.xml index ca6a88c9..21963ad4 100644 --- a/nms/v1_18_R1/pom.xml +++ b/nms/v1_18_R1/pom.xml @@ -73,7 +73,7 @@ remap-spigot - target/${build.finalName}-remapped-mojang.jar + target/${project.build.finalName}-remapped-mojang.jar org.spigotmc:minecraft-server:${spigot.version}:csrg:maps-spigot org.spigotmc:spigot:${spigot.version}:jar:remapped-obf remapped-spigot diff --git a/nms/v1_18_R2/pom.xml b/nms/v1_18_R2/pom.xml index 09d0840b..c82e7025 100644 --- a/nms/v1_18_R2/pom.xml +++ b/nms/v1_18_R2/pom.xml @@ -73,7 +73,7 @@ remap-spigot - target/${build.finalName}-remapped-mojang.jar + target/${project.build.finalName}-remapped-mojang.jar org.spigotmc:minecraft-server:${spigot.version}:csrg:maps-spigot org.spigotmc:spigot:${spigot.version}:jar:remapped-obf remapped-spigot diff --git a/pom.xml b/pom.xml index b0b614d5..f29cfdee 100644 --- a/pom.xml +++ b/pom.xml @@ -53,6 +53,12 @@ ${spigot.version} true + + com.mojang + authlib + 3.3.39 + true + From 46af2cd1c68e553f9f08bbed37a8ccc893a2719d Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 5 Mar 2022 14:23:59 +1300 Subject: [PATCH 13/23] . --- shared/pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/shared/pom.xml b/shared/pom.xml index 4d421ea2..a9ee9eb5 100644 --- a/shared/pom.xml +++ b/shared/pom.xml @@ -29,6 +29,10 @@ com.comphenix.protocol ProtocolLib + + com.mojang + authlib + \ No newline at end of file From c49004aa827fc18c1fdddeb410ad6a39e8246927 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 5 Mar 2022 14:33:23 +1300 Subject: [PATCH 14/23] Oh dear --- nms/v1_18_R1/pom.xml | 4 ++-- nms/v1_18_R2/pom.xml | 4 ++-- pom.xml | 6 ------ shared/pom.xml | 4 ---- 4 files changed, 4 insertions(+), 14 deletions(-) diff --git a/nms/v1_18_R1/pom.xml b/nms/v1_18_R1/pom.xml index 21963ad4..6dff3fd8 100644 --- a/nms/v1_18_R1/pom.xml +++ b/nms/v1_18_R1/pom.xml @@ -26,13 +26,13 @@ spigot ${spigot.version} remapped-mojang - provided + compile org.spigotmc spigot-api ${spigot.version} - provided + compile LibsDisguises diff --git a/nms/v1_18_R2/pom.xml b/nms/v1_18_R2/pom.xml index c82e7025..6783fbb1 100644 --- a/nms/v1_18_R2/pom.xml +++ b/nms/v1_18_R2/pom.xml @@ -26,13 +26,13 @@ spigot ${spigot.version} remapped-mojang - provided + compile org.spigotmc spigot-api ${spigot.version} - provided + compile LibsDisguises diff --git a/pom.xml b/pom.xml index f29cfdee..b0b614d5 100644 --- a/pom.xml +++ b/pom.xml @@ -53,12 +53,6 @@ ${spigot.version} true - - com.mojang - authlib - 3.3.39 - true - diff --git a/shared/pom.xml b/shared/pom.xml index a9ee9eb5..4d421ea2 100644 --- a/shared/pom.xml +++ b/shared/pom.xml @@ -29,10 +29,6 @@ com.comphenix.protocol ProtocolLib - - com.mojang - authlib - \ No newline at end of file From 832084cc3b64709c231f03c2eb5189c162c6f09f Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 5 Mar 2022 14:34:12 +1300 Subject: [PATCH 15/23] m --- pom.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pom.xml b/pom.xml index b0b614d5..ca91926f 100644 --- a/pom.xml +++ b/pom.xml @@ -40,18 +40,21 @@ ProtocolLib ${protocollib.version} true + compile org.spigotmc spigot-api ${spigot.version} true + compile org.spigotmc spigot ${spigot.version} true + compile From c5d8a5ed35b30e87db3f49eb4f57e24a278aa1d3 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 5 Mar 2022 14:36:17 +1300 Subject: [PATCH 16/23] Revert --- nms/v1_18_R1/pom.xml | 4 ++-- nms/v1_18_R2/pom.xml | 4 ++-- pom.xml | 3 --- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/nms/v1_18_R1/pom.xml b/nms/v1_18_R1/pom.xml index 6dff3fd8..21963ad4 100644 --- a/nms/v1_18_R1/pom.xml +++ b/nms/v1_18_R1/pom.xml @@ -26,13 +26,13 @@ spigot ${spigot.version} remapped-mojang - compile + provided org.spigotmc spigot-api ${spigot.version} - compile + provided LibsDisguises diff --git a/nms/v1_18_R2/pom.xml b/nms/v1_18_R2/pom.xml index 6783fbb1..c82e7025 100644 --- a/nms/v1_18_R2/pom.xml +++ b/nms/v1_18_R2/pom.xml @@ -26,13 +26,13 @@ spigot ${spigot.version} remapped-mojang - compile + provided org.spigotmc spigot-api ${spigot.version} - compile + provided LibsDisguises diff --git a/pom.xml b/pom.xml index ca91926f..b0b614d5 100644 --- a/pom.xml +++ b/pom.xml @@ -40,21 +40,18 @@ ProtocolLib ${protocollib.version} true - compile org.spigotmc spigot-api ${spigot.version} true - compile org.spigotmc spigot ${spigot.version} true - compile From 7e7c743280a2986d054c1fe8af382036d0e6f02b Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 5 Mar 2022 14:43:02 +1300 Subject: [PATCH 17/23] . --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b0b614d5..2ab4cffe 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ 1.18.22 4.7.0 - 1.18.2-R0.1-SNAPSHOT + 1.18.1-R0.1-SNAPSHOT 4.13.2 1.16.5-R0.1-SNAPSHOT 1.12-SNAPSHOT From 5cbf9f6ba2a8b63661c60a6480535aaeb03872c2 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 5 Mar 2022 14:50:43 +1300 Subject: [PATCH 18/23] Oh boy --- pom.xml | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) diff --git a/pom.xml b/pom.xml index 2ab4cffe..c13ce1be 100644 --- a/pom.xml +++ b/pom.xml @@ -56,6 +56,164 @@ + + + + jline + jline + 2.12.1 + compile + + + org.apache.logging.log4j + log4j-iostreams + 2.17.0 + compile + + + org.ow2.asm + asm + 9.2 + compile + + + + com.github.oshi + oshi-core + 5.8.5 + compile + + + com.mojang + authlib + 3.3.39 + compile + + + com.mojang + brigadier + 1.0.18 + compile + + + com.mojang + datafixerupper + 4.1.27 + compile + + + com.mojang + javabridge + 1.2.24 + compile + + + com.mojang + logging + 1.0.0 + compile + + + commons-io + commons-io + 2.11.0 + compile + + + io.netty + netty-all + 4.1.68.Final + compile + + + it.unimi.dsi + fastutil + 8.5.6 + compile + + + net.sf.jopt-simple + jopt-simple + 5.0.4 + compile + + + org.apache.commons + commons-lang3 + 3.12.0 + compile + + + org.apache.logging.log4j + log4j-core + 2.17.0 + compile + + + org.apache.logging.log4j + log4j-slf4j18-impl + 2.17.0 + compile + + + org.slf4j + slf4j-api + 1.8.0-beta4 + compile + + + + com.googlecode.json-simple + json-simple + 1.1.1 + runtime + + + org.xerial + sqlite-jdbc + 3.36.0.3 + runtime + + + mysql + mysql-connector-java + 8.0.27 + runtime + + + + org.apache.maven + maven-resolver-provider + 3.8.4 + runtime + + + org.apache.maven.resolver + maven-resolver-connector-basic + 1.7.2 + runtime + + + org.apache.maven.resolver + maven-resolver-transport-http + 1.7.2 + runtime + + + + junit + junit + 4.13.2 + test + + + org.hamcrest + hamcrest-library + 1.3 + test + + + md_5-releases From c0ac00c9b780cdeea8ae4191ca237802f73f4568 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 5 Mar 2022 14:52:16 +1300 Subject: [PATCH 19/23] Revert --- pom.xml | 158 -------------------------------------------------------- 1 file changed, 158 deletions(-) diff --git a/pom.xml b/pom.xml index c13ce1be..2ab4cffe 100644 --- a/pom.xml +++ b/pom.xml @@ -56,164 +56,6 @@ - - - - jline - jline - 2.12.1 - compile - - - org.apache.logging.log4j - log4j-iostreams - 2.17.0 - compile - - - org.ow2.asm - asm - 9.2 - compile - - - - com.github.oshi - oshi-core - 5.8.5 - compile - - - com.mojang - authlib - 3.3.39 - compile - - - com.mojang - brigadier - 1.0.18 - compile - - - com.mojang - datafixerupper - 4.1.27 - compile - - - com.mojang - javabridge - 1.2.24 - compile - - - com.mojang - logging - 1.0.0 - compile - - - commons-io - commons-io - 2.11.0 - compile - - - io.netty - netty-all - 4.1.68.Final - compile - - - it.unimi.dsi - fastutil - 8.5.6 - compile - - - net.sf.jopt-simple - jopt-simple - 5.0.4 - compile - - - org.apache.commons - commons-lang3 - 3.12.0 - compile - - - org.apache.logging.log4j - log4j-core - 2.17.0 - compile - - - org.apache.logging.log4j - log4j-slf4j18-impl - 2.17.0 - compile - - - org.slf4j - slf4j-api - 1.8.0-beta4 - compile - - - - com.googlecode.json-simple - json-simple - 1.1.1 - runtime - - - org.xerial - sqlite-jdbc - 3.36.0.3 - runtime - - - mysql - mysql-connector-java - 8.0.27 - runtime - - - - org.apache.maven - maven-resolver-provider - 3.8.4 - runtime - - - org.apache.maven.resolver - maven-resolver-connector-basic - 1.7.2 - runtime - - - org.apache.maven.resolver - maven-resolver-transport-http - 1.7.2 - runtime - - - - junit - junit - 4.13.2 - test - - - org.hamcrest - hamcrest-library - 1.3 - test - - - md_5-releases From cd5df563de34ee94831ff793840a081ebb2b6b7d Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Thu, 10 Mar 2022 23:10:56 +1300 Subject: [PATCH 20/23] Provide a way to remove a custom disguise, fixes #616 --- .../src/main/java/me/libraryaddict/disguise/DisguiseAPI.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugin/src/main/java/me/libraryaddict/disguise/DisguiseAPI.java b/plugin/src/main/java/me/libraryaddict/disguise/DisguiseAPI.java index 7683b7de..1f955785 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/DisguiseAPI.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/DisguiseAPI.java @@ -105,6 +105,10 @@ public class DisguiseAPI { return disguise.getValue(); } + public static void removeCustomDisguise(String disguiseName) { + DisguiseConfig.removeCustomDisguise(disguiseName); + } + public static Disguise constructDisguise(Entity entity) { return constructDisguise(entity, true, false); } From 07f4e766c1047297e5904b103d5a54f9ba6abe2c Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 11 Mar 2022 00:02:52 +1300 Subject: [PATCH 21/23] Hide methods from disguises that can't use them, fixes #603 --- .../commands/DisguiseBaseCommand.java | 2 +- .../commands/utils/DisguiseHelpCommand.java | 4 +++ .../disguise/disguisetypes/DisguiseType.java | 4 +-- .../disguise/disguisetypes/FlagWatcher.java | 26 ++++++++++++-- .../disguise/disguisetypes/MetaIndex.java | 4 +-- .../watchers/AbstractSkeletonWatcher.java | 2 +- .../watchers/AbstractVillagerWatcher.java | 2 +- .../watchers/AreaEffectCloudWatcher.java | 2 +- .../disguisetypes/watchers/ArrowWatcher.java | 2 +- .../disguisetypes/watchers/BeeWatcher.java | 2 +- .../disguisetypes/watchers/BoatWatcher.java | 2 +- .../disguisetypes/watchers/CatWatcher.java | 2 +- .../watchers/EnderSignalWatcher.java | 2 +- .../watchers/FallingBlockWatcher.java | 2 +- .../watchers/FireballWatcher.java | 2 +- .../watchers/FireworkWatcher.java | 2 +- .../disguisetypes/watchers/FoxWatcher.java | 2 +- .../watchers/IllagerWizardWatcher.java | 4 +-- .../watchers/InsentientWatcher.java | 2 +- .../watchers/IronGolemWatcher.java | 2 +- .../disguisetypes/watchers/LivingWatcher.java | 9 ++++- .../watchers/MinecartWatcher.java | 2 +- .../watchers/MushroomCowWatcher.java | 2 +- .../disguisetypes/watchers/OcelotWatcher.java | 4 +-- .../disguisetypes/watchers/PandaWatcher.java | 2 +- .../watchers/PillagerWatcher.java | 2 +- .../watchers/RavagerWatcher.java | 2 +- .../watchers/SkeletonWatcher.java | 2 +- .../watchers/ThrowableWatcher.java | 2 +- .../watchers/TraderLlamaWatcher.java | 2 +- .../watchers/TridentWatcher.java | 2 +- .../watchers/VillagerWatcher.java | 2 +- .../watchers/VindicatorWatcher.java | 2 +- .../disguisetypes/watchers/WolfWatcher.java | 2 +- .../watchers/ZombieVillagerWatcher.java | 2 +- .../disguisetypes/watchers/ZombieWatcher.java | 4 +-- .../utilities/parser/WatcherMethod.java | 6 ++++ .../reflection/ReflectionManager.java | 2 ++ .../utilities/reflection/WatcherInfo.java | 10 ++++++ .../annotations/MethodGroupType.java | 36 +++++++++++++++++++ .../annotations/MethodIgnoredBy.java | 13 +++++++ .../annotations/MethodOnlyUsedBy.java | 13 +++++++ .../{ => annotations}/NmsAddedIn.java | 4 ++- .../{ => annotations}/NmsRemovedIn.java | 4 ++- .../utilities/watchers/CompileMethods.java | 30 ++++++++++++++-- .../utilities/watchers/DisguiseMethods.java | 9 ++--- 46 files changed, 192 insertions(+), 50 deletions(-) create mode 100644 plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/MethodGroupType.java create mode 100644 plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/MethodIgnoredBy.java create mode 100644 plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/MethodOnlyUsedBy.java rename plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/{ => annotations}/NmsAddedIn.java (62%) rename plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/{ => annotations}/NmsRemovedIn.java (63%) diff --git a/plugin/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java b/plugin/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java index e1716952..5ff5bdfc 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java @@ -242,7 +242,7 @@ public abstract class DisguiseBaseCommand implements CommandExecutor { if (addMethods) { // If this is a method, add. Else if it can be a param of the previous argument, add. for (WatcherMethod method : ParamInfoManager.getDisguiseWatcherMethods(disguisePerm.getWatcherClass())) { - if (!perms.isAllowedDisguise(disguisePerm, Collections.singletonList(method.getName()))) { + if (!perms.isAllowedDisguise(disguisePerm, Collections.singletonList(method.getName())) || !method.isUsable(disguisePerm.getType())) { continue; } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/commands/utils/DisguiseHelpCommand.java b/plugin/src/main/java/me/libraryaddict/disguise/commands/utils/DisguiseHelpCommand.java index efd29e2e..4cb7aa8a 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/commands/utils/DisguiseHelpCommand.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/commands/utils/DisguiseHelpCommand.java @@ -78,6 +78,10 @@ public class DisguiseHelpCommand extends DisguiseBaseCommand implements TabCompl try { for (WatcherMethod method : ParamInfoManager.getDisguiseWatcherMethods(watcher)) { + if (!method.isUsable(type.getType())) { + continue; + } + if (args.length < 2 || !args[1].equalsIgnoreCase(LibsMsg.DHELP_SHOW.get())) { if (!perms.isAllowedDisguise(type, Collections.singleton(method.getName().toLowerCase(Locale.ENGLISH)))) { ignored++; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/DisguiseType.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/DisguiseType.java index f0a88cdc..a923d4ea 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/DisguiseType.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/DisguiseType.java @@ -1,7 +1,7 @@ package me.libraryaddict.disguise.disguisetypes; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; -import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import me.libraryaddict.disguise.utilities.translations.TranslateType; import org.apache.commons.lang.StringUtils; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java index 8e9da61b..89b292fd 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java @@ -19,7 +19,10 @@ 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; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.MethodGroupType; +import me.libraryaddict.disguise.utilities.reflection.annotations.MethodIgnoredBy; +import me.libraryaddict.disguise.utilities.reflection.annotations.MethodOnlyUsedBy; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import net.md_5.bungee.api.chat.BaseComponent; @@ -83,6 +86,7 @@ public class FlagWatcher { return pitchLock != null; } + @MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK) public void setPitchLocked(boolean pitchLocked) { if (isPitchLocked() == pitchLocked) { return; @@ -137,6 +141,7 @@ public class FlagWatcher { return yawLock != null; } + @MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK) public void setYawLocked(boolean yawLocked) { if (!DisguiseConfig.isMovementPacketsEnabled()) { return; @@ -149,6 +154,7 @@ public class FlagWatcher { setYawLock(yawLocked ? 0F : null); } + @MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK) public void setPitchLock(Float pitch) { if (!DisguiseConfig.isMovementPacketsEnabled()) { return; @@ -183,6 +189,7 @@ public class FlagWatcher { } } + @MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK) public void setYawLock(Float yaw) { this.yawLock = yaw; @@ -236,6 +243,7 @@ public class FlagWatcher { return getEquipment().getHelmet(); } + @MethodOnlyUsedBy(value = {}, group = MethodGroupType.EQUIPPABLE) public void setHelmet(ItemStack itemStack) { getEquipment().setHelmet(itemStack); } @@ -244,6 +252,7 @@ public class FlagWatcher { return getEquipment().getBoots(); } + @MethodOnlyUsedBy(value = {}, group = MethodGroupType.EQUIPPABLE) public void setBoots(ItemStack itemStack) { getEquipment().setBoots(itemStack); } @@ -252,6 +261,7 @@ public class FlagWatcher { return getEquipment().getLeggings(); } + @MethodOnlyUsedBy(value = {}, group = MethodGroupType.EQUIPPABLE) public void setLeggings(ItemStack itemStack) { getEquipment().setLeggings(itemStack); } @@ -260,6 +270,7 @@ public class FlagWatcher { return getEquipment().getChestplate(); } + @MethodOnlyUsedBy(value = {}, group = MethodGroupType.EQUIPPABLE) public void setChestplate(ItemStack itemStack) { getEquipment().setChestplate(itemStack); } @@ -269,6 +280,7 @@ public class FlagWatcher { this.upsideDown = upsideDown; } + @MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK) public void setUpsideDown(boolean upsideDown) { if (isUpsideDown() == upsideDown) { return; @@ -467,6 +479,7 @@ public class FlagWatcher { } @NmsAddedIn(NmsVersion.v1_14) + @MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK) public void setEntityPose(EntityPose entityPose) { setData(MetaIndex.ENTITY_POSE, entityPose); sendData(MetaIndex.ENTITY_POSE); @@ -476,6 +489,7 @@ public class FlagWatcher { return getEquipment().getArmorContents(); } + @MethodOnlyUsedBy(value = {}, group = MethodGroupType.EQUIPPABLE) public void setArmor(ItemStack[] items) { getEquipment().setArmorContents(items); } @@ -664,6 +678,7 @@ public class FlagWatcher { return equipment.getItemInMainHand(); } + @MethodOnlyUsedBy(value = {}, group = MethodGroupType.HOLDABLE) public void setItemInMainHand(ItemStack itemstack) { setItemStack(EquipmentSlot.HAND, itemstack); } @@ -672,6 +687,7 @@ public class FlagWatcher { return equipment.getItemInOffHand(); } + @MethodOnlyUsedBy(value = {}, group = MethodGroupType.HOLDABLE) public void setItemInOffHand(ItemStack itemstack) { setItemStack(EquipmentSlot.OFF_HAND, itemstack); } @@ -753,6 +769,7 @@ public class FlagWatcher { return getEntityFlag(7); } + @MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK) public void setFlyingWithElytra(boolean flying) { setEntityFlag(7, flying); sendData(MetaIndex.ENTITY_META); @@ -816,16 +833,16 @@ public class FlagWatcher { @Deprecated @NmsAddedIn(NmsVersion.v1_12) + @MethodOnlyUsedBy(value = {}, group = MethodGroupType.HOLDABLE) public void setRightClicking(boolean rightClicking) { setMainHandRaised(rightClicking); } - //@NmsRemovedIn(val = NmsVersion.v1_13) public boolean isMainHandRaised() { return !NmsVersion.v1_13.isSupported() && getEntityFlag(4); } - //@NmsRemovedIn(val = NmsVersion.v1_13) + @MethodOnlyUsedBy(value = {}, group = MethodGroupType.HOLDABLE) public void setMainHandRaised(boolean setRightClicking) { if (NmsVersion.v1_13.isSupported()) { return; @@ -839,6 +856,7 @@ public class FlagWatcher { return getEntityFlag(1); } + @MethodOnlyUsedBy(value = {DisguiseType.PLAYER}) public void setSneaking(boolean setSneaking) { setEntityFlag(1, setSneaking); sendData(MetaIndex.ENTITY_META); @@ -1027,6 +1045,7 @@ public class FlagWatcher { } @NmsAddedIn(NmsVersion.v1_14) + @MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK) public void setSleeping(boolean sleeping) { if (isSleeping() == sleeping) { return; @@ -1043,6 +1062,7 @@ public class FlagWatcher { } @NmsAddedIn(NmsVersion.v1_14) + @MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK) public void setSwimming(boolean swimming) { if (isSwimming() == swimming) { return; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/MetaIndex.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/MetaIndex.java index 82115444..58854f23 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/MetaIndex.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/MetaIndex.java @@ -92,8 +92,8 @@ import me.libraryaddict.disguise.disguisetypes.watchers.ZoglinWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.ZombieVillagerWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher; import me.libraryaddict.disguise.utilities.DisguiseUtilities; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; -import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import me.libraryaddict.disguise.utilities.translations.LibsMsg; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AbstractSkeletonWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AbstractSkeletonWatcher.java index 1f9f016d..323fa64b 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AbstractSkeletonWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AbstractSkeletonWatcher.java @@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; /** diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AbstractVillagerWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AbstractVillagerWatcher.java index 2b81e6ec..ee27aa1d 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AbstractVillagerWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AbstractVillagerWatcher.java @@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; /** diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AreaEffectCloudWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AreaEffectCloudWatcher.java index b18fba78..42300888 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AreaEffectCloudWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AreaEffectCloudWatcher.java @@ -6,7 +6,7 @@ import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.disguisetypes.MetaIndex; import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.apache.commons.lang.math.RandomUtils; import org.bukkit.Color; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ArrowWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ArrowWatcher.java index 5e9415bc..a5b3931e 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ArrowWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ArrowWatcher.java @@ -3,7 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; public class ArrowWatcher extends FlagWatcher { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/BeeWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/BeeWatcher.java index 4d78fb84..55cd990c 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/BeeWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/BeeWatcher.java @@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; /** diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/BoatWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/BoatWatcher.java index da6b9650..ac5cb71e 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/BoatWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/BoatWatcher.java @@ -3,7 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.TreeSpecies; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/CatWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/CatWatcher.java index f51dc305..a2a59af9 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/CatWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/CatWatcher.java @@ -5,7 +5,7 @@ import me.libraryaddict.disguise.disguisetypes.AnimalColor; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.DyeColor; import org.bukkit.entity.Cat; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EnderSignalWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EnderSignalWatcher.java index 9c670338..1490d6c2 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EnderSignalWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EnderSignalWatcher.java @@ -3,7 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FallingBlockWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FallingBlockWatcher.java index e581df62..5e523c76 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FallingBlockWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FallingBlockWatcher.java @@ -8,7 +8,7 @@ import me.libraryaddict.disguise.DisguiseAPI; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.utilities.DisguiseUtilities; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import me.libraryaddict.disguise.utilities.translations.TranslateType; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FireballWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FireballWatcher.java index ede56601..8943a63c 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FireballWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FireballWatcher.java @@ -3,7 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FireworkWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FireworkWatcher.java index b63ecfae..4b9f2b9f 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FireworkWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FireworkWatcher.java @@ -3,7 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FoxWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FoxWatcher.java index cf876b8c..10af6631 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FoxWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FoxWatcher.java @@ -4,7 +4,7 @@ import me.libraryaddict.disguise.DisguiseConfig; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.entity.Fox; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWizardWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWizardWatcher.java index a3c4dced..6c1153de 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWizardWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWizardWatcher.java @@ -2,8 +2,8 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; -import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.entity.Spellcaster; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/InsentientWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/InsentientWatcher.java index 5f2c6ba4..d435ad79 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/InsentientWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/InsentientWatcher.java @@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.inventory.MainHand; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/IronGolemWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/IronGolemWatcher.java index 8c4a619d..725b9c89 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/IronGolemWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/IronGolemWatcher.java @@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.GolemCrack; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; public class IronGolemWatcher extends InsentientWatcher { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LivingWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LivingWatcher.java index 6f0c083b..ab638743 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LivingWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LivingWatcher.java @@ -9,11 +9,14 @@ import com.comphenix.protocol.wrappers.WrappedAttribute.Builder; import lombok.Getter; import me.libraryaddict.disguise.DisguiseAPI; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.disguisetypes.MetaIndex; import me.libraryaddict.disguise.utilities.DisguiseUtilities; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.MethodGroupType; +import me.libraryaddict.disguise.utilities.reflection.annotations.MethodOnlyUsedBy; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import org.bukkit.Color; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -124,6 +127,7 @@ public class LivingWatcher extends FlagWatcher { @Override @NmsAddedIn(NmsVersion.v1_13) + @MethodOnlyUsedBy(value = {}, group = MethodGroupType.HOLDABLE) public void setMainHandRaised(boolean setRightClicking) { setHandInUse(true); @@ -136,6 +140,7 @@ public class LivingWatcher extends FlagWatcher { } @NmsAddedIn(NmsVersion.v1_13) + @MethodOnlyUsedBy(value = {}, group = MethodGroupType.HOLDABLE) public void setOffhandRaised(boolean setLeftClicking) { setHandInUse(false); @@ -296,6 +301,7 @@ public class LivingWatcher extends FlagWatcher { return getData(MetaIndex.LIVING_ARROWS); } + @MethodOnlyUsedBy(value = {DisguiseType.PLAYER}) public void setArrowsSticking(int arrowsNo) { setData(MetaIndex.LIVING_ARROWS, Math.max(0, Math.min(127, arrowsNo))); sendData(MetaIndex.LIVING_ARROWS); @@ -324,6 +330,7 @@ public class LivingWatcher extends FlagWatcher { @Deprecated @NmsAddedIn(NmsVersion.v1_12) + @MethodOnlyUsedBy(value = {}, group = MethodGroupType.HOLDABLE) public void setRightClicking(boolean rightClicking) { setMainHandRaised(rightClicking); } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/MinecartWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/MinecartWatcher.java index b96eceb1..0f673b22 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/MinecartWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/MinecartWatcher.java @@ -3,7 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import org.bukkit.Material; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/MushroomCowWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/MushroomCowWatcher.java index df1382b9..db145ac7 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/MushroomCowWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/MushroomCowWatcher.java @@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.entity.MushroomCow; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/OcelotWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/OcelotWatcher.java index ed044554..5d3e4ae9 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/OcelotWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/OcelotWatcher.java @@ -2,8 +2,8 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; -import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.entity.Ocelot; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PandaWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PandaWatcher.java index f7a6285b..c3cdada4 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PandaWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PandaWatcher.java @@ -4,7 +4,7 @@ import me.libraryaddict.disguise.DisguiseConfig; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.entity.Panda; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PillagerWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PillagerWatcher.java index e9cea4a8..e485fcab 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PillagerWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PillagerWatcher.java @@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; /** diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RavagerWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RavagerWatcher.java index 72949a5f..87d4220d 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RavagerWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RavagerWatcher.java @@ -1,7 +1,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; /** diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SkeletonWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SkeletonWatcher.java index 06cf074e..75832561 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SkeletonWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SkeletonWatcher.java @@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; /** diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ThrowableWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ThrowableWatcher.java index a9a5b514..6a448aff 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ThrowableWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ThrowableWatcher.java @@ -4,7 +4,7 @@ import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.disguisetypes.MetaIndex; import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.inventory.ItemStack; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TraderLlamaWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TraderLlamaWatcher.java index e36d4794..492ecac4 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TraderLlamaWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TraderLlamaWatcher.java @@ -1,7 +1,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; /** diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TridentWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TridentWatcher.java index 717d1169..6fa7ffdc 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TridentWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TridentWatcher.java @@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; /** diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VillagerWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VillagerWatcher.java index d3cdac6f..06443231 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VillagerWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VillagerWatcher.java @@ -6,7 +6,7 @@ import me.libraryaddict.disguise.disguisetypes.MetaIndex; import me.libraryaddict.disguise.disguisetypes.VillagerData; import me.libraryaddict.disguise.utilities.DisguiseUtilities; import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.entity.Villager; import org.bukkit.entity.Villager.Profession; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VindicatorWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VindicatorWatcher.java index 48802f0b..4c4ce1b8 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VindicatorWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VindicatorWatcher.java @@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; public class VindicatorWatcher extends IllagerWatcher { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WolfWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WolfWatcher.java index 75e27e51..4bece16c 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WolfWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WolfWatcher.java @@ -3,7 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.AnimalColor; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.DyeColor; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ZombieVillagerWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ZombieVillagerWatcher.java index dbc2c622..0bccaa6d 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ZombieVillagerWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ZombieVillagerWatcher.java @@ -5,7 +5,7 @@ import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; import me.libraryaddict.disguise.disguisetypes.VillagerData; import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.entity.Villager; import org.bukkit.entity.Villager.Profession; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ZombieWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ZombieWatcher.java index b72e6646..01328c07 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ZombieWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ZombieWatcher.java @@ -2,8 +2,8 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; -import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; public class ZombieWatcher extends InsentientWatcher { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/WatcherMethod.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/WatcherMethod.java index ec58040a..fde1e270 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/WatcherMethod.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/WatcherMethod.java @@ -2,6 +2,7 @@ package me.libraryaddict.disguise.utilities.parser; import lombok.Getter; import lombok.RequiredArgsConstructor; +import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import java.lang.invoke.MethodHandle; @@ -19,6 +20,11 @@ public class WatcherMethod { private final Class param; private final boolean randomDefault; private final boolean hideFromTab; + private final boolean[] unusableBy; + + public boolean isUsable(DisguiseType type) { + return !unusableBy[type.ordinal()]; + } @Override public String toString() { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/ReflectionManager.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/ReflectionManager.java index f923d3a6..ff57202b 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/ReflectionManager.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/ReflectionManager.java @@ -41,6 +41,8 @@ import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher; import me.libraryaddict.disguise.utilities.DisguiseUtilities; import me.libraryaddict.disguise.utilities.DisguiseValues; import me.libraryaddict.disguise.utilities.LibsPremium; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn; import me.libraryaddict.disguise.utilities.sounds.SoundGroup; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/WatcherInfo.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/WatcherInfo.java index 7c502172..dec57c0f 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/WatcherInfo.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/WatcherInfo.java @@ -2,6 +2,7 @@ package me.libraryaddict.disguise.utilities.reflection; import lombok.Getter; import lombok.Setter; +import me.libraryaddict.disguise.disguisetypes.DisguiseType; /** * Created by libraryaddict on 17/02/2020. @@ -18,6 +19,15 @@ public class WatcherInfo { private String method; private String param; private String descriptor; + private boolean[] unusableBy; + + public void setUnusableBy(DisguiseType[] types) { + unusableBy = new boolean[DisguiseType.values().length]; + + for (DisguiseType type : types) { + unusableBy[type.ordinal()] = true; + } + } public boolean isSupported() { if (getAdded() >= 0 && added > ReflectionManager.getVersion().ordinal()) { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/MethodGroupType.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/MethodGroupType.java new file mode 100644 index 00000000..c7a35e88 --- /dev/null +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/MethodGroupType.java @@ -0,0 +1,36 @@ +package me.libraryaddict.disguise.utilities.reflection.annotations; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import me.libraryaddict.disguise.disguisetypes.DisguiseType; + +import java.util.Arrays; + +@Getter +public enum MethodGroupType { + NO_LOOK(DisguiseType.AREA_EFFECT_CLOUD, DisguiseType.DRAGON_FIREBALL, DisguiseType.DROPPED_ITEM, DisguiseType.EGG, DisguiseType.ENDER_CRYSTAL, + DisguiseType.ENDER_PEARL, DisguiseType.ENDER_SIGNAL, DisguiseType.FALLING_BLOCK, DisguiseType.FIREBALL, DisguiseType.FIREWORK, + DisguiseType.FISHING_HOOK, DisguiseType.LEASH_HITCH, DisguiseType.MARKER, DisguiseType.PRIMED_TNT, DisguiseType.SHULKER, DisguiseType.SMALL_FIREBALL, + DisguiseType.SNOWBALL, DisguiseType.SPLASH_POTION, DisguiseType.THROWN_EXP_BOTTLE), + + EQUIPPABLE(DisguiseType.ARMOR_STAND, DisguiseType.DROWNED, DisguiseType.GIANT, DisguiseType.HUSK, DisguiseType.MODDED_LIVING, DisguiseType.MODDED_MISC, + DisguiseType.PIG_ZOMBIE, DisguiseType.PIGLIN, DisguiseType.PIGLIN_BRUTE, DisguiseType.PLAYER, DisguiseType.SKELETON, DisguiseType.STRAY, + DisguiseType.WITHER_SKELETON, DisguiseType.ZOMBIE), + + HOLDABLE(EQUIPPABLE, DisguiseType.ENDERMAN, DisguiseType.EVOKER, DisguiseType.ILLUSIONER, DisguiseType.IRON_GOLEM, DisguiseType.PILLAGER, + DisguiseType.RAVAGER, DisguiseType.VEX, DisguiseType.VINDICATOR, DisguiseType.WANDERING_TRADER, DisguiseType.WITCH, DisguiseType.ZOMBIE_VILLAGER), + + NONE(); + + private final DisguiseType[] disguiseTypes; + + MethodGroupType(DisguiseType... types) { + this.disguiseTypes = types; + } + + MethodGroupType(MethodGroupType inheritFrom, DisguiseType... types) { + this.disguiseTypes = Arrays.copyOf(types, types.length + inheritFrom.getDisguiseTypes().length); + + System.arraycopy(inheritFrom.getDisguiseTypes(), 0, getDisguiseTypes(), types.length, inheritFrom.getDisguiseTypes().length); + } +} diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/MethodIgnoredBy.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/MethodIgnoredBy.java new file mode 100644 index 00000000..50a95a4b --- /dev/null +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/MethodIgnoredBy.java @@ -0,0 +1,13 @@ +package me.libraryaddict.disguise.utilities.reflection.annotations; + +import me.libraryaddict.disguise.disguisetypes.DisguiseType; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface MethodIgnoredBy { + DisguiseType[] value(); + + MethodGroupType group() default MethodGroupType.NONE; +} diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/MethodOnlyUsedBy.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/MethodOnlyUsedBy.java new file mode 100644 index 00000000..6893272c --- /dev/null +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/MethodOnlyUsedBy.java @@ -0,0 +1,13 @@ +package me.libraryaddict.disguise.utilities.reflection.annotations; + +import me.libraryaddict.disguise.disguisetypes.DisguiseType; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface MethodOnlyUsedBy { + DisguiseType[] value(); + + MethodGroupType group() default MethodGroupType.NONE; +} diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/NmsAddedIn.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/NmsAddedIn.java similarity index 62% rename from plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/NmsAddedIn.java rename to plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/NmsAddedIn.java index 320af668..4eb5cd95 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/NmsAddedIn.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/NmsAddedIn.java @@ -1,4 +1,6 @@ -package me.libraryaddict.disguise.utilities.reflection; +package me.libraryaddict.disguise.utilities.reflection.annotations; + +import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/NmsRemovedIn.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/NmsRemovedIn.java similarity index 63% rename from plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/NmsRemovedIn.java rename to plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/NmsRemovedIn.java index 59d9a0a8..14776c35 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/NmsRemovedIn.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/annotations/NmsRemovedIn.java @@ -1,4 +1,6 @@ -package me.libraryaddict.disguise.utilities.reflection; +package me.libraryaddict.disguise.utilities.reflection.annotations; + +import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/watchers/CompileMethods.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/watchers/CompileMethods.java index 2c619704..1780b01d 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/watchers/CompileMethods.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/watchers/CompileMethods.java @@ -1,12 +1,15 @@ package me.libraryaddict.disguise.utilities.watchers; import com.google.gson.Gson; +import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.utilities.LibsPremium; import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue; import me.libraryaddict.disguise.utilities.reflection.ClassGetter; -import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn; -import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.MethodIgnoredBy; +import me.libraryaddict.disguise.utilities.reflection.annotations.MethodOnlyUsedBy; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn; import me.libraryaddict.disguise.utilities.reflection.WatcherInfo; import me.libraryaddict.disguise.utilities.sounds.DisguiseSoundEnums; import me.libraryaddict.disguise.utilities.sounds.SoundGroup; @@ -19,9 +22,11 @@ import java.lang.annotation.RetentionPolicy; import java.lang.reflect.Method; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Random; +import java.util.stream.Collectors; /** * Created by libraryaddict on 13/02/2020. @@ -120,6 +125,7 @@ public class CompileMethods { int added = -1; int removed = -1; + DisguiseType[] unusableBy = new DisguiseType[0]; if (method.isAnnotationPresent(NmsAddedIn.class)) { added = method.getAnnotation(NmsAddedIn.class).value().ordinal(); @@ -133,12 +139,32 @@ public class CompileMethods { removed = method.getDeclaringClass().getAnnotation(NmsRemovedIn.class).value().ordinal(); } + if (method.isAnnotationPresent(MethodOnlyUsedBy.class)) { + DisguiseType[] usableBy = method.getAnnotation(MethodOnlyUsedBy.class).value(); + + if (usableBy.length == 0) { + usableBy = method.getAnnotation(MethodOnlyUsedBy.class).group().getDisguiseTypes(); + } + + List list = Arrays.asList(usableBy); + + unusableBy = + Arrays.stream(DisguiseType.values()).filter(type -> !list.contains(type)).collect(Collectors.toList()).toArray(new DisguiseType[0]); + } else if (method.isAnnotationPresent(MethodIgnoredBy.class)) { + unusableBy = method.getAnnotation(MethodIgnoredBy.class).value(); + + if (unusableBy.length == 0) { + unusableBy = method.getAnnotation(MethodIgnoredBy.class).group().getDisguiseTypes(); + } + } + String param = method.getParameterCount() == 1 ? method.getParameterTypes()[0].getName() : null; WatcherInfo info = new WatcherInfo(); info.setMethod(method.getName()); info.setAdded(added); info.setRemoved(removed); + info.setUnusableBy(unusableBy); info.setDeprecated(method.isAnnotationPresent(Deprecated.class)); info.setParam(param); info.setDescriptor(getMethodDescriptor(method)); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/watchers/DisguiseMethods.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/watchers/DisguiseMethods.java index a1d85445..a50f95e9 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/watchers/DisguiseMethods.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/watchers/DisguiseMethods.java @@ -103,8 +103,9 @@ public class DisguiseMethods { MethodHandle method = MethodHandles.publicLookup().findVirtual(watcher, info.getMethod(), type); - WatcherMethod m = new WatcherMethod(watcher, method, info.getMethod(), returnType, param, info.isRandomDefault(), - info.isDeprecated() && info.getAdded() == 0); + WatcherMethod m = + new WatcherMethod(watcher, method, info.getMethod(), returnType, param, info.isRandomDefault(), info.isDeprecated() && info.getAdded() == 0, + info.getUnusableBy()); methods.add(m); @@ -156,7 +157,7 @@ public class DisguiseMethods { try { WatcherMethod method = new WatcherMethod(disguiseClass, MethodHandles.publicLookup().findVirtual(disguiseClass, methodName, MethodType.methodType(returnType, cl)), methodName, null, - cl, randomDefault, false); + cl, randomDefault, false, new boolean[DisguiseType.values().length]); methods.add(method); @@ -167,7 +168,7 @@ public class DisguiseMethods { WatcherMethod getMethod = new WatcherMethod(disguiseClass, MethodHandles.publicLookup().findVirtual(disguiseClass, getName, MethodType.methodType(cl)), - getName, cl, null, randomDefault, false); + getName, cl, null, randomDefault, false, new boolean[DisguiseType.values().length]); methods.add(getMethod); break; From fe67553bd8378a88f33989c7b8b899560f7c4726 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 11 Mar 2022 00:12:40 +1300 Subject: [PATCH 22/23] Fixes #637, can now turn off random UUIDs --- .../java/me/libraryaddict/disguise/DisguiseConfig.java | 4 ++++ .../me/libraryaddict/disguise/disguisetypes/Disguise.java | 4 ++++ plugin/src/main/resources/configs/sanity.yml | 7 ++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/plugin/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java b/plugin/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java index d764daf9..fc5ae16d 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java @@ -278,6 +278,9 @@ public class DisguiseConfig { @Getter @Setter private static String data; + @Getter + @Setter + private static boolean randomUUIDS; public static boolean isArmorstandsName() { return getPlayerNameType() == PlayerNameType.ARMORSTANDS; @@ -646,6 +649,7 @@ public class DisguiseConfig { setViewSelfDisguisesDefault(config.getBoolean("ViewSelfDisguisesDefault")); setContactMojangServers(config.getBoolean("ContactMojangServers")); setDisguiseRadiusMax(config.getInt("DisguiseRadiusMax")); + setRandomUUIDS(config.getBoolean("RandomUUIDs")); String apiKey = config.getString("MineSkinAPIKey"); if (apiKey != null && apiKey.matches("[a-zA-Z0-9]{8,}")) { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/Disguise.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/Disguise.java index 691d82a6..cadcb0d7 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/Disguise.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/Disguise.java @@ -118,6 +118,10 @@ public abstract class Disguise { } public UUID getUUID() { + if (!isPlayerDisguise() && !DisguiseConfig.isRandomUUIDS() && getEntity() != null) { + return getEntity().getUniqueId(); + } + // Partial fix for disguises serialized in older versions if (this.uuid == null) { this.uuid = ReflectionManager.getRandomUUID(); diff --git a/plugin/src/main/resources/configs/sanity.yml b/plugin/src/main/resources/configs/sanity.yml index 12dfe20f..602d4b8c 100644 --- a/plugin/src/main/resources/configs/sanity.yml +++ b/plugin/src/main/resources/configs/sanity.yml @@ -38,4 +38,9 @@ CarpetableLlama: false # Can a player interact with a non-saddled horse of any type, to give it a saddle? # This does not change what you can ride or control! -SaddleableHorse: false \ No newline at end of file +SaddleableHorse: false + +# You shouldn't need to touch this, but if you do; This was added so scoreboard stuff that affects a certain UUID, will still continue to affect that UUID +# This doesn't affect player disguises as those would be severely impacted +# If you are getting issues using this, please do not report them. You disable this at your own risk. +RandomUUIDs: true \ No newline at end of file From 0ecbc824dd4576d6698b57295241f71814e7c7b4 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 11 Mar 2022 03:29:28 +1300 Subject: [PATCH 23/23] Update pom stuff so the versions should compile better --- nms/pom.xml | 4 ++-- nms/v1_17_R1/pom.xml | 2 +- nms/v1_18_R1/pom.xml | 2 +- nms/v1_18_R2/pom.xml | 2 +- plugin/pom.xml | 5 +++-- pom.xml | 2 +- shared/pom.xml | 2 +- 7 files changed, 10 insertions(+), 9 deletions(-) diff --git a/nms/pom.xml b/nms/pom.xml index 83677d99..81792e03 100644 --- a/nms/pom.xml +++ b/nms/pom.xml @@ -2,11 +2,11 @@ 4.0.0 - libsdisguises-nms + nms pom - LibsDisguises + parent LibsDisguises 10.0.27-SNAPSHOT ../pom.xml diff --git a/nms/v1_17_R1/pom.xml b/nms/v1_17_R1/pom.xml index deee0c7e..3ce903c7 100644 --- a/nms/v1_17_R1/pom.xml +++ b/nms/v1_17_R1/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - LibsDisguises + nms LibsDisguises 10.0.27-SNAPSHOT ../pom.xml diff --git a/nms/v1_18_R1/pom.xml b/nms/v1_18_R1/pom.xml index 21963ad4..31a50b59 100644 --- a/nms/v1_18_R1/pom.xml +++ b/nms/v1_18_R1/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - LibsDisguises + nms LibsDisguises 10.0.27-SNAPSHOT ../pom.xml diff --git a/nms/v1_18_R2/pom.xml b/nms/v1_18_R2/pom.xml index c82e7025..e5497eed 100644 --- a/nms/v1_18_R2/pom.xml +++ b/nms/v1_18_R2/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - LibsDisguises + nms LibsDisguises 10.0.27-SNAPSHOT ../pom.xml diff --git a/plugin/pom.xml b/plugin/pom.xml index 7192f4f2..ec0cb3c5 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -3,13 +3,14 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - LibsDisguises + parent LibsDisguises 10.0.27-SNAPSHOT + 4.0.0 - plugin + LibsDisguises 1.8 diff --git a/pom.xml b/pom.xml index 2ab4cffe..e820a03e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 LibsDisguises - LibsDisguises + parent pom 10.0.27-SNAPSHOT diff --git a/shared/pom.xml b/shared/pom.xml index 4d421ea2..4254f9cf 100644 --- a/shared/pom.xml +++ b/shared/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - LibsDisguises + parent LibsDisguises 10.0.27-SNAPSHOT