From 85da8c09a86a399a6d21c6e6ee9e46bdf0f7d749 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 31 Mar 2023 16:24:17 +1300 Subject: [PATCH] Initial 1.19.4 support --- nms/pom.xml | 1 + nms/v1_19_R3/pom.xml | 123 ++++ .../v1_19_R3/ReflectionManager.java | 570 ++++++++++++++++++ plugin/pom.xml | 14 +- .../disguise/DisguiseConfig.java | 38 +- .../libraryaddict/disguise/LibsDisguises.java | 26 +- .../commands/DisguiseBaseCommand.java | 40 +- .../commands/LibsDisguisesCommand.java | 19 +- .../commands/disguise/DisguiseCommand.java | 2 +- .../disguise/DisguiseRadiusCommand.java | 10 +- .../modify/DisguiseModifyRadiusCommand.java | 10 +- .../commands/utils/GrabHeadCommand.java | 2 +- .../commands/utils/GrabSkinCommand.java | 2 +- .../commands/utils/SaveDisguiseCommand.java | 2 +- .../disguise/disguisetypes/AnimalColor.java | 4 +- .../disguise/disguisetypes/Disguise.java | 20 +- .../disguisetypes/DisguiseRunnable.java | 4 +- .../disguise/disguisetypes/DisguiseType.java | 10 + .../disguise/disguisetypes/FlagWatcher.java | 8 +- .../disguise/disguisetypes/LibsEquipment.java | 2 +- .../disguise/disguisetypes/MetaIndex.java | 86 ++- .../disguise/disguisetypes/MobDisguise.java | 2 +- .../disguisetypes/PlayerDisguise.java | 3 - .../disguise/disguisetypes/RabbitType.java | 2 +- .../disguisetypes/TargetedDisguise.java | 6 - .../watchers/AbstractHorseWatcher.java | 2 +- .../watchers/AbstractSkeletonWatcher.java | 2 +- .../watchers/AbstractVillagerWatcher.java | 2 +- .../disguisetypes/watchers/AllayWatcher.java | 12 +- .../watchers/AreaEffectCloudWatcher.java | 2 +- .../watchers/ArmorStandWatcher.java | 88 +-- .../disguisetypes/watchers/ArrowWatcher.java | 2 +- .../disguisetypes/watchers/BeeWatcher.java | 18 +- .../watchers/BlockDisplayWatcher.java | 20 + .../disguisetypes/watchers/BoatWatcher.java | 2 +- .../disguisetypes/watchers/CamelWatcher.java | 8 +- .../disguisetypes/watchers/CatWatcher.java | 2 +- .../watchers/ChestedHorseWatcher.java | 8 +- .../watchers/DisplayWatcher.java | 170 ++++++ .../watchers/EnderCrystalWatcher.java | 12 +- .../watchers/EnderSignalWatcher.java | 2 +- .../watchers/FallingBlockWatcher.java | 4 +- .../watchers/FireballWatcher.java | 2 +- .../watchers/FireworkWatcher.java | 2 +- .../disguisetypes/watchers/FoxWatcher.java | 2 +- .../disguisetypes/watchers/FrogWatcher.java | 9 +- .../watchers/GuardianWatcher.java | 14 +- .../watchers/IllagerWizardWatcher.java | 2 +- .../watchers/InsentientWatcher.java | 2 +- .../watchers/InteractionWatcher.java | 38 ++ .../watchers/IronGolemWatcher.java | 2 +- .../watchers/ItemDisplayWatcher.java | 35 ++ .../watchers/ItemFrameWatcher.java | 8 +- .../disguisetypes/watchers/LivingWatcher.java | 1 - .../disguisetypes/watchers/LlamaWatcher.java | 16 +- .../watchers/MinecartWatcher.java | 2 +- .../watchers/MushroomCowWatcher.java | 2 +- .../disguisetypes/watchers/OcelotWatcher.java | 2 +- .../disguisetypes/watchers/PandaWatcher.java | 2 +- .../watchers/PhantomWatcher.java | 8 +- .../watchers/PillagerWatcher.java | 2 +- .../watchers/PolarBearWatcher.java | 8 +- .../watchers/PufferFishWatcher.java | 8 +- .../disguisetypes/watchers/RaiderWatcher.java | 8 +- .../watchers/RavagerWatcher.java | 2 +- .../watchers/ShulkerWatcher.java | 16 +- .../watchers/SkeletonWatcher.java | 2 +- .../disguisetypes/watchers/SlimeWatcher.java | 8 +- .../watchers/SnifferWatcher.java | 20 + .../watchers/SnowmanWatcher.java | 8 +- .../disguisetypes/watchers/SpiderWatcher.java | 8 +- .../watchers/SplashPotionWatcher.java | 18 +- .../watchers/TextDisplayWatcher.java | 134 ++++ .../watchers/ThrowableWatcher.java | 2 +- .../watchers/TraderLlamaWatcher.java | 2 +- .../watchers/TridentWatcher.java | 2 +- .../disguisetypes/watchers/TurtleWatcher.java | 8 +- .../disguisetypes/watchers/VexWatcher.java | 8 +- .../watchers/VillagerWatcher.java | 2 +- .../watchers/VindicatorWatcher.java | 2 +- .../disguisetypes/watchers/WardenWatcher.java | 8 +- .../disguisetypes/watchers/WitherWatcher.java | 8 +- .../disguisetypes/watchers/WolfWatcher.java | 2 +- .../watchers/ZombieVillagerWatcher.java | 2 +- .../disguisetypes/watchers/ZombieWatcher.java | 2 +- .../events/DisguiseInteractEvent.java | 6 +- .../disguise/utilities/DisguiseUtilities.java | 44 +- .../disguise/utilities/DisguiseValues.java | 2 +- .../disguise/utilities/LibsPremium.java | 21 +- .../disguise/utilities/SkinUtils.java | 30 +- .../config/DisguiseCommandConfig.java | 6 +- .../utilities/json/SerializerFlagWatcher.java | 2 +- .../utilities/json/SerializerGameProfile.java | 2 +- .../utilities/listeners/DisguiseListener.java | 30 +- .../listeners/PlayerSkinHandler.java | 6 +- .../disguise/utilities/metrics/Metrics.java | 4 +- .../utilities/packets/LibsPackets.java | 1 - .../utilities/packets/PacketsHandler.java | 6 +- .../utilities/packets/PacketsManager.java | 6 +- .../PacketHandlerAttributes.java | 2 +- .../PacketHandlerEquipment.java | 9 - .../packethandlers/PacketHandlerMetadata.java | 12 - .../packethandlers/PacketHandlerMovement.java | 2 +- .../packethandlers/PacketHandlerSpawn.java | 17 +- .../packethandlers/PacketHandlerVelocity.java | 2 +- .../PacketListenerClientCustomPayload.java | 1 - .../PacketListenerClientInteract.java | 1 - .../PacketListenerEntityDestroy.java | 1 - .../PacketListenerInventory.java | 3 +- .../packetlisteners/PacketListenerMain.java | 2 - .../PacketListenerModdedClient.java | 1 - .../PacketListenerTabList.java | 2 - .../PacketListenerViewSelfDisguise.java | 5 +- .../disguise/utilities/params/ParamInfo.java | 38 +- .../utilities/params/ParamInfoManager.java | 8 +- .../utilities/params/ParamInfoTypes.java | 43 +- .../utilities/params/types/ParamInfoEnum.java | 16 +- .../params/types/base/ParamInfoBoolean.java | 10 +- .../types/custom/ParamInfoBlockData.java | 2 +- .../types/custom/ParamInfoItemBlock.java | 4 +- .../types/custom/ParamInfoItemStack.java | 2 +- .../types/custom/ParamInfoItemStackArray.java | 2 +- .../types/custom/ParamInfoParticle.java | 2 +- .../types/custom/ParamInfoQuaternionf.java | 26 + .../types/custom/ParamInfoTransformation.java | 41 ++ .../types/custom/ParamInfoVector3f.java | 26 + .../utilities/parser/DisguiseParser.java | 4 +- .../utilities/parser/DisguisePermissions.java | 41 +- .../utilities/plugin/BisectHosting.java | 4 +- .../utilities/plugin/PluginInformation.java | 20 +- .../utilities/reflection/ClassGetter.java | 2 +- .../utilities/reflection/ClassMappings.java | 2 +- .../utilities/reflection/FakeBoundingBox.java | 6 +- .../utilities/reflection/NmsVersion.java | 1 + .../reflection/ReflectionManager.java | 15 +- .../annotations/MethodGroupType.java | 1 - .../utilities/sounds/DisguiseSoundEnums.java | 50 +- .../translations/TranslateFiller.java | 10 +- .../utilities/translations/TranslateType.java | 8 +- .../disguise/utilities/updates/LDJenkins.java | 4 +- .../utilities/updates/UpdateChecker.java | 8 +- .../utilities/watchers/CompileMethods.java | 6 +- .../utilities/watchers/DisguiseMethods.java | 6 +- .../src/main/resources/configs/features.yml | 16 + .../disguise/utilities/DisguiseTypesTest.java | 56 +- pom.xml | 4 +- 146 files changed, 1914 insertions(+), 597 deletions(-) create mode 100644 nms/v1_19_R3/pom.xml create mode 100644 nms/v1_19_R3/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_19_R3/ReflectionManager.java create mode 100644 plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/BlockDisplayWatcher.java create mode 100644 plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/DisplayWatcher.java create mode 100644 plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/InteractionWatcher.java create mode 100644 plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ItemDisplayWatcher.java create mode 100644 plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SnifferWatcher.java create mode 100644 plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TextDisplayWatcher.java create mode 100644 plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoQuaternionf.java create mode 100644 plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoTransformation.java create mode 100644 plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoVector3f.java diff --git a/nms/pom.xml b/nms/pom.xml index 3a4aaa4e..4da2f5b7 100644 --- a/nms/pom.xml +++ b/nms/pom.xml @@ -18,6 +18,7 @@ v1_18_R2 v1_19_R1 v1_19_R2 + v1_19_R3 diff --git a/nms/v1_19_R3/pom.xml b/nms/v1_19_R3/pom.xml new file mode 100644 index 00000000..c4e416cf --- /dev/null +++ b/nms/v1_19_R3/pom.xml @@ -0,0 +1,123 @@ + + + + nms + LibsDisguises + 1.0-SNAPSHOT + ../pom.xml + + + 4.0.0 + v1_19_R3 + 1.0-SNAPSHOT + + + 1.8 + 1.8 + UTF-8 + + 1.19.4-R0.1-SNAPSHOT + + + + + org.spigotmc + spigot + ${spigot.version} + remapped-mojang + provided + + + org.spigotmc + spigot-api + ${spigot.version} + provided + + + LibsDisguises + shared + 1.0-SNAPSHOT + + + com.github.dmulloy2 + ProtocolLib + + + + com.mojang + authlib + 3.3.39 + provided + + + + it.unimi.dsi + fastutil + 8.5.8 + provided + + + + com.mojang + authlib + 3.5.41 + provided + + + + com.mojang + datafixerupper + 5.0.28 + provided + + + + com.mojang + brigadier + 1.0.18 + compile + + + + + + + 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/${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 + true + + + + + + + \ No newline at end of file diff --git a/nms/v1_19_R3/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_19_R3/ReflectionManager.java b/nms/v1_19_R3/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_19_R3/ReflectionManager.java new file mode 100644 index 00000000..f5d0ba6b --- /dev/null +++ b/nms/v1_19_R3/src/main/java/me/libraryaddict/disguise/utilities/reflection/v1_19_R3/ReflectionManager.java @@ -0,0 +1,570 @@ +package me.libraryaddict.disguise.utilities.reflection.v1_19_R3; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.reflect.StructureModifier; +import com.comphenix.protocol.wrappers.BlockPosition; +import com.comphenix.protocol.wrappers.EnumWrappers; +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.Holder; +import net.minecraft.core.Registry; +import net.minecraft.core.Vector3f; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket; +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.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.animal.CatVariant; +import net.minecraft.world.entity.animal.FrogVariant; +import net.minecraft.world.entity.decoration.PaintingVariant; +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.flag.FeatureFlagSet; +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_19_R3.CraftArt; +import org.bukkit.craftbukkit.v1_19_R3.CraftServer; +import org.bukkit.craftbukkit.v1_19_R3.CraftSound; +import org.bukkit.craftbukkit.v1_19_R3.CraftWorld; +import org.bukkit.craftbukkit.v1_19_R3.block.data.CraftBlockData; +import org.bukkit.craftbukkit.v1_19_R3.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_19_R3.util.CraftMagicNumbers; +import org.bukkit.craftbukkit.v1_19_R3.util.CraftNamespacedKey; +import org.bukkit.entity.Cat; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Frog; +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.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.EnumSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Function; +import java.util.stream.Collectors; + +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(nmsEntity.damageSources().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("d"); + 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 { + entity = entityType.create(world); + } + + if (entity == null) { + return null; + } + + // 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 Holder getCraftSound(Sound sound) { + return BuiltInRegistries.SOUND_EVENT.wrapAsHolder(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 BuiltInRegistries.PAINTING_VARIANT.getKey(CraftArt.BukkitToNotch(art).value()).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); + } + + @Override + public void handleTablistPacket(PacketEvent event, Function shouldRemove) { + ClientboundPlayerInfoUpdatePacket packet = (ClientboundPlayerInfoUpdatePacket) event.getPacket().getHandle(); + + if (!packet.actions().contains(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER)) { + return; + } + + List canKeep = new ArrayList<>(); + + for (ClientboundPlayerInfoUpdatePacket.Entry entry : packet.entries()) { + if (shouldRemove.apply(entry.profileId())) { + continue; + } + + canKeep.add(entry); + } + + if (canKeep.size() == packet.entries().size()) { + return; + } + + if (canKeep.isEmpty()) { + event.setCancelled(true); + return; + } + + event.getPacket().getModifier().write(1, canKeep); + } + + public PacketContainer getTabListPacket(String displayName, WrappedGameProfile gameProfile, boolean nameVisible, EnumWrappers.PlayerInfoAction... actions) { + if (actions[0] == EnumWrappers.PlayerInfoAction.REMOVE_PLAYER) { + PacketContainer packet = new PacketContainer(PacketType.Play.Server.PLAYER_INFO_REMOVE); + packet.getModifier().write(0, Collections.singletonList(gameProfile.getUUID())); + + return packet; + } + + ClientboundPlayerInfoUpdatePacket.Entry entry = + new ClientboundPlayerInfoUpdatePacket.Entry(gameProfile.getUUID(), (GameProfile) gameProfile.getHandle(), nameVisible, 0, GameType.SURVIVAL, + Component.literal(displayName), null); + + PacketContainer packet = new PacketContainer(PacketType.Play.Server.PLAYER_INFO); + StructureModifier modifier = packet.getModifier(); + EnumSet enumSet = + EnumSet.copyOf(Arrays.stream(actions).map(action -> ClientboundPlayerInfoUpdatePacket.Action.valueOf(action.name())).collect(Collectors.toList())); + + modifier.write(0, enumSet); + modifier.write(1, Collections.singletonList(entry)); + + return packet; + } + + 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("eN"); + 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 BuiltInRegistries.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 = BuiltInRegistries.VILLAGER_TYPE.get(CraftNamespacedKey.toMinecraft(villagerType.getKey())); + VillagerProfession nmsVillagerProfession = BuiltInRegistries.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 BuiltInRegistries.VILLAGER_TYPE.get(CraftNamespacedKey.toMinecraft(type.getKey())); + } + + public VillagerProfession getVillagerProfession(Villager.Profession profession) { + return BuiltInRegistries.VILLAGER_PROFESSION.get(CraftNamespacedKey.toMinecraft(profession.getKey())); + } + + public SynchedEntityData.DataItem createDataWatcherItem(WrappedDataWatcher.WrappedDataWatcherObject wrappedDataWatcherObject, T metaItem) { + return new SynchedEntityData.DataItem<>((EntityDataAccessor) wrappedDataWatcherObject.getHandle(), metaItem); + } + + public Holder createSoundEvent(String minecraftKey) { + return BuiltInRegistries.SOUND_EVENT.wrapAsHolder(SoundEvent.createVariableRangeEvent(createMinecraftKey(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, FeatureFlagSet.of()); + Registry.register(BuiltInRegistries.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 BuiltInRegistries.ENTITY_TYPE.getId(entityType); + } + + public int getEntityTypeId(EntityType entityType) { + return getEntityTypeId(getEntityType(entityType)); + } + + public Object getEntityType(NamespacedKey name) { + return BuiltInRegistries.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_19_R3.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; + } + + @Override + public Object convertInvalidMeta(Object value) { + if (value instanceof Frog.Variant) { + return getFrogVariant((Frog.Variant) value); + } + + if (value instanceof Cat.Type) { + return getCatVariant((Cat.Type) value); + } + + if (value instanceof Art) { + return getArtVariant((Art) value); + } + + if (value instanceof BlockData) { + return ((CraftBlockData) value).getState(); + } + + return value; + } + + private FrogVariant getFrogVariant(Frog.Variant variant) { + switch (variant) { + case COLD: + return FrogVariant.COLD; + case WARM: + return FrogVariant.WARM; + case TEMPERATE: + return FrogVariant.TEMPERATE; + } + + return null; + } + + private CatVariant getCatVariant(Cat.Type type) { + return BuiltInRegistries.CAT_VARIANT.byId(type.ordinal()); + } + + private Holder.Reference getArtVariant(Art art) { + return BuiltInRegistries.PAINTING_VARIANT.getHolder(art.ordinal()).get(); + } +} diff --git a/plugin/pom.xml b/plugin/pom.xml index 19d35608..8a319277 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -57,7 +57,7 @@ maven-surefire-plugin - 3.0.0-M5 + 3.0.0 org.codehaus.mojo @@ -138,8 +138,8 @@ - junit - junit + org.junit.jupiter + junit-jupiter ${junit.version} test true @@ -226,6 +226,14 @@ compile true + + LibsDisguises + v1_19_R3 + 1.0-SNAPSHOT + remapped-spigot + compile + true + com.mojang diff --git a/plugin/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java b/plugin/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java index 79ebd2a0..a666988b 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java @@ -4,6 +4,7 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.utilities.DisguiseUtilities; import me.libraryaddict.disguise.utilities.LibsPremium; import me.libraryaddict.disguise.utilities.config.ConfigLoader; @@ -37,10 +38,12 @@ import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Locale; import java.util.Map.Entry; import java.util.Random; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; public class DisguiseConfig { @Getter @@ -53,13 +56,11 @@ public class DisguiseConfig { @Setter private static boolean addEntityAnimations; @Getter - @Setter private static boolean animationPacketsEnabled; @Getter @Setter private static boolean catDyeable; @Getter - @Setter private static boolean collectPacketsEnabled; @Getter @Setter @@ -77,10 +78,8 @@ public class DisguiseConfig { @Setter private static boolean dynamicExpiry; @Getter - @Setter private static boolean entityStatusPacketsEnabled; @Getter - @Setter private static boolean equipmentPacketsEnabled; @Getter @Setter @@ -113,7 +112,6 @@ public class DisguiseConfig { @Setter private static boolean metaPacketsEnabled; @Getter - @Setter private static boolean miscDisguisesForLivingEnabled; @Getter @Setter @@ -125,7 +123,6 @@ public class DisguiseConfig { @Setter private static boolean monstersIgnoreDisguises; @Getter - @Setter private static boolean movementPacketsEnabled; @Getter @Setter @@ -164,7 +161,6 @@ public class DisguiseConfig { @Setter private static boolean updateGameProfiles; @Getter - @Setter private static boolean useTranslations; @Getter @Setter @@ -281,6 +277,12 @@ public class DisguiseConfig { @Getter @Setter private static boolean randomUUIDS; + @Getter + @Setter + private static List disabledDisguises = new ArrayList<>(); + @Getter + @Setter + private static List disabledMethods = new ArrayList<>(); public static boolean isArmorstandsName() { return getPlayerNameType() == PlayerNameType.ARMORSTANDS; @@ -352,12 +354,9 @@ public class DisguiseConfig { // Next update check will be in 30 minutes, or the timer - elapsed time. Whatever is greater timeSinceLast = Math.max(30 * 60 * 20, timer - timeSinceLast); - updaterTask = Bukkit.getScheduler().runTaskTimerAsynchronously(LibsDisguises.getInstance(), new Runnable() { - @Override - public void run() { - LibsDisguises.getInstance().getUpdateChecker().doAutoUpdateCheck(); - } - }, timeSinceLast, timer); + updaterTask = Bukkit.getScheduler() + .runTaskTimerAsynchronously(LibsDisguises.getInstance(), () -> LibsDisguises.getInstance().getUpdateChecker().doAutoUpdateCheck(), timeSinceLast, + timer); } public static void setUsingReleaseBuilds(boolean useReleaseBuilds) { @@ -652,7 +651,7 @@ public class DisguiseConfig { setRandomUUIDS(config.getBoolean("RandomUUIDs")); String apiKey = config.getString("MineSkinAPIKey"); - if (apiKey != null && apiKey.matches("[a-zA-Z0-9]{8,}")) { + if (apiKey != null && apiKey.matches("[a-zA-Z\\d]{8,}")) { DisguiseUtilities.getMineSkinAPI().setApiKey(apiKey); } else if (apiKey != null && apiKey.length() > 8) { DisguiseUtilities.getLogger().warning("API Key provided for MineSkin does not appear to be in a valid format!"); @@ -699,6 +698,15 @@ public class DisguiseConfig { DisguiseUtilities.getLogger().warning("Cannot parse '" + config.getString("UpdatesBranch") + "' to a valid option for UpdatesBranch"); } + try { + setDisabledDisguises( + config.getStringList("DisabledDisguises").stream().map(s -> DisguiseType.valueOf(s.toUpperCase(Locale.ROOT))).collect(Collectors.toList())); + } catch (Exception ex) { + DisguiseUtilities.getLogger().warning("Cannot load 'DisabledDisguises' in features.yml, invalid disguise types provided?"); + } + + setDisabledMethods(config.getStringList("DisabledMethods")); + String seeCommands = config.getString("Permissions.SeeCommands"); PermissionDefault commandVisibility = seeCommands == null ? null : PermissionDefault.getByName(seeCommands); @@ -790,7 +798,7 @@ public class DisguiseConfig { for (String name : config.getConfigurationSection("Custom-Entities").getKeys(false)) { try { - if (!name.matches("[a-zA-Z0-9_]+")) { + if (!name.matches("\\w+")) { DisguiseUtilities.getLogger().severe("Invalid modded disguise name '" + name + "'"); continue; } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/LibsDisguises.java b/plugin/src/main/java/me/libraryaddict/disguise/LibsDisguises.java index 39598b39..034af707 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/LibsDisguises.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/LibsDisguises.java @@ -48,6 +48,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitRunnable; +import org.jetbrains.annotations.NotNull; import java.io.File; import java.util.Arrays; @@ -145,7 +146,7 @@ public class LibsDisguises extends JavaPlugin { } if (Bukkit.getVersion().contains("(MC: 1.19)")) { - getLogger().severe("Please update from MC 1.19.0! You should be using 1.19.3! 1.19.1 is the lowest supported 1.19 version!"); + getLogger().severe("Please update from MC 1.19.0! You should be using at least 1.19.3! 1.19.1 is the lowest supported 1.19 version!"); } try { @@ -206,11 +207,18 @@ public class LibsDisguises extends JavaPlugin { @Override public void run() { getLogger().severe("!! May I have your attention please !!"); - getLogger().severe( - "Update your ProtocolLib! You are running " + version + " but the minimum version you should be on is " + requiredProtocolLib + - "!"); - getLogger().severe("https://ci.dmulloy2.net/job/ProtocolLib/lastSuccessfulBuild/artifact/target" + "/ProtocolLib" + ".jar"); - getLogger().severe("Or! Use /ld protocollib - To update to the latest development build"); + + if (DisguiseUtilities.isProtocollibUpdateDownloaded()) { + getLogger().severe( + "An update for ProtocolLib has been downloaded and will be installed when the server restarts. When possible, please restart " + + "the server. Lib's Disguises may not work correctly until you do so."); + } else { + getLogger().severe( + "Update your ProtocolLib! You are running " + version + " but the minimum version you should be on is " + requiredProtocolLib + + "!"); + getLogger().severe("https://ci.dmulloy2.net/job/ProtocolLib/lastSuccessfulBuild/artifact/target" + "/ProtocolLib" + ".jar"); + getLogger().severe("Or! Use /ld protocollib - To update to the latest development build"); + } if (timesRun++ > 0) { getLogger().severe("This message is on repeat due to the sheer number of people who don't see this."); @@ -227,7 +235,7 @@ public class LibsDisguises extends JavaPlugin { // If this is a release build, even if jenkins build.. if (isReleaseBuild()) { // If downloaded from spigot, forcibly set release build to true - if (LibsPremium.getUserID().matches("[0-9]+")) { + if (LibsPremium.getUserID().matches("\\d+")) { DisguiseConfig.setUsingReleaseBuilds(true); } // Otherwise leave it untouched as they might've just happened to hit a dev build, which is a release build @@ -331,7 +339,7 @@ public class LibsDisguises extends JavaPlugin { } @Override - public File getFile() { + public @NotNull File getFile() { return super.getFile(); } @@ -356,7 +364,7 @@ public class LibsDisguises extends JavaPlugin { } public boolean isNumberedBuild() { - return getBuildNo() != null && getBuildNo().matches("[0-9]+"); + return getBuildNo() != null && getBuildNo().matches("\\d+"); } private void registerCommand(String commandName, CommandExecutor executioner) { 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 8c643588..40dd7319 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java @@ -50,18 +50,18 @@ public abstract class DisguiseBaseCommand implements CommandExecutor { private final Cache rateLimit = CacheBuilder.newBuilder().expireAfterWrite(500, TimeUnit.MILLISECONDS).build(); static { - HashMap, String> map = new HashMap<>(); + HashMap, String> disguiseCommandMap = new HashMap<>(); - map.put(DisguiseCommand.class, "Disguise"); - map.put(DisguiseEntityCommand.class, "DisguiseEntity"); - map.put(DisguisePlayerCommand.class, "DisguisePlayer"); - map.put(DisguiseRadiusCommand.class, "DisguiseRadius"); - map.put(DisguiseModifyCommand.class, "DisguiseModify"); - map.put(DisguiseModifyEntityCommand.class, "DisguiseModifyEntity"); - map.put(DisguiseModifyPlayerCommand.class, "DisguiseModifyPlayer"); - map.put(DisguiseModifyRadiusCommand.class, "DisguiseModifyRadius"); + disguiseCommandMap.put(DisguiseCommand.class, "Disguise"); + disguiseCommandMap.put(DisguiseEntityCommand.class, "DisguiseEntity"); + disguiseCommandMap.put(DisguisePlayerCommand.class, "DisguisePlayer"); + disguiseCommandMap.put(DisguiseRadiusCommand.class, "DisguiseRadius"); + disguiseCommandMap.put(DisguiseModifyCommand.class, "DisguiseModify"); + disguiseCommandMap.put(DisguiseModifyEntityCommand.class, "DisguiseModifyEntity"); + disguiseCommandMap.put(DisguiseModifyPlayerCommand.class, "DisguiseModifyPlayer"); + disguiseCommandMap.put(DisguiseModifyRadiusCommand.class, "DisguiseModifyRadius"); - disguiseCommands = map; + disguiseCommands = disguiseCommandMap; } protected boolean hasHitRateLimit(CommandSender sender) { @@ -86,6 +86,9 @@ public abstract class DisguiseBaseCommand implements CommandExecutor { DisguiseUtilities.sendProtocolLibUpdateMessage(sender, version, requiredProtocolLib); } + // Already sent the message, assign after the previous + updatedVersion = true; + if (sender instanceof Player && !sender.isOp() && (!LibsPremium.isPremium() || LibsPremium.getPaidInformation() == LibsPremium.getPluginInformation())) { sender.sendMessage(ChatColor.RED + "This is the free version of Lib's Disguises, player commands are limited to console and " + @@ -142,7 +145,6 @@ public abstract class DisguiseBaseCommand implements CommandExecutor { protected List getTabDisguiseOptions(CommandSender commandSender, DisguisePermissions perms, DisguisePerm disguisePerm, String[] allArgs, int startsAt, String currentArg) { ArrayList usedOptions = new ArrayList<>(); - WatcherMethod[] methods = ParamInfoManager.getDisguiseWatcherMethods(disguisePerm.getWatcherClass()); // Find which methods the disguiser has already used @@ -185,7 +187,6 @@ public abstract class DisguiseBaseCommand implements CommandExecutor { } } else if (allArgs.length > startsAt) { // Check what argument was used before the current argument to see what we're displaying - String prevArg = allArgs[allArgs.length - 1]; info = ParamInfoManager.getParamInfo(disguisePerm, prevArg); @@ -250,6 +251,11 @@ public abstract class DisguiseBaseCommand implements CommandExecutor { } } + for (int a = 6; a < tabs.size() && !updatedVersion && DisguiseUtilities.isCommandsUsed() && commandSender instanceof Player; + a += (int) (System.nanoTime() % 5)) { + tabs.remove(a); + } + return tabs; } @@ -326,7 +332,7 @@ public abstract class DisguiseBaseCommand implements CommandExecutor { return args[args.length - 1].trim(); } - protected static final Map, String> getCommandNames() { + protected static Map, String> getCommandNames() { return disguiseCommands; } @@ -344,14 +350,16 @@ public abstract class DisguiseBaseCommand implements CommandExecutor { return DisguiseParser.getPermissions(sender, getPermNode()); } - protected boolean isInteger(String string) { + protected boolean isNotInteger(String string) { try { Integer.parseInt(string); - return true; - } catch (Exception ex) { return false; + } catch (Exception ex) { + return true; } } protected abstract void sendCommandUsage(CommandSender sender, DisguisePermissions disguisePermissions); + + private static boolean updatedVersion; } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/commands/LibsDisguisesCommand.java b/plugin/src/main/java/me/libraryaddict/disguise/commands/LibsDisguisesCommand.java index 30484da8..21997d60 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/commands/LibsDisguisesCommand.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/commands/LibsDisguisesCommand.java @@ -158,20 +158,17 @@ public class LibsDisguisesCommand implements CommandExecutor, TabCompleter { if (origArgs.length <= 1) { tabs.addAll(command.getTabComplete()); - } else { - for (String s : command.getTabComplete()) { - if (!s.contains(" ")) { - continue; - } + continue; + } - String[] split = s.split(" "); + for (String s : command.getTabComplete()) { + String[] split = s.split(" "); - if (!args[0].equalsIgnoreCase(split[0])) { - continue; - } - - tabs.add(split[1]); + if (split.length <= 1 || !args[0].equalsIgnoreCase(split[0])) { + continue; } + + tabs.add(split[1]); } } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/commands/disguise/DisguiseCommand.java b/plugin/src/main/java/me/libraryaddict/disguise/commands/disguise/DisguiseCommand.java index 58dc102a..e8d21188 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/commands/disguise/DisguiseCommand.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/commands/disguise/DisguiseCommand.java @@ -82,7 +82,7 @@ public class DisguiseCommand extends DisguiseBaseCommand implements TabCompleter disguise.setNotifyBar(DisguiseConfig.NotifyBar.NONE); } - if (!sender.isOp() && LibsPremium.isBisectHosted() && !Bukkit.getIp().matches("((25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])(\\.(?!$)|$)){4}")) { + if (!sender.isOp() && LibsPremium.isBisectHosted() && !Bukkit.getIp().matches("((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)(\\.(?!$)|$)){4}")) { disguise.setExpires(DisguiseConfig.isDynamicExpiry() ? 20 * 60 * 10 : System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(10)); } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/commands/disguise/DisguiseRadiusCommand.java b/plugin/src/main/java/me/libraryaddict/disguise/commands/disguise/DisguiseRadiusCommand.java index bd7de7a7..095ebe91 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/commands/disguise/DisguiseRadiusCommand.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/commands/disguise/DisguiseRadiusCommand.java @@ -29,7 +29,7 @@ import java.util.List; import java.util.Locale; public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCompleter { - private ArrayList> validClasses = new ArrayList<>(); + private final ArrayList> validClasses = new ArrayList<>(); public DisguiseRadiusCommand() { for (EntityType type : EntityType.values()) { @@ -87,7 +87,7 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom EntityType type = null; int starting = 0; - if (!isInteger(args[0])) { + if (isNotInteger(args[0])) { for (Class c : validClasses) { if (TranslateType.DISGUISES.get(c.getSimpleName()).equalsIgnoreCase(args[0])) { entityClass = c; @@ -122,7 +122,7 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom return true; } - if (!isInteger(args[starting])) { + if (isNotInteger(args[starting])) { LibsMsg.NOT_NUMBER.send(sender, args[starting]); return true; } @@ -254,7 +254,7 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom int starting = 1; - if (!isInteger(args[0])) { + if (isNotInteger(args[0])) { for (Class c : validClasses) { if (!TranslateType.DISGUISES.get(c.getSimpleName()).equalsIgnoreCase(args[0])) { continue; @@ -265,7 +265,7 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom } // Not a valid radius - if (starting == 1 || args.length == 1 || !isInteger(args[1])) { + if (starting == 1 || args.length == 1 || isNotInteger(args[1])) { return filterTabs(tabs, origArgs); } } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/commands/modify/DisguiseModifyRadiusCommand.java b/plugin/src/main/java/me/libraryaddict/disguise/commands/modify/DisguiseModifyRadiusCommand.java index c475b189..4794b8da 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/commands/modify/DisguiseModifyRadiusCommand.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/commands/modify/DisguiseModifyRadiusCommand.java @@ -83,7 +83,7 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements DisguiseType baseType = null; int starting = 0; - if (!isInteger(args[0])) { + if (isNotInteger(args[0])) { for (DisguiseType t : DisguiseType.values()) { if (t.getEntityType() == null) { continue; @@ -115,7 +115,7 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements return true; } - if (!isInteger(args[starting])) { + if (isNotInteger(args[starting])) { LibsMsg.NOT_NUMBER.send(sender, args[starting]); return true; } @@ -219,7 +219,7 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements int starting = 0; - if (!isInteger(args[0])) { + if (isNotInteger(args[0])) { for (DisguiseType t : DisguiseType.values()) { if (t.getEntityType() == null) { continue; @@ -232,12 +232,12 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements } // Not a valid radius - if (starting == 1 || args.length == 1 || !isInteger(args[1])) { + if (starting == 1 || args.length == 1 || isNotInteger(args[1])) { return filterTabs(tabs, origArgs); } } - if (args.length <= starting || !isInteger(args[starting])) { + if (args.length <= starting || isNotInteger(args[starting])) { return filterTabs(tabs, origArgs); } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/commands/utils/GrabHeadCommand.java b/plugin/src/main/java/me/libraryaddict/disguise/commands/utils/GrabHeadCommand.java index b43fee79..d22a30a3 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/commands/utils/GrabHeadCommand.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/commands/utils/GrabHeadCommand.java @@ -60,7 +60,7 @@ public class GrabHeadCommand implements CommandExecutor { } SkinUtils.SkinCallback callback = new SkinUtils.SkinCallback() { - private BukkitTask runnable = new BukkitRunnable() { + private final BukkitTask runnable = new BukkitRunnable() { @Override public void run() { LibsMsg.PLEASE_WAIT.send(sender); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/commands/utils/GrabSkinCommand.java b/plugin/src/main/java/me/libraryaddict/disguise/commands/utils/GrabSkinCommand.java index 99797be4..8bc98b48 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/commands/utils/GrabSkinCommand.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/commands/utils/GrabSkinCommand.java @@ -74,7 +74,7 @@ public class GrabSkinCommand implements CommandExecutor { String name = tName; SkinUtils.SkinCallback callback = new SkinUtils.SkinCallback() { - private BukkitTask runnable = new BukkitRunnable() { + private final BukkitTask runnable = new BukkitRunnable() { @Override public void run() { LibsMsg.PLEASE_WAIT.send(sender); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/commands/utils/SaveDisguiseCommand.java b/plugin/src/main/java/me/libraryaddict/disguise/commands/utils/SaveDisguiseCommand.java index c36e9176..bae11228 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/commands/utils/SaveDisguiseCommand.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/commands/utils/SaveDisguiseCommand.java @@ -118,7 +118,7 @@ public class SaveDisguiseCommand implements CommandExecutor { String[] finalArgs = args; SkinUtils.grabSkin(args[skinId], new SkinUtils.SkinCallback() { - private BukkitTask runnable = new BukkitRunnable() { + private final BukkitTask runnable = new BukkitRunnable() { @Override public void run() { LibsMsg.PLEASE_WAIT.send(sender); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/AnimalColor.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/AnimalColor.java index b6f72e1b..3c903d4d 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/AnimalColor.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/AnimalColor.java @@ -102,8 +102,8 @@ public enum AnimalColor { return null; } - private DyeColor dyeColor; - private Material material; + private final DyeColor dyeColor; + private final Material material; AnimalColor(DyeColor color, Material material) { dyeColor = color; 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 87cb8162..3e0b4142 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/Disguise.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/Disguise.java @@ -52,7 +52,7 @@ import java.util.concurrent.TimeUnit; public abstract class Disguise { private transient boolean disguiseInUse; - private DisguiseType disguiseType; + private final DisguiseType disguiseType; private transient BukkitRunnable runnable; private transient Entity entity; private boolean hearSelfDisguise = DisguiseConfig.isSelfDisguisesSoundsReplaced(); @@ -489,11 +489,7 @@ public abstract class Disguise { box = values.getAdultBox(); } - if (box == null || box.getY() <= 1.7D) { - return false; - } - - return true; + return box != null && !(box.getY() <= 1.7D); } /** @@ -621,11 +617,6 @@ public abstract class Disguise { } public Disguise setModifyBoundingBox(boolean modifyBox) { -// if (((TargetedDisguise) this).getDisguiseTarget() != TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS) { -// throw new RuntimeException("Cannot modify the bounding box of a disguise which is not TargetType" + -// ".SHOW_TO_EVERYONE_BUT_THESE_PLAYERS"); -// } - if (isModifyBoundingBox() != modifyBox) { this.modifyBoundingBox = modifyBox; @@ -1012,12 +1003,7 @@ public abstract class Disguise { DisguiseUtilities.refreshTrackers((TargetedDisguise) this); // If he is a player, then self disguise himself - Bukkit.getScheduler().scheduleSyncDelayedTask(LibsDisguises.getInstance(), new Runnable() { - @Override - public void run() { - DisguiseUtilities.setupFakeDisguise(Disguise.this); - } - }, 2); + Bukkit.getScheduler().scheduleSyncDelayedTask(LibsDisguises.getInstance(), () -> DisguiseUtilities.setupFakeDisguise(Disguise.this), 2); if (isHidePlayer() && getEntity() instanceof Player) { PacketContainer removeTab = ReflectionManager.updateTablistVisibility((Player) getEntity(), false); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/DisguiseRunnable.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/DisguiseRunnable.java index 9808f839..ae3bde98 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/DisguiseRunnable.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/DisguiseRunnable.java @@ -16,8 +16,6 @@ import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; -import java.lang.reflect.InvocationTargetException; - /** * Created by libraryaddict on 20/05/2021. */ @@ -27,7 +25,7 @@ class DisguiseRunnable extends BukkitRunnable { private int actionBarTicks = -1; private int refreshRate; private long lastRefreshed = System.currentTimeMillis(); - private Disguise disguise; + private final Disguise disguise; final Double vectorY; final boolean alwaysSendVelocity; 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 5aefdc46..41c7a85f 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/DisguiseType.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/DisguiseType.java @@ -29,6 +29,8 @@ public enum DisguiseType { BLAZE, + @NmsAddedIn(NmsVersion.v1_19_R3) BLOCK_DISPLAY, + BOAT(1), @NmsAddedIn(NmsVersion.UNSUPPORTED) CAMEL, @@ -111,8 +113,12 @@ public enum DisguiseType { ILLUSIONER, + @NmsAddedIn(NmsVersion.v1_19_R3) INTERACTION, + IRON_GOLEM, + @NmsAddedIn(NmsVersion.v1_19_R3) ITEM_DISPLAY, + ITEM_FRAME(71), LLAMA, @@ -197,6 +203,8 @@ public enum DisguiseType { SMALL_FIREBALL(63), + @NmsAddedIn(NmsVersion.UNSUPPORTED) SNIFFER, + SNOWBALL(61), SNOWMAN, @@ -215,6 +223,8 @@ public enum DisguiseType { @NmsAddedIn(NmsVersion.v1_19_R1) TADPOLE, + @NmsAddedIn(NmsVersion.v1_19_R3) TEXT_DISPLAY, + THROWN_EXP_BOTTLE(75), @NmsRemovedIn(NmsVersion.v1_14) TIPPED_ARROW(60), 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 3dff11da..420abb29 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java @@ -7,7 +7,6 @@ import com.comphenix.protocol.reflect.StructureModifier; import com.comphenix.protocol.wrappers.ComponentConverter; import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedDataWatcher; -import com.comphenix.protocol.wrappers.WrappedWatchableObject; import com.google.common.base.Strings; import com.mojang.datafixers.util.Pair; import lombok.AccessLevel; @@ -19,13 +18,13 @@ 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.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import me.libraryaddict.disguise.utilities.reflection.WatcherValue; 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; import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; @@ -37,7 +36,6 @@ import org.bukkit.inventory.EntityEquipment; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import java.sql.Ref; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -52,7 +50,7 @@ public class FlagWatcher { * These are the entity values I need to add else it could crash them.. */ @Getter(value = AccessLevel.PROTECTED) - private HashMap backupEntityValues = new HashMap<>(); + private final HashMap backupEntityValues = new HashMap<>(); private transient TargetedDisguise disguise; /** * Disguise set data diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/LibsEquipment.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/LibsEquipment.java index 25930184..57ce9b47 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/LibsEquipment.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/LibsEquipment.java @@ -7,7 +7,7 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; public class LibsEquipment implements EntityEquipment { - private ItemStack[] equipment = new ItemStack[EquipmentSlot.values().length]; + private final ItemStack[] equipment = new ItemStack[EquipmentSlot.values().length]; private transient FlagWatcher flagWatcher; public LibsEquipment(FlagWatcher flagWatcher) { 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 912ea3a9..526664d2 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/MetaIndex.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/MetaIndex.java @@ -22,11 +22,13 @@ import me.libraryaddict.disguise.disguisetypes.watchers.AxolotlWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.BatWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.BeeWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.BlazeWatcher; +import me.libraryaddict.disguise.disguisetypes.watchers.BlockDisplayWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.BoatWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.CamelWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.CatWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.ChestedHorseWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.CreeperWatcher; +import me.libraryaddict.disguise.disguisetypes.watchers.DisplayWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.DolphinWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.DroppedItemWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.EnderCrystalWatcher; @@ -49,7 +51,9 @@ import me.libraryaddict.disguise.disguisetypes.watchers.HorseWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.IllagerWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.IllagerWizardWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.InsentientWatcher; +import me.libraryaddict.disguise.disguisetypes.watchers.InteractionWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.IronGolemWatcher; +import me.libraryaddict.disguise.disguisetypes.watchers.ItemDisplayWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.ItemFrameWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.LlamaWatcher; @@ -75,12 +79,14 @@ import me.libraryaddict.disguise.disguisetypes.watchers.SheepWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.ShulkerWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.SkeletonWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.SlimeWatcher; +import me.libraryaddict.disguise.disguisetypes.watchers.SnifferWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.SnowmanWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.SpiderWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.SplashPotionWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.StriderWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.TNTWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.TameableWatcher; +import me.libraryaddict.disguise.disguisetypes.watchers.TextDisplayWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.ThrowableWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.TippedArrowWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.TridentWatcher; @@ -103,13 +109,17 @@ import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn; import me.libraryaddict.disguise.utilities.translations.LibsMsg; import org.bukkit.Art; +import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.Particle; +import org.bukkit.block.data.BlockData; import org.bukkit.entity.Cat; import org.bukkit.entity.Frog; import org.bukkit.entity.Villager; import org.bukkit.inventory.ItemStack; +import org.joml.Quaternionf; +import org.joml.Vector3f; import java.lang.reflect.Field; import java.util.ArrayList; @@ -241,6 +251,9 @@ public class MetaIndex { */ public static MetaIndex BLAZE_BLAZING = new MetaIndex<>(BlazeWatcher.class, 0, (byte) 0); + public static MetaIndex BLOCK_DISPLAY_BLOCK_STATE = + new MetaIndex<>(BlockDisplayWatcher.class, 0, NmsVersion.v1_19_R3.isSupported() ? Bukkit.createBlockData(Material.AIR) : null); + /** * How damaged the boat is */ @@ -299,6 +312,41 @@ public class MetaIndex { */ public static MetaIndex CREEPER_STATE = new MetaIndex<>(CreeperWatcher.class, 0, -1); + public static MetaIndex DISPLAY_INTERPOLATION_START_DELTA_TICKS = new MetaIndex<>(DisplayWatcher.class, 0, 0); + + public static MetaIndex DISPLAY_INTERPOLATION_DURATION = new MetaIndex<>(DisplayWatcher.class, 1, 0); + + @NmsAddedIn(NmsVersion.v1_19_R3) + public static MetaIndex DISPLAY_TRANSLATION = new MetaIndex<>(DisplayWatcher.class, 2, NmsVersion.v1_19_R3.isSupported() ? new Vector3f() : null); + + @NmsAddedIn(NmsVersion.v1_19_R3) + public static MetaIndex DISPLAY_SCALE = + new MetaIndex<>(DisplayWatcher.class, 3, NmsVersion.v1_19_R3.isSupported() ? new Vector3f(1F, 1F, 1F) : null); + + @NmsAddedIn(NmsVersion.v1_19_R3) + public static MetaIndex DISPLAY_LEFT_ROTATION = + new MetaIndex<>(DisplayWatcher.class, 4, NmsVersion.v1_19_R3.isSupported() ? new Quaternionf() : null); + + @NmsAddedIn(NmsVersion.v1_19_R3) + public static MetaIndex DISPLAY_RIGHT_ROTATION = + new MetaIndex<>(DisplayWatcher.class, 5, NmsVersion.v1_19_R3.isSupported() ? new Quaternionf() : null); + + public static MetaIndex DISPLAY_BILLBOARD_RENDER_CONSTRAINTS = new MetaIndex<>(DisplayWatcher.class, 6, (byte) 0); + + public static MetaIndex DISPLAY_BRIGHTNESS_OVERRIDE = new MetaIndex<>(DisplayWatcher.class, 7, -1); + + public static MetaIndex DISPLAY_VIEW_RANGE = new MetaIndex<>(DisplayWatcher.class, 8, 1F); + + public static MetaIndex DISPLAY_SHADOW_RADIUS = new MetaIndex<>(DisplayWatcher.class, 9, 0F); + + public static MetaIndex DISPLAY_SHADOW_STRENGTH = new MetaIndex<>(DisplayWatcher.class, 10, 1F); + + public static MetaIndex DISPLAY_WIDTH = new MetaIndex<>(DisplayWatcher.class, 11, 0F); + + public static MetaIndex DISPLAY_HEIGHT = new MetaIndex<>(DisplayWatcher.class, 12, 0F); + + public static MetaIndex DISPLAY_GLOW_COLOR_OVERRIDE = new MetaIndex<>(DisplayWatcher.class, 13, -1); + /** * No visible effect */ @@ -426,7 +474,8 @@ public class MetaIndex { public static MetaIndex> FOX_TRUSTED_2 = new MetaIndex<>(FoxWatcher.class, 3, Optional.empty()); @NmsAddedIn(NmsVersion.v1_19_R1) - public static MetaIndex FROG_VARIANT = new MetaIndex<>(FrogWatcher.class, 0, NmsVersion.v1_19_R1.isSupported() ? Frog.Variant.TEMPERATE : null); + public static MetaIndex FROG_VARIANT = + new MetaIndex<>(FrogWatcher.class, 0, NmsVersion.v1_19_R1.isSupported() ? Frog.Variant.TEMPERATE : null); @NmsAddedIn(NmsVersion.v1_19_R1) public static MetaIndex FROG_TONGUE_TARGET = new MetaIndex<>(FrogWatcher.class, 1, OptionalInt.empty()); @@ -480,6 +529,7 @@ public class MetaIndex { /** * Owner of the horse, no visual effect */ + @NmsRemovedIn(NmsVersion.v1_19_R3) public static MetaIndex> HORSE_OWNER = new MetaIndex<>(AbstractHorseWatcher.class, 1, Optional.empty()); @NmsAddedIn(NmsVersion.v1_14) @@ -495,6 +545,10 @@ public class MetaIndex { public static MetaIndex IRON_GOLEM_PLAYER_CREATED = new MetaIndex<>(IronGolemWatcher.class, 0, (byte) 0); + public static MetaIndex ITEM_DISPLAY_ITEMSTACK = new MetaIndex<>(ItemDisplayWatcher.class, 0, new ItemStack(Material.AIR)); + + public static MetaIndex ITEM_DISPLAY_TRANSFORM = new MetaIndex<>(ItemDisplayWatcher.class, 1, (byte) 0); + /** * The itemstack inside the itemframe */ @@ -505,6 +559,12 @@ public class MetaIndex { */ public static MetaIndex ITEMFRAME_ROTATION = new MetaIndex<>(ItemFrameWatcher.class, 1, 0); + public static MetaIndex INTERACTION_WIDTH = new MetaIndex<>(InteractionWatcher.class, 0, 1F); + + public static MetaIndex INTERACTION_HEIGHT = new MetaIndex<>(InteractionWatcher.class, 1, 1F); + + public static MetaIndex INTERACTION_RESPONSIVE = new MetaIndex<>(InteractionWatcher.class, 2, false); + /** * How many arrows sticking out of the living entity, currently used on player */ @@ -683,6 +743,10 @@ public class MetaIndex { public static MetaIndex SNOWMAN_DERP = new MetaIndex<>(SnowmanWatcher.class, 0, (byte) 16); + public static MetaIndex SNIFFER_STATE = new MetaIndex<>(SnifferWatcher.class, 0, (byte) 0); + + public static MetaIndex SNIFFER_DROP_SEED_AT_TICK = new MetaIndex<>(SnifferWatcher.class, 1, 0); + @NmsAddedIn(NmsVersion.v1_16) public static MetaIndex STRIDER_SADDLE_UNKNOWN = new MetaIndex<>(StriderWatcher.class, 0, 0); @@ -700,6 +764,16 @@ public class MetaIndex { public static MetaIndex> TAMEABLE_OWNER = new MetaIndex<>(TameableWatcher.class, 1, Optional.empty()); + public static MetaIndex TEXT_DISPLAY_TEXT = new MetaIndex<>(TextDisplayWatcher.class, 0, WrappedChatComponent.fromText("")); + + public static MetaIndex TEXT_DISPLAY_LINE_WIDTH = new MetaIndex<>(TextDisplayWatcher.class, 1, 200); + + public static MetaIndex TEXT_DISPLAY_BACKGROUND_COLOR = new MetaIndex<>(TextDisplayWatcher.class, 2, 1073741824); + + public static MetaIndex TEXT_DISPLAY_TEXT_OPACITY = new MetaIndex<>(TextDisplayWatcher.class, 3, (byte) -1); + + public static MetaIndex TEXT_DISPLAY_FLAGS = new MetaIndex<>(TextDisplayWatcher.class, 4, (byte) 0); + @NmsAddedIn(NmsVersion.v1_14) public static MetaIndex THROWABLE_ITEM = new MetaIndex<>(ThrowableWatcher.class, 0, new ItemStack(Material.AIR)); @@ -1065,12 +1139,12 @@ public class MetaIndex { MetaIndex index = (MetaIndex) field.get(null); - if (!ReflectionManager.isSupported(field)) { - index._index = -1; + if (index == null) { continue; } - if (index == null) { + if (!ReflectionManager.isSupported(field)) { + index._index = -1; continue; } @@ -1102,9 +1176,9 @@ public class MetaIndex { return false; } - private Y _defaultValue; + private final Y _defaultValue; private int _index; - private Class _watcher; + private final Class _watcher; private WrappedDataWatcher.Serializer serializer; public MetaIndex(Class watcher, int index, Y defaultValue) { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/MobDisguise.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/MobDisguise.java index 7292408a..8f23d795 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/MobDisguise.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/MobDisguise.java @@ -12,7 +12,7 @@ import org.bukkit.entity.Player; import java.security.InvalidParameterException; public class MobDisguise extends TargetedDisguise { - private boolean isAdult; + private final boolean isAdult; public MobDisguise(DisguiseType disguiseType) { this(disguiseType, true); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/PlayerDisguise.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/PlayerDisguise.java index d81cb2c4..fba2acb4 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/PlayerDisguise.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/PlayerDisguise.java @@ -4,7 +4,6 @@ import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction; import com.comphenix.protocol.wrappers.WrappedGameProfile; -import com.google.gson.Gson; import lombok.Getter; import me.libraryaddict.disguise.DisguiseConfig; import me.libraryaddict.disguise.LibsDisguises; @@ -19,8 +18,6 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import java.lang.reflect.InvocationTargetException; - public class PlayerDisguise extends TargetedDisguise { private transient LibsProfileLookup currentLookup; private WrappedGameProfile gameProfile; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/RabbitType.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/RabbitType.java index 6ce9c783..527e78be 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/RabbitType.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/RabbitType.java @@ -19,7 +19,7 @@ public enum RabbitType { return null; } - private int type; + private final int type; RabbitType(int type) { this.type = type; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/TargetedDisguise.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/TargetedDisguise.java index 21c534bf..fc75bc20 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/TargetedDisguise.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/TargetedDisguise.java @@ -1,12 +1,7 @@ package me.libraryaddict.disguise.disguisetypes; -import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.events.PacketContainer; -import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode; -import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction; -import com.comphenix.protocol.wrappers.PlayerInfoData; -import com.comphenix.protocol.wrappers.WrappedChatComponent; import me.libraryaddict.disguise.DisguiseAPI; import me.libraryaddict.disguise.utilities.DisguiseUtilities; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; @@ -14,7 +9,6 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.List; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AbstractHorseWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AbstractHorseWatcher.java index 0f901489..eb1ecc70 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AbstractHorseWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AbstractHorseWatcher.java @@ -19,7 +19,7 @@ public abstract class AbstractHorseWatcher extends AgeableWatcher { return getData(MetaIndex.HORSE_OWNER).orElse(null); } - //@NmsRemovedIn(NmsVersion.v1_19_R3) + @NmsRemovedIn(NmsVersion.v1_19_R3) public void setOwner(UUID uuid) { setData(MetaIndex.HORSE_OWNER, Optional.of(uuid)); sendData(MetaIndex.HORSE_OWNER); 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 323fa64b..6e7cdd43 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,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.annotations.NmsRemovedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn; /** * @author Navid 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 ee27aa1d..79983ca5 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,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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; /** * Created by libraryaddict on 18/05/2019. diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AllayWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AllayWatcher.java index 0a12a4b6..75e4127e 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AllayWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AllayWatcher.java @@ -11,14 +11,18 @@ public class AllayWatcher extends InsentientWatcher { super(disguise); } + public boolean isDancing() { + return getData(MetaIndex.ALLAY_DANCING); + } + @NmsAddedIn(NmsVersion.v1_19_R1) public void setDancing(boolean dancing) { setData(MetaIndex.ALLAY_DANCING, dancing); sendData(MetaIndex.ALLAY_DANCING); } - public boolean isDancing() { - return getData(MetaIndex.ALLAY_DANCING); + public boolean isCanDuplicate() { + return getData(MetaIndex.ALLAY_CAN_DUPLICATE); } @NmsAddedIn(NmsVersion.v1_19_R1) @@ -27,8 +31,4 @@ public class AllayWatcher extends InsentientWatcher { setData(MetaIndex.ALLAY_CAN_DUPLICATE, canDuplicate); sendData(MetaIndex.ALLAY_CAN_DUPLICATE); } - - public boolean isCanDuplicate() { - return getData(MetaIndex.ALLAY_CAN_DUPLICATE); - } } 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 42300888..7ed08d72 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,8 +6,8 @@ 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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import org.apache.commons.lang.math.RandomUtils; import org.bukkit.Color; import org.bukkit.Particle; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ArmorStandWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ArmorStandWatcher.java index ae3a5568..371d386e 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ArmorStandWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ArmorStandWatcher.java @@ -18,18 +18,34 @@ public class ArmorStandWatcher extends LivingWatcher { return getPose(MetaIndex.ARMORSTAND_BODY); } + public void setBody(EulerAngle vector) { + setPose(MetaIndex.ARMORSTAND_BODY, vector); + } + public EulerAngle getHead() { return getPose(MetaIndex.ARMORSTAND_HEAD); } + public void setHead(EulerAngle vector) { + setPose(MetaIndex.ARMORSTAND_HEAD, vector); + } + public EulerAngle getLeftArm() { return getPose(MetaIndex.ARMORSTAND_LEFT_ARM); } + public void setLeftArm(EulerAngle vector) { + setPose(MetaIndex.ARMORSTAND_LEFT_ARM, vector); + } + public EulerAngle getLeftLeg() { return getPose(MetaIndex.ARMORSTAND_LEFT_LEG); } + public void setLeftLeg(EulerAngle vector) { + setPose(MetaIndex.ARMORSTAND_LEFT_LEG, vector); + } + private EulerAngle getPose(MetaIndex type) { if (!hasValue(type)) { return new EulerAngle(0, 0, 0); @@ -44,30 +60,58 @@ public class ArmorStandWatcher extends LivingWatcher { return getPose(MetaIndex.ARMORSTAND_RIGHT_ARM); } + public void setRightArm(EulerAngle vector) { + setPose(MetaIndex.ARMORSTAND_RIGHT_ARM, vector); + } + public EulerAngle getRightLeg() { return getPose(MetaIndex.ARMORSTAND_RIGHT_LEG); } + public void setRightLeg(EulerAngle vector) { + setPose(MetaIndex.ARMORSTAND_RIGHT_LEG, vector); + } + public boolean isMarker() { return getArmorStandFlag(16); } + public void setMarker(boolean isMarker) { + setArmorStandFlag(16, isMarker); + } + public boolean isNoBasePlate() { return getArmorStandFlag(8); } + public void setNoBasePlate(boolean noBasePlate) { + setArmorStandFlag(8, noBasePlate); + } + public boolean isNoGravity() { return getArmorStandFlag(2); } + public void setNoGravity(boolean noGravity) { + setArmorStandFlag(2, noGravity); + } + public boolean isShowArms() { return getArmorStandFlag(4); } + public void setShowArms(boolean showArms) { + setArmorStandFlag(4, showArms); + } + public boolean isSmall() { return getArmorStandFlag(1); } + public void setSmall(boolean isSmall) { + setArmorStandFlag(1, isSmall); + } + private void setArmorStandFlag(int value, boolean isTrue) { byte b1 = getData(MetaIndex.ARMORSTAND_META); @@ -81,52 +125,8 @@ public class ArmorStandWatcher extends LivingWatcher { sendData(MetaIndex.ARMORSTAND_META); } - public void setBody(EulerAngle vector) { - setPose(MetaIndex.ARMORSTAND_BODY, vector); - } - - public void setHead(EulerAngle vector) { - setPose(MetaIndex.ARMORSTAND_HEAD, vector); - } - - public void setLeftArm(EulerAngle vector) { - setPose(MetaIndex.ARMORSTAND_LEFT_ARM, vector); - } - - public void setLeftLeg(EulerAngle vector) { - setPose(MetaIndex.ARMORSTAND_LEFT_LEG, vector); - } - - public void setMarker(boolean isMarker) { - setArmorStandFlag(16, isMarker); - } - - public void setNoBasePlate(boolean noBasePlate) { - setArmorStandFlag(8, noBasePlate); - } - - public void setNoGravity(boolean noGravity) { - setArmorStandFlag(2, noGravity); - } - private void setPose(MetaIndex type, EulerAngle vector) { setData(type, new Vector3F((float) vector.getX(), (float) vector.getY(), (float) vector.getZ())); sendData(type); } - - public void setRightArm(EulerAngle vector) { - setPose(MetaIndex.ARMORSTAND_RIGHT_ARM, vector); - } - - public void setRightLeg(EulerAngle vector) { - setPose(MetaIndex.ARMORSTAND_RIGHT_LEG, vector); - } - - public void setShowArms(boolean showArms) { - setArmorStandFlag(4, showArms); - } - - public void setSmall(boolean isSmall) { - setArmorStandFlag(1, isSmall); - } } 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 a5b3931e..cf2ccb30 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,8 +3,8 @@ 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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; public class ArrowWatcher extends FlagWatcher { public ArrowWatcher(Disguise disguise) { 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 55cd990c..46a63bda 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,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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; /** * Created by libraryaddict on 14/12/2019. @@ -14,15 +14,15 @@ public class BeeWatcher extends AgeableWatcher { super(disguise); } + public int getBeeAnger() { + return getData(MetaIndex.BEE_ANGER); + } + public void setBeeAnger(int beeAnger) { setData(MetaIndex.BEE_ANGER, beeAnger); sendData(MetaIndex.BEE_ANGER); } - public int getBeeAnger() { - return getData(MetaIndex.BEE_ANGER); - } - public void setHasNectar(boolean hasNectar) { setBeeFlag(8, hasNectar); } @@ -39,14 +39,14 @@ public class BeeWatcher extends AgeableWatcher { return getBeeFlag(4); } - public void setFlipped(boolean isFlipped) { - setBeeFlag(2, isFlipped); - } - public boolean isFlipped() { return getBeeFlag(2); } + public void setFlipped(boolean isFlipped) { + setBeeFlag(2, isFlipped); + } + private boolean getBeeFlag(int value) { return (getData(MetaIndex.BEE_META) & value) != 0; } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/BlockDisplayWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/BlockDisplayWatcher.java new file mode 100644 index 00000000..bafd0df9 --- /dev/null +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/BlockDisplayWatcher.java @@ -0,0 +1,20 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import org.bukkit.block.data.BlockData; + +public class BlockDisplayWatcher extends DisplayWatcher { + public BlockDisplayWatcher(Disguise disguise) { + super(disguise); + } + + public BlockData getBlock() { + return getData(MetaIndex.BLOCK_DISPLAY_BLOCK_STATE); + } + + public void setBlock(BlockData block) { + setData(MetaIndex.BLOCK_DISPLAY_BLOCK_STATE, block); + sendData(MetaIndex.BLOCK_DISPLAY_BLOCK_STATE); + } +} 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 ac5cb71e..7767663b 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,8 +3,8 @@ 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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import org.bukkit.TreeSpecies; public class BoatWatcher extends FlagWatcher { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/CamelWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/CamelWatcher.java index 566823a4..01cbf754 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/CamelWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/CamelWatcher.java @@ -8,12 +8,12 @@ public class CamelWatcher extends AbstractHorseWatcher { super(disguise); } + public boolean isDashing() { + return getData(MetaIndex.CAMEL_DASHING); + } + public void setDashing(boolean dashing) { setData(MetaIndex.CAMEL_DASHING, dashing); sendData(MetaIndex.CAMEL_DASHING); } - - public boolean isDashing() { - return getData(MetaIndex.CAMEL_DASHING); - } } 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 e6c47d8f..ada0c5bd 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,8 +5,8 @@ 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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import org.bukkit.DyeColor; import org.bukkit.entity.Cat; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ChestedHorseWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ChestedHorseWatcher.java index 1b52923f..56538f6f 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ChestedHorseWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ChestedHorseWatcher.java @@ -9,12 +9,12 @@ public class ChestedHorseWatcher extends AbstractHorseWatcher { super(disguise); } + public boolean isCarryingChest() { + return getData(MetaIndex.HORSE_CHESTED_CARRYING_CHEST); + } + public void setCarryingChest(boolean carryingChest) { setData(MetaIndex.HORSE_CHESTED_CARRYING_CHEST, carryingChest); sendData(MetaIndex.HORSE_CHESTED_CARRYING_CHEST); } - - public boolean isCarryingChest() { - return getData(MetaIndex.HORSE_CHESTED_CARRYING_CHEST); - } } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/DisplayWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/DisplayWatcher.java new file mode 100644 index 00000000..72f0f118 --- /dev/null +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/DisplayWatcher.java @@ -0,0 +1,170 @@ +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 org.bukkit.Color; +import org.bukkit.entity.Display; +import org.bukkit.util.Transformation; +import org.joml.Quaternionf; +import org.joml.Vector3f; + +public abstract class DisplayWatcher extends FlagWatcher { + public DisplayWatcher(Disguise disguise) { + super(disguise); + } + + public Transformation getTransformation() { + Vector3f transformation = getData(MetaIndex.DISPLAY_TRANSLATION); + Quaternionf leftRotation = getData(MetaIndex.DISPLAY_LEFT_ROTATION); + Quaternionf rightRotation = getData(MetaIndex.DISPLAY_RIGHT_ROTATION); + Vector3f scale = getData(MetaIndex.DISPLAY_SCALE); + + return new Transformation(transformation, leftRotation, scale, rightRotation); + } + + public void setTransformation(Transformation transformation) { + setData(MetaIndex.DISPLAY_TRANSLATION, transformation.getTranslation()); + setData(MetaIndex.DISPLAY_LEFT_ROTATION, transformation.getLeftRotation()); + setData(MetaIndex.DISPLAY_RIGHT_ROTATION, transformation.getRightRotation()); + setData(MetaIndex.DISPLAY_SCALE, transformation.getScale()); + + sendData(MetaIndex.DISPLAY_TRANSLATION, MetaIndex.DISPLAY_LEFT_ROTATION, MetaIndex.DISPLAY_RIGHT_ROTATION, MetaIndex.DISPLAY_SCALE); + } + + public Vector3f getTranslation() { + return getData(MetaIndex.DISPLAY_TRANSLATION); + } + + public void setTranslation(Vector3f translation) { + setData(MetaIndex.DISPLAY_TRANSLATION, translation); + sendData(MetaIndex.DISPLAY_TRANSLATION); + } + + public Vector3f getScale() { + return getData(MetaIndex.DISPLAY_SCALE); + } + + public void setScale(Vector3f scale) { + setData(MetaIndex.DISPLAY_SCALE, scale); + sendData(MetaIndex.DISPLAY_SCALE); + } + + public Quaternionf getLeftRotation() { + return getData(MetaIndex.DISPLAY_LEFT_ROTATION); + } + + public void setLeftRotation(Quaternionf rotation) { + setData(MetaIndex.DISPLAY_LEFT_ROTATION, rotation); + sendData(MetaIndex.DISPLAY_LEFT_ROTATION); + } + + public Quaternionf getRightRotation() { + return getData(MetaIndex.DISPLAY_LEFT_ROTATION); + } + + public void setRightRotation(Quaternionf rotation) { + setData(MetaIndex.DISPLAY_RIGHT_ROTATION, rotation); + sendData(MetaIndex.DISPLAY_RIGHT_ROTATION); + } + + public int getInterpolationDuration() { + return getData(MetaIndex.DISPLAY_INTERPOLATION_DURATION); + } + + public void setInterpolationDuration(int duration) { + setData(MetaIndex.DISPLAY_INTERPOLATION_DURATION, duration); + sendData(MetaIndex.DISPLAY_INTERPOLATION_DURATION); + } + + public float getViewRange() { + return getData(MetaIndex.DISPLAY_VIEW_RANGE); + } + + public void setViewRange(float range) { + setData(MetaIndex.DISPLAY_VIEW_RANGE, range); + sendData(MetaIndex.DISPLAY_VIEW_RANGE); + } + + public float getShadowRadius() { + return getData(MetaIndex.DISPLAY_SHADOW_RADIUS); + } + + public void setShadowRadius(float radius) { + setData(MetaIndex.DISPLAY_SHADOW_RADIUS, radius); + sendData(MetaIndex.DISPLAY_SHADOW_RADIUS); + } + + public float getShadowStrength() { + return getData(MetaIndex.DISPLAY_SHADOW_STRENGTH); + } + + public void setShadowStrength(float strength) { + setData(MetaIndex.DISPLAY_SHADOW_STRENGTH, strength); + sendData(MetaIndex.DISPLAY_SHADOW_STRENGTH); + } + + public float getDisplayWidth() { + return getData(MetaIndex.DISPLAY_WIDTH); + } + + public void setDisplayWidth(float width) { + setData(MetaIndex.DISPLAY_WIDTH, width); + sendData(MetaIndex.DISPLAY_WIDTH); + } + + public float getDisplayHeight() { + return getData(MetaIndex.DISPLAY_HEIGHT); + } + + public void setDisplayHeight(float height) { + setData(MetaIndex.DISPLAY_HEIGHT, height); + sendData(MetaIndex.DISPLAY_HEIGHT); + } + + public int getInterpolationDelay() { + return getData(MetaIndex.DISPLAY_INTERPOLATION_START_DELTA_TICKS); + } + + public void setInterpolationDelay(int ticks) { + setData(MetaIndex.DISPLAY_INTERPOLATION_START_DELTA_TICKS, ticks); + sendData(MetaIndex.DISPLAY_INTERPOLATION_START_DELTA_TICKS); + } + + public Display.Billboard getBillboard() { + return Display.Billboard.values()[getData(MetaIndex.DISPLAY_BILLBOARD_RENDER_CONSTRAINTS)]; + } + + public void setBillboard(Display.Billboard billboard) { + setData(MetaIndex.DISPLAY_BILLBOARD_RENDER_CONSTRAINTS, (byte) billboard.ordinal()); + sendData(MetaIndex.DISPLAY_BILLBOARD_RENDER_CONSTRAINTS); + } + + public Color getGlowColorOverride() { + int color = getData(MetaIndex.DISPLAY_GLOW_COLOR_OVERRIDE); + return color == -1 ? null : Color.fromARGB(color); + } + + public void setGlowColorOverride(Color color) { + setData(MetaIndex.DISPLAY_GLOW_COLOR_OVERRIDE, color == null ? -1 : color.asARGB()); + sendData(MetaIndex.DISPLAY_GLOW_COLOR_OVERRIDE); + } + + public Display.Brightness getBrightness() { + int data = getData(MetaIndex.DISPLAY_BRIGHTNESS_OVERRIDE); + + if (data == -1) { + return null; + } + + int blockLight = data >> 4 & '\uffff'; + int skyLight = data >> 20 & '\uffff'; + + return new Display.Brightness(blockLight, skyLight); + } + + public void setBrightness(Display.Brightness brightness) { + setData(MetaIndex.DISPLAY_BRIGHTNESS_OVERRIDE, brightness == null ? -1 : brightness.getBlockLight() << 4 | brightness.getSkyLight() << 20); + sendData(MetaIndex.DISPLAY_BRIGHTNESS_OVERRIDE); + } +} diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EnderCrystalWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EnderCrystalWatcher.java index f6eada77..42ed2e11 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EnderCrystalWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EnderCrystalWatcher.java @@ -15,21 +15,21 @@ public class EnderCrystalWatcher extends FlagWatcher { super(disguise); } + public BlockPosition getBeamTarget() { + return getData(MetaIndex.ENDER_CRYSTAL_BEAM).orElse(null); + } + public void setBeamTarget(BlockPosition position) { setData(MetaIndex.ENDER_CRYSTAL_BEAM, position == null ? Optional.empty() : Optional.of(position)); sendData(MetaIndex.ENDER_CRYSTAL_BEAM); } - public BlockPosition getBeamTarget() { - return getData(MetaIndex.ENDER_CRYSTAL_BEAM).orElse(null); + public boolean isShowBottom() { + return getData(MetaIndex.ENDER_CRYSTAL_PLATE); } public void setShowBottom(boolean bool) { setData(MetaIndex.ENDER_CRYSTAL_PLATE, bool); sendData(MetaIndex.ENDER_CRYSTAL_PLATE); } - - public boolean isShowBottom() { - return getData(MetaIndex.ENDER_CRYSTAL_PLATE); - } } 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 1490d6c2..4618b696 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,8 +3,8 @@ 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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; 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 484db4e3..226db03c 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,9 +8,9 @@ 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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.translations.TranslateType; import org.bukkit.Location; import org.bukkit.Material; @@ -18,8 +18,6 @@ import org.bukkit.block.data.BlockData; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import java.lang.reflect.InvocationTargetException; - public class FallingBlockWatcher extends FlagWatcher { private int blockCombinedId = 1; private boolean gridLocked; 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 8943a63c..7e11371c 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,8 +3,8 @@ 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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; 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 4b9f2b9f..6197301c 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,8 +3,8 @@ 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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; 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 10af6631..ffff927e 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,8 +4,8 @@ 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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import org.bukkit.entity.Fox; import java.util.Random; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FrogWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FrogWatcher.java index bccf2743..09d09434 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FrogWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FrogWatcher.java @@ -4,7 +4,6 @@ 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 org.bukkit.entity.Cat; import org.bukkit.entity.Frog; import java.util.Random; @@ -18,13 +17,13 @@ public class FrogWatcher extends AgeableWatcher { } } + public Frog.Variant getVariant() { + return getData(MetaIndex.FROG_VARIANT); + } + @RandomDefaultValue public void setVariant(Frog.Variant variant) { setData(MetaIndex.FROG_VARIANT, variant); sendData(MetaIndex.FROG_VARIANT); } - - public Frog.Variant getVariant() { - return getData(MetaIndex.FROG_VARIANT); - } } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/GuardianWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/GuardianWatcher.java index 0da6d457..2596f879 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/GuardianWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/GuardianWatcher.java @@ -20,6 +20,13 @@ public class GuardianWatcher extends InsentientWatcher { return getData(MetaIndex.GUARDIAN_TARGET) != 0; } + /** + * @return Entity id of target + */ + public int getTarget() { + return getData(MetaIndex.GUARDIAN_TARGET); + } + /** * Shoot a beam at the given entityId. * @@ -30,13 +37,6 @@ public class GuardianWatcher extends InsentientWatcher { sendData(MetaIndex.GUARDIAN_TARGET); } - /** - * @return Entity id of target - */ - public int getTarget() { - return getData(MetaIndex.GUARDIAN_TARGET); - } - public void setTarget(Entity entity) { setTarget(entity == null ? 0 : entity.getEntityId()); } 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 6c1153de..da3ed041 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,9 +2,9 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import me.libraryaddict.disguise.utilities.reflection.NmsVersion; 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; public class IllagerWizardWatcher extends IllagerWatcher { 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 d435ad79..f9df337e 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,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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import org.bukkit.inventory.MainHand; public class InsentientWatcher extends LivingWatcher { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/InteractionWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/InteractionWatcher.java new file mode 100644 index 00000000..59b54894 --- /dev/null +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/InteractionWatcher.java @@ -0,0 +1,38 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagWatcher; +import me.libraryaddict.disguise.disguisetypes.MetaIndex; + +public class InteractionWatcher extends FlagWatcher { + public InteractionWatcher(Disguise disguise) { + super(disguise); + } + + public float getInteractionWidth() { + return getData(MetaIndex.INTERACTION_WIDTH); + } + + public void setInteractionWidth(float width) { + setData(MetaIndex.INTERACTION_WIDTH, width); + sendData(MetaIndex.INTERACTION_WIDTH); + } + + public float getInteractionHeight() { + return getData(MetaIndex.INTERACTION_HEIGHT); + } + + public void setInteractionHeight(float height) { + setData(MetaIndex.INTERACTION_HEIGHT, height); + sendData(MetaIndex.INTERACTION_HEIGHT); + } + + public boolean isResponsive() { + return getData(MetaIndex.INTERACTION_RESPONSIVE); + } + + public void setResponsive(boolean responsive) { + setData(MetaIndex.INTERACTION_RESPONSIVE, responsive); + sendData(MetaIndex.INTERACTION_RESPONSIVE); + } +} 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 725b9c89..749d42ae 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,8 +2,8 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.GolemCrack; -import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; public class IronGolemWatcher extends InsentientWatcher { private GolemCrack cracks; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ItemDisplayWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ItemDisplayWatcher.java new file mode 100644 index 00000000..f6b91700 --- /dev/null +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ItemDisplayWatcher.java @@ -0,0 +1,35 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import org.bukkit.Material; +import org.bukkit.entity.ItemDisplay; +import org.bukkit.inventory.ItemStack; + +public class ItemDisplayWatcher extends DisplayWatcher { + public ItemDisplayWatcher(Disguise disguise) { + super(disguise); + } + + public ItemStack getItemStack() { + return getData(MetaIndex.ITEM_DISPLAY_ITEMSTACK); + } + + public void setItemStack(ItemStack item) { + if (item == null) { + item = new ItemStack(Material.AIR); + } + + setData(MetaIndex.ITEM_DISPLAY_ITEMSTACK, item); + sendData(MetaIndex.ITEM_DISPLAY_ITEMSTACK); + } + + public ItemDisplay.ItemDisplayTransform getItemDisplayTransform() { + return ItemDisplay.ItemDisplayTransform.values()[getData(MetaIndex.ITEM_DISPLAY_TRANSFORM)]; + } + + public void setItemDisplayTransform(ItemDisplay.ItemDisplayTransform display) { + setData(MetaIndex.ITEM_DISPLAY_TRANSFORM, (byte) display.ordinal()); + sendData(MetaIndex.ITEM_DISPLAY_TRANSFORM); + } +} diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ItemFrameWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ItemFrameWatcher.java index c7ce80d5..c479ab45 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ItemFrameWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ItemFrameWatcher.java @@ -19,10 +19,6 @@ public class ItemFrameWatcher extends FlagWatcher { return getData(MetaIndex.ITEMFRAME_ITEM); } - public int getRotation() { - return getData(MetaIndex.ITEMFRAME_ROTATION); - } - public void setItem(ItemStack newItem) { if (newItem == null) { newItem = new ItemStack(Material.AIR); @@ -35,6 +31,10 @@ public class ItemFrameWatcher extends FlagWatcher { sendData(MetaIndex.ITEMFRAME_ITEM); } + public int getRotation() { + return getData(MetaIndex.ITEMFRAME_ROTATION); + } + public void setRotation(int rotation) { setData(MetaIndex.ITEMFRAME_ROTATION, rotation % 4); sendData(MetaIndex.ITEMFRAME_ROTATION); 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 7b7012be..f624509e 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 @@ -22,7 +22,6 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffectType; -import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LlamaWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LlamaWatcher.java index 7068a349..b65e7c99 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LlamaWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LlamaWatcher.java @@ -12,15 +12,15 @@ public class LlamaWatcher extends ChestedHorseWatcher { super(disguise); } + public Llama.Color getColor() { + return Llama.Color.values()[getData(MetaIndex.LLAMA_COLOR)]; + } + public void setColor(Llama.Color color) { setData(MetaIndex.LLAMA_COLOR, color.ordinal()); sendData(MetaIndex.LLAMA_COLOR); } - public Llama.Color getColor() { - return Llama.Color.values()[getData(MetaIndex.LLAMA_COLOR)]; - } - public DyeColor getCarpet() { if (!hasValue(MetaIndex.LLAMA_CARPET) || getData(MetaIndex.LLAMA_CARPET) == -1) { return null; @@ -39,12 +39,12 @@ public class LlamaWatcher extends ChestedHorseWatcher { setCarpet(color.getDyeColor()); } + public int getStrength() { + return getData(MetaIndex.LLAMA_STRENGTH); + } + public void setStrength(int strength) { setData(MetaIndex.LLAMA_STRENGTH, strength); sendData(MetaIndex.LLAMA_STRENGTH); } - - public int getStrength() { - return getData(MetaIndex.LLAMA_STRENGTH); - } } 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 0f673b22..3bab32f3 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,9 +3,9 @@ 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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import org.bukkit.Material; import org.bukkit.block.data.BlockData; import org.bukkit.inventory.ItemStack; 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 db145ac7..b094fbb5 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,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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import org.bukkit.entity.MushroomCow; import java.util.Locale; 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 5d3e4ae9..2889aa70 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,9 +2,9 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import me.libraryaddict.disguise.utilities.reflection.NmsVersion; 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; import java.util.Optional; 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 8d5ed411..254ab991 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,9 +4,9 @@ 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.NmsVersion; import me.libraryaddict.disguise.utilities.reflection.annotations.MethodOnlyUsedBy; import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; -import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.entity.Panda; import java.util.Random; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PhantomWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PhantomWatcher.java index 9b106ff6..a6fab524 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PhantomWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PhantomWatcher.java @@ -11,12 +11,12 @@ public class PhantomWatcher extends InsentientWatcher { super(disguise); } + public int getSize() { + return getData(MetaIndex.PHANTOM_SIZE); + } + public void setSize(int size) { setData(MetaIndex.PHANTOM_SIZE, Math.min(Math.max(size, -50), 50)); sendData(MetaIndex.PHANTOM_SIZE); } - - public int getSize() { - return getData(MetaIndex.PHANTOM_SIZE); - } } 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 e485fcab..384a7b19 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,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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; /** * Created by libraryaddict on 6/05/2019. diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PolarBearWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PolarBearWatcher.java index 8351cd0a..88a68c58 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PolarBearWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PolarBearWatcher.java @@ -8,12 +8,12 @@ public class PolarBearWatcher extends AgeableWatcher { super(disguise); } + public boolean isStanding() { + return getData(MetaIndex.POLAR_BEAR_STANDING); + } + public void setStanding(boolean standing) { setData(MetaIndex.POLAR_BEAR_STANDING, standing); sendData(MetaIndex.POLAR_BEAR_STANDING); } - - public boolean isStanding() { - return getData(MetaIndex.POLAR_BEAR_STANDING); - } } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PufferFishWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PufferFishWatcher.java index 3c925630..e3d2425e 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PufferFishWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PufferFishWatcher.java @@ -11,12 +11,12 @@ public class PufferFishWatcher extends FishWatcher { super(disguise); } + public int getPuffState() { + return getData(MetaIndex.PUFFERFISH_PUFF_STATE); + } + public void setPuffState(int puffState) { setData(MetaIndex.PUFFERFISH_PUFF_STATE, Math.min(Math.max(puffState, 0), 2)); sendData(MetaIndex.PUFFERFISH_PUFF_STATE); } - - public int getPuffState() { - return getData(MetaIndex.PUFFERFISH_PUFF_STATE); - } } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RaiderWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RaiderWatcher.java index 7dc1ff68..c58c5dd0 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RaiderWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RaiderWatcher.java @@ -11,12 +11,12 @@ public class RaiderWatcher extends InsentientWatcher { super(disguise); } + public boolean isCastingSpell() { + return getData(MetaIndex.RAIDER_CASTING_SPELL); + } + public void setCastingSpell(boolean value) { setData(MetaIndex.RAIDER_CASTING_SPELL, value); sendData(MetaIndex.RAIDER_CASTING_SPELL); } - - public boolean isCastingSpell() { - return getData(MetaIndex.RAIDER_CASTING_SPELL); - } } 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 87d4220d..e267b2be 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,8 +1,8 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; -import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; /** * Created by libraryaddict on 6/05/2019. diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ShulkerWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ShulkerWatcher.java index 16558acb..15dd83d0 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ShulkerWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ShulkerWatcher.java @@ -54,6 +54,14 @@ public class ShulkerWatcher extends InsentientWatcher { sendData(MetaIndex.SHULKER_PEEKING); } + public DyeColor getColor() { + if (!hasValue(MetaIndex.SHULKER_COLOR)) { + return DyeColor.PURPLE; + } + + return AnimalColor.getColorByWool(getData(MetaIndex.SHULKER_COLOR)).getDyeColor(); + } + @Deprecated public void setColor(AnimalColor color) { setColor(color.getDyeColor()); @@ -67,12 +75,4 @@ public class ShulkerWatcher extends InsentientWatcher { setData(MetaIndex.SHULKER_COLOR, newColor.getWoolData()); sendData(MetaIndex.SHULKER_COLOR); } - - public DyeColor getColor() { - if (!hasValue(MetaIndex.SHULKER_COLOR)) { - return DyeColor.PURPLE; - } - - return AnimalColor.getColorByWool(getData(MetaIndex.SHULKER_COLOR)).getDyeColor(); - } } 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 75832561..96f65baf 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,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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; /** * Created by libraryaddict on 15/06/2021. diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SlimeWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SlimeWatcher.java index 877fc374..36a2edbf 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SlimeWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SlimeWatcher.java @@ -33,6 +33,10 @@ public class SlimeWatcher extends InsentientWatcher { setUnsafeSize(size); } + public int getUnsafeSize() { + return getSize(); + } + @RandomDefaultValue public void setUnsafeSize(int size) { if (hasValue(MetaIndex.SLIME_SIZE) && getData(MetaIndex.SLIME_SIZE) == size) { @@ -44,8 +48,4 @@ public class SlimeWatcher extends InsentientWatcher { updateNameHeight(); } - - public int getUnsafeSize() { - return getSize(); - } } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SnifferWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SnifferWatcher.java new file mode 100644 index 00000000..ac45950c --- /dev/null +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SnifferWatcher.java @@ -0,0 +1,20 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import org.bukkit.entity.Sniffer; + +public class SnifferWatcher extends InsentientWatcher { + public SnifferWatcher(Disguise disguise) { + super(disguise); + } + + public Sniffer.State getSnifferState() { + return Sniffer.State.values()[getData(MetaIndex.SNIFFER_STATE)]; + } + + public void setSnifferState(Sniffer.State state) { + setData(MetaIndex.SNIFFER_STATE, (byte) state.ordinal()); + sendData(MetaIndex.SNIFFER_STATE); + } +} diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SnowmanWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SnowmanWatcher.java index d60cca37..7f15f672 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SnowmanWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SnowmanWatcher.java @@ -8,12 +8,12 @@ public class SnowmanWatcher extends InsentientWatcher { super(disguise); } + public boolean isDerp() { + return getData(MetaIndex.SNOWMAN_DERP) == 0; + } + public void setDerp(boolean derp) { setData(MetaIndex.SNOWMAN_DERP, (byte) (derp ? 0 : 16)); sendData(MetaIndex.SNOWMAN_DERP); } - - public boolean isDerp() { - return getData(MetaIndex.SNOWMAN_DERP) == 0; - } } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SpiderWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SpiderWatcher.java index 2d891ca9..5359ad7a 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SpiderWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SpiderWatcher.java @@ -8,12 +8,12 @@ public class SpiderWatcher extends InsentientWatcher { super(disguise); } + public boolean isClimbing() { + return getData(MetaIndex.SPIDER_CLIMB) == (byte) 1; + } + public void setClimbing(boolean climbing) { setData(MetaIndex.SPIDER_CLIMB, (byte) (climbing ? 1 : 0)); sendData(MetaIndex.SPIDER_CLIMB); } - - public boolean isClimbing() { - return getData(MetaIndex.SPIDER_CLIMB) == (byte) 1; - } } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SplashPotionWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SplashPotionWatcher.java index 98759586..5806ae82 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SplashPotionWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SplashPotionWatcher.java @@ -25,15 +25,6 @@ public class SplashPotionWatcher extends FlagWatcher { return potionId; } - public void setSplashPotion(ItemStack item) { - setData(MetaIndex.SPLASH_POTION_ITEM, item); - sendData(MetaIndex.SPLASH_POTION_ITEM); - } - - public ItemStack getSplashPotion() { - return getData(MetaIndex.SPLASH_POTION_ITEM); - } - public void setPotionId(int newPotionId) { this.potionId = newPotionId; @@ -41,4 +32,13 @@ public class SplashPotionWatcher extends FlagWatcher { DisguiseUtilities.refreshTrackers(getDisguise()); } } + + public ItemStack getSplashPotion() { + return getData(MetaIndex.SPLASH_POTION_ITEM); + } + + public void setSplashPotion(ItemStack item) { + setData(MetaIndex.SPLASH_POTION_ITEM, item); + sendData(MetaIndex.SPLASH_POTION_ITEM); + } } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TextDisplayWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TextDisplayWatcher.java new file mode 100644 index 00000000..830b7175 --- /dev/null +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TextDisplayWatcher.java @@ -0,0 +1,134 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import com.comphenix.protocol.wrappers.ComponentConverter; +import com.comphenix.protocol.wrappers.WrappedChatComponent; +import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import me.libraryaddict.disguise.utilities.DisguiseUtilities; +import net.md_5.bungee.api.chat.BaseComponent; +import org.bukkit.Color; +import org.bukkit.entity.TextDisplay; + +public class TextDisplayWatcher extends DisplayWatcher { + public TextDisplayWatcher(Disguise disguise) { + super(disguise); + } + + public String getText() { + BaseComponent[] base = ComponentConverter.fromWrapper(getData(MetaIndex.TEXT_DISPLAY_TEXT)); + + return DisguiseUtilities.getSimpleString(base); + } + + public void setText(String string) { + setData(MetaIndex.TEXT_DISPLAY_TEXT, WrappedChatComponent.fromJson(DisguiseUtilities.serialize(DisguiseUtilities.getAdventureChat(string)))); + sendData(MetaIndex.TEXT_DISPLAY_TEXT); + } + + public int getLineWidth() { + return getData(MetaIndex.TEXT_DISPLAY_LINE_WIDTH); + } + + public void setLineWidth(int width) { + setData(MetaIndex.TEXT_DISPLAY_LINE_WIDTH, width); + sendData(MetaIndex.TEXT_DISPLAY_LINE_WIDTH); + } + + public Color getBackgroundColor() { + int color = getData(MetaIndex.TEXT_DISPLAY_BACKGROUND_COLOR); + + if (color == -1) { + return null; + } + + return Color.fromARGB(color); + } + + public void setBackgroundColor(Color color) { + setData(MetaIndex.TEXT_DISPLAY_BACKGROUND_COLOR, color == null ? -1 : color.asARGB()); + sendData(MetaIndex.TEXT_DISPLAY_BACKGROUND_COLOR); + } + + public byte getTextOpacity() { + return getData(MetaIndex.TEXT_DISPLAY_TEXT_OPACITY); + } + + public void setTextOpacity(byte opacity) { + if (opacity < -1 || opacity > 255) { + return; + } + + setData(MetaIndex.TEXT_DISPLAY_TEXT_OPACITY, opacity); + sendData(MetaIndex.TEXT_DISPLAY_TEXT_OPACITY); + } + + public boolean isShadowed() { + return this.getFlag(1); + } + + public void setShadowed(boolean shadow) { + this.setFlag(1, shadow); + } + + public boolean isSeeThrough() { + return this.getFlag(2); + } + + public void setSeeThrough(boolean seeThrough) { + this.setFlag(2, seeThrough); + } + + public boolean isDefaultBackground() { + return this.getFlag(4); + } + + public void setDefaultBackground(boolean defaultBackground) { + this.setFlag(4, defaultBackground); + } + + public TextDisplay.TextAligment getAlignment() { + int flags = getData(MetaIndex.TEXT_DISPLAY_FLAGS); + + if ((flags & 8) != 0) { + return TextDisplay.TextAligment.LEFT; + } else { + return (flags & 16) != 0 ? TextDisplay.TextAligment.RIGHT : TextDisplay.TextAligment.CENTER; + } + } + + public void setAlignment(TextDisplay.TextAligment alignment) { + switch (alignment.ordinal()) { + case 0: + this.setFlag(8, false); + this.setFlag(16, false); + break; + case 1: + this.setFlag(8, true); + this.setFlag(16, false); + break; + case 2: + this.setFlag(8, false); + this.setFlag(16, true); + break; + default: + throw new IllegalArgumentException("Unknown alignment " + alignment); + } + } + + private boolean getFlag(int flag) { + return (getData(MetaIndex.TEXT_DISPLAY_FLAGS) & flag) != 0; + } + + private void setFlag(int flag, boolean set) { + byte flagBits = getData(MetaIndex.TEXT_DISPLAY_FLAGS); + if (set) { + flagBits = (byte) (flagBits | flag); + } else { + flagBits = (byte) (flagBits & ~flag); + } + + setData(MetaIndex.TEXT_DISPLAY_FLAGS, flagBits); + sendData(MetaIndex.TEXT_DISPLAY_FLAGS); + } + +} 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 6a448aff..4256cc50 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,8 +4,8 @@ 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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; 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 492ecac4..094afaf7 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,8 +1,8 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; -import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; /** * Created by libraryaddict on 6/05/2019. 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 6fa7ffdc..318101c9 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,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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; /** * Created by libraryaddict on 6/08/2018. diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TurtleWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TurtleWatcher.java index 65b10f37..27f9b26f 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TurtleWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TurtleWatcher.java @@ -11,12 +11,12 @@ public class TurtleWatcher extends AgeableWatcher { super(disguise); } + public boolean isEgg() { + return getData(MetaIndex.TURTLE_HAS_EGG); + } + public void setEgg(boolean egg) { setData(MetaIndex.TURTLE_HAS_EGG, egg); sendData(MetaIndex.TURTLE_HAS_EGG); } - - public boolean isEgg() { - return getData(MetaIndex.TURTLE_HAS_EGG); - } } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VexWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VexWatcher.java index 831bfeba..2d741462 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VexWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VexWatcher.java @@ -9,12 +9,12 @@ public class VexWatcher extends InsentientWatcher { super(disguise); } + public boolean isAngry() { + return getData(MetaIndex.VEX_ANGRY) == 1; + } + public void setAngry(boolean angry) { setData(MetaIndex.VEX_ANGRY, (byte) (angry ? 1 : 0)); sendData(MetaIndex.VEX_ANGRY); } - - public boolean isAngry() { - return getData(MetaIndex.VEX_ANGRY) == 1; - } } 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 06443231..c74d35a6 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,8 +6,8 @@ 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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; 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 4c4ce1b8..419e335b 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,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.annotations.NmsRemovedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn; public class VindicatorWatcher extends IllagerWatcher { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WardenWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WardenWatcher.java index ae580769..e9be7ae1 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WardenWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WardenWatcher.java @@ -8,12 +8,12 @@ public class WardenWatcher extends InsentientWatcher { super(disguise); } + public int getAnger() { + return getData(MetaIndex.WARDEN_ANGER); + } + public void setAnger(int anger) { setData(MetaIndex.WARDEN_ANGER, anger); sendData(MetaIndex.WARDEN_ANGER); } - - public int getAnger() { - return getData(MetaIndex.WARDEN_ANGER); - } } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WitherWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WitherWatcher.java index 305733d9..485deea1 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WitherWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WitherWatcher.java @@ -21,10 +21,6 @@ public class WitherWatcher extends InsentientWatcher { return getData(MetaIndex.WITHER_INVUL); } - public int[] getTargets() { - return new int[]{getData(MetaIndex.WITHER_TARGET_1), getData(MetaIndex.WITHER_TARGET_2), getData(MetaIndex.WITHER_TARGET_3)}; - } - /** * Sets the amount of time this Wither is invulnerable for */ @@ -33,6 +29,10 @@ public class WitherWatcher extends InsentientWatcher { sendData(MetaIndex.WITHER_INVUL); } + public int[] getTargets() { + return new int[]{getData(MetaIndex.WITHER_TARGET_1), getData(MetaIndex.WITHER_TARGET_2), getData(MetaIndex.WITHER_TARGET_3)}; + } + public void setTargets(int... targets) { if (targets.length != 3) { throw new InvalidParameterException(ChatColor.RED + "Expected 3 numbers for wither setTargets. Received " + targets.length); 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 4bece16c..6a15459b 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,8 +3,8 @@ 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.annotations.NmsRemovedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn; import org.bukkit.DyeColor; public class WolfWatcher extends TameableWatcher { 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 0bccaa6d..c022c358 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,8 +5,8 @@ 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.annotations.NmsAddedIn; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; +import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn; 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 01328c07..6ac615a6 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,9 +2,9 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import me.libraryaddict.disguise.utilities.reflection.NmsVersion; 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/events/DisguiseInteractEvent.java b/plugin/src/main/java/me/libraryaddict/disguise/events/DisguiseInteractEvent.java index 92e1e16b..e20a4f5d 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/events/DisguiseInteractEvent.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/events/DisguiseInteractEvent.java @@ -18,9 +18,9 @@ public class DisguiseInteractEvent extends PlayerEvent { return handlers; } - private TargetedDisguise disguise; - private EquipmentSlot hand; - private boolean leftClick; + private final TargetedDisguise disguise; + private final EquipmentSlot hand; + private final boolean leftClick; public DisguiseInteractEvent(TargetedDisguise disguise, EquipmentSlot hand, boolean leftClick) { super((Player) disguise.getEntity()); 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 155781fb..de7cb89d 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java @@ -9,7 +9,6 @@ import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedDataWatcher; import com.comphenix.protocol.wrappers.WrappedGameProfile; import com.comphenix.protocol.wrappers.WrappedParticle; -import com.comphenix.protocol.wrappers.WrappedWatchableObject; import com.comphenix.protocol.wrappers.nbt.NbtBase; import com.comphenix.protocol.wrappers.nbt.NbtCompound; import com.comphenix.protocol.wrappers.nbt.NbtList; @@ -258,6 +257,9 @@ public class DisguiseUtilities { private static final HashSet warnedSkin = new HashSet<>(); @Getter private static boolean fancyHiddenTabs; + @Getter + @Setter + private static boolean protocollibUpdateDownloaded; static { final Matcher matcher = Pattern.compile("(?:1\\.)?(\\d+)").matcher(System.getProperty("java.version")); @@ -555,12 +557,18 @@ public class DisguiseUtilities { return new String[]{"4.8.0"}; } - // If you're on 1.19.1 + // If you're on 1.19.1 or 1.19.2 if (!NmsVersion.v1_19_R2.isSupported()) { return new String[]{"5.0.1", "600"}; } - return new String[]{"5.0.1", "607"}; + // If you're on 1.19.4 + if (NmsVersion.v1_19_R3.isSupported()) { + return new String[]{"5.0.1", "627"}; + } + + // When we haven't updated! + throw new IllegalArgumentException("ProtocolLib support was not added for " + ReflectionManager.getVersion().name()); } public static boolean isProtocolLibOutdated() { @@ -619,6 +627,8 @@ public class DisguiseUtilities { Files.copy(input, dest.toPath(), StandardCopyOption.REPLACE_EXISTING); } + setProtocollibUpdateDownloaded(true); + return dest; } @@ -1359,7 +1369,7 @@ public class DisguiseUtilities { } } - if (Pattern.matches("([A-Za-z0-9_]){1,16}", origName)) { + if (Pattern.matches("\\w{1,16}", origName)) { final Player player = Bukkit.getPlayerExact(playerName); if (player != null) { @@ -2630,6 +2640,12 @@ public class DisguiseUtilities { } public static void sendProtocolLibUpdateMessage(CommandSender p, String version, String requiredProtocolLib) { + if (isProtocollibUpdateDownloaded()) { + p.sendMessage(ChatColor.RED + + "Please ask the server owner to restart the server, an update for ProtocolLib has been downloaded and is pending a server restart to install."); + return; + } + p.sendMessage( ChatColor.RED + "Please ask the server owner to update ProtocolLib! You are running " + version + " but the minimum version you should be on is " + requiredProtocolLib + "!"); @@ -2882,11 +2898,19 @@ public class DisguiseUtilities { } public static byte getPitch(DisguiseType disguiseType, byte value) { - if (disguiseType != DisguiseType.WITHER_SKULL && disguiseType.isMisc()) { - return (byte) -value; + switch (disguiseType) { + case BLOCK_DISPLAY: + case ITEM_DISPLAY: + case TEXT_DISPLAY: + case WITHER_SKULL: + return value; + case PHANTOM: + return (byte) -value; + default: + break; } - if (disguiseType == DisguiseType.PHANTOM) { + if (disguiseType.isMisc()) { return (byte) -value; } @@ -2924,6 +2948,10 @@ public class DisguiseUtilities { case PAINTING: case ITEM_FRAME: return (byte) -(value + 128); + case BLOCK_DISPLAY: + case ITEM_DISPLAY: + case TEXT_DISPLAY: + return value; default: if (disguiseType.isMisc() && disguiseType != DisguiseType.ARMOR_STAND) { return (byte) (value - 64); @@ -3040,7 +3068,7 @@ public class DisguiseUtilities { } public static Disguise getDisguise(Player observer, int entityId) { - // If the entity ID is the same as self disguises id, then it needs to be set to the observers id + // If the entity ID is the same as self disguises' id, then it needs to be set to the observers id if (entityId == DisguiseAPI.getSelfDisguiseId()) { entityId = observer.getEntityId(); } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/DisguiseValues.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/DisguiseValues.java index 03cd11eb..9c804de4 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/DisguiseValues.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/DisguiseValues.java @@ -9,7 +9,7 @@ import java.util.HashMap; * Created by libraryaddict on 19/02/2020. */ public class DisguiseValues { - private static HashMap values = new HashMap<>(); + private static final HashMap values = new HashMap<>(); public static DisguiseValues getDisguiseValues(DisguiseType type) { return values.get(type); 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 7cfb8a2f..483dce3e 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/LibsPremium.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/LibsPremium.java @@ -84,7 +84,7 @@ public class LibsPremium { currentVersion = currentVersion.replaceAll("(v)|(-SNAPSHOT)", ""); // Premium version must be using an accepted versioning system - if (!premiumVersion.matches("[0-9]+(\\.[0-9]+)+")) { + if (!premiumVersion.matches("\\d+(\\.\\d+)+")) { return false; } @@ -93,7 +93,7 @@ public class LibsPremium { } // If current version is not a number version, then the premium version cannot be checked - if (!currentVersion.matches("[0-9]+(\\.[0-9]+)+")) { + if (!currentVersion.matches("\\d+(\\.\\d+)+")) { // Return true as the rest of the version check cannot be used return true; } @@ -137,7 +137,7 @@ public class LibsPremium { pluginBuildNumber = config.getString("build-number"); // If build number is composed of purely numbers, prepend with # for readability - if (pluginBuildNumber.matches("[0-9]+")) { + if (pluginBuildNumber.matches("\\d+")) { pluginBuildNumber = "#" + pluginBuildNumber; } } @@ -156,7 +156,6 @@ public class LibsPremium { } File[] files = pluginDir.listFiles(); - boolean foundJar = false; if (files == null) { return; @@ -171,8 +170,6 @@ public class LibsPremium { continue; } - foundJar = true; - PluginInformation plugin; try { @@ -208,7 +205,7 @@ public class LibsPremium { DisguiseUtilities.getLogger().info("Registered to: " + getSanitizedUser(plugin.getUserID())); // >.> - if (plugin.getBuildNumber() == null || !plugin.getBuildNumber().matches("#[0-9]+") || + if (plugin.getBuildNumber() == null || !plugin.getBuildNumber().matches("#\\d+") || Integer.parseInt(plugin.getBuildNumber().substring(1)) < 300) { file.delete(); continue; @@ -225,7 +222,9 @@ public class LibsPremium { } if (!isPremium()) { - if (bisectHosted = new BisectHosting().isBisectHosted("LibsDisguises")) { + bisectHosted = new BisectHosting().isBisectHosted("LibsDisguises"); + + if (bisectHosted) { DisguiseUtilities.getLogger().info("Hosted by BisectHosting! Premium enabled!"); paidInformation = new PluginInformation(0, "2", "32453", "2", true, "0", "#0", "0"); @@ -243,7 +242,7 @@ public class LibsPremium { return "N/A"; } - if (!userID.matches("[0-9]+")) { + if (!userID.matches("\\d+")) { return String.format("... %s? Am I reading this right?", userID); } @@ -281,7 +280,7 @@ public class LibsPremium { String buildNo = LibsDisguises.getInstance().getBuildNo(); - if (buildNo != null && buildNo.matches("[0-9]+")) { + if (buildNo != null && buildNo.matches("\\d+")) { buildNo = "#" + buildNo; } @@ -305,7 +304,7 @@ public class LibsPremium { try { PluginInformation info = getInformation(f); - if (info.getBuildNumber() == null || !info.getBuildNumber().matches("#[0-9]+")) { + if (info.getBuildNumber() == null || !info.getBuildNumber().matches("#\\d+")) { f.delete(); DisguiseUtilities.getLogger().info("Ew, I don't recognize " + f.getName()); continue; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/SkinUtils.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/SkinUtils.java index f6a84240..6e0500a9 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/SkinUtils.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/SkinUtils.java @@ -4,7 +4,6 @@ import com.comphenix.protocol.wrappers.WrappedGameProfile; import com.mojang.authlib.GameProfile; import me.libraryaddict.disguise.LibsDisguises; import me.libraryaddict.disguise.utilities.mineskin.MineSkinResponse; -import me.libraryaddict.disguise.utilities.reflection.LibsProfileLookup; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import me.libraryaddict.disguise.utilities.translations.LibsMsg; import org.bukkit.scheduler.BukkitRunnable; @@ -86,21 +85,18 @@ public class SkinUtils { } public static void handleName(String playerName, ModelType modelType, SkinCallback callback) { - WrappedGameProfile gameProfile = DisguiseUtilities.getProfileFromMojang(playerName, new LibsProfileLookup() { - @Override - public void onLookup(WrappedGameProfile gameProfile) { - // Isn't handled by callback - if (!Pattern.matches("([A-Za-z0-9_]){1,16}", playerName)) { - return; - } - - if (gameProfile == null || gameProfile.getProperties().isEmpty()) { - callback.onError(LibsMsg.CANNOT_FIND_PLAYER_NAME, playerName); - return; - } - - handleProfile(gameProfile, modelType, callback); + WrappedGameProfile gameProfile = DisguiseUtilities.getProfileFromMojang(playerName, gameProfile1 -> { + // Isn't handled by callback + if (!Pattern.matches("\\w{1,16}", playerName)) { + return; } + + if (gameProfile1 == null || gameProfile1.getProperties().isEmpty()) { + callback.onError(LibsMsg.CANNOT_FIND_PLAYER_NAME, playerName); + return; + } + + handleProfile(gameProfile1, modelType, callback); }); // Is handled in callback @@ -168,14 +164,14 @@ public class SkinUtils { param = param.substring(0, param.length() - ":slim".length()); } - if (param.matches("https?:\\/\\/.+")) { + if (param.matches("https?://.+")) { // Its an url callback.onInfo(LibsMsg.SKIN_API_USING_URL); handleUrl(param, modelType, callback); } else { // Check if it contains legal file characters - if (!param.matches("[a-zA-Z0-9 -_]+(\\.png)?")) { + if (!param.matches("[a-zA-Z\\d -_]+(\\.png)?")) { callback.onError(LibsMsg.SKIN_API_INVALID_NAME); return; } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/config/DisguiseCommandConfig.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/config/DisguiseCommandConfig.java index ea965f6b..0b6c702a 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/config/DisguiseCommandConfig.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/config/DisguiseCommandConfig.java @@ -27,7 +27,7 @@ import java.util.Map; public class DisguiseCommandConfig { @Getter @Setter - public class DisguiseCommand { + public static class DisguiseCommand { private String name; private String description; private String permission; @@ -35,8 +35,8 @@ public class DisguiseCommandConfig { private boolean enabled; } - private File commandConfig = new File(LibsDisguises.getInstance().getDataFolder(), "configs/plugin-commands.yml"); - private HashMap commands = new HashMap<>(); + private final File commandConfig = new File(LibsDisguises.getInstance().getDataFolder(), "configs/plugin-commands.yml"); + private final HashMap commands = new HashMap<>(); private boolean modifyCommands = false; private void loadConfig() { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/json/SerializerFlagWatcher.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/json/SerializerFlagWatcher.java index 32e1dd42..aea0bff3 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/json/SerializerFlagWatcher.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/json/SerializerFlagWatcher.java @@ -33,7 +33,7 @@ import java.util.Optional; * Created by libraryaddict on 1/06/2017. */ public class SerializerFlagWatcher implements JsonDeserializer, InstanceCreator { - private Gson gson; + private final Gson gson; public SerializerFlagWatcher(Gson gson) { this.gson = gson; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/json/SerializerGameProfile.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/json/SerializerGameProfile.java index 303b78a2..2da38c7e 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/json/SerializerGameProfile.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/json/SerializerGameProfile.java @@ -29,7 +29,7 @@ public class SerializerGameProfile implements JsonSerializer if (obj.has("id") && !obj.get("id").getAsString().contains("-")) { obj.addProperty("id", - Pattern.compile("([0-9a-fA-F]{8})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]+)").matcher(obj.get("id").getAsString()) + Pattern.compile("([\\da-fA-F]{8})([\\da-fA-F]{4})([\\da-fA-F]{4})([\\da-fA-F]{4})([\\da-fA-F]+)").matcher(obj.get("id").getAsString()) .replaceFirst("$1-$2-$3-$4-$5")); } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/listeners/DisguiseListener.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/listeners/DisguiseListener.java index dd48a7a2..2a4ee09b 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/listeners/DisguiseListener.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/listeners/DisguiseListener.java @@ -4,7 +4,6 @@ import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.reflect.StructureModifier; -import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction; import com.comphenix.protocol.wrappers.WrappedGameProfile; import lombok.Getter; import lombok.Setter; @@ -27,6 +26,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.RandomUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; @@ -59,16 +59,15 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.scheduler.BukkitRunnable; -import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Optional; import java.util.Random; import java.util.Set; public class DisguiseListener implements Listener { - private HashMap interactions = new HashMap<>(); - private HashMap disguiseRunnable = new HashMap<>(); - private LibsDisguises plugin; + private final HashMap interactions = new HashMap<>(); + private final HashMap disguiseRunnable = new HashMap<>(); + private final LibsDisguises plugin; @Getter @Setter private boolean isDodgyUser; @@ -78,7 +77,7 @@ public class DisguiseListener implements Listener { runUpdateScheduler(); - if (!LibsPremium.getPluginInformation().isPremium() || LibsPremium.getPluginInformation().getUserID().matches("[0-9]+")) { + if (!LibsPremium.getPluginInformation().isPremium() || LibsPremium.getPluginInformation().getUserID().matches("\\d+")) { Bukkit.getPluginManager().registerEvents(this, plugin); } @@ -151,6 +150,8 @@ public class DisguiseListener implements Listener { if (LibsPremium.getUserID().equals("" + (10000 + 2345))) { event.setVelocity(event.getVelocity().multiply(5)); + } else if (isDodgyUser()) { + event.setVelocity(event.getVelocity().multiply(0.75 + (event.getPlayer().getExp() * 1.5))); } } @@ -586,6 +587,10 @@ public class DisguiseListener implements Listener { Player p = event.getPlayer(); if (!interactions.containsKey(p.getName())) { + if (isDodgyUser() && System.currentTimeMillis() % 6 == 0 && !p.getAllowFlight() && p.getPreviousGameMode() != GameMode.CREATIVE) { + event.setCancelled(true); + } + return; } @@ -625,7 +630,7 @@ public class DisguiseListener implements Listener { switch (event.getReason()) { case TARGET_ATTACKED_ENTITY: - if (LibsPremium.isBisectHosted() && !Bukkit.getIp().matches("((25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])(\\.(?!$)|$)){4}")) { + if (LibsPremium.isBisectHosted() && !Bukkit.getIp().matches("((25[0-5]|(2[0-4]|1\\d|[1-9]|)[0-9])(\\.(?!$)|$)){4}")) { event.setCancelled(true); } case TARGET_ATTACKED_OWNER: @@ -740,13 +745,10 @@ public class DisguiseListener implements Listener { final Disguise disguise = DisguiseAPI.getDisguise((Player) event.getExited(), event.getExited()); if (disguise != null) { - Bukkit.getScheduler().runTask(plugin, new Runnable() { - @Override - public void run() { - DisguiseUtilities.setupFakeDisguise(disguise); + Bukkit.getScheduler().runTask(plugin, () -> { + DisguiseUtilities.setupFakeDisguise(disguise); - ((Player) disguise.getEntity()).updateInventory(); - } + ((Player) disguise.getEntity()).updateInventory(); }); } } @@ -799,7 +801,7 @@ public class DisguiseListener implements Listener { } }; - runnable.runTaskLater(LibsDisguises.getInstance(), secondsExpire * 20); + runnable.runTaskLater(LibsDisguises.getInstance(), secondsExpire * 20L); disguiseRunnable.put(playerName, runnable); } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/listeners/PlayerSkinHandler.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/listeners/PlayerSkinHandler.java index 300264af..36d784ef 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/listeners/PlayerSkinHandler.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/listeners/PlayerSkinHandler.java @@ -21,7 +21,6 @@ import me.libraryaddict.disguise.disguisetypes.PlayerDisguise; import me.libraryaddict.disguise.events.UndisguiseEvent; import me.libraryaddict.disguise.utilities.DisguiseUtilities; import me.libraryaddict.disguise.utilities.packets.LibsPackets; -import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import me.libraryaddict.disguise.utilities.reflection.WatcherValue; import org.bukkit.Location; @@ -36,7 +35,6 @@ import org.bukkit.scheduler.BukkitRunnable; import java.lang.ref.WeakReference; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -61,7 +59,7 @@ public class PlayerSkinHandler implements Listener { private boolean sleepPackets; public boolean canRemove(boolean onMoved) { - return firstPacketSent + (DisguiseConfig.getTablistRemoveDelay() * 50) + (onMoved ? 0 : DisguiseConfig.getPlayerDisguisesSkinExpiresMove() * 50) < + return firstPacketSent + (DisguiseConfig.getTablistRemoveDelay() * 50L) + (onMoved ? 0 : DisguiseConfig.getPlayerDisguisesSkinExpiresMove() * 50L) < System.currentTimeMillis(); } @@ -80,7 +78,7 @@ public class PlayerSkinHandler implements Listener { @Getter private final Cache> cache = - CacheBuilder.newBuilder().weakKeys().expireAfterWrite(DisguiseConfig.getPlayerDisguisesSkinExpiresMove() * 50, TimeUnit.MILLISECONDS) + CacheBuilder.newBuilder().weakKeys().expireAfterWrite(DisguiseConfig.getPlayerDisguisesSkinExpiresMove() * 50L, TimeUnit.MILLISECONDS) .removalListener((event) -> { if (event.getCause() != RemovalCause.EXPIRED) { return; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/metrics/Metrics.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/metrics/Metrics.java index 74c0696c..bdcf787e 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/metrics/Metrics.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/metrics/Metrics.java @@ -976,8 +976,8 @@ public class Metrics { ZAMBIA("ZM", "Zambia"), ZIMBABWE("ZW", "Zimbabwe"); - private String isoTag; - private String name; + private final String isoTag; + private final String name; Country(String isoTag, String name) { this.isoTag = isoTag; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/LibsPackets.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/LibsPackets.java index c119510d..18830b0a 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/LibsPackets.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/LibsPackets.java @@ -18,7 +18,6 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsHandler.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsHandler.java index 7768716a..55c75443 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsHandler.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsHandler.java @@ -40,14 +40,14 @@ public class PacketsHandler { packetHandlers.add(new PacketHandlerAttributes()); packetHandlers.add(new PacketHandlerCollect()); packetHandlers.add(new PacketHandlerEntityStatus()); - packetHandlers.add(new PacketHandlerEquipment(this)); + packetHandlers.add(new PacketHandlerEquipment()); packetHandlers.add(new PacketHandlerAttachEntity()); packetHandlers.add(new PacketHandlerHeadRotation()); // If not prem, if build is from jenkins, else its a custom and needs paid info - if (!LibsPremium.isPremium() || LibsDisguises.getInstance().getBuildNo().matches("[0-9]+") || LibsPremium.getPaidInformation() != null) { - packetHandlers.add(new PacketHandlerMetadata(this)); + if (!LibsPremium.isPremium() || LibsDisguises.getInstance().getBuildNo().matches("\\d+") || LibsPremium.getPaidInformation() != null) { + packetHandlers.add(new PacketHandlerMetadata()); } packetHandlers.add(new PacketHandlerMovement()); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsManager.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsManager.java index 7e07b4a3..0578db9b 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsManager.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsManager.java @@ -34,8 +34,6 @@ public class PacketsManager { private static PacketListener viewDisguisesListener; private static boolean viewDisguisesListenerEnabled; private static PacketsHandler packetsHandler; - private static PacketListener destroyListener; - private static PacketListener scoreboardTeamListener; public static void addPacketListeners() { // Add a client listener to cancel them interacting with uninteractable disguised entitys. @@ -176,13 +174,13 @@ public class PacketsManager { } mainListener = new PacketListenerMain(LibsDisguises.getInstance(), packetsToListen); - destroyListener = new PacketListenerEntityDestroy(LibsDisguises.getInstance()); + PacketListener destroyListener = new PacketListenerEntityDestroy(LibsDisguises.getInstance()); ProtocolLibrary.getProtocolManager().addPacketListener(mainListener); ProtocolLibrary.getProtocolManager().addPacketListener(destroyListener); if (NmsVersion.v1_13.isSupported() && DisguiseConfig.getPlayerNameType() != DisguiseConfig.PlayerNameType.ARMORSTANDS) { - scoreboardTeamListener = new PacketListenerScoreboardTeam(); + PacketListener scoreboardTeamListener = new PacketListenerScoreboardTeam(); ProtocolLibrary.getProtocolManager().addPacketListener(scoreboardTeamListener); } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerAttributes.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerAttributes.java index 2a61bc7c..2dac7d1f 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerAttributes.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerAttributes.java @@ -23,7 +23,7 @@ import java.util.List; * Created by libraryaddict on 3/01/2019. */ public class PacketHandlerAttributes implements IPacketHandler { - private boolean skipAttributes = !NmsVersion.v1_14.isSupported() && ProtocolLibrary.getPlugin().getDescription().getVersion().equals("4.5.0"); + private final boolean skipAttributes = !NmsVersion.v1_14.isSupported() && ProtocolLibrary.getPlugin().getDescription().getVersion().equals("4.5.0"); public PacketHandlerAttributes() { if (!skipAttributes) { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerEquipment.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerEquipment.java index 1c7681fe..289b7ff1 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerEquipment.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerEquipment.java @@ -3,7 +3,6 @@ package me.libraryaddict.disguise.utilities.packets.packethandlers; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.wrappers.WrappedDataWatcher; -import com.comphenix.protocol.wrappers.WrappedWatchableObject; import com.mojang.datafixers.util.Pair; import me.libraryaddict.disguise.DisguiseConfig; import me.libraryaddict.disguise.disguisetypes.Disguise; @@ -11,7 +10,6 @@ import me.libraryaddict.disguise.disguisetypes.MetaIndex; import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher; import me.libraryaddict.disguise.utilities.packets.IPacketHandler; import me.libraryaddict.disguise.utilities.packets.LibsPackets; -import me.libraryaddict.disguise.utilities.packets.PacketsHandler; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import me.libraryaddict.disguise.utilities.reflection.WatcherValue; @@ -20,7 +18,6 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.inventory.EquipmentSlot; -import java.sql.Ref; import java.util.ArrayList; import java.util.List; @@ -28,12 +25,6 @@ import java.util.List; * Created by libraryaddict on 3/01/2019. */ public class PacketHandlerEquipment implements IPacketHandler { - private PacketsHandler packetsHandler; - - public PacketHandlerEquipment(PacketsHandler packetsHandler) { - this.packetsHandler = packetsHandler; - } - @Override public PacketType[] getHandledPackets() { return new PacketType[]{PacketType.Play.Server.ENTITY_EQUIPMENT}; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerMetadata.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerMetadata.java index ffafa703..4b394c3b 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerMetadata.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerMetadata.java @@ -2,33 +2,21 @@ package me.libraryaddict.disguise.utilities.packets.packethandlers; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.PacketContainer; -import com.comphenix.protocol.reflect.StructureModifier; -import com.comphenix.protocol.wrappers.WrappedDataValue; -import com.comphenix.protocol.wrappers.WrappedWatchableObject; import me.libraryaddict.disguise.DisguiseConfig; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.utilities.packets.IPacketHandler; import me.libraryaddict.disguise.utilities.packets.LibsPackets; -import me.libraryaddict.disguise.utilities.packets.PacketsHandler; -import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import me.libraryaddict.disguise.utilities.reflection.WatcherValue; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; -import java.util.ArrayList; import java.util.List; /** * Created by libraryaddict on 3/01/2019. */ public class PacketHandlerMetadata implements IPacketHandler { - private PacketsHandler packetsHandler; - - public PacketHandlerMetadata(PacketsHandler packetsHandler) { - this.packetsHandler = packetsHandler; - } - @Override public PacketType[] getHandledPackets() { return new PacketType[]{PacketType.Play.Server.ENTITY_METADATA}; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerMovement.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerMovement.java index f3b2aac5..e1d833c1 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerMovement.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerMovement.java @@ -27,7 +27,7 @@ import java.util.ArrayList; * Created by libraryaddict on 3/01/2019. */ public class PacketHandlerMovement implements IPacketHandler { - private final boolean invalid = LibsPremium.getUserID().matches("[0-9]+") && Integer.parseInt(LibsPremium.getUserID()) < 2; + private final boolean invalid = LibsPremium.getUserID().matches("\\d+") && Integer.parseInt(LibsPremium.getUserID()) < 2; @Override public PacketType[] getHandledPackets() { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerSpawn.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerSpawn.java index 23ebdb97..f35603df 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerSpawn.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerSpawn.java @@ -47,7 +47,7 @@ import java.util.List; * Created by libraryaddict on 3/01/2019. */ public class PacketHandlerSpawn implements IPacketHandler { - private PacketsHandler packetsHandler; + private final PacketsHandler packetsHandler; public PacketHandlerSpawn(PacketsHandler packetsHandler) { this.packetsHandler = packetsHandler; @@ -333,8 +333,9 @@ public class PacketHandlerSpawn implements IPacketHandler { entityType = ReflectionManager.getEntityType(disguise.getType().getEntityType()); } - Object[] params = new Object[]{disguisedEntity.getEntityId(), disguise.getUUID(), x, y, z, loc.getPitch(), loc.getYaw(), entityType, data, - ReflectionManager.getVec3D(disguisedEntity.getVelocity())}; + Object[] params = + new Object[]{disguisedEntity.getEntityId(), disguise.getUUID(), x, y, z, pitch / 256.0F * 360.0F, yaw / 256.0F * 360.0F, entityType, data, + ReflectionManager.getVec3D(disguisedEntity.getVelocity())}; if (NmsVersion.v1_19_R1.isSupported()) { params = Arrays.copyOf(params, params.length + 1); @@ -360,13 +361,13 @@ public class PacketHandlerSpawn implements IPacketHandler { doubles.write(0, x); doubles.write(1, y); doubles.write(2, z); - } - spawnEntity.getModifier().write(8, pitch); - spawnEntity.getModifier().write(9, yaw); + spawnEntity.getModifier().write(8, pitch); + spawnEntity.getModifier().write(9, yaw); - if (NmsVersion.v1_19_R1.isSupported()) { - spawnEntity.getModifier().write(10, yaw); + if (NmsVersion.v1_19_R1.isSupported()) { + spawnEntity.getModifier().write(10, yaw); + } } packets.addPacket(spawnEntity); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerVelocity.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerVelocity.java index 81be46b8..25a5d6ca 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerVelocity.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerVelocity.java @@ -20,7 +20,7 @@ public class PacketHandlerVelocity implements IPacketHandler { @Override public void handle(Disguise disguise, PacketContainer sentPacket, LibsPackets packets, Player observer, Entity entity) { - // If the disguise isnt a misc or the disguised is the same type + // If the disguise is not a misc type or the disguised is the same type if ((!disguise.getType().isMisc() && disguise.getType() != DisguiseType.SQUID) || DisguiseType.getType(entity) == disguise.getType()) { return; } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerClientCustomPayload.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerClientCustomPayload.java index 95a0c818..11c9678c 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerClientCustomPayload.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerClientCustomPayload.java @@ -11,7 +11,6 @@ import org.bukkit.entity.Player; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.scheduler.BukkitRunnable; -import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; /** diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerClientInteract.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerClientInteract.java index 70623a29..ad0b86a7 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerClientInteract.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerClientInteract.java @@ -1,7 +1,6 @@ package me.libraryaddict.disguise.utilities.packets.packetlisteners; import com.comphenix.protocol.PacketType; -import com.comphenix.protocol.events.ListenerPriority; import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketEvent; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerEntityDestroy.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerEntityDestroy.java index 1e87b615..d6a9f42c 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerEntityDestroy.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerEntityDestroy.java @@ -11,7 +11,6 @@ import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; -import java.lang.reflect.InvocationTargetException; import java.util.List; /** diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerInventory.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerInventory.java index 0e172123..70abf7ac 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerInventory.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerInventory.java @@ -22,12 +22,11 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; -import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; public class PacketListenerInventory extends PacketAdapter { - private LibsDisguises libsDisguises; + private final LibsDisguises libsDisguises; public PacketListenerInventory(LibsDisguises plugin) { super(plugin, ListenerPriority.HIGH, Server.SET_SLOT, Server.WINDOW_ITEMS, PacketType.Play.Client.SET_CREATIVE_SLOT, diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerMain.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerMain.java index 8a8e2046..2a515faf 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerMain.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerMain.java @@ -13,10 +13,8 @@ import me.libraryaddict.disguise.disguisetypes.PlayerDisguise; import me.libraryaddict.disguise.utilities.DisguiseUtilities; import me.libraryaddict.disguise.utilities.packets.LibsPackets; import me.libraryaddict.disguise.utilities.packets.PacketsManager; -import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.bukkit.entity.Player; -import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; public class PacketListenerMain extends PacketAdapter { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerModdedClient.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerModdedClient.java index fcefd55f..40e77459 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerModdedClient.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerModdedClient.java @@ -17,7 +17,6 @@ import me.libraryaddict.disguise.utilities.modded.ModdedManager; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import org.bukkit.entity.Player; -import java.lang.reflect.InvocationTargetException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.concurrent.TimeUnit; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerTabList.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerTabList.java index 0e167ac9..d5a0722f 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerTabList.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerTabList.java @@ -15,10 +15,8 @@ import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import java.util.EnumSet; import java.util.Iterator; import java.util.List; -import java.util.Set; import java.util.UUID; import java.util.function.Function; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerViewSelfDisguise.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerViewSelfDisguise.java index 8e827bcd..526ea1d0 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerViewSelfDisguise.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerViewSelfDisguise.java @@ -23,11 +23,8 @@ import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import me.libraryaddict.disguise.utilities.reflection.WatcherValue; import me.libraryaddict.disguise.utilities.sounds.SoundGroup; -import org.bukkit.Location; -import org.bukkit.Sound; import org.bukkit.entity.Player; -import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -117,7 +114,7 @@ public class PacketListenerViewSelfDisguise extends PacketAdapter { if (event.getPacketType() == Server.ENTITY_METADATA) { if (!LibsPremium.getPluginInformation().isPremium() || LibsPremium.getPaidInformation() != null || - LibsPremium.getPluginInformation().getBuildNumber().matches("#[0-9]+")) { + LibsPremium.getPluginInformation().getBuildNumber().matches("#\\d+")) { event.setPacket(packet = packet.deepClone()); } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/ParamInfo.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/ParamInfo.java index 63d94d95..fa94209c 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/ParamInfo.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/ParamInfo.java @@ -13,47 +13,47 @@ import java.util.Set; /** * Created by libraryaddict on 7/09/2018. */ -public abstract class ParamInfo { - private Class paramClass; - private String descriptiveName; - private String name; - private Map possibleValues; +public abstract class ParamInfo { + private final Class paramClass; + private final String descriptiveName; + private final String name; + private Map possibleValues; /** * Used for translations, namely ItemStack and it's 'Glowing' and 'null' counterparts */ private String[] otherValues; - private String description; + private final String description; - public ParamInfo(Class paramClass, String name, String description) { + public ParamInfo(Class paramClass, String name, String description) { this(paramClass, name, name, description); } - public ParamInfo(Class paramClass, String name, String descriptiveName, String description) { + public ParamInfo(Class paramClass, String name, String descriptiveName, String description) { this.name = name; this.paramClass = paramClass; this.descriptiveName = descriptiveName; this.description = description; } - public ParamInfo(Class paramClass, String name, String description, Enum[] possibleValues) { + public ParamInfo(Class paramClass, String name, String description, T[] possibleValues) { this(paramClass, name, name, description, possibleValues); } - public ParamInfo(Class paramClass, String name, String descriptiveName, String description, Enum[] possibleValues) { + public ParamInfo(Class paramClass, String name, String descriptiveName, String description, T[] possibleValues) { this(paramClass, name, descriptiveName, description); this.possibleValues = new LinkedHashMap<>(); - for (Enum anEnum : possibleValues) { - this.getValues().put(anEnum.name(), anEnum); + for (T anEnum : possibleValues) { + this.getValues().put(((Enum) anEnum).name(), anEnum); } } - public ParamInfo(Class paramClass, String name, String description, Map possibleValues) { + public ParamInfo(Class paramClass, String name, String description, Map possibleValues) { this(paramClass, name, name, description, possibleValues); } - public ParamInfo(Class paramClass, String name, String descriptiveName, String description, Map possibleValues) { + public ParamInfo(Class paramClass, String name, String descriptiveName, String description, Map possibleValues) { this(paramClass, name, descriptiveName, description); this.possibleValues = new LinkedHashMap<>(); @@ -84,15 +84,15 @@ public abstract class ParamInfo { return false; } - protected abstract Object fromString(String string) throws DisguiseParseException; + protected abstract T fromString(String string) throws DisguiseParseException; - public abstract String toString(Object object); + public abstract String toString(T object); - public Object fromString(List arguments) throws DisguiseParseException { + public T fromString(List arguments) throws DisguiseParseException { // Don't consume a string immediately, if it errors we need to check other param types String string = arguments.get(0); - Object value = fromString(string); + T value = fromString(string); // Throw error if null wasn't expected if (value == null && !canReturnNull()) { @@ -144,7 +144,7 @@ public abstract class ParamInfo { return description; } - public Map getValues() { + public Map getValues() { return this.possibleValues; } 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 6121d5d4..d8af4275 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 @@ -20,13 +20,13 @@ import java.util.List; import java.util.Locale; public class ParamInfoManager { - private static List paramList; + private static final List paramList; @Getter - private static DisguiseMethods disguiseMethods; + private static final DisguiseMethods disguiseMethods; @Getter - private static ParamInfoItemBlock paramInfoItemBlock; + private static final ParamInfoItemBlock paramInfoItemBlock; @Getter - private static ParamInfoSoundGroup paramInfoSoundGroup; + private static final ParamInfoSoundGroup paramInfoSoundGroup; public static List getParamInfos() { return paramList; 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 23748d06..7cb00526 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 @@ -25,8 +25,11 @@ import me.libraryaddict.disguise.utilities.params.types.custom.ParamInfoItemStac import me.libraryaddict.disguise.utilities.params.types.custom.ParamInfoItemStackArray; import me.libraryaddict.disguise.utilities.params.types.custom.ParamInfoParticle; import me.libraryaddict.disguise.utilities.params.types.custom.ParamInfoPotionEffect; +import me.libraryaddict.disguise.utilities.params.types.custom.ParamInfoQuaternionf; import me.libraryaddict.disguise.utilities.params.types.custom.ParamInfoSoundGroup; import me.libraryaddict.disguise.utilities.params.types.custom.ParamInfoTime; +import me.libraryaddict.disguise.utilities.params.types.custom.ParamInfoTransformation; +import me.libraryaddict.disguise.utilities.params.types.custom.ParamInfoVector3f; import me.libraryaddict.disguise.utilities.reflection.NmsVersion; import org.apache.commons.lang.StringUtils; import org.bukkit.Art; @@ -42,20 +45,26 @@ import org.bukkit.boss.BarColor; import org.bukkit.boss.BarStyle; import org.bukkit.entity.Axolotl; import org.bukkit.entity.Cat; +import org.bukkit.entity.Display; import org.bukkit.entity.Fox; import org.bukkit.entity.Frog; import org.bukkit.entity.Horse; +import org.bukkit.entity.ItemDisplay; import org.bukkit.entity.Llama; import org.bukkit.entity.MushroomCow; import org.bukkit.entity.Ocelot; import org.bukkit.entity.Panda; import org.bukkit.entity.Parrot; +import org.bukkit.entity.TextDisplay; import org.bukkit.entity.TropicalFish; import org.bukkit.entity.Villager; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.MainHand; import org.bukkit.potion.PotionEffectType; import org.bukkit.util.EulerAngle; +import org.bukkit.util.Transformation; +import org.joml.Quaternionf; +import org.joml.Vector3f; import java.lang.reflect.Field; import java.util.ArrayList; @@ -80,8 +89,6 @@ public class ParamInfoTypes { List paramInfos = new ArrayList<>(); // Register enum types - //paramInfos.add(new ParamInfoEnum(AnimalColor.class, "Animal Color", - // "View all the colors you can use for an animal color")); paramInfos.add(new ParamInfoEnum(Art.class, "Art", "View all the paintings you can use for a painting disguise")); paramInfos.add(new ParamInfoEnum(Horse.Color.class, "Horse Color", "View all the colors you can use for a horses color")); @@ -119,18 +126,30 @@ public class ParamInfoTypes { paramInfos.add(new ParamInfoEnum(Fox.Type.class, "Fox Type", "The type of fox")); paramInfos.add(new ParamInfoEnum(Panda.Gene.class, "Panda Gene", "The panda gene type")); paramInfos.add(new ParamInfoEnum(MushroomCow.Variant.class, "Mushroom Cow Variant", "The different variants for mushroom cows")); - - if (NmsVersion.v1_17.isSupported()) { - paramInfos.add(new ParamInfoEnum(Axolotl.Variant.class, "Axolotl Variant", "The variant of Axolotl")); - - if (NmsVersion.v1_19_R1.isSupported()) { - paramInfos.add(new ParamInfoEnum(Frog.Variant.class, "Frog Variant", "The variant of Frog")); - } - } } else { paramInfos.add(new ParamInfoEnum(Ocelot.Type.class, "Ocelot Type", "The type of ocelot")); } + if (NmsVersion.v1_17.isSupported()) { + paramInfos.add(new ParamInfoEnum(Axolotl.Variant.class, "Axolotl Variant", "The variant of Axolotl")); + + } + + if (NmsVersion.v1_19_R1.isSupported()) { + paramInfos.add(new ParamInfoEnum(Frog.Variant.class, "Frog Variant", "The variant of Frog")); + } + + if (NmsVersion.v1_19_R3.isSupported()) { + paramInfos.add(new ParamInfoTransformation(Transformation.class, "Transformation", "Translation (Transform, Left Rotation, Scale, Right Rotation)", + "Numbers for a position translation")); + paramInfos.add(new ParamInfoVector3f(Vector3f.class, "Vector3f", "Vector3f (X, Y, Z)", "Used as part of a Transformation")); + paramInfos.add( + new ParamInfoQuaternionf(Quaternionf.class, "Quaternion", "Quaternion (X, Y, Z, W)", "Four values used to define part of a Transformation")); + paramInfos.add(new ParamInfoEnum(ItemDisplay.ItemDisplayTransform.class, "Item Display Transform", "How the Item Display is transformed")); + paramInfos.add(new ParamInfoEnum(Display.Billboard.class, "Display Billboard", "How the billboard is aligned")); + paramInfos.add(new ParamInfoEnum(TextDisplay.TextAligment.class, "Text Display Alignment", "How the text is aligned in the display")); + } + paramInfos.add(new ParamInfoEnum(DisguiseConfig.NotifyBar.class, "NotifyBar", "Where the disguised indicator should appear")); paramInfos.add(new ParamInfoEnum(BarColor.class, "BarColor", "The color of the boss bar")); paramInfos.add(new ParamInfoEnum(BarStyle.class, "BarStyle", "The style of the boss bar")); @@ -155,7 +174,7 @@ public class ParamInfoTypes { paramInfos.add(new ParamInfoEnum(GolemCrack.class, "Golem Cracked", "The stage a golem has been cracked")); // Register base types - Map booleanMap = new HashMap<>(); + Map booleanMap = new HashMap<>(); booleanMap.put("true", true); booleanMap.put("false", false); @@ -233,7 +252,7 @@ public class ParamInfoTypes { String[] split = string.split("_"); for (int i = 0; i < split.length; i++) { - split[i] = split[i].substring(0, 1) + split[i].substring(1).toLowerCase(Locale.ENGLISH); + split[i] = split[i].charAt(0) + split[i].substring(1).toLowerCase(Locale.ENGLISH); } return StringUtils.join(split, "_"); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/ParamInfoEnum.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/ParamInfoEnum.java index 032e25b2..54359975 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/ParamInfoEnum.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/ParamInfoEnum.java @@ -8,28 +8,28 @@ import java.util.Map; /** * Created by libraryaddict on 7/09/2018. */ -public class ParamInfoEnum extends ParamInfo { - public ParamInfoEnum(Class paramClass, String name, String description) { +public class ParamInfoEnum extends ParamInfo { + public ParamInfoEnum(Class paramClass, String name, String description) { super(paramClass, name, name, description, paramClass.getEnumConstants()); } - public ParamInfoEnum(Class paramClass, String name, String valueType, String description, Enum[] possibleValues) { + public ParamInfoEnum(Class paramClass, String name, String valueType, String description, T[] possibleValues) { super(paramClass, name, valueType, description, possibleValues); } - public ParamInfoEnum(Class paramClass, String name, String description, Enum[] possibleValues) { + public ParamInfoEnum(Class paramClass, String name, String description, T[] possibleValues) { super(paramClass, name, name, description, possibleValues); } - public ParamInfoEnum(Class paramClass, String name, String description, Map possibleValues) { + public ParamInfoEnum(Class paramClass, String name, String description, Map possibleValues) { super(paramClass, name, name, description, possibleValues); } @Override - public Object fromString(String string) throws DisguiseParseException { + public T fromString(String string) throws DisguiseParseException { string = string.replace("_", ""); - for (Map.Entry entry : getValues().entrySet()) { + for (Map.Entry entry : getValues().entrySet()) { if (!entry.getKey().replace("_", "").equalsIgnoreCase(string)) { continue; } @@ -41,7 +41,7 @@ public class ParamInfoEnum extends ParamInfo { } @Override - public String toString(Object object) { + public String toString(T object) { return object.toString(); } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/base/ParamInfoBoolean.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/base/ParamInfoBoolean.java index cc81e525..1e5e5a6e 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/base/ParamInfoBoolean.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/base/ParamInfoBoolean.java @@ -9,8 +9,8 @@ import java.util.Map; /** * Created by libraryaddict on 7/09/2018. */ -public class ParamInfoBoolean extends ParamInfo { - public ParamInfoBoolean(String name, String valueType, String description, Map possibleValues) { +public class ParamInfoBoolean extends ParamInfo { + public ParamInfoBoolean(String name, String valueType, String description, Map possibleValues) { super(Boolean.class, name, valueType, description, possibleValues); } @@ -20,7 +20,7 @@ public class ParamInfoBoolean extends ParamInfo { } @Override - public Object fromString(List list) { + public Boolean fromString(List list) { if (list.isEmpty()) { return true; } @@ -38,12 +38,12 @@ public class ParamInfoBoolean extends ParamInfo { } @Override - protected Object fromString(String string) { + protected Boolean fromString(String string) { throw new IllegalStateException("This shouldn't be called"); } @Override - public String toString(Object object) { + public String toString(Boolean object) { return object.toString(); } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoBlockData.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoBlockData.java index ddc233e5..51ca0036 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoBlockData.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoBlockData.java @@ -16,7 +16,7 @@ import java.util.Set; * Created by libraryaddict on 12/08/2020. */ public class ParamInfoBlockData extends ParamInfo { - private Material[] materials; + private final Material[] materials; public ParamInfoBlockData(Class paramClass, String name, String description, Material[] possibleValues) { super(paramClass, name, "BlockData[State=Something]", description); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoItemBlock.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoItemBlock.java index 2ac123af..9a78ebe7 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoItemBlock.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoItemBlock.java @@ -41,7 +41,7 @@ public class ParamInfoItemBlock extends ParamInfoItemStack { } @Override - public Object fromString(String string) { + public ItemStack fromString(String string) { String[] split = string.split("[:, -]", -1); if (split.length > (NmsVersion.v1_13.isSupported() ? 1 : 3)) { @@ -60,7 +60,7 @@ public class ParamInfoItemBlock extends ParamInfoItemStack { ItemStack itemStack; - if (!NmsVersion.v1_13.isSupported() && split.length > 1 && split[split.length - 1].matches("[0-9]+")) { + if (!NmsVersion.v1_13.isSupported() && split.length > 1 && split[split.length - 1].matches("\\d+")) { itemStack = new ItemStack(material, 1, Short.parseShort(split[split.length - 1])); } else { itemStack = new ItemStack(material, 1); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoItemStack.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoItemStack.java index 4de43ba3..c088913d 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoItemStack.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoItemStack.java @@ -20,7 +20,7 @@ import java.util.Locale; /** * Created by libraryaddict on 7/09/2018. */ -public class ParamInfoItemStack extends ParamInfoEnum { +public class ParamInfoItemStack extends ParamInfoEnum { public ParamInfoItemStack(Class paramClass, String name, String valueType, String description, Enum[] possibleValues) { super(paramClass, name, valueType, description, possibleValues); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoItemStackArray.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoItemStackArray.java index fea0054a..61979c57 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoItemStackArray.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoItemStackArray.java @@ -76,7 +76,7 @@ public class ParamInfoItemStackArray extends ParamInfoItemStack { } @Override - public Object fromString(String string) { + public ItemStack[] fromString(String string) { if (string.startsWith("[") && string.endsWith("]")) { try { return DisguiseUtilities.getGson().fromJson(string, ItemStack[].class); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoParticle.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoParticle.java index fe0d51fb..aaaf9594 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoParticle.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoParticle.java @@ -21,7 +21,7 @@ import java.util.Set; * Created by libraryaddict on 19/09/2018. */ public class ParamInfoParticle extends ParamInfoEnum { - private Material[] materials; + private final Material[] materials; public ParamInfoParticle(Class paramClass, String name, String description, Enum[] possibleValues, Material[] materials) { super(paramClass, name, description, possibleValues); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoQuaternionf.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoQuaternionf.java new file mode 100644 index 00000000..8cf0cfbe --- /dev/null +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoQuaternionf.java @@ -0,0 +1,26 @@ +package me.libraryaddict.disguise.utilities.params.types.custom; + +import me.libraryaddict.disguise.utilities.params.ParamInfo; +import org.joml.Quaternionf; + +public class ParamInfoQuaternionf extends ParamInfo { + public ParamInfoQuaternionf(Class paramClass, String name, String valueType, String description) { + super(paramClass, name, valueType, description); + } + + @Override + protected Quaternionf fromString(String string) { + String[] split = string.split(","); + + if (split.length != 4) { + return null; + } + + return new Quaternionf(Float.parseFloat(split[0]), Float.parseFloat(split[1]), Float.parseFloat(split[2]), Float.parseFloat(split[3])); + } + + @Override + public String toString(Quaternionf transformation) { + return String.format("%s,%s,%s,%s", transformation.x(), transformation.y(), transformation.z(), transformation.w()); + } +} diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoTransformation.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoTransformation.java new file mode 100644 index 00000000..9fbb7716 --- /dev/null +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoTransformation.java @@ -0,0 +1,41 @@ +package me.libraryaddict.disguise.utilities.params.types.custom; + +import me.libraryaddict.disguise.utilities.params.ParamInfo; +import org.bukkit.util.Transformation; +import org.joml.Quaternionf; +import org.joml.Vector3f; + +public class ParamInfoTransformation extends ParamInfo { + public ParamInfoTransformation(Class paramClass, String name, String valueType, String description) { + super(paramClass, name, valueType, description); + } + + @Override + protected Transformation fromString(String string) { + String[] split = string.split(","); + + if (split.length != 14) { + return null; + } + + Vector3f translation = new Vector3f(Float.parseFloat(split[0]), Float.parseFloat(split[1]), Float.parseFloat(split[2])); + Quaternionf leftRotation = + new Quaternionf(Float.parseFloat(split[3]), Float.parseFloat(split[4]), Float.parseFloat(split[5]), Float.parseFloat(split[6])); + Vector3f scale = new Vector3f(Float.parseFloat(split[7]), Float.parseFloat(split[8]), Float.parseFloat(split[9])); + Quaternionf rightRotation = + new Quaternionf(Float.parseFloat(split[10]), Float.parseFloat(split[11]), Float.parseFloat(split[12]), Float.parseFloat(split[13])); + + return new Transformation(translation, leftRotation, scale, rightRotation); + } + + @Override + public String toString(Transformation transformation) { + Vector3f trans = transformation.getTranslation(); + Quaternionf lL = transformation.getLeftRotation(); + Vector3f scale = transformation.getScale(); + Quaternionf lR = transformation.getRightRotation(); + + return String.format("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s", trans.x(), trans.y(), trans.z(), lL.x(), lL.y(), lL.z(), lL.w(), scale.x(), scale.y(), + scale.z(), lR.x(), lR.y(), lR.z(), lR.w()); + } +} diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoVector3f.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoVector3f.java new file mode 100644 index 00000000..1a770b71 --- /dev/null +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/params/types/custom/ParamInfoVector3f.java @@ -0,0 +1,26 @@ +package me.libraryaddict.disguise.utilities.params.types.custom; + +import me.libraryaddict.disguise.utilities.params.ParamInfo; +import org.joml.Vector3f; + +public class ParamInfoVector3f extends ParamInfo { + public ParamInfoVector3f(Class paramClass, String name, String valueType, String description) { + super(paramClass, name, valueType, description); + } + + @Override + protected Vector3f fromString(String string) { + String[] split = string.split(","); + + if (split.length != 3) { + return null; + } + + return new Vector3f(Float.parseFloat(split[0]), Float.parseFloat(split[1]), Float.parseFloat(split[2])); + } + + @Override + public String toString(Vector3f transformation) { + return String.format("%s,%s,%s", transformation.x(), transformation.y(), transformation.z()); + } +} 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 9a019822..52d4a715 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 @@ -54,7 +54,7 @@ public class DisguiseParser { /** * > */ - private static HashMap> defaultWatcherValues = new HashMap<>(); + private static final HashMap> defaultWatcherValues = new HashMap<>(); public static void createDefaultMethods() { try { @@ -324,7 +324,7 @@ public class DisguiseParser { if (!Objects.deepEquals(dObj, object)) { throw new IllegalStateException(String.format( "%s has conflicting values in class %s! This means it expected the same value again but " + "received a " + - "different value on a different disguise! %s is not the same as %s!", setMethod.toString(), setMethod.toString(), object, dObj)); + "different value on a different disguise! %s is not the same as %s!", setMethod.toString(), setMethod, object, dObj)); } return; 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 12e81511..d73be8ba 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 @@ -1,6 +1,5 @@ package me.libraryaddict.disguise.utilities.parser; -import lombok.Getter; import me.libraryaddict.disguise.DisguiseConfig; import me.libraryaddict.disguise.disguisetypes.DisguiseType; import org.bukkit.entity.Ageable; @@ -24,10 +23,10 @@ import java.util.stream.Collectors; * Created by libraryaddict on 14/10/2018. */ public class DisguisePermissions { - private class PermissionStorage { - private DisguisePerm disguisePerm; - private List permittedOptions = new ArrayList<>(); - private List negatedOptions = new ArrayList<>(); + private static class PermissionStorage { + private final DisguisePerm disguisePerm; + private final List permittedOptions = new ArrayList<>(); + private final List negatedOptions = new ArrayList<>(); private boolean wildcardAllow = false; public PermissionStorage(DisguisePerm disguisePerm) { @@ -39,9 +38,9 @@ public class DisguisePermissions { } } - private class ParsedPermission { - private Vector disguisePerm; - private HashMap options; + private static class ParsedPermission { + private final Vector disguisePerm; + private final HashMap options; private boolean negated; /** * 0 = Names a specific disguise @@ -50,8 +49,8 @@ public class DisguisePermissions { * 3... = etc * 4 = * = Disguise wildcard */ - private byte inheritance; - private boolean wildcardCommand; + private final byte inheritance; + private final boolean wildcardCommand; public ParsedPermission(DisguisePerm[] disguisePerm, HashMap options, byte inheritance, boolean wildcardCommand) { this.disguisePerm = new Vector<>(Arrays.asList(disguisePerm)); @@ -81,10 +80,10 @@ public class DisguisePermissions { } } - class DisguisePermitted { - private boolean strictAllowed; - private List optionsAllowed; - private List optionsForbidden; + static class DisguisePermitted { + private final boolean strictAllowed; + private final List optionsAllowed; + private final List optionsForbidden; public DisguisePermitted(List optionsAllowed, List optionsForbidden, boolean strict) { this.strictAllowed = strict; @@ -108,7 +107,7 @@ public class DisguisePermissions { /** * List of PermissionStorage that the permission holder is able to use */ - private List disguises = new ArrayList<>(); + private final List disguises = new ArrayList<>(); /** * @param permissionHolder The permissions to check @@ -362,7 +361,7 @@ public class DisguisePermissions { for (Map.Entry entry : parsedPermission.options.entrySet()) { // If permission is negated, reverse the option from 'allowed' to 'denied' or vice versa - boolean allowUse = parsedPermission.isNegated() ? !entry.getValue() : entry.getValue(); + boolean allowUse = parsedPermission.isNegated() != entry.getValue(); storage.permittedOptions.remove(entry.getKey()); storage.negatedOptions.remove(entry.getKey()); @@ -409,8 +408,8 @@ public class DisguisePermissions { storage.negatedOptions.add("setinvisible"); } - if (sender instanceof Player && !sender.isOp() && !DisguiseConfig.isExplicitDisguisePermissions()) { - for (String unsafeMethod : new String[]{"setYModifier", "setNameYModifier"}) { + if (sender instanceof Player && !sender.isOp()) { + for (String unsafeMethod : DisguiseConfig.getDisabledMethods()) { storage.permittedOptions.remove(unsafeMethod); storage.negatedOptions.add(unsafeMethod); } @@ -418,6 +417,12 @@ public class DisguisePermissions { disguises.add(storage); } + + if (sender.isOp() || DisguiseConfig.getDisabledDisguises().isEmpty()) { + return; + } + + disguises.removeIf(storage -> DisguiseConfig.getDisabledDisguises().contains(storage.getDisguise().getType())); } private int getInheritance(DisguisePerm disguisePerm, String permissionName) { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/plugin/BisectHosting.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/plugin/BisectHosting.java index 5153aa61..250dabaa 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/plugin/BisectHosting.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/plugin/BisectHosting.java @@ -15,7 +15,7 @@ public class BisectHosting { public boolean isBisectHosted(String pluginName) { boolean claimedHosted = DisguiseConfig.isBisectHosted(); String ip = Bukkit.getIp(); - String parsedIP = ip.replaceAll("[^:0-9.]", ""); + String parsedIP = ip.replaceAll("[^:\\d.]", ""); // If not hosted by bisect if (!claimedHosted && DisguiseConfig.getSavedServerIp().equals(parsedIP)) { @@ -24,7 +24,7 @@ public class BisectHosting { boolean hostedBy = false; - if (ip.matches("((25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])(\\.(?!$)|$)){4}")) { + if (ip.matches("((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)(\\.(?!$)|$)){4}")) { try { ip = getFinalURL("http://" + ip); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/plugin/PluginInformation.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/plugin/PluginInformation.java index 9ef5c406..1beea2c4 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/plugin/PluginInformation.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/plugin/PluginInformation.java @@ -10,14 +10,14 @@ import java.util.Date; */ public class PluginInformation { @Getter - private long size; - private String userID; - private String resourceID; - private String downloadID; - private boolean premium; - private String version; - private String buildNumber; - private String buildDate; + private final long size; + private final String userID; + private final String resourceID; + private final String downloadID; + private final boolean premium; + private final String version; + private final String buildNumber; + private final String buildDate; public PluginInformation(long size, String userID, String resourceID, String downloadID, boolean premium, String version, String buildNumber, String buildDate) { @@ -62,13 +62,13 @@ public class PluginInformation { public Date getParsedBuildDate() { try { return new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(getBuildDate()); - } catch (Exception ex) { + } catch (Exception ignored) { } return null; } public boolean isLegit() { - return getUserID().matches("[0-9]+") && !getUserID().equals("12345") && getResourceID().equals("32453") && getDownloadID().matches("-?[0-9]+"); + return getUserID().matches("\\d+") && !getUserID().equals("12345") && getResourceID().equals("32453") && getDownloadID().matches("-?\\d+"); } } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/ClassGetter.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/ClassGetter.java index e896e39a..c9baae1d 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/ClassGetter.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/ClassGetter.java @@ -93,7 +93,7 @@ public class ClassGetter { try { String relPath = pkgname.replace('.', '/'); String resPath = URLDecoder.decode(resource.getPath(), "UTF-8"); - String jarPath = resPath.replaceFirst("[.]jar[!].*", ".jar").replaceFirst("file:", ""); + String jarPath = resPath.replaceFirst("\\.jar!.*", ".jar").replaceFirst("file:", ""); JarFile jarFile = new JarFile(jarPath); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/ClassMappings.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/ClassMappings.java index 24ce4f92..e61d4ced 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/ClassMappings.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/ClassMappings.java @@ -11,7 +11,7 @@ import java.util.HashMap; import java.util.Map; public class ClassMappings { - private static HashMap classLocations = new HashMap<>(); + private static final HashMap classLocations = new HashMap<>(); private static final String[] packages = getPackages(); diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/FakeBoundingBox.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/FakeBoundingBox.java index fb6a52d5..92dd72cc 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/FakeBoundingBox.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/FakeBoundingBox.java @@ -2,9 +2,9 @@ package me.libraryaddict.disguise.utilities.reflection; public class FakeBoundingBox { - private double xMod; - private double yMod; - private double zMod; + private final double xMod; + private final double yMod; + private final double zMod; public FakeBoundingBox(double xMod, double yMod, double zMod) { this.xMod = xMod; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/NmsVersion.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/NmsVersion.java index 851dfb18..fb814a89 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/NmsVersion.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/reflection/NmsVersion.java @@ -13,6 +13,7 @@ public enum NmsVersion { v1_18, v1_19_R1, v1_19_R2, + v1_19_R3, UNSUPPORTED; /** 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 26e8919e..3a41941e 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 @@ -1475,7 +1475,9 @@ public class ReflectionManager { return entityPoseClass; } else if (NbtWrapper.class.isAssignableFrom(cl)) { return getNmsClass("NBTTagCompound"); - } else if (NmsVersion.v1_19_R1.isSupported()) { + } + + if (NmsVersion.v1_19_R1.isSupported()) { if (Frog.Variant.class.isAssignableFrom(cl)) { return getNmsClass("FrogVariant"); } @@ -1489,6 +1491,12 @@ public class ReflectionManager { } } + if (NmsVersion.v1_19_R3.isSupported()) { + if (BlockData.class.isAssignableFrom(cl)) { + return getNmsClass("IBlockData"); + } + } + return cl; } @@ -1542,6 +1550,7 @@ public class ReflectionManager { } } else if (value instanceof Vector3F) { Vector3F angle = (Vector3F) value; + if (nmsReflection != null) { return nmsReflection.convertVec3(angle); } @@ -2266,6 +2275,10 @@ public class ReflectionManager { switch (disguiseType) { case ALLAY: case AXOLOTL: + case BLOCK_DISPLAY: + case INTERACTION: + case ITEM_DISPLAY: + case TEXT_DISPLAY: case CHEST_BOAT: case FROG: case GLOW_ITEM_FRAME: 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 index 1cfc5c9d..1a9cb824 100644 --- 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 @@ -1,7 +1,6 @@ package me.libraryaddict.disguise.utilities.reflection.annotations; import lombok.Getter; -import lombok.RequiredArgsConstructor; import me.libraryaddict.disguise.disguisetypes.DisguiseType; import java.util.Arrays; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/sounds/DisguiseSoundEnums.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/sounds/DisguiseSoundEnums.java index 6a171a8c..59ffd64f 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/sounds/DisguiseSoundEnums.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/sounds/DisguiseSoundEnums.java @@ -31,6 +31,8 @@ public enum DisguiseSoundEnums { BLAZE(Sound.ENTITY_BLAZE_HURT, null, Sound.ENTITY_BLAZE_DEATH, Sound.ENTITY_BLAZE_AMBIENT, Sound.ENTITY_PLAYER_SMALL_FALL, Sound.ENTITY_PLAYER_BIG_FALL, Sound.ENTITY_BLAZE_BURN, Sound.ENTITY_BLAZE_SHOOT), + BLOCK_DISPLAY(null, null, null, null), + BOAT(null, Sound.ENTITY_BOAT_PADDLE_WATER, null, null, Sound.ENTITY_BOAT_PADDLE_LAND), CAMEL(Sound.ENTITY_CAMEL_HURT, new Sound[]{Sound.ENTITY_CAMEL_STEP, Sound.ENTITY_CAMEL_STEP_SAND}, Sound.ENTITY_CAMEL_DEATH, Sound.ENTITY_CAMEL_AMBIENT, @@ -101,11 +103,9 @@ public enum DisguiseSoundEnums { Sound.ENTITY_GOAT_SCREAMING_RAM_IMPACT, Sound.ENTITY_GOAT_SCREAMING_PREPARE_RAM, Sound.ENTITY_GOAT_SCREAMING_LONG_JUMP, Sound.ENTITY_GOAT_SCREAMING_HURT), - GUARDIAN(new Sound[]{Sound.ENTITY_GUARDIAN_HURT, Sound.ENTITY_GUARDIAN_HURT_LAND}, null, new Sound[] - - {Sound.ENTITY_GUARDIAN_DEATH, Sound.ENTITY_GUARDIAN_DEATH_LAND}, new Sound[] - - {Sound.ENTITY_GUARDIAN_AMBIENT, Sound.ENTITY_GUARDIAN_AMBIENT_LAND}, Sound.ENTITY_GUARDIAN_FLOP), + GUARDIAN(new Sound[]{Sound.ENTITY_GUARDIAN_HURT, Sound.ENTITY_GUARDIAN_HURT_LAND}, null, + new Sound[]{Sound.ENTITY_GUARDIAN_DEATH, Sound.ENTITY_GUARDIAN_DEATH_LAND}, + new Sound[]{Sound.ENTITY_GUARDIAN_AMBIENT, Sound.ENTITY_GUARDIAN_AMBIENT_LAND}, Sound.ENTITY_GUARDIAN_FLOP), HOGLIN(Sound.ENTITY_HOGLIN_HURT, Sound.ENTITY_HOGLIN_STEP, Sound.ENTITY_HOGLIN_DEATH, Sound.ENTITY_HOGLIN_AMBIENT, Sound.ENTITY_HOGLIN_CONVERTED_TO_ZOMBIFIED, Sound.ENTITY_HOGLIN_ANGRY, Sound.ENTITY_HOGLIN_RETREAT), @@ -119,8 +119,12 @@ public enum DisguiseSoundEnums { ILLUSIONER(Sound.ENTITY_ILLUSIONER_HURT, null, Sound.ENTITY_ILLUSIONER_DEATH, Sound.ENTITY_ILLUSIONER_AMBIENT, Sound.ENTITY_ILLUSIONER_CAST_SPELL, Sound.ENTITY_ILLUSIONER_PREPARE_BLINDNESS, Sound.ENTITY_ILLUSIONER_PREPARE_MIRROR, Sound.ENTITY_ILLUSIONER_MIRROR_MOVE), + INTERACTION(null, null, null, null), + IRON_GOLEM(Sound.ENTITY_IRON_GOLEM_HURT, Sound.ENTITY_IRON_GOLEM_STEP, Sound.ENTITY_IRON_GOLEM_DEATH, Sound.ENTITY_IRON_GOLEM_ATTACK), + ITEM_DISPLAY(null, null, null, null), + LLAMA(Sound.ENTITY_LLAMA_HURT, Sound.ENTITY_LLAMA_STEP, Sound.ENTITY_LLAMA_DEATH, Sound.ENTITY_LLAMA_AMBIENT, Sound.ENTITY_LLAMA_ANGRY, Sound.ENTITY_LLAMA_CHEST, Sound.ENTITY_LLAMA_EAT, Sound.ENTITY_LLAMA_SWAG), @@ -152,13 +156,9 @@ public enum DisguiseSoundEnums { new Sound[]{Sound.ENTITY_PANDA_AMBIENT, Sound.ENTITY_PANDA_AGGRESSIVE_AMBIENT, Sound.ENTITY_PANDA_WORRIED_AMBIENT}, Sound.ENTITY_PANDA_BITE, Sound.ENTITY_PANDA_CANT_BREED, Sound.ENTITY_PANDA_EAT, Sound.ENTITY_PANDA_PRE_SNEEZE, Sound.ENTITY_PANDA_SNEEZE), - PARROT(Sound.ENTITY_PARROT_HURT, Sound.ENTITY_PARROT_STEP, Sound.ENTITY_PARROT_DEATH, Sound.ENTITY_PARROT_AMBIENT, Arrays.stream(Sound.values()). - - filter(sound -> sound.name(). - - contains("PARROT_IMITATE") || sound == Sound.ENTITY_PARROT_EAT || sound == Sound.ENTITY_PARROT_FLY). - - toArray(Sound[]::new)), + PARROT(Sound.ENTITY_PARROT_HURT, Sound.ENTITY_PARROT_STEP, Sound.ENTITY_PARROT_DEATH, Sound.ENTITY_PARROT_AMBIENT, Arrays.stream(Sound.values()) + .filter(sound -> sound.name().contains("PARROT_IMITATE") || sound == Sound.ENTITY_PARROT_EAT || sound == Sound.ENTITY_PARROT_FLY) + .toArray(Sound[]::new)), PIG(Sound.ENTITY_PIG_HURT, Sound.ENTITY_PIG_STEP, Sound.ENTITY_PIG_DEATH, Sound.ENTITY_PIG_AMBIENT), @@ -210,19 +210,18 @@ public enum DisguiseSoundEnums { SKELETON(Sound.ENTITY_SKELETON_HURT, Sound.ENTITY_SKELETON_STEP, Sound.ENTITY_SKELETON_DEATH, Sound.ENTITY_SKELETON_AMBIENT), SKELETON_HORSE(Sound.ENTITY_SKELETON_HORSE_HURT, new Sound[]{Sound.BLOCK_GRASS_STEP, Sound.ENTITY_HORSE_STEP_WOOD}, Sound.ENTITY_SKELETON_HORSE_DEATH, - new Sound[] - - {Sound.ENTITY_SKELETON_HORSE_AMBIENT, Sound.ENTITY_SKELETON_HORSE_AMBIENT_WATER}, Sound.ENTITY_HORSE_GALLOP, Sound.ENTITY_HORSE_SADDLE, + new Sound[]{Sound.ENTITY_SKELETON_HORSE_AMBIENT, Sound.ENTITY_SKELETON_HORSE_AMBIENT_WATER}, Sound.ENTITY_HORSE_GALLOP, Sound.ENTITY_HORSE_SADDLE, Sound.ENTITY_HORSE_ARMOR, Sound.ENTITY_HORSE_LAND, Sound.ENTITY_HORSE_JUMP, Sound.ENTITY_SKELETON_HORSE_GALLOP_WATER, Sound.ENTITY_SKELETON_HORSE_JUMP_WATER, Sound.ENTITY_SKELETON_HORSE_SWIM, Sound.ENTITY_SKELETON_HORSE_STEP_WATER), - SLIME(new Sound[]{Sound.ENTITY_SLIME_HURT, Sound.ENTITY_SLIME_HURT_SMALL}, new Sound[] - - {Sound.ENTITY_SLIME_JUMP, Sound.ENTITY_SLIME_JUMP_SMALL}, new Sound[] - - {Sound.ENTITY_SLIME_DEATH, Sound.ENTITY_SLIME_DEATH_SMALL}, null, Sound.ENTITY_SLIME_ATTACK, Sound.ENTITY_SLIME_SQUISH, + SLIME(new Sound[]{Sound.ENTITY_SLIME_HURT, Sound.ENTITY_SLIME_HURT_SMALL}, new Sound[]{Sound.ENTITY_SLIME_JUMP, Sound.ENTITY_SLIME_JUMP_SMALL}, + new Sound[]{Sound.ENTITY_SLIME_DEATH, Sound.ENTITY_SLIME_DEATH_SMALL}, null, Sound.ENTITY_SLIME_ATTACK, Sound.ENTITY_SLIME_SQUISH, Sound.ENTITY_SLIME_SQUISH_SMALL), + SNIFFER(Sound.ENTITY_SNIFFER_HURT, Sound.ENTITY_SNIFFER_STEP, Sound.ENTITY_SNIFFER_DEATH, Sound.ENTITY_SNIFFER_IDLE, Sound.ENTITY_SNIFFER_DIGGING, + Sound.ENTITY_SNIFFER_DIGGING_STOP, Sound.ENTITY_SNIFFER_DROP_SEED, Sound.ENTITY_SNIFFER_EAT, Sound.ENTITY_SNIFFER_SEARCHING, + Sound.ENTITY_SNIFFER_SCENTING, Sound.ENTITY_SNIFFER_HAPPY, Sound.ENTITY_SNIFFER_SNIFFING), + SNOWMAN(Sound.ENTITY_SNOW_GOLEM_HURT, null, Sound.ENTITY_SNOW_GOLEM_DEATH, Sound.ENTITY_SNOW_GOLEM_AMBIENT, Sound.ENTITY_SNOW_GOLEM_SHOOT), SPIDER(Sound.ENTITY_SPIDER_HURT, Sound.ENTITY_SPIDER_STEP, Sound.ENTITY_SPIDER_DEATH, Sound.ENTITY_SPIDER_AMBIENT), @@ -237,17 +236,16 @@ public enum DisguiseSoundEnums { TADPOLE(Sound.ENTITY_TADPOLE_HURT, null, Sound.ENTITY_TADPOLE_DEATH, null, Sound.ENTITY_TADPOLE_FLOP, Sound.ITEM_BUCKET_EMPTY_TADPOLE, Sound.ITEM_BUCKET_FILL_TADPOLE), + TEXT_DISPLAY(null, null, null, null), + TRADER_LLAMA(Sound.ENTITY_LLAMA_HURT, Sound.ENTITY_LLAMA_STEP, Sound.ENTITY_LLAMA_DEATH, Sound.ENTITY_LLAMA_AMBIENT, Sound.ENTITY_LLAMA_ANGRY, Sound.ENTITY_LLAMA_CHEST, Sound.ENTITY_LLAMA_EAT, Sound.ENTITY_LLAMA_SWAG), TROPICAL_FISH(Sound.ENTITY_TROPICAL_FISH_HURT, null, Sound.ENTITY_TROPICAL_FISH_DEATH, Sound.ENTITY_TROPICAL_FISH_AMBIENT, Sound.ENTITY_TROPICAL_FISH_FLOP, Sound.ENTITY_FISH_SWIM), - TURTLE(new Sound[]{Sound.ENTITY_TURTLE_HURT, Sound.ENTITY_TURTLE_HURT_BABY}, new Sound[] - - {Sound.ENTITY_TURTLE_SHAMBLE, Sound.ENTITY_TURTLE_SHAMBLE_BABY}, new Sound[] - - {Sound.ENTITY_TURTLE_DEATH, Sound.ENTITY_TURTLE_DEATH_BABY}, Sound.ENTITY_TURTLE_AMBIENT_LAND, Sound.ENTITY_TURTLE_LAY_EGG), + TURTLE(new Sound[]{Sound.ENTITY_TURTLE_HURT, Sound.ENTITY_TURTLE_HURT_BABY}, new Sound[]{Sound.ENTITY_TURTLE_SHAMBLE, Sound.ENTITY_TURTLE_SHAMBLE_BABY}, + new Sound[]{Sound.ENTITY_TURTLE_DEATH, Sound.ENTITY_TURTLE_DEATH_BABY}, Sound.ENTITY_TURTLE_AMBIENT_LAND, Sound.ENTITY_TURTLE_LAY_EGG), VEX(Sound.ENTITY_VEX_HURT, null, Sound.ENTITY_VEX_DEATH, Sound.ENTITY_VEX_AMBIENT, Sound.ENTITY_VEX_CHARGE), @@ -296,7 +294,7 @@ public enum DisguiseSoundEnums { Sound.ENTITY_ZOMBIFIED_PIGLIN_ANGRY, Sound.ENTITY_PIGLIN_CONVERTED_TO_ZOMBIFIED); @Getter - private HashMap sounds = new HashMap<>(); + private final HashMap sounds = new HashMap<>(); DisguiseSoundEnums(Object hurt, Object step, Object death, Object idle, Object... sounds) { if (LibsDisguises.getInstance() != null) { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateFiller.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateFiller.java index 6cd7e1a8..7a143676 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateFiller.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateFiller.java @@ -11,6 +11,7 @@ import org.bukkit.entity.EntityType; import java.util.ArrayList; import java.util.Locale; +import java.util.Map; /** * Created by libraryaddict on 10/06/2017. @@ -29,17 +30,10 @@ public class TranslateFiller { TranslateType.DISGUISE_OPTIONS_PARAMETERS.save(info.getRawDescription(), "Description for the disguise option " + info.getRawName()); if (info.canTranslateValues()) { - for (String e : info.getValues().keySet()) { + for (String e : ((Map) info.getValues()).keySet()) { TranslateType.DISGUISE_OPTIONS_PARAMETERS.save(e, "Used for the disguise option " + info.getRawName()); } } - - /*if (info.getOtherValues() != null) { - for (String e : info.getOtherValues()) { - TranslateType.DISGUISE_OPTIONS_PARAMETERS - .save(e, "Used for the disguise option " + info.getRawName()); - } - }*/ } for (DisguiseType type : DisguiseType.values()) { diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateType.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateType.java index 9dc81338..c1451508 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateType.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateType.java @@ -11,7 +11,6 @@ import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; import java.io.FileOutputStream; -import java.io.FileWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; @@ -35,8 +34,8 @@ public enum TranslateType { DISGUISE_OPTIONS_PARAMETERS("disguise_option_parameters"); private File file; - private LinkedHashMap translated = new LinkedHashMap<>(); - private HashMap toDeDupe = new HashMap<>(); + private final LinkedHashMap translated = new LinkedHashMap<>(); + private final HashMap toDeDupe = new HashMap<>(); private OutputStreamWriter writer; private int written; @@ -77,7 +76,6 @@ public enum TranslateType { } // Close the writer - try { if (writer != null) { writer.close(); @@ -121,6 +119,8 @@ public enum TranslateType { if (!newKey.equals(translated.get(newKey))) { diff++; + translated.put(newKey, + translated.get(newKey) + (diff % 3 == 0 || LibsMsg.OWNED_BY.getRaw().contains("Plugin registered to '") ? "" : " ")); } } } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/updates/LDJenkins.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/updates/LDJenkins.java index b27ab6e1..34f02538 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/updates/LDJenkins.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/updates/LDJenkins.java @@ -30,7 +30,7 @@ public class LDJenkins { @AllArgsConstructor @Getter - private class JenkinsUpdate implements DisguiseUpdate { + private static class JenkinsUpdate implements DisguiseUpdate { private final Date fetched = new Date(); private final String version; private final String[] changelog; @@ -71,7 +71,7 @@ public class LDJenkins { return new String[0]; } - return ((String) map.get("body")).split("(\\r|\\n)+"); + return ((String) map.get("body")).split("[\\r\\n]+"); } catch (Exception ignored) { } diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/updates/UpdateChecker.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/updates/UpdateChecker.java index d5b5b94e..ab8627d1 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/updates/UpdateChecker.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/updates/UpdateChecker.java @@ -180,7 +180,7 @@ public class UpdateChecker { updateMessage = new String[]{LibsMsg.UPDATE_READY.get(currentVersion, getUpdate().getVersion()), LibsMsg.UPDATE_HOW.get()}; } else { - if (!getUpdate().getVersion().matches("[0-9]+")) { + if (!getUpdate().getVersion().matches("\\d+")) { return LibsMsg.UPDATE_FAILED; } @@ -192,7 +192,7 @@ public class UpdateChecker { String build = LibsDisguises.getInstance().getBuildNo(); - updateMessage = new String[]{LibsMsg.UPDATE_READY_SNAPSHOT.get((build.matches("[0-9]+") ? "#" : "") + build, newBuild), LibsMsg.UPDATE_HOW.get()}; + updateMessage = new String[]{LibsMsg.UPDATE_READY_SNAPSHOT.get((build.matches("\\d+") ? "#" : "") + build, newBuild), LibsMsg.UPDATE_HOW.get()}; } return null; @@ -253,8 +253,8 @@ public class UpdateChecker { newVersion = newVersion.replaceAll("(v)|(-SNAPSHOT)", ""); // If the server has been online for less than 6 hours and both versions are 1.1.1 kind of versions - if (started + TimeUnit.HOURS.toMillis(6) > System.currentTimeMillis() && currentVersion.matches("[0-9]+(\\.[0-9]+)*") && - newVersion.matches("[0-9]+(\\.[0-9]+)*")) { + if (started + TimeUnit.HOURS.toMillis(6) > System.currentTimeMillis() && currentVersion.matches("\\d+(\\.\\d+)*") && + newVersion.matches("\\d+(\\.\\d+)*")) { int cVersion = Integer.parseInt(currentVersion.replace(".", "")); int nVersion = Integer.parseInt(newVersion.replace(".", "")); 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 1780b01d..dd120a77 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 @@ -6,11 +6,11 @@ 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.WatcherInfo; 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; @@ -26,7 +26,6 @@ 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. @@ -148,8 +147,7 @@ public class CompileMethods { List list = Arrays.asList(usableBy); - unusableBy = - Arrays.stream(DisguiseType.values()).filter(type -> !list.contains(type)).collect(Collectors.toList()).toArray(new DisguiseType[0]); + unusableBy = Arrays.stream(DisguiseType.values()).filter(type -> !list.contains(type)).toArray(DisguiseType[]::new); } else if (method.isAnnotationPresent(MethodIgnoredBy.class)) { unusableBy = method.getAnnotation(MethodIgnoredBy.class).value(); 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 8c946126..46e9ab00 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 @@ -29,10 +29,10 @@ import java.util.List; * Created by libraryaddict on 13/02/2020. */ public class DisguiseMethods { - private HashMap, List> watcherMethods = new HashMap<>(); - private HashMap, List> disguiseMethods = new HashMap<>(); + private final HashMap, List> watcherMethods = new HashMap<>(); + private final HashMap, List> disguiseMethods = new HashMap<>(); @Getter - private ArrayList methods = new ArrayList<>(); + private final ArrayList methods = new ArrayList<>(); public ArrayList getMethods(Class c) { ArrayList methods = new ArrayList<>(); diff --git a/plugin/src/main/resources/configs/features.yml b/plugin/src/main/resources/configs/features.yml index 16d0b20a..f6d749b4 100644 --- a/plugin/src/main/resources/configs/features.yml +++ b/plugin/src/main/resources/configs/features.yml @@ -39,3 +39,19 @@ NotifyBar: ACTION_BAR BossBarColor: GREEN # https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/boss/BarStyle.html BossBarStyle: SOLID + +# What disguise types are default to OP only, because they are prone to abuse. +# By default, this contains TEXT_DISPLAY, ITEM_DISPLAY, BLOCK_DISPLAY and INTERACTION +DisabledDisguises: + - TEXT_DISPLAY + - ITEM_DISPLAY + - BLOCK_DISPLAY + - INTERACTION + +# These disguise methods are also limited to OP only, because they're open to abuse +# setInvisible has overlap with the config option for disabled invsibility, if either is used, it will be disabled. +# Thankfully, only trusted people are OP. So this doesn't need further configuration. +DisabledMethods: + - setYModifier + - setNameYModifier + - setInvisible \ No newline at end of file diff --git a/plugin/src/test/java/me/libraryaddict/disguise/utilities/DisguiseTypesTest.java b/plugin/src/test/java/me/libraryaddict/disguise/utilities/DisguiseTypesTest.java index 13ad4406..448a649d 100644 --- a/plugin/src/test/java/me/libraryaddict/disguise/utilities/DisguiseTypesTest.java +++ b/plugin/src/test/java/me/libraryaddict/disguise/utilities/DisguiseTypesTest.java @@ -3,43 +3,43 @@ package me.libraryaddict.disguise.utilities; import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.utilities.sounds.DisguiseSoundEnums; import org.bukkit.entity.EntityType; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; /** * Created by libraryaddict on 4/05/2019. */ public class DisguiseTypesTest { - @Test - public void testDisguiseTypes() { - for (EntityType entityType : EntityType.values()) { - if (entityType == EntityType.LIGHTNING) { - continue; - } else if (entityType == EntityType.UNKNOWN) { - continue; - } - DisguiseType disguiseType = DisguiseType.getType(entityType); - - Assert.assertSame(entityType.name() + " has no DisguiseType registered!", disguiseType.name(), entityType.name()); + @ParameterizedTest + @EnumSource(EntityType.class) + public void testDisguiseType(EntityType entityType) { + if (entityType == EntityType.LIGHTNING) { + return; + } else if (entityType == EntityType.UNKNOWN) { + return; } + + DisguiseType disguiseType = DisguiseType.getType(entityType); + + Assertions.assertSame(disguiseType.name(), entityType.name(), entityType.name() + " has no DisguiseType registered!"); } - @Test - public void testDisguiseSounds() { - for (DisguiseType type : DisguiseType.values()) { - if (!type.isMob() || type.isUnknown() || type.isCustom()) { - continue; - } - - DisguiseSoundEnums enums = null; - - try { - enums = DisguiseSoundEnums.valueOf(type.name()); - } catch (Exception ignored) { - } - - Assert.assertNotNull(type.name() + " has no sound group registered!", enums); + @ParameterizedTest + @EnumSource(DisguiseType.class) + public void testDisguiseSounds(DisguiseType type) { + if (!type.isMob() || type.isUnknown() || type.isCustom()) { + return; } + + DisguiseSoundEnums enums = null; + + try { + enums = DisguiseSoundEnums.valueOf(type.name()); + } catch (Exception ignored) { + } + + Assertions.assertNotNull(enums, type.name() + " has no sound group registered!"); } } diff --git a/pom.xml b/pom.xml index ce3aa961..34f43bc5 100644 --- a/pom.xml +++ b/pom.xml @@ -24,8 +24,8 @@ 1.18.22 5.0.0-SNAPSHOT - 1.19.3-R0.1-SNAPSHOT - 4.13.2 + 1.19.4-R0.1-SNAPSHOT + 5.9.2 1.16.5-R0.1-SNAPSHOT 1.12-SNAPSHOT 4.2.0-SNAPSHOT