summaryrefslogtreecommitdiffstats
path: root/nms-patches/PacketStatusListener.patch
diff options
context:
space:
mode:
authorThinkofdeath <thinkofdeath@spigotmc.org>2014-11-26 08:32:16 +1100
committermd_5 <git@md-5.net>2014-11-28 17:16:30 +1100
commit24557bc2b37deb6a0edf497d547471832457b1dd (patch)
treec560572889a3b0b34964a0cddb35dc87fda3c914 /nms-patches/PacketStatusListener.patch
parenta4805dbd77da057cc1ea0bf344379bc6e53ca1f6 (diff)
downloadcraftbukkit-24557bc2b37deb6a0edf497d547471832457b1dd.tar
craftbukkit-24557bc2b37deb6a0edf497d547471832457b1dd.tar.gz
craftbukkit-24557bc2b37deb6a0edf497d547471832457b1dd.tar.lz
craftbukkit-24557bc2b37deb6a0edf497d547471832457b1dd.tar.xz
craftbukkit-24557bc2b37deb6a0edf497d547471832457b1dd.zip
Update to Minecraft 1.8
For more information please see http://www.spigotmc.org/
Diffstat (limited to 'nms-patches/PacketStatusListener.patch')
-rw-r--r--nms-patches/PacketStatusListener.patch113
1 files changed, 113 insertions, 0 deletions
diff --git a/nms-patches/PacketStatusListener.patch b/nms-patches/PacketStatusListener.patch
new file mode 100644
index 00000000..b7aad224
--- /dev/null
+++ b/nms-patches/PacketStatusListener.patch
@@ -0,0 +1,113 @@
+--- ../work/decompile-bb26c12b/net/minecraft/server/PacketStatusListener.java 2014-11-27 08:59:46.817421336 +1100
++++ src/main/java/net/minecraft/server/PacketStatusListener.java 2014-11-27 08:42:10.168850880 +1100
+@@ -1,5 +1,15 @@
+ package net.minecraft.server;
+
++// CraftBukkit start
++import com.mojang.authlib.GameProfile;
++import java.net.InetSocketAddress;
++import java.util.Iterator;
++
++import org.bukkit.craftbukkit.util.CraftIconCache;
++import org.bukkit.entity.Player;
++
++// CraftBukkit end
++
+ public class PacketStatusListener implements PacketStatusInListener {
+
+ private final MinecraftServer minecraftServer;
+@@ -13,7 +23,93 @@
+ public void a(IChatBaseComponent ichatbasecomponent) {}
+
+ public void a(PacketStatusInStart packetstatusinstart) {
+- this.networkManager.handle(new PacketStatusOutServerInfo(this.minecraftServer.aE()));
++ // this.networkManager.handle(new PacketStatusOutServerInfo(this.minecraftServer.aE()));
++ // CraftBukkit start - fire ping event
++ final Object[] players = minecraftServer.getPlayerList().players.toArray();
++ class ServerListPingEvent extends org.bukkit.event.server.ServerListPingEvent {
++ CraftIconCache icon = minecraftServer.server.getServerIcon();
++
++ ServerListPingEvent() {
++ super(((InetSocketAddress) networkManager.getSocketAddress()).getAddress(), minecraftServer.getMotd(), minecraftServer.getPlayerList().getMaxPlayers());
++ }
++
++ @Override
++ public void setServerIcon(org.bukkit.util.CachedServerIcon icon) {
++ if (!(icon instanceof CraftIconCache)) {
++ throw new IllegalArgumentException(icon + " was not created by " + org.bukkit.craftbukkit.CraftServer.class);
++ }
++ this.icon = (CraftIconCache) icon;
++ }
++
++ @Override
++ public Iterator<Player> iterator() throws UnsupportedOperationException {
++ return new Iterator<Player>() {
++ int i;
++ int ret = Integer.MIN_VALUE;
++ EntityPlayer player;
++
++ @Override
++ public boolean hasNext() {
++ if (player != null) {
++ return true;
++ }
++ final Object[] currentPlayers = players;
++ for (int length = currentPlayers.length, i = this.i; i < length; i++) {
++ final EntityPlayer player = (EntityPlayer) currentPlayers[i];
++ if (player != null) {
++ this.i = i + 1;
++ this.player = player;
++ return true;
++ }
++ }
++ return false;
++ }
++
++ @Override
++ public Player next() {
++ if (!hasNext()) {
++ throw new java.util.NoSuchElementException();
++ }
++ final EntityPlayer player = this.player;
++ this.player = null;
++ this.ret = this.i - 1;
++ return player.getBukkitEntity();
++ }
++
++ @Override
++ public void remove() {
++ final Object[] currentPlayers = players;
++ final int i = this.ret;
++ if (i < 0 || currentPlayers[i] == null) {
++ throw new IllegalStateException();
++ }
++ currentPlayers[i] = null;
++ }
++ };
++ }
++ }
++
++ ServerListPingEvent event = new ServerListPingEvent();
++ this.minecraftServer.server.getPluginManager().callEvent(event);
++
++ java.util.List<GameProfile> profiles = new java.util.ArrayList<GameProfile>(players.length);
++ for (Object player : players) {
++ if (player != null) {
++ profiles.add(((EntityPlayer) player).getProfile());
++ }
++ }
++
++ ServerPingPlayerSample playerSample = new ServerPingPlayerSample(event.getMaxPlayers(), profiles.size());
++ playerSample.a(profiles.toArray(new GameProfile[profiles.size()]));
++
++ ServerPing ping = new ServerPing();
++ ping.setFavicon(event.icon.value);
++ ping.setMOTD(new ChatComponentText(event.getMotd()));
++ ping.setPlayerSample(playerSample);
++ ping.setServerInfo(new ServerPingServerData(minecraftServer.getServerModName() + " " + minecraftServer.getVersion(), 47)); // TODO: Update when protocol changes
++
++ this.networkManager.handle(new PacketStatusOutServerInfo(ping));
++ // CraftBukkit end
+ }
+
+ public void a(PacketStatusInPing packetstatusinping) {