diff --git a/src/main/java/com/comphenix/protocol/injector/netty/ChannelInjector.java b/src/main/java/com/comphenix/protocol/injector/netty/ChannelInjector.java index c12b1a7e..b0b199d8 100644 --- a/src/main/java/com/comphenix/protocol/injector/netty/ChannelInjector.java +++ b/src/main/java/com/comphenix/protocol/injector/netty/ChannelInjector.java @@ -44,7 +44,6 @@ import com.google.common.base.Preconditions; import io.netty.buffer.ByteBuf; import io.netty.channel.*; -import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.ByteToMessageDecoder; import io.netty.handler.codec.MessageToByteEncoder; import io.netty.util.AttributeKey; @@ -951,7 +950,7 @@ public class ChannelInjector extends ByteToMessageDecoder implements Injector { @Override public Socket getSocket() { - return SocketAdapter.adapt((SocketChannel) injector.originalChannel); + return SocketAdapter.adapt(injector.originalChannel); } @Override @@ -989,6 +988,11 @@ public class ChannelInjector extends ByteToMessageDecoder implements Injector { injector.setPlayer(updatedPlayer); } + @Override + public boolean isConnected() { + return injector.originalChannel.isActive(); + } + ChannelInjector getChannelInjector() { return injector; } diff --git a/src/main/java/com/comphenix/protocol/injector/netty/SocketAdapter.java b/src/main/java/com/comphenix/protocol/injector/netty/SocketAdapter.java index 5d63f0df..6cc0dbee 100644 --- a/src/main/java/com/comphenix/protocol/injector/netty/SocketAdapter.java +++ b/src/main/java/com/comphenix/protocol/injector/netty/SocketAdapter.java @@ -43,8 +43,11 @@ public class SocketAdapter extends Socket { this.ch = ch; } - public static SocketAdapter adapt(SocketChannel ch) { - return new SocketAdapter(ch); + public static SocketAdapter adapt(Channel ch) { + if (!(ch instanceof SocketChannel)) { + return null; + } + return new SocketAdapter((SocketChannel) ch); } @Override diff --git a/src/main/java/com/comphenix/protocol/injector/server/BukkitSocketInjector.java b/src/main/java/com/comphenix/protocol/injector/server/BukkitSocketInjector.java index b9493068..ad15e4b1 100644 --- a/src/main/java/com/comphenix/protocol/injector/server/BukkitSocketInjector.java +++ b/src/main/java/com/comphenix/protocol/injector/server/BukkitSocketInjector.java @@ -80,4 +80,9 @@ public class BukkitSocketInjector implements SocketInjector { public void setUpdatedPlayer(Player updatedPlayer) { this.player = updatedPlayer; } + + @Override + public boolean isConnected() { + return player.isOnline(); + } } diff --git a/src/main/java/com/comphenix/protocol/injector/server/SocketInjector.java b/src/main/java/com/comphenix/protocol/injector/server/SocketInjector.java index 9383f6d5..8fa88428 100644 --- a/src/main/java/com/comphenix/protocol/injector/server/SocketInjector.java +++ b/src/main/java/com/comphenix/protocol/injector/server/SocketInjector.java @@ -68,4 +68,10 @@ public interface SocketInjector { * @param updatedPlayer - the real Bukkit player. */ public abstract void setUpdatedPlayer(Player updatedPlayer); + + /** + * Determines if the player is currently connected. + * @return true if the player is connected. + */ + public abstract boolean isConnected(); } diff --git a/src/main/java/com/comphenix/protocol/injector/server/TemporaryPlayerFactory.java b/src/main/java/com/comphenix/protocol/injector/server/TemporaryPlayerFactory.java index fc95f834..b160d862 100644 --- a/src/main/java/com/comphenix/protocol/injector/server/TemporaryPlayerFactory.java +++ b/src/main/java/com/comphenix/protocol/injector/server/TemporaryPlayerFactory.java @@ -157,9 +157,9 @@ public class TemporaryPlayerFactory { // Methods that are supported in the fallback instance if (methodName.equals("isOnline")) - return injector.getSocket() != null && injector.getSocket().isConnected(); + return injector.isConnected(); else if (methodName.equals("getName")) - return "UNKNOWN[" + injector.getSocket().getRemoteSocketAddress() + "]"; + return "UNKNOWN[" + injector.getAddress() + "]"; // Ignore all other methods throw new UnsupportedOperationException(