@@ -17,102 +17,99 @@
|
||||
public class PacketStatusListener implements PacketStatusInListener {
|
||||
|
||||
private static final IChatBaseComponent a = new ChatComponentText("Status request has been handled.");
|
||||
@@ -17,10 +28,96 @@
|
||||
public void a(PacketStatusInStart packetstatusinstart) {
|
||||
if (this.d) {
|
||||
@@ -19,8 +30,95 @@
|
||||
this.networkManager.close(PacketStatusListener.a);
|
||||
- } else {
|
||||
- this.d = true;
|
||||
- this.networkManager.handle(new PacketStatusOutServerInfo(this.minecraftServer.aG()));
|
||||
+ // CraftBukkit start - fire ping event
|
||||
+ return;
|
||||
+ }
|
||||
+ 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();
|
||||
} else {
|
||||
this.d = true;
|
||||
- this.networkManager.sendPacket(new PacketStatusOutServerInfo(this.minecraftServer.getServerPing()));
|
||||
+ // CraftBukkit start
|
||||
+ // this.networkManager.sendPacket(new PacketStatusOutServerInfo(this.minecraftServer.getServerPing()));
|
||||
+ final Object[] players = minecraftServer.getPlayerList().players.toArray();
|
||||
+ class ServerListPingEvent extends org.bukkit.event.server.ServerListPingEvent {
|
||||
+
|
||||
+ ServerListPingEvent() {
|
||||
+ super(((InetSocketAddress) networkManager.getSocketAddress()).getAddress(), minecraftServer.getMotd(), minecraftServer.getPlayerList().getMaxPlayers());
|
||||
+ }
|
||||
+ CraftIconCache icon = minecraftServer.server.getServerIcon();
|
||||
+
|
||||
+ @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);
|
||||
+ ServerListPingEvent() {
|
||||
+ super(((InetSocketAddress) networkManager.getSocketAddress()).getAddress(), minecraftServer.getMotd(), minecraftServer.getPlayerList().getMaxPlayers());
|
||||
+ }
|
||||
+ 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 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 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];
|
||||
+ @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) {
|
||||
+ this.i = i + 1;
|
||||
+ this.player = player;
|
||||
+ 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;
|
||||
+ }
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public Player next() {
|
||||
+ if (!hasNext()) {
|
||||
+ throw new java.util.NoSuchElementException();
|
||||
+ @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();
|
||||
+ }
|
||||
+ 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();
|
||||
+ @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;
|
||||
+ }
|
||||
+ currentPlayers[i] = null;
|
||||
+ }
|
||||
+ };
|
||||
+ };
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ ServerListPingEvent event = new ServerListPingEvent();
|
||||
+ this.minecraftServer.server.getPluginManager().callEvent(event);
|
||||
+ 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());
|
||||
+ java.util.List<GameProfile> profiles = new java.util.ArrayList<GameProfile>(players.length);
|
||||
+ for (Object player : players) {
|
||||
+ 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()]));
|
||||
+
|
||||
+ ServerPing ping = new ServerPing();
|
||||
+ ping.setFavicon(event.icon.value);
|
||||
+ ping.setMOTD(new ChatComponentText(event.getMotd()));
|
||||
+ ping.setPlayerSample(playerSample);
|
||||
+ ping.setServerInfo(new ServerPing.ServerData(minecraftServer.getServerModName() + " " + minecraftServer.getVersion(), minecraftServer.getServerPing().getServerData().getProtocolVersion()));
|
||||
+
|
||||
+ this.networkManager.sendPacket(new PacketStatusOutServerInfo(ping));
|
||||
}
|
||||
+
|
||||
+ ServerPing.ServerPingPlayerSample playerSample = new ServerPing.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 ServerPing.ServerData(minecraftServer.getServerModName() + " " + minecraftServer.getVersion(), 47)); // TODO: Update when protocol changes
|
||||
+
|
||||
+ this.networkManager.handle(new PacketStatusOutServerInfo(ping));
|
||||
+ // CraftBukkit end
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user