Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-16 03:20:07 +01:00
2609a118e8
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: f4f2ef4c SPIGOT-6222: Correct javadoc for Entity#setPassenger 1871ca9d #559: Add wait time modification for FishHook CraftBukkit Changes: bc6a175e #767: Add wait time modification for FishHook 2fc37bcc SPIGOT-6197: Prevent world loading from updating spawn settings of all worlds
170 Zeilen
6.5 KiB
Diff
170 Zeilen
6.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
|
Date: Sun, 5 Apr 2020 22:23:14 -0500
|
|
Subject: [PATCH] Add tick times API and /mspt command
|
|
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/MSPTCommand.java b/src/main/java/com/destroystokyo/paper/MSPTCommand.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..d0211d4f39f9d6af1d751ac66342b42cc6d7ba6d
|
|
--- /dev/null
|
|
+++ b/src/main/java/com/destroystokyo/paper/MSPTCommand.java
|
|
@@ -0,0 +1,64 @@
|
|
+package com.destroystokyo.paper;
|
|
+
|
|
+import net.minecraft.server.MinecraftServer;
|
|
+import org.bukkit.ChatColor;
|
|
+import org.bukkit.Location;
|
|
+import org.bukkit.command.Command;
|
|
+import org.bukkit.command.CommandSender;
|
|
+
|
|
+import java.text.DecimalFormat;
|
|
+import java.util.ArrayList;
|
|
+import java.util.Arrays;
|
|
+import java.util.Collections;
|
|
+import java.util.List;
|
|
+
|
|
+public class MSPTCommand extends Command {
|
|
+ private static final DecimalFormat DF = new DecimalFormat("########0.0");
|
|
+
|
|
+ public MSPTCommand(String name) {
|
|
+ super(name);
|
|
+ this.description = "View server tick times";
|
|
+ this.usageMessage = "/mspt";
|
|
+ this.setPermission("bukkit.command.mspt");
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public List<String> tabComplete(CommandSender sender, String alias, String[] args, Location location) throws IllegalArgumentException {
|
|
+ return Collections.emptyList();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean execute(CommandSender sender, String commandLabel, String[] args) {
|
|
+ if (!testPermission(sender)) return true;
|
|
+
|
|
+ MinecraftServer server = MinecraftServer.getServer();
|
|
+
|
|
+ List<String> times = new ArrayList<>();
|
|
+ times.addAll(eval(server.tickTimes5s.getTimes()));
|
|
+ times.addAll(eval(server.tickTimes10s.getTimes()));
|
|
+ times.addAll(eval(server.tickTimes60s.getTimes()));
|
|
+
|
|
+ sender.sendMessage("§6Server tick times §e(§7avg§e/§7min§e/§7max§e)§6 from last 5s§7,§6 10s§7,§6 1m§e:");
|
|
+ sender.sendMessage(String.format("§6◴ %s§7/%s§7/%s§e, %s§7/%s§7/%s§e, %s§7/%s§7/%s", times.toArray()));
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ private static List<String> eval(long[] times) {
|
|
+ long min = Integer.MAX_VALUE;
|
|
+ long max = 0L;
|
|
+ long total = 0L;
|
|
+ for (long value : times) {
|
|
+ if (value > 0L && value < min) min = value;
|
|
+ if (value > max) max = value;
|
|
+ total += value;
|
|
+ }
|
|
+ double avgD = ((double) total / (double) times.length) * 1.0E-6D;
|
|
+ double minD = ((double) min) * 1.0E-6D;
|
|
+ double maxD = ((double) max) * 1.0E-6D;
|
|
+ return Arrays.asList(getColor(avgD), getColor(minD), getColor(maxD));
|
|
+ }
|
|
+
|
|
+ private static String getColor(double avg) {
|
|
+ return ChatColor.COLOR_CHAR + (avg >= 50 ? "c" : avg >= 40 ? "e" : "a") + DF.format(avg);
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
|
index 56b32e2319c5f89d12c0ca4ea0211c6d7cbb366f..273ed1c5537a69256f1020646f5cd0c13d50f170 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
|
@@ -69,6 +69,7 @@ public class PaperConfig {
|
|
|
|
commands = new HashMap<String, Command>();
|
|
commands.put("paper", new PaperCommand("paper"));
|
|
+ commands.put("mspt", new MSPTCommand("mspt"));
|
|
|
|
version = getInt("config-version", 20);
|
|
set("config-version", 20);
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
index 664daf13341285a7e24c67a62e765627d79ee578..dc9207189ed49f0fa45170042215584ddb274233 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -107,6 +107,11 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
|
private int F;
|
|
private int G;
|
|
public final long[] h; public long[] getTickTimes() { return h; } // Paper - OBFHELPER
|
|
+ // Paper start
|
|
+ public final TickTimes tickTimes5s = new TickTimes(100);
|
|
+ public final TickTimes tickTimes10s = new TickTimes(200);
|
|
+ public final TickTimes tickTimes60s = new TickTimes(1200);
|
|
+ // Paper end
|
|
@Nullable
|
|
private KeyPair H;
|
|
@Nullable
|
|
@@ -1214,6 +1219,12 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
|
this.ag = this.ag * 0.8F + (float) l / 1000000.0F * 0.19999999F;
|
|
long i1 = SystemUtils.getMonotonicNanos();
|
|
|
|
+ // Paper start
|
|
+ tickTimes5s.add(this.ticks, l);
|
|
+ tickTimes10s.add(this.ticks, l);
|
|
+ tickTimes60s.add(this.ticks, l);
|
|
+ // Paper end
|
|
+
|
|
this.circularTimer.a(i1 - i);
|
|
this.methodProfiler.exit();
|
|
org.spigotmc.WatchdogThread.tick(); // Spigot
|
|
@@ -2186,4 +2197,30 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
|
public ITextFilter a(EntityPlayer entityplayer) {
|
|
return null;
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ public static class TickTimes {
|
|
+ private final long[] times;
|
|
+
|
|
+ public TickTimes(int length) {
|
|
+ times = new long[length];
|
|
+ }
|
|
+
|
|
+ void add(int index, long time) {
|
|
+ times[index % times.length] = time;
|
|
+ }
|
|
+
|
|
+ public long[] getTimes() {
|
|
+ return times.clone();
|
|
+ }
|
|
+
|
|
+ public double getAverage() {
|
|
+ long total = 0L;
|
|
+ for (long value : times) {
|
|
+ total += value;
|
|
+ }
|
|
+ return ((double) total / (double) times.length) * 1.0E-6D;
|
|
+ }
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
index 04a01b85c60e68347a32db5d92e53fc949622517..055e32abc31b2606e0ee429b0e51738448c833a6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
@@ -2144,6 +2144,16 @@ public final class CraftServer implements Server {
|
|
net.minecraft.server.MinecraftServer.getServer().tps15.getAverage()
|
|
};
|
|
}
|
|
+
|
|
+ @Override
|
|
+ public long[] getTickTimes() {
|
|
+ return getServer().tickTimes5s.getTimes();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public double getAverageTickTime() {
|
|
+ return getServer().tickTimes5s.getAverage();
|
|
+ }
|
|
// Paper end
|
|
|
|
private final Spigot spigot = new Spigot()
|