diff options
author | md_5 <git@md-5.net> | 2015-10-03 11:25:43 +1000 |
---|---|---|
committer | md_5 <git@md-5.net> | 2015-10-03 11:25:43 +1000 |
commit | 4a7472d0bfa1c326f68fff4484f2b0f883ab41cb (patch) | |
tree | 57bc2d0de0c259d9b0244a0b44da8cb58b3b9416 /nms-patches | |
parent | d4e32cef0caaa8a81f0fe60216554fd7e0b922cb (diff) | |
download | craftbukkit-4a7472d0bfa1c326f68fff4484f2b0f883ab41cb.tar craftbukkit-4a7472d0bfa1c326f68fff4484f2b0f883ab41cb.tar.gz craftbukkit-4a7472d0bfa1c326f68fff4484f2b0f883ab41cb.tar.lz craftbukkit-4a7472d0bfa1c326f68fff4484f2b0f883ab41cb.tar.xz craftbukkit-4a7472d0bfa1c326f68fff4484f2b0f883ab41cb.zip |
SPIGOT-1219: Allow ping without status query.
Also minor refactor to use more of the Vanilla logic.
Diffstat (limited to 'nms-patches')
-rw-r--r-- | nms-patches/PacketStatusListener.patch | 37 |
1 files changed, 7 insertions, 30 deletions
diff --git a/nms-patches/PacketStatusListener.patch b/nms-patches/PacketStatusListener.patch index 36d282ec..075488ff 100644 --- a/nms-patches/PacketStatusListener.patch +++ b/nms-patches/PacketStatusListener.patch @@ -17,29 +17,18 @@ public class PacketStatusListener implements PacketStatusInListener { private static final IChatBaseComponent a = new ChatComponentText("Status request has been handled."); -@@ -14,17 +25,116 @@ - - public void a(IChatBaseComponent ichatbasecomponent) {} - -+ // CraftBukkit start -+ private static final int WAITING = 0; -+ private static final int PING = 1; -+ private static final int DONE = 2; -+ private int state = WAITING; -+ // CraftBukkit end -+ +@@ -17,10 +28,96 @@ public void a(PacketStatusInStart packetstatusinstart) { -- if (this.d) { -+ // this.networkManager.handle(new PacketStatusOutServerInfo(this.minecraftServer.aG())); -+ // CraftBukkit start - fire ping event -+ if (this.state != WAITING) { + if (this.d) { this.networkManager.close(PacketStatusListener.a); - } else { - this.d = true; - this.networkManager.handle(new PacketStatusOutServerInfo(this.minecraftServer.aG())); ++ // CraftBukkit start - fire ping event + return; - } -+ state = PING; ++ } ++ this.d = true; ++ // this.networkManager.handle(new PacketStatusOutServerInfo(this.minecraftServer.aG())); + final Object[] players = minecraftServer.getPlayerList().players.toArray(); + class ServerListPingEvent extends org.bukkit.event.server.ServerListPingEvent { + CraftIconCache icon = minecraftServer.server.getServerIcon(); @@ -112,7 +101,7 @@ + if (player != null) { + profiles.add(((EntityPlayer) player).getProfile()); + } -+ } + } + + ServerPing.ServerPingPlayerSample playerSample = new ServerPing.ServerPingPlayerSample(event.getMaxPlayers(), profiles.size()); + playerSample.a(profiles.toArray(new GameProfile[profiles.size()])); @@ -128,15 +117,3 @@ } public void a(PacketStatusInPing packetstatusinping) { -- this.networkManager.handle(new PacketStatusOutPong(packetstatusinping.a())); -- this.networkManager.close(PacketStatusListener.a); -+ // CraftBukkit start -+ if (state != PING) { -+ this.networkManager.close(PacketStatusListener.a); -+ return; -+ } -+ state = DONE; -+ this.networkManager.a(new PacketStatusOutPong(packetstatusinping.a()), ChannelFutureListener.CLOSE); // Close on completion -+ // CraftBukkit end - } - } |