From c66e0a88e4835ccbbbb71128101f473faab475e4 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 1 Jun 2019 12:13:36 +1200 Subject: [PATCH] Don't use ProtocolLib's EntityModifier --- .../disguise/utilities/DisguiseUtilities.java | 12 ++++++++++++ .../PacketListenerClientInteract.java | 7 +++++-- .../packets/packetlisteners/PacketListenerMain.java | 10 +++++++--- .../packetlisteners/PacketListenerSounds.java | 6 +++++- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java b/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java index cc2b677d..c5ba5df2 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java @@ -1826,6 +1826,18 @@ public class DisguiseUtilities { } } + public static Entity getEntity(World world, int entityId) { + for (Entity e : world.getEntities()) { + if (e.getEntityId() != entityId) { + continue; + } + + return e; + } + + return null; + } + /** * Get the Y level to add to the disguise for realism. */ diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerClientInteract.java b/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerClientInteract.java index 92597b90..d7cff659 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerClientInteract.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerClientInteract.java @@ -17,6 +17,7 @@ import me.libraryaddict.disguise.disguisetypes.TargetedDisguise; import me.libraryaddict.disguise.disguisetypes.watchers.SheepWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.WolfWatcher; import me.libraryaddict.disguise.events.DisguiseInteractEvent; +import me.libraryaddict.disguise.utilities.DisguiseUtilities; import org.bukkit.Bukkit; import org.bukkit.entity.*; import org.bukkit.inventory.EquipmentSlot; @@ -40,9 +41,11 @@ public class PacketListenerClientInteract extends PacketAdapter { PacketContainer packet = event.getPacket(); - StructureModifier entityModifer = packet.getEntityModifier(observer.getWorld()); + Entity entity = DisguiseUtilities.getEntity(observer.getWorld(), packet.getIntegers().read(0)); - Entity entity = entityModifer.read(0); + if (entity == null) { + return; + } if (entity instanceof ExperienceOrb || entity instanceof Item || entity instanceof Arrow || entity == observer) { diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerMain.java b/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerMain.java index 0cc1eaad..4f3d2be3 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerMain.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerMain.java @@ -11,6 +11,8 @@ import com.comphenix.protocol.reflect.StructureModifier; import me.libraryaddict.disguise.DisguiseAPI; import me.libraryaddict.disguise.LibsDisguises; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.EntityPose; +import me.libraryaddict.disguise.utilities.DisguiseUtilities; import me.libraryaddict.disguise.utilities.packets.LibsPackets; import me.libraryaddict.disguise.utilities.packets.PacketsManager; import org.bukkit.entity.Entity; @@ -35,13 +37,15 @@ public class PacketListenerMain extends PacketAdapter { return; // First get the entity, the one sending this packet - StructureModifier entityModifer = event.getPacket().getEntityModifier(observer.getWorld()); - org.bukkit.entity.Entity entity = entityModifer.read((Server.COLLECT == event.getPacketType() ? 1 : 0)); + int entityId = event.getPacket().getIntegers().read(Server.COLLECT == event.getPacketType() ? 1 : 0); + + Entity entity = DisguiseUtilities.getEntity(observer.getWorld(), entityId); // If the entity is the same as the sender. Don't disguise! // Prevents problems and there is no advantage to be gained. - if (entity == observer) + // Or if they are null and there's no disguise + if (entity == observer || entity == null) return; final Disguise disguise = DisguiseAPI.getDisguise(observer, entity); diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java b/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java index 9afd6d91..8beb12a4 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerSounds.java @@ -249,7 +249,11 @@ public class PacketListenerSounds extends PacketAdapter { } // It made a damage animation - Entity entity = event.getPacket().getEntityModifier(observer.getWorld()).read(0); + Entity entity = DisguiseUtilities.getEntity(observer.getWorld(), event.getPacket().getIntegers().read(0)); + + if (entity == null) { + return; + } Disguise disguise = DisguiseAPI.getDisguise(observer, entity);