commit
a942ce74a7
@ -9,6 +9,7 @@ import javax.net.ssl.KeyManagerFactory;
|
|||||||
import javax.net.ssl.SSLContext;
|
import javax.net.ssl.SSLContext;
|
||||||
import javax.net.ssl.TrustManagerFactory;
|
import javax.net.ssl.TrustManagerFactory;
|
||||||
|
|
||||||
|
import es.mesacarlos.webconsole.util.TpsTracker;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.core.Filter;
|
import org.apache.logging.log4j.core.Filter;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -28,6 +29,7 @@ public class WebConsole extends JavaPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
|
Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, new TpsTracker(), 100L, 1L);
|
||||||
//Change language to user-specified language.
|
//Change language to user-specified language.
|
||||||
Internationalization.setCurrentLocale(ConfigManager.getInstance().getLanguage());
|
Internationalization.setCurrentLocale(ConfigManager.getInstance().getLanguage());
|
||||||
|
|
||||||
@ -100,4 +102,4 @@ public class WebConsole extends JavaPlugin {
|
|||||||
public WSServer getWSServer() {
|
public WSServer getWSServer() {
|
||||||
return server;
|
return server;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
34
src/es/mesacarlos/webconsole/util/TpsTracker.java
Normal file
34
src/es/mesacarlos/webconsole/util/TpsTracker.java
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package es.mesacarlos.webconsole.util;
|
||||||
|
|
||||||
|
public class TpsTracker implements Runnable {
|
||||||
|
public static int TICK_COUNT = 0;
|
||||||
|
public static long[] TICKS = new long[600];
|
||||||
|
public static long LAST_TICK = 0L;
|
||||||
|
|
||||||
|
public static double getTPS() {
|
||||||
|
return getTPS(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double getTPS(int ticks) {
|
||||||
|
if (TICK_COUNT < ticks) {
|
||||||
|
return 20.0;
|
||||||
|
} else {
|
||||||
|
int target = (TICK_COUNT - 1 - ticks) % TICKS.length;
|
||||||
|
long elapsed = System.currentTimeMillis() - TICKS[target];
|
||||||
|
return (double)ticks / ((double)elapsed / 1000.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static long getElapsed(int tickID) {
|
||||||
|
if (TICK_COUNT - tickID >= TICKS.length) {
|
||||||
|
}
|
||||||
|
|
||||||
|
long time = TICKS[tickID % TICKS.length];
|
||||||
|
return System.currentTimeMillis() - time;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
TICKS[TICK_COUNT % TICKS.length] = System.currentTimeMillis();
|
||||||
|
++TICK_COUNT;
|
||||||
|
}
|
||||||
|
}
|
@ -9,6 +9,7 @@ package es.mesacarlos.webconsole.websocket.command;
|
|||||||
//------------------------------
|
//------------------------------
|
||||||
|
|
||||||
import es.mesacarlos.webconsole.util.Internationalization;
|
import es.mesacarlos.webconsole.util.Internationalization;
|
||||||
|
import es.mesacarlos.webconsole.util.TpsTracker;
|
||||||
import es.mesacarlos.webconsole.websocket.WSServer;
|
import es.mesacarlos.webconsole.websocket.WSServer;
|
||||||
import es.mesacarlos.webconsole.websocket.response.Tps;
|
import es.mesacarlos.webconsole.websocket.response.Tps;
|
||||||
import org.java_websocket.WebSocket;
|
import org.java_websocket.WebSocket;
|
||||||
@ -35,20 +36,7 @@ public class TpsCommand implements WSCommand {
|
|||||||
* @return Current server Tps
|
* @return Current server Tps
|
||||||
*/
|
*/
|
||||||
public double[] getTps() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, NoSuchFieldException {
|
public double[] getTps() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, NoSuchFieldException {
|
||||||
try {
|
return new double[] { Math.round(TpsTracker.getTPS()) }; // rounding elsewe would get something like 19.93620414673046 / 20 tps
|
||||||
Class<?> minecraftServerClass = Class.forName("net.minecraft.server." + mcVer + ".MinecraftServer");
|
|
||||||
Method getServerMethod = minecraftServerClass.getDeclaredMethod("getServer");
|
|
||||||
Object serverInstance = getServerMethod.invoke(null);
|
|
||||||
Field recentTpsField = serverInstance.getClass().getField("recentTps");
|
|
||||||
double[] recentTps = (double[]) recentTpsField.get(serverInstance);
|
|
||||||
for (int i = 0; i < recentTps.length; i++) {
|
|
||||||
recentTps[i] = Math.round(recentTps[i]);
|
|
||||||
}
|
|
||||||
return recentTps;
|
|
||||||
} catch (Exception e) {
|
|
||||||
//If an uncaught exception is thrown, maybe it is because this method of getting TPS does not work in the MV version currently running..
|
|
||||||
return new double[] { 0 };
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user