2020-09-30 17:35:35 +02:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Ivan Pekov <ivan@mrivanplays.com>
|
|
|
|
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 6c280d64bb069fba0d52a7d8b4eb6a0816354cc1..15ccdad0f46297c30ed603879db467608c410df4 100644
|
|
|
|
--- a/src/main/java/net/minecraft/server/DedicatedServer.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/DedicatedServer.java
|
|
|
|
@@ -184,6 +184,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
|
|
|
|
DedicatedServer.LOGGER.error("Unable to load server configuration", e);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
+ net.yatopia.server.YatopiaConfig.registerCommands();
|
|
|
|
de.minebench.origami.OrigamiConfig.init((java.io.File) options.valueOf("origami-settings"));
|
|
|
|
// Yatopia end
|
|
|
|
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
|
2020-10-01 13:13:08 +02:00
|
|
|
index 0000000000000000000000000000000000000000..7a8c3e451788b017110a0dd5d83e40ebfeab9e70
|
2020-09-30 17:35:35 +02:00
|
|
|
--- /dev/null
|
|
|
|
+++ b/src/main/java/net/yatopia/server/NSPTCommand.java
|
|
|
|
@@ -0,0 +1,59 @@
|
2020-10-01 13:13:08 +02:00
|
|
|
+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<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 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<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);
|
|
|
|
+ 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;
|
|
|
|
+ }
|
|
|
|
+}
|
2020-09-30 17:35:35 +02:00
|
|
|
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<String, Command> 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<String, Command> 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
|
2020-10-08 13:04:22 +02:00
|
|
|
index efbfcc5038a1019725eba46e5379a86e78617fb8..165914e95afae82597ebcbde4f7e8a0d9c8aeaab 100644
|
2020-09-30 17:35:35 +02:00
|
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
2020-10-08 13:04:22 +02:00
|
|
|
@@ -916,6 +916,7 @@ public final class CraftServer implements Server {
|
2020-09-30 17:35:35 +02:00
|
|
|
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");
|
|
|
|
|