Fix an array bounds exception
This commit is contained in:
		| @@ -57,8 +57,8 @@ public class PlayerSkinHandler implements Listener { | ||||
|         private boolean sleepPackets; | ||||
|  | ||||
|         public boolean canRemove(boolean onMoved) { | ||||
|             return firstPacketSent + (DisguiseConfig.getTablistRemoveDelay() * 50) + | ||||
|                     (onMoved ? 0 : DisguiseConfig.getPlayerDisguisesSkinExpiresMove() * 50) < System.currentTimeMillis(); | ||||
|             return firstPacketSent + (DisguiseConfig.getTablistRemoveDelay() * 50) + (onMoved ? 0 : DisguiseConfig.getPlayerDisguisesSkinExpiresMove() * 50) < | ||||
|                     System.currentTimeMillis(); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
| @@ -75,21 +75,21 @@ public class PlayerSkinHandler implements Listener { | ||||
|     } | ||||
|  | ||||
|     @Getter | ||||
|     private final Cache<Player, List<PlayerSkin>> cache = CacheBuilder.newBuilder().weakKeys() | ||||
|             .expireAfterWrite(DisguiseConfig.getPlayerDisguisesSkinExpiresMove() * 50, TimeUnit.MILLISECONDS) | ||||
|             .removalListener((event) -> { | ||||
|                 if (event.getCause() != RemovalCause.EXPIRED) { | ||||
|                     return; | ||||
|                 } | ||||
|     private final Cache<Player, List<PlayerSkin>> cache = | ||||
|             CacheBuilder.newBuilder().weakKeys().expireAfterWrite(DisguiseConfig.getPlayerDisguisesSkinExpiresMove() * 50, TimeUnit.MILLISECONDS) | ||||
|                     .removalListener((event) -> { | ||||
|                         if (event.getCause() != RemovalCause.EXPIRED) { | ||||
|                             return; | ||||
|                         } | ||||
|  | ||||
|                 List<PlayerSkin> skins = (List<PlayerSkin>) event.getValue(); | ||||
|                         List<PlayerSkin> skins = (List<PlayerSkin>) event.getValue(); | ||||
|  | ||||
|                 for (PlayerSkin skin : skins) { | ||||
|                     doPacketRemoval((Player) event.getKey(), skin); | ||||
|                 } | ||||
|                         for (PlayerSkin skin : skins) { | ||||
|                             doPacketRemoval((Player) event.getKey(), skin); | ||||
|                         } | ||||
|  | ||||
|                 skins.clear(); | ||||
|             }).build(); | ||||
|                         skins.clear(); | ||||
|                     }).build(); | ||||
|  | ||||
|     public PlayerSkinHandler() { | ||||
|         new BukkitRunnable() { | ||||
| @@ -130,8 +130,8 @@ public class PlayerSkinHandler implements Listener { | ||||
|         packet.getModifier().write(2, loc.getY()); | ||||
|         packet.getModifier().write(3, loc.getZ()); | ||||
|  | ||||
|         for (PlayerSkin skin : value) { | ||||
|             if (!skin.isSleepPackets()) { | ||||
|         for (PlayerSkin skin : new ArrayList<>(value)) { | ||||
|             if (!value.contains(skin) || !skin.isSleepPackets()) { | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
| @@ -176,8 +176,7 @@ public class PlayerSkinHandler implements Listener { | ||||
|  | ||||
|         if (spawn) { | ||||
|             packets.getDelayedPacketsMap().entrySet().removeIf(entry -> { | ||||
|                 entry.getValue() | ||||
|                         .removeIf(packet -> packet.getType() == Server.ENTITY_EQUIPMENT && isRemove(skin, packet)); | ||||
|                 entry.getValue().removeIf(packet -> packet.getType() == Server.ENTITY_EQUIPMENT && isRemove(skin, packet)); | ||||
|  | ||||
|                 return entry.getValue().isEmpty(); | ||||
|             }); | ||||
| @@ -209,8 +208,7 @@ public class PlayerSkinHandler implements Listener { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @EventHandler(priority = EventPriority.MONITOR, | ||||
|             ignoreCancelled = true) | ||||
|     @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) | ||||
|     private void onUndisguise(UndisguiseEvent event) { | ||||
|         if (!event.getDisguise().isPlayerDisguise()) { | ||||
|             return; | ||||
| @@ -246,12 +244,11 @@ public class PlayerSkinHandler implements Listener { | ||||
|     private void addMetadata(Player player, PlayerSkin skin) throws InvocationTargetException { | ||||
|         PlayerDisguise disguise = skin.getDisguise().get(); | ||||
|         Entity entity = disguise.getEntity(); | ||||
|         WrappedDataWatcher watcher = DisguiseUtilities | ||||
|                 .createSanitizedDataWatcher(WrappedDataWatcher.getEntityWatcher(entity), disguise.getWatcher()); | ||||
|         WrappedDataWatcher watcher = DisguiseUtilities.createSanitizedDataWatcher(WrappedDataWatcher.getEntityWatcher(entity), disguise.getWatcher()); | ||||
|  | ||||
|         PacketContainer metaPacket = ProtocolLibrary.getProtocolManager() | ||||
|                 .createPacketConstructor(PacketType.Play.Server.ENTITY_METADATA, entity.getEntityId(), watcher, true) | ||||
|                 .createPacket(entity.getEntityId(), watcher, true); | ||||
|         PacketContainer metaPacket = | ||||
|                 ProtocolLibrary.getProtocolManager().createPacketConstructor(PacketType.Play.Server.ENTITY_METADATA, entity.getEntityId(), watcher, true) | ||||
|                         .createPacket(entity.getEntityId(), watcher, true); | ||||
|  | ||||
|         ProtocolLibrary.getProtocolManager().sendServerPacket(player, metaPacket, false); | ||||
|  | ||||
| @@ -339,8 +336,7 @@ public class PlayerSkinHandler implements Listener { | ||||
|             } | ||||
|  | ||||
|             if (skin.isDoTabList()) { | ||||
|                 PacketContainer packetContainer = | ||||
|                         DisguiseUtilities.getTabPacket(disguise, EnumWrappers.PlayerInfoAction.REMOVE_PLAYER); | ||||
|                 PacketContainer packetContainer = DisguiseUtilities.getTabPacket(disguise, EnumWrappers.PlayerInfoAction.REMOVE_PLAYER); | ||||
|  | ||||
|                 ProtocolLibrary.getProtocolManager().sendServerPacket(player, packetContainer); | ||||
|             } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user