diff --git a/CraftBukkit-Patches/0102-Fix-Ping-Player-Sample.patch b/CraftBukkit-Patches/0102-Fix-Ping-Player-Sample.patch new file mode 100644 index 000000000..2d2ea9d4c --- /dev/null +++ b/CraftBukkit-Patches/0102-Fix-Ping-Player-Sample.patch @@ -0,0 +1,61 @@ +From d8be3082b4cc82d525e1152efc58bced681890b1 Mon Sep 17 00:00:00 2001 +From: md_5 +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 +index a549a95..e967d17 100644 +--- 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 ]; ++ public EntityPlayer[] pingPlayers; + // Spigot end + + public MinecraftServer(OptionSet options, Proxy proxy) { // CraftBukkit - signature file -> OptionSet +@@ -560,15 +561,23 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo + 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 +index 7903c43..8203fbd 100644 +--- 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(); + +-- +1.8.3.2 +