diff --git a/ProtocolLib/src/main/java/com/comphenix/protocol/injector/PacketFilterManager.java b/ProtocolLib/src/main/java/com/comphenix/protocol/injector/PacketFilterManager.java index 63a55508..1f2ff123 100644 --- a/ProtocolLib/src/main/java/com/comphenix/protocol/injector/PacketFilterManager.java +++ b/ProtocolLib/src/main/java/com/comphenix/protocol/injector/PacketFilterManager.java @@ -62,6 +62,7 @@ import com.comphenix.protocol.injector.packet.PacketInjector; import com.comphenix.protocol.injector.packet.PacketInjectorBuilder; import com.comphenix.protocol.injector.packet.PacketRegistry; import com.comphenix.protocol.injector.player.PlayerInjectionHandler; +import com.comphenix.protocol.injector.player.PlayerInjector.ServerHandlerNull; import com.comphenix.protocol.injector.player.PlayerInjectorBuilder; import com.comphenix.protocol.injector.player.PlayerInjectionHandler.ConflictStrategy; import com.comphenix.protocol.injector.spigot.SpigotPacketInjector; @@ -904,6 +905,8 @@ public final class PacketFilterManager implements ProtocolManager, ListenerInvok try { // This call will be ignored if no listeners are registered playerInjection.injectPlayer(event.getPlayer(), ConflictStrategy.OVERRIDE); + } catch (ServerHandlerNull e) { + // Caused by logged out players, or fake login events in MCPC++. Ignore it. } catch (Exception e) { reporter.reportDetailed(PacketFilterManager.this, Report.newBuilder(REPORT_CANNOT_INJECT_PLAYER).callerParam(event).error(e) diff --git a/ProtocolLib/src/main/java/com/comphenix/protocol/injector/player/PlayerInjector.java b/ProtocolLib/src/main/java/com/comphenix/protocol/injector/player/PlayerInjector.java index c0019e2e..3b275360 100644 --- a/ProtocolLib/src/main/java/com/comphenix/protocol/injector/player/PlayerInjector.java +++ b/ProtocolLib/src/main/java/com/comphenix/protocol/injector/player/PlayerInjector.java @@ -388,7 +388,7 @@ public abstract class PlayerInjector implements SocketInjector { // This is bad if (currentHandler == null) - throw new IllegalAccessError("Unable to fetch server handler: was NUll."); + throw new ServerHandlerNull(); // See if this isn't a standard net handler class if (!isStandardMinecraftNetHandler(currentHandler)) { @@ -714,4 +714,22 @@ public abstract class PlayerInjector implements SocketInjector { public void setUpdatedPlayer(Player updatedPlayer) { this.updatedPlayer = updatedPlayer; } + + /** + * Indicates that a player's NetServerHandler or PlayerConnection was NULL. + *

+ * This is usually because the player has just logged out, or due to it being a "fake" player in MCPC++. + * @author Kristian + */ + public static class ServerHandlerNull extends IllegalAccessError { + private static final long serialVersionUID = 1L; + + public ServerHandlerNull() { + super("Unable to fetch server handler: was NUll."); + } + + public ServerHandlerNull(String s) { + super(s); + } + } }