--- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -299,6 +_,7 @@ public volatile boolean abnormalExit; // Paper - Improved watchdog support public volatile Thread shutdownThread; // Paper - Improved watchdog support public final io.papermc.paper.configuration.PaperConfigurations paperConfigurations; // Paper - add paper configuration files + public final me.samsuik.sakura.configuration.SakuraConfigurations sakuraConfigurations; // Sakura public boolean isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked private final Set pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping public static final long SERVER_INIT = System.nanoTime(); // Paper - Lag compensation @@ -317,6 +_,17 @@ thread.start(); return minecraftServer; } + // Sakura start - track tick information + private final me.samsuik.sakura.tps.TickInformationCollector tickInformationCollector = new me.samsuik.sakura.tps.TickInformationCollector(); + + public final me.samsuik.sakura.tps.ServerTickInformation latestTickInformation() { + return this.tickInformationCollector.latestTickInformation(); + } + + public final ImmutableList tickHistory(long from, long to) { + return this.tickInformationCollector.collect(from, to); + } + // Sakura end - track tick information public MinecraftServer( // CraftBukkit start @@ -398,6 +_,10 @@ Runtime.getRuntime().addShutdownHook(new org.bukkit.craftbukkit.util.ServerShutdownThread(this)); // CraftBukkit end this.paperConfigurations = services.paperConfigurations(); // Paper - add paper configuration files + // Sakura start + final java.nio.file.Path sakuraConfigDirPath = ((java.io.File) options.valueOf("sakura-settings-directory")).toPath(); + this.sakuraConfigurations = me.samsuik.sakura.configuration.SakuraConfigurations.setup(sakuraConfigDirPath); + // Sakura end } private void readScoreboard(DimensionDataStorage dataStorage) { @@ -1139,6 +_,7 @@ if (++MinecraftServer.currentTick % MinecraftServer.SAMPLE_INTERVAL == 0) { final long diff = currentTime - tickSection; final java.math.BigDecimal currentTps = TPS_BASE.divide(new java.math.BigDecimal(diff), 30, java.math.RoundingMode.HALF_UP); + this.tickInformationCollector.levelData(this.levels.values(), currentTps.doubleValue()); // Sakura - track tick information tps1.add(currentTps, diff); tps5.add(currentTps, diff); tps15.add(currentTps, diff); @@ -1167,6 +_,7 @@ profilerFiller.push("tick"); this.tickFrame.start(); this.tickServer(flag ? () -> false : this::haveTime); + this.tickInformationCollector.tickDuration((System.nanoTime() - currentTime) / 1_000_000L); // Sakura - track tick information this.tickFrame.end(); profilerFiller.popPush("nextTickWait"); this.mayHaveDelayedTasks = true;