diff --git a/src/main/java/net/minestom/server/entity/Player.java b/src/main/java/net/minestom/server/entity/Player.java index 38a5b68a8..1105b7a52 100644 --- a/src/main/java/net/minestom/server/entity/Player.java +++ b/src/main/java/net/minestom/server/entity/Player.java @@ -316,7 +316,7 @@ public class Player extends LivingEntity implements CommandSender, Localizable, this.playerConnection.update(); // Process received packets - this.packets.drain(packet -> MinecraftServer.getPacketListenerManager().processClientPacket(packet, this)); + interpretPacketQueue(); super.update(time); // Super update (item pickup/fire management) @@ -1673,6 +1673,13 @@ public class Player extends LivingEntity implements CommandSender, Localizable, this.packets.offer(packet); } + @ApiStatus.Internal + @ApiStatus.Experimental + public void interpretPacketQueue() { + // This method is NOT thread-safe + this.packets.drain(packet -> MinecraftServer.getPacketListenerManager().processClientPacket(packet, this)); + } + /** * Changes the storage player latency and update its tab value. * diff --git a/src/test/java/net/minestom/server/entity/PlayerHeldIntegrationTest.java b/src/test/java/net/minestom/server/entity/PlayerHeldIntegrationTest.java index ab3146613..432049d6f 100644 --- a/src/test/java/net/minestom/server/entity/PlayerHeldIntegrationTest.java +++ b/src/test/java/net/minestom/server/entity/PlayerHeldIntegrationTest.java @@ -26,7 +26,7 @@ public class PlayerHeldIntegrationTest { assertEquals(0, player.getHeldSlot()); player.addPacketToQueue(new ClientHeldItemChangePacket((short) 1)); - env.tick(); + player.interpretPacketQueue(); assertEquals(ItemStack.of(Material.STONE), player.getItemInMainHand()); assertEquals(1, player.getHeldSlot());