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(); + } + +}