From fa9a3501069b34aa6fc2dc25e04e2090f734048f Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 31 Jul 2013 17:12:39 +1200 Subject: [PATCH] Read desc Now throws a error when disguising when the player logs in right away - Informational Packet 44 is now using the ProtocolLib accepted id. --- .../libraryaddict/disguise/DisguiseAPI.java | 38 ++++++++++--------- .../libraryaddict/disguise/LibsDisguises.java | 4 +- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/me/libraryaddict/disguise/DisguiseAPI.java b/src/me/libraryaddict/disguise/DisguiseAPI.java index 2acae25f..4c2ad8cb 100644 --- a/src/me/libraryaddict/disguise/DisguiseAPI.java +++ b/src/me/libraryaddict/disguise/DisguiseAPI.java @@ -39,6 +39,7 @@ import net.minecraft.server.v1_6_R2.WatchableObject; import net.minecraft.server.v1_6_R2.World; import net.minecraft.server.v1_6_R2.WorldServer; +import org.apache.commons.lang.Validate; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.craftbukkit.v1_6_R2.entity.CraftEntity; @@ -49,7 +50,6 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import com.comphenix.protocol.Packets; -import com.comphenix.protocol.Packets.Server; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.events.ConnectionSide; import com.comphenix.protocol.events.ListenerPriority; @@ -66,7 +66,7 @@ public class DisguiseAPI { private static PacketListener packetListener; private static boolean sendVelocity; private static boolean soundsEnabled; - private static HashMap values = new HashMap(); + private static HashMap selfDisguisesIds = new HashMap(); private static boolean viewDisguises; private static PacketListener viewDisguisesListener; @@ -147,8 +147,8 @@ public class DisguiseAPI { } public static int getFakeDisguise(int id) { - if (values.containsKey(id)) - return values.get(id); + if (selfDisguisesIds.containsKey(id)) + return selfDisguisesIds.get(id); return -1; } @@ -321,18 +321,18 @@ public class DisguiseAPI { Packets.Server.REL_ENTITY_MOVE_LOOK, Packets.Server.ENTITY_LOOK, Packets.Server.ENTITY_TELEPORT, Packets.Server.ENTITY_HEAD_ROTATION, Packets.Server.ENTITY_METADATA, Packets.Server.ENTITY_EQUIPMENT, Packets.Server.ARM_ANIMATION, Packets.Server.ENTITY_LOCATION_ACTION, Packets.Server.MOB_EFFECT, - Packets.Server.ENTITY_STATUS, Packets.Server.ENTITY_VELOCITY, 44) { + Packets.Server.ENTITY_STATUS, Packets.Server.ENTITY_VELOCITY, Packets.Server.UPDATE_ATTRIBUTES) { @Override public void onPacketSending(PacketEvent event) { StructureModifier entityModifer = event.getPacket().getEntityModifier(event.getPlayer().getWorld()); org.bukkit.entity.Entity entity = entityModifer.read(0); - if (entity == event.getPlayer() && values.containsKey(entity.getEntityId())) { + if (entity == event.getPlayer() && selfDisguisesIds.containsKey(entity.getEntityId())) { PacketContainer[] packets = libsDisguises.transformPacket(event.getPacket(), event.getPlayer()); try { for (PacketContainer packet : packets) { if (packet.equals(event.getPacket())) packet = packet.deepClone(); - packet.getModifier().write(0, values.get(entity.getEntityId())); + packet.getModifier().write(0, selfDisguisesIds.get(entity.getEntityId())); ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet, false); } } catch (Exception ex) { @@ -386,8 +386,6 @@ public class DisguiseAPI { break; } } - if (event.getPacketID() == Server.ENTITY_STATUS) - System.out.print(event.isCancelled()); } } }; @@ -433,20 +431,22 @@ public class DisguiseAPI { } private static void removeVisibleDisguise(Player player) { - if (values.containsKey(player.getEntityId())) { + if (selfDisguisesIds.containsKey(player.getEntityId())) { PacketContainer packet = new PacketContainer(Packets.Server.DESTROY_ENTITY); - packet.getModifier().write(0, new int[] { values.get(player.getEntityId()) }); + packet.getModifier().write(0, new int[] { selfDisguisesIds.get(player.getEntityId()) }); try { ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet); } catch (Exception ex) { ex.printStackTrace(); } - values.remove(player.getEntityId()); + selfDisguisesIds.remove(player.getEntityId()); } EntityPlayer entityplayer = ((CraftPlayer) player).getHandle(); EntityTrackerEntry tracker = (EntityTrackerEntry) ((WorldServer) entityplayer.world).tracker.trackedEntities.get(player .getEntityId()); - tracker.trackedPlayers.remove(entityplayer); + if (tracker != null) { + tracker.trackedPlayers.remove(entityplayer); + } } private static void setupPlayer(Player player) { @@ -459,21 +459,23 @@ public class DisguiseAPI { field.setAccessible(true); id = field.getInt(null); field.set(null, id + 1); - values.put(player.getEntityId(), id); + selfDisguisesIds.put(player.getEntityId(), id); } catch (Exception ex) { ex.printStackTrace(); } EntityPlayer entityplayer = ((CraftPlayer) player).getHandle(); EntityTrackerEntry tracker = (EntityTrackerEntry) ((WorldServer) entityplayer.world).tracker.trackedEntities.get(player .getEntityId()); - + Validate.notNull(tracker, + "If you are disguising as soon as they log in, please wait a tick or 2 for their EntityTracker to be constructed"); tracker.trackedPlayers.add(entityplayer); // CraftBukkit end Packet20NamedEntitySpawn packet = new Packet20NamedEntitySpawn((EntityHuman) entityplayer); entityplayer.playerConnection.sendPacket(packet); if (!tracker.tracker.getDataWatcher().d()) { - entityplayer.playerConnection.sendPacket(new Packet40EntityMetadata(player.getEntityId(), tracker.tracker.getDataWatcher(), true)); + entityplayer.playerConnection.sendPacket(new Packet40EntityMetadata(player.getEntityId(), tracker.tracker + .getDataWatcher(), true)); } if (tracker.tracker instanceof EntityLiving) { @@ -497,8 +499,8 @@ public class DisguiseAPI { ex.printStackTrace(); } if (isMoving) { - entityplayer.playerConnection.sendPacket(new Packet28EntityVelocity(player.getEntityId(), tracker.tracker.motX, tracker.tracker.motY, - tracker.tracker.motZ)); + entityplayer.playerConnection.sendPacket(new Packet28EntityVelocity(player.getEntityId(), tracker.tracker.motX, + tracker.tracker.motY, tracker.tracker.motZ)); } // CraftBukkit start diff --git a/src/me/libraryaddict/disguise/LibsDisguises.java b/src/me/libraryaddict/disguise/LibsDisguises.java index d9ca102d..dc667067 100644 --- a/src/me/libraryaddict/disguise/LibsDisguises.java +++ b/src/me/libraryaddict/disguise/LibsDisguises.java @@ -84,7 +84,7 @@ public class LibsDisguises extends JavaPlugin { Packets.Server.NAMED_ENTITY_SPAWN, Packets.Server.ENTITY_METADATA, Packets.Server.ARM_ANIMATION, Packets.Server.REL_ENTITY_MOVE_LOOK, Packets.Server.ENTITY_LOOK, Packets.Server.ENTITY_TELEPORT, Packets.Server.ADD_EXP_ORB, Packets.Server.VEHICLE_SPAWN, Packets.Server.MOB_SPAWN, - Packets.Server.ENTITY_PAINTING, Packets.Server.COLLECT, 44) { + Packets.Server.ENTITY_PAINTING, Packets.Server.COLLECT, Packets.Server.UPDATE_ATTRIBUTES) { @Override public void onPacketSending(PacketEvent event) { Player observer = event.getPlayer(); @@ -314,7 +314,7 @@ public class LibsDisguises extends JavaPlugin { // This packet sends attributes switch (sentPacket.getID()) { - case 44: + case Packets.Server.UPDATE_ATTRIBUTES: { // Grab the values which are 'approved' to be sent for this entity