diff --git a/SpigotCore_Main/src/de/steamwar/core/Core.java b/SpigotCore_Main/src/de/steamwar/core/Core.java
index 893e53a..43e0bf7 100644
--- a/SpigotCore_Main/src/de/steamwar/core/Core.java
+++ b/SpigotCore_Main/src/de/steamwar/core/Core.java
@@ -32,6 +32,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();
@@ -52,6 +53,7 @@ public class Core extends JavaPlugin{
@Override
public void onLoad() {
setInstance(this);
+ tpsWatcher = new TPSWatcher();
}
@Override
@@ -75,10 +77,14 @@ public class Core extends JavaPlugin{
public static Core getInstance() {
return instance;
}
+
public static int getVersion(){
return version;
}
+ public static TPSWatcher getTpsWatcher() {
+ return tpsWatcher;
+ }
private static void setInstance(Core instance) {
Core.instance = instance;
diff --git a/SpigotCore_Main/src/de/steamwar/core/TPSWatcher.java b/SpigotCore_Main/src/de/steamwar/core/TPSWatcher.java
new file mode 100644
index 0000000..75f33eb
--- /dev/null
+++ b/SpigotCore_Main/src/de/steamwar/core/TPSWatcher.java
@@ -0,0 +1,92 @@
+/*
+ This file is a part of the SteamWar software.
+
+ Copyright (C) 2020 SteamWar.de-Serverteam
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
+package de.steamwar.core;
+
+import org.bukkit.Bukkit;
+
+import java.util.LinkedList;
+
+public class TPSWatcher {
+
+ private static class TPSMeter {
+
+ private LinkedList 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();
+ }
+
+}