2014-01-26 01:48:32 +00:00
From f39f990d2c3c43cad0ac0571c9802c2b2eed5301 Mon Sep 17 00:00:00 2001
2014-01-26 01:14:05 +00:00
From: md_5 <git@md-5.net>
Date: Sun, 26 Jan 2014 12:13:31 +1100
Subject: [PATCH] Fix Ping Player Sample
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
2014-01-26 01:30:38 +00:00
index 022e032..9c602b4 100644
2014-01-26 01:14:05 +00:00
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -105,6 +105,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
private static final int TPS = 20;
private static final int TICK_TIME = 1000000000 / TPS;
public final double[] recentTps = new double[ 3 ];
2014-01-26 01:30:38 +00:00
+ public EntityPlayer[] pingPlayers = new EntityPlayer[ 0 ];
2014-01-26 01:14:05 +00:00
// Spigot end
public MinecraftServer(OptionSet options, Proxy proxy) { // CraftBukkit - signature file -> OptionSet
2014-01-26 01:30:38 +00:00
@@ -561,15 +562,23 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
2014-01-26 01:14:05 +00:00
if (i - this.T >= 5000000000L) {
this.T = i;
this.p.setPlayerSample(new ServerPingPlayerSample(this.C(), this.B()));
- GameProfile[] agameprofile = new GameProfile[Math.min(this.B(), 12)];
+ EntityPlayer[] agameprofile = new EntityPlayer[Math.min(this.B(), 12)]; // Spigot
int j = MathHelper.nextInt(this.q, 0, this.B() - agameprofile.length);
for (int k = 0; k < agameprofile.length; ++k) {
- agameprofile[k] = ((EntityPlayer) this.t.players.get(j + k)).getProfile();
+ agameprofile[k] = ((EntityPlayer) this.t.players.get(j + k)); // Spigot
}
Collections.shuffle(Arrays.asList(agameprofile));
- this.p.b().a(agameprofile);
+ // Spigot Start
+ GameProfile[] profiles = new GameProfile[ agameprofile.length ];
+ for ( int l = 0; l < profiles.length; l++ )
+ {
+ profiles[l] = agameprofile[l].getProfile();
+ }
+ this.p.b().a( profiles );
+ this.pingPlayers = agameprofile;
+ // Spigot End
}
if ((this.autosavePeriod > 0) && ((this.ticks % this.autosavePeriod) == 0)) { // CraftBukkit
diff --git a/src/main/java/net/minecraft/server/PacketStatusListener.java b/src/main/java/net/minecraft/server/PacketStatusListener.java
2014-01-26 01:48:32 +00:00
index 7903c43..6480971 100644
2014-01-26 01:14:05 +00:00
--- a/src/main/java/net/minecraft/server/PacketStatusListener.java
+++ b/src/main/java/net/minecraft/server/PacketStatusListener.java
@@ -35,7 +35,7 @@ public class PacketStatusListener implements PacketStatusInListener {
public void a(PacketStatusInStart packetstatusinstart) {
// CraftBukkit start - fire ping event
- final Object[] players = minecraftServer.getPlayerList().players.toArray();
+ final Object[] players = minecraftServer.pingPlayers;
class ServerListPingEvent extends org.bukkit.event.server.ServerListPingEvent {
CraftIconCache icon = minecraftServer.server.getServerIcon();
2014-01-26 01:48:32 +00:00
@@ -109,7 +109,7 @@ public class PacketStatusListener implements PacketStatusInListener {
}
}
- ServerPingPlayerSample playerSample = new ServerPingPlayerSample(event.getMaxPlayers(), profiles.size());
+ ServerPingPlayerSample playerSample = new ServerPingPlayerSample(event.getMaxPlayers(), minecraftServer.getPlayerList().getPlayerCount()); // Spigot - always use real player count
playerSample.a(profiles.toArray(new GameProfile[profiles.size()]));
ServerPing ping = new ServerPing();
2014-01-26 01:14:05 +00:00
--
1.8.3.2