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}; } }