diff --git a/src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java b/src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java index eef044a05..d10ad9556 100644 --- a/src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java +++ b/src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java @@ -323,12 +323,12 @@ public synchronized void enqueueSyncPacket(PacketEvent syncPacket, AsyncMarker a @Override public Set getReceivingTypes() { - return serverProcessingQueue.keySet(); + return clientProcessingQueue.keySet(); } @Override public Set getSendingTypes() { - return clientProcessingQueue.keySet(); + return serverProcessingQueue.keySet(); } /** diff --git a/src/main/java/com/comphenix/protocol/async/PlayerSendingHandler.java b/src/main/java/com/comphenix/protocol/async/PlayerSendingHandler.java index 03c6535cd..8f66361c2 100644 --- a/src/main/java/com/comphenix/protocol/async/PlayerSendingHandler.java +++ b/src/main/java/com/comphenix/protocol/async/PlayerSendingHandler.java @@ -134,14 +134,18 @@ public PacketSendingQueue getSendingQueue(PacketEvent packet) { * @return The server or client sending queue the packet belongs to. */ public PacketSendingQueue getSendingQueue(PacketEvent packet, boolean createNew) { - QueueContainer queues = playerSendingQueues.get(packet.getPlayer()); + Player player = packet.getPlayer(); + if (player == null) + return null; + + QueueContainer queues = playerSendingQueues.get(player); // Safe concurrent initialization if (queues == null && createNew) { final QueueContainer newContainer = new QueueContainer(); // Attempt to map the queue - queues = playerSendingQueues.putIfAbsent(packet.getPlayer(), newContainer); + queues = playerSendingQueues.putIfAbsent(player, newContainer); if (queues == null) { queues = newContainer; diff --git a/src/main/java/com/comphenix/protocol/collections/IntegerMap.java b/src/main/java/com/comphenix/protocol/collections/IntegerMap.java index 799f47477..090709f5c 100644 --- a/src/main/java/com/comphenix/protocol/collections/IntegerMap.java +++ b/src/main/java/com/comphenix/protocol/collections/IntegerMap.java @@ -58,6 +58,7 @@ public T put(int key, T value) { * @return The old associated value, or NULL. */ public T remove(int key) { + if (key < 0 || key >= array.length) return null; T old = array[key]; array[key] = null; diff --git a/src/main/java/com/comphenix/protocol/utility/StreamSerializer.java b/src/main/java/com/comphenix/protocol/utility/StreamSerializer.java index e6a5ae967..39a5766e6 100644 --- a/src/main/java/com/comphenix/protocol/utility/StreamSerializer.java +++ b/src/main/java/com/comphenix/protocol/utility/StreamSerializer.java @@ -326,15 +326,9 @@ public void serializeItemStack(DataOutputStream output, ItemStack stack) throws public byte[] getBytesAndRelease(ByteBuf buf) { try { - if (buf.hasArray()) { - // heap buffer, we can access the array directly - return buf.array(); - } else { - // direct buffer, we need to copy the bytes into an array - byte[] bytes = new byte[buf.readableBytes()]; - buf.readBytes(bytes); - return bytes; - } + byte[] bytes = new byte[buf.readableBytes()]; + buf.readBytes(bytes); + return bytes; } finally { ReferenceCountUtil.safeRelease(buf); }