39 lines
1.5 KiB
Java
39 lines
1.5 KiB
Java
package eu.mikroskeem.utils.bukkit;
|
|
|
|
import eu.mikroskeem.utils.reflect.Reflect;
|
|
import org.bukkit.Bukkit;
|
|
|
|
import java.lang.reflect.Field;
|
|
import java.lang.reflect.Method;
|
|
|
|
public class ServerUtils {
|
|
/**
|
|
* Get server's TPS
|
|
*
|
|
* Will use PaperSpigot's API if available, reflection otherwise
|
|
* @return double array of TPS (not rounded!), values are -1 if reflection failed
|
|
*/
|
|
public static double[] getTPS(){
|
|
if(Bukkit.getVersion().contains("Paper")) {
|
|
return Bukkit.getTPS();
|
|
} else {
|
|
String bukkitPackageName = Bukkit.getServer().getClass().getPackage().getName();
|
|
String nmsVer = bukkitPackageName.substring(bukkitPackageName.lastIndexOf(".") + 1);
|
|
|
|
Class<?> MinecraftServerClass = Reflect.getClass(
|
|
String.format("net.minecraft.server.%s.MinecraftServer", nmsVer));
|
|
if(MinecraftServerClass != null){
|
|
Method getServer = Reflect.getMethod(MinecraftServerClass, "getServer");
|
|
Field recentTPS = Reflect.getField(MinecraftServerClass, "recentTps");
|
|
if(getServer != null && recentTPS != null){
|
|
Object server = Reflect.invokeMethod(getServer, null);
|
|
try {
|
|
return (double[]) Reflect.readField(recentTPS, server);
|
|
} catch (NullPointerException e){}
|
|
}
|
|
}
|
|
}
|
|
return new double[]{-1, -1, -1};
|
|
}
|
|
}
|