From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Ivan Pekov Date: Wed, 30 Sep 2020 18:05:45 +0300 Subject: [PATCH] Add nspt command diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java index d1cf80ce9e87fa6ec03f2e965883041acbd181d5..e5eb34da6994519b81bafab8241d680568cfcc84 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java @@ -187,6 +187,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer DedicatedServer.LOGGER.error("Unable to load server configuration", e); return false; } + net.yatopia.server.YatopiaConfig.registerCommands(); // Yatopia end de.minebench.origami.OrigamiConfig.init((java.io.File) options.valueOf("origami-settings")); this.setPVP(dedicatedserverproperties.pvp); diff --git a/src/main/java/net/yatopia/server/NSPTCommand.java b/src/main/java/net/yatopia/server/NSPTCommand.java new file mode 100644 index 0000000000000000000000000000000000000000..7a8c3e451788b017110a0dd5d83e40ebfeab9e70 --- /dev/null +++ b/src/main/java/net/yatopia/server/NSPTCommand.java @@ -0,0 +1,59 @@ +package net.yatopia.server; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import net.minecraft.server.MinecraftServer; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +public class NSPTCommand extends Command { + + public NSPTCommand(String name) { + super(name); + this.description = "View server tick times in nanoseconds"; + this.usageMessage = "/nspt"; + this.setPermission("bukkit.command.nspt"); + } + + @Override + public List 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 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 NS 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 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); + return Arrays.asList(getColor(avgD), getColor(min), getColor(max)); + } + + private static String getColor(double avg) { + return ChatColor.COLOR_CHAR + (avg >= 5E+7 ? "c" : avg >= (4E+7) ? "e" : "a") + avg; + } +} diff --git a/src/main/java/net/yatopia/server/YatopiaConfig.java b/src/main/java/net/yatopia/server/YatopiaConfig.java index 0237e91512dd15dae1597f1cbb37b0fb178ae35e..e4c5a485caa9e97388aefd9dc5a3ce40efeca738 100644 --- a/src/main/java/net/yatopia/server/YatopiaConfig.java +++ b/src/main/java/net/yatopia/server/YatopiaConfig.java @@ -6,12 +6,15 @@ import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.regex.Pattern; import net.minecraft.server.MinecraftServer; import org.bukkit.Bukkit; +import org.bukkit.command.Command; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; @@ -25,6 +28,7 @@ public class YatopiaConfig { public static YamlConfiguration config; public static int version; // since we're remapping sidestreams' configs we need this public public static boolean verbose; // since we're remapping sidestreams' configs we need this public + private static Map commands; /*========================================================================*/ public static void init(File configFile) { @@ -40,6 +44,8 @@ public class YatopiaConfig { config.options().header(HEADER); config.options().copyDefaults(true); verbose = getBoolean("verbose", false); + commands = new HashMap<>(); + commands.put("nspt", new NSPTCommand("nspt")); version = getInt("config-version", 1); set("config-version", 1); @@ -47,6 +53,12 @@ public class YatopiaConfig { readConfig(YatopiaConfig.class, null); } + public static void registerCommands() { + for (Map.Entry entry : commands.entrySet()) { + MinecraftServer.getServer().server.getCommandMap().register(entry.getKey(), "Yatopia", entry.getValue()); + } + } + private static void removeLeftovers() { // this method is only to remove non-used values in the config diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java index 200a13f619546bf10948fab496a07ba174869fd2..67f58c4792a86b1ee4ad97ce192a5931bf597ab5 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -916,6 +916,7 @@ public final class CraftServer implements Server { org.spigotmc.SpigotConfig.registerCommands(); // Spigot com.destroystokyo.paper.PaperConfig.registerCommands(); // Paper net.pl3x.purpur.PurpurConfig.registerCommands(); // Purpur + net.yatopia.server.YatopiaConfig.registerCommands(); // Yatopia overrideAllCommandBlockCommands = commandsConfiguration.getStringList("command-block-overrides").contains("*"); ignoreVanillaPermissions = commandsConfiguration.getBoolean("ignore-vanilla-permissions");