From 359749edefd02b8cbe166c7ae6f9f8a6efb0c925 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 13 Mar 2020 22:23:44 -0500 Subject: [PATCH] Add /mspt command --- .../minecraft/server/CommandDispatcher.java | 1 + .../net/pl3x/purpur/command/MSPTCommand.java | 59 +++++++++++++++++++ src/main/resources/purpur.lang | 2 + 3 files changed, 62 insertions(+) create mode 100644 src/main/java/net/pl3x/purpur/command/MSPTCommand.java diff --git a/src/main/java/net/minecraft/server/CommandDispatcher.java b/src/main/java/net/minecraft/server/CommandDispatcher.java index 37b1a7947c..c9d1f94100 100644 --- a/src/main/java/net/minecraft/server/CommandDispatcher.java +++ b/src/main/java/net/minecraft/server/CommandDispatcher.java @@ -106,6 +106,7 @@ public class CommandDispatcher { CommandIdleTimeout.a(this.b); CommandStop.a(this.b); CommandWhitelist.a(this.b); + net.pl3x.purpur.command.MSPTCommand.register(getDispatcher()); // Purpur } this.b.findAmbiguities((commandnode, commandnode1, commandnode2, collection) -> { diff --git a/src/main/java/net/pl3x/purpur/command/MSPTCommand.java b/src/main/java/net/pl3x/purpur/command/MSPTCommand.java new file mode 100644 index 0000000000..c3ffe528d4 --- /dev/null +++ b/src/main/java/net/pl3x/purpur/command/MSPTCommand.java @@ -0,0 +1,59 @@ +package net.pl3x.purpur.command; + +import net.minecraft.server.CommandDispatcher; +import net.minecraft.server.CommandListenerWrapper; +import net.minecraft.server.LocaleLanguage; +import net.minecraft.server.MinecraftServer; +import org.bukkit.ChatColor; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class MSPTCommand { + private static final DecimalFormat DF = new DecimalFormat("########0.0"); + + public static void register(com.mojang.brigadier.CommandDispatcher dispatcher) { + dispatcher.register(CommandDispatcher.register("mspt") + .requires((listener) -> { + return listener.hasPermission(2); + }) + .executes((context) -> { + return execute(context.getSource()); + }) + ).setPermission("bukkit.command.mspt"); + } + + private static int execute(CommandListenerWrapper sender) { + MinecraftServer server = MinecraftServer.getServer(); + + List times = new ArrayList<>(); + times.addAll(eval(server.tickTimes5s.getTimes())); + times.addAll(eval(server.tickTimes10s.getTimes())); + times.addAll(eval(server.tickTimes60s.getTimes())); + + sender.sendMessage(LocaleLanguage.translate("commands.purpur.mspt"), false); + sender.sendMessage(LocaleLanguage.translate("commands.purpur.mspt.times", times.toArray()), false); + return 0; + } + + private static List 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/resources/purpur.lang b/src/main/resources/purpur.lang index f4694dbcce..151ea90928 100644 --- a/src/main/resources/purpur.lang +++ b/src/main/resources/purpur.lang @@ -1,4 +1,6 @@ { + "commands.purpur.mspt": "§6Server tick times §e(§7avg§e/§7min§e/§7max§e)§6 from last 5s§7,§6 10s§7,§6 1m§e:", + "commands.purpur.mspt.times": "§6◴ %s§7/%s§7/%s§e, %s§7/%s§7/%s§e, %s§7/%s§7/%s", "idle.timeout.broadcast.away": "§e§o%s is now AFK", "idle.timeout.broadcast.back": "§e§o%s is no longer AFK" } -- 2.24.0