From 1ba11f29fe8d6247d7986cb5c283c26c93fdd3c2 Mon Sep 17 00:00:00 2001 From: Neko110923 Date: Wed, 20 May 2026 18:13:52 +0800 Subject: [PATCH] fix: NettyChannelInjector.getPlayer() overwrites TemporaryPlayer with null Bukkit.getPlayerExact() returns null during login phase. Assigning its return value directly to this.player destroys the TemporaryPlayer instance, causing subsequent getPlayer() calls to return null. Use a local variable to only replace the player on success. --- .../injector/netty/channel/NettyChannelInjector.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/injector/netty/channel/NettyChannelInjector.java b/src/main/java/com/comphenix/protocol/injector/netty/channel/NettyChannelInjector.java index 5455c9acd..574754e13 100644 --- a/src/main/java/com/comphenix/protocol/injector/netty/channel/NettyChannelInjector.java +++ b/src/main/java/com/comphenix/protocol/injector/netty/channel/NettyChannelInjector.java @@ -350,8 +350,9 @@ public Player getPlayer() { // check if the name of the player is already known to the injector if (this.playerName != null) { - this.player = Bukkit.getPlayerExact(this.playerName); - if (this.player != null) { + Player bukkitPlayer = Bukkit.getPlayerExact(this.playerName); + if (bukkitPlayer != null) { + this.player = bukkitPlayer; this.injectionFactory.cacheInjector(this.player, this); } }