mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 07:48:53 +01:00
17f71ac87b
Upstream has released updates that appear 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: 70d24eb8 SPIGOT-6587: Update documentation/error of drop chance API CraftBukkit Changes: 470050ad SPIGOT-6587: Update documentation/error of drop chance API 1c39efa3 Fix Inventory#getViewers on the player inventory not returning the player first time their inventory is opened d161627d Fix PrepareItemCraftEvent#isRepair aa1fae73 SPIGOT-6586: EntityChangeBlockEvent for falling block does not cancel properly 8a04072e SPIGOT-6583: Throwing eggs doesn't make sounds Spigot Changes: f773da84 Remove redundant patch cd367234 Rebuild patches
168 lines
6.4 KiB
Diff
168 lines
6.4 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 ddbc8cb712c50038922eded75dd6ca85fe851078..78271b400c79578d043b20a5389a37b1bef9a70d 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 717673c099ecd23d525c75df7af262b96f896bfe..44ad235710dce2b159f891d91b7a0d71e5553507 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -249,6 +249,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
|
private String motd;
|
|
private int playerIdleTimeout;
|
|
public final long[] tickTimes;
|
|
+ // 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 keyPair;
|
|
@Nullable
|
|
@@ -1390,6 +1395,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
|
this.averageTickTime = this.averageTickTime * 0.8F + (float) l / 1000000.0F * 0.19999999F;
|
|
long i1 = Util.getNanos();
|
|
|
|
+ // Paper start
|
|
+ tickTimes5s.add(this.tickCount, l);
|
|
+ tickTimes10s.add(this.tickCount, l);
|
|
+ tickTimes60s.add(this.tickCount, l);
|
|
+ // Paper end
|
|
+
|
|
this.frameTimer.logFrameDuration(i1 - i);
|
|
this.profiler.pop();
|
|
org.spigotmc.WatchdogThread.tick(); // Spigot
|
|
@@ -2461,4 +2472,29 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
|
};
|
|
}
|
|
}
|
|
+ // 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 d52949d495068c2a725459d2e0f9a6c0bf9d6b7a..6263a646f1fbf7cb25d9e4f0821b94f2088acd92 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
@@ -2197,6 +2197,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
|
|
|
|
// Spigot start
|