155 lines
6.6 KiB
Diff
155 lines
6.6 KiB
Diff
|
From 445e7c8e6a983108b8251260e0cc27c79df3deba Mon Sep 17 00:00:00 2001
|
||
|
From: Colin McDonald <macguy8.main@gmail.com>
|
||
|
Date: Sat, 4 Jul 2015 01:39:24 -0400
|
||
|
Subject: [PATCH] Rework TPS command
|
||
|
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||
|
index 8c3950aeb..8460a9944 100644
|
||
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||
|
@@ -114,6 +114,13 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||
|
public final double[] recentTps = new double[ 3 ];
|
||
|
// Spigot end
|
||
|
|
||
|
+ // Kohi start
|
||
|
+ public int entities;
|
||
|
+ public int activeEntities;
|
||
|
+ // Kohi end
|
||
|
+
|
||
|
+ public float lastTickTime = 0F; // MineHQ
|
||
|
+
|
||
|
public MinecraftServer(OptionSet options, Proxy proxy) { // CraftBukkit - signature file -> OptionSet
|
||
|
net.minecraft.util.io.netty.util.ResourceLeakDetector.setEnabled( false ); // Spigot - disable
|
||
|
this.X = new UserCache(this, a);
|
||
|
@@ -630,6 +637,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||
|
this.methodProfiler.b();
|
||
|
org.spigotmc.WatchdogThread.tick(); // Spigot
|
||
|
SpigotTimings.serverTickTimer.stopTiming(); // Spigot
|
||
|
+ this.lastTickTime = (System.nanoTime() - i) / 1000000F;
|
||
|
org.spigotmc.CustomTimingsHandler.tick(); // Spigot
|
||
|
}
|
||
|
|
||
|
@@ -664,6 +672,8 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||
|
|
||
|
int i;
|
||
|
|
||
|
+ entities = 0;
|
||
|
+ activeEntities = 0;
|
||
|
for (i = 0; i < this.worlds.size(); ++i) {
|
||
|
long j = System.nanoTime();
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||
|
index a6ef3b68c..a3a6de0ef 100644
|
||
|
--- a/src/main/java/net/minecraft/server/World.java
|
||
|
+++ b/src/main/java/net/minecraft/server/World.java
|
||
|
@@ -1602,11 +1602,14 @@ public abstract class World implements IBlockAccess {
|
||
|
int j = MathHelper.floor(entity.locZ);
|
||
|
byte b0 = 32;
|
||
|
|
||
|
+ MinecraftServer.getServer().entities++; // Kohi
|
||
|
+
|
||
|
// Spigot start
|
||
|
if (!org.spigotmc.ActivationRange.checkIfActive(entity)) {
|
||
|
entity.ticksLived++;
|
||
|
entity.inactiveTick();
|
||
|
} else {
|
||
|
+ MinecraftServer.getServer().activeEntities++; // Kohi
|
||
|
entity.tickTimer.startTiming(); // Spigot
|
||
|
// CraftBukkit end
|
||
|
entity.S = entity.locX;
|
||
|
diff --git a/src/main/java/org/spigotmc/TicksPerSecondCommand.java b/src/main/java/org/spigotmc/TicksPerSecondCommand.java
|
||
|
index 2b8343d77..8eb00a9c9 100644
|
||
|
--- a/src/main/java/org/spigotmc/TicksPerSecondCommand.java
|
||
|
+++ b/src/main/java/org/spigotmc/TicksPerSecondCommand.java
|
||
|
@@ -1,8 +1,8 @@
|
||
|
package org.spigotmc;
|
||
|
|
||
|
-import com.google.common.base.Joiner;
|
||
|
import net.minecraft.server.MinecraftServer;
|
||
|
-import net.minecraft.util.com.google.common.collect.Iterables;
|
||
|
+import org.apache.commons.lang.StringUtils;
|
||
|
+import org.bukkit.Bukkit;
|
||
|
import org.bukkit.ChatColor;
|
||
|
import org.bukkit.command.Command;
|
||
|
import org.bukkit.command.CommandSender;
|
||
|
@@ -21,25 +21,63 @@ public class TicksPerSecondCommand extends Command
|
||
|
@Override
|
||
|
public boolean execute(CommandSender sender, String currentAlias, String[] args)
|
||
|
{
|
||
|
- if ( !testPermission( sender ) )
|
||
|
- {
|
||
|
+ if (!testPermission(sender)) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
- StringBuilder sb = new StringBuilder( ChatColor.GOLD + "TPS from last 1m, 5m, 15m: " );
|
||
|
- for ( double tps : MinecraftServer.getServer().recentTps )
|
||
|
- {
|
||
|
- sb.append( format( tps ) );
|
||
|
- sb.append( ", " );
|
||
|
+ if (sender.hasPermission("bukkit.command.tps.advanced")) {
|
||
|
+ double[] tps = Bukkit.spigot().getTPS();
|
||
|
+ String[] tpsAvg = new String[tps.length];
|
||
|
+
|
||
|
+ for (int i = 0; i < tps.length; i++) {
|
||
|
+ tpsAvg[i] = formatAdvancedTps(tps[i]);
|
||
|
+ }
|
||
|
+
|
||
|
+ int entities = MinecraftServer.getServer().entities;
|
||
|
+ int activeEntities = MinecraftServer.getServer().activeEntities;
|
||
|
+ double activePercent = Math.round(10000.0 * activeEntities / entities) / 100.0;
|
||
|
+
|
||
|
+ sender.sendMessage(ChatColor.GOLD + "TPS from last 1m, 5m, 15m: " + StringUtils.join(tpsAvg, ", "));
|
||
|
+ sender.sendMessage(ChatColor.GOLD + "Full tick: " + formatTickTime(MinecraftServer.getServer().lastTickTime) + " ms");
|
||
|
+ sender.sendMessage(ChatColor.GOLD + "Active entities: " + ChatColor.GREEN + activeEntities + "/" + entities + " (" + activePercent + "%)");
|
||
|
+ sender.sendMessage(ChatColor.GOLD + "Online players: " + ChatColor.GREEN + Bukkit.getOnlinePlayers().size() + "/" + Bukkit.getMaxPlayers());
|
||
|
+ } else {
|
||
|
+ double tps = Bukkit.spigot().getTPS()[1];
|
||
|
+ StringBuilder tpsBuilder = new StringBuilder();
|
||
|
+
|
||
|
+ tpsBuilder.append(ChatColor.GOLD).append("Server performance: ");
|
||
|
+ tpsBuilder.append(formatBasicTps(tps)).append(ChatColor.GOLD).append("/20.0");
|
||
|
+ tpsBuilder.append(" [").append(tps > 18.0 ? ChatColor.GREEN : tps > 16.0 ? ChatColor.YELLOW : ChatColor.RED);
|
||
|
+
|
||
|
+ int i = 0;
|
||
|
+
|
||
|
+ for (; i < Math.round(tps); i++) {
|
||
|
+ tpsBuilder.append("|");
|
||
|
+ }
|
||
|
+
|
||
|
+ tpsBuilder.append(ChatColor.DARK_GRAY);
|
||
|
+
|
||
|
+ for (; i < 20; i++) {
|
||
|
+ tpsBuilder.append("|");
|
||
|
+ }
|
||
|
+
|
||
|
+ tpsBuilder.append(ChatColor.GOLD).append("]");
|
||
|
+ sender.sendMessage(tpsBuilder.toString());
|
||
|
}
|
||
|
- sender.sendMessage( sb.substring( 0, sb.length() - 2 ) );
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
- private String format(double tps)
|
||
|
- {
|
||
|
- return ( ( tps > 18.0 ) ? ChatColor.GREEN : ( tps > 16.0 ) ? ChatColor.YELLOW : ChatColor.RED ).toString()
|
||
|
- + ( ( tps > 20.0 ) ? "*" : "" ) + Math.min( Math.round( tps * 100.0 ) / 100.0, 20.0 );
|
||
|
+ private static String formatTickTime(double time) {
|
||
|
+ return (time < 40.0D ? ChatColor.GREEN : time < 60.0D ? ChatColor.YELLOW : ChatColor.RED).toString() + Math.round(time * 10.0D) / 10.0D;
|
||
|
+ }
|
||
|
+
|
||
|
+ private static String formatAdvancedTps(double tps) {
|
||
|
+ return (tps > 18.0 ? ChatColor.GREEN : tps > 16.0 ? ChatColor.YELLOW : ChatColor.RED).toString() + Math.min(Math.round(tps * 100.0D) / 100.0, 20.0);
|
||
|
}
|
||
|
+
|
||
|
+ private String formatBasicTps(double tps) {
|
||
|
+ return (tps > 18.0 ? ChatColor.GREEN : tps > 16.0 ? ChatColor.YELLOW : ChatColor.RED).toString() + Math.min(Math.round(tps * 10.0D) / 10.0D, 20.0D);
|
||
|
+ }
|
||
|
+
|
||
|
}
|
||
|
--
|
||
|
2.13.3
|
||
|
|