SteamWar/SpigotCore
Archiviert
13
0

Add TPSWatcher #61

Geschlossen
YoyoNow möchte 1 Commits von TPS nach master mergen
2 geänderte Dateien mit 78 neuen und 1 gelöschten Zeilen

Datei anzeigen

@ -31,6 +31,7 @@ import org.bukkit.plugin.java.JavaPlugin;
public class Core extends JavaPlugin{
private static Core instance;
private static final int version;
private static TPSWatcher tpsWatcher;
static{
String packageName = Bukkit.getServer().getClass().getPackage().getName();
@ -61,6 +62,7 @@ public class Core extends JavaPlugin{
ChunkListener.init();
if(version >= 12)
ErrorLogger.init();
tpsWatcher = new TPSWatcher();
}
@Override
@ -74,7 +76,9 @@ public class Core extends JavaPlugin{
public static int getVersion(){
return version;
}
public static TPSWatcher getTpsWatcher() {
return tpsWatcher;
}
private static void setInstance(Core instance) {
Core.instance = instance;

Datei anzeigen

@ -0,0 +1,73 @@
package de.steamwar.core;
import org.bukkit.Bukkit;
import java.util.LinkedList;
public class TPSWatcher {
private static class TPSMeter {
private LinkedList<Double> meter = new LinkedList<>();
private int count;
public TPSMeter(int count) {
this.count = count;
}
public void add(double tps) {
meter.addLast(tps);
if (meter.size() > count) meter.removeFirst();
}
public double get() {
double total = 0;
for (double d : meter) total += d;
return total / meter.size();
}
}
private double now = 20.0;
private TPSMeter one_minute = new TPSMeter(1200);
private TPSMeter five_minutes = new TPSMeter(6000);
private TPSMeter ten_minutes = new TPSMeter(12000);
private long lastTime = System.currentTimeMillis();
private static final double tickTimeDefault = 1000 / 20.0;
private static final double tickDefault = 20.0;
TPSWatcher() {
Bukkit.getScheduler().runTaskTimer(Core.getInstance(), () -> {
long tickTime = System.currentTimeMillis() - lastTime;
lastTime = System.currentTimeMillis();
if (tickTime != 0) {
now = (tickTimeDefault / tickTime) * tickDefault;
} else {
now = 0;
}
one_minute.add(now);
five_minutes.add(now);
ten_minutes.add(now);
}, 1, 1);
}
public double getTPS() {
return now;
}
public double get1TPS() {
return one_minute.get();
}
public double get5TPS() {
return five_minutes.get();
}
public double get10TPS() {
return ten_minutes.get();
}
}