--- ../src-base/minecraft/net/minecraft/server/network/NetHandlerStatusServer.java +++ ../src-work/minecraft/net/minecraft/server/network/NetHandlerStatusServer.java @@ -1,5 +1,6 @@ package net.minecraft.server.network; + import io.netty.util.concurrent.GenericFutureListener; import net.minecraft.network.EnumConnectionState; import net.minecraft.network.NetworkManager; @@ -11,6 +12,13 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.util.IChatComponent; +// CraftBukkit start +import java.net.InetSocketAddress; +import net.minecraft.network.ServerStatusResponse; +import net.minecraft.util.ChatComponentText; +import org.bukkit.craftbukkit.util.CraftIconCache; +// CraftBukkit end + public class NetHandlerStatusServer implements INetHandlerStatusServer { private final MinecraftServer field_147314_a; @@ -37,7 +45,36 @@ public void processServerQuery(C00PacketServerQuery p_147312_1_) { - this.field_147313_b.scheduleOutboundPacket(new S00PacketServerInfo(this.field_147314_a.func_147134_at()), new GenericFutureListener[0]); + // CraftBukkit start - fire ping event + class ServerListPingEvent extends org.bukkit.event.server.ServerListPingEvent + { + CraftIconCache icon = field_147314_a.server.getServerIcon(); + + ServerListPingEvent() + { + super(((InetSocketAddress) field_147313_b.getSocketAddress()).getAddress(), field_147314_a.getMOTD(), field_147314_a.getConfigurationManager().getCurrentPlayerCount(), field_147314_a.getConfigurationManager().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; + } + } + ServerListPingEvent event = new ServerListPingEvent(); + this.field_147314_a.server.getPluginManager().callEvent(event); + ServerStatusResponse ping = new ServerStatusResponse(); + ping.func_151320_a(event.icon.value); + ping.func_151315_a(new ChatComponentText(event.getMotd())); + ping.func_151319_a(new ServerStatusResponse.PlayerCountData(event.getMaxPlayers(), field_147314_a.getConfigurationManager().getCurrentPlayerCount())); + ping.func_151321_a(new ServerStatusResponse.MinecraftProtocolVersionIdentifier(field_147314_a.getServerModName() + " " + field_147314_a.getMinecraftVersion(), 5)); // TODO: Update when protocol changes + this.field_147313_b.scheduleOutboundPacket(new S00PacketServerInfo(ping), new GenericFutureListener[0]); + // CraftBukkit end } public void processPing(C01PacketPing p_147311_1_)