diff --git a/BukkitUtils/pom.xml b/BukkitUtils/pom.xml
index 33af7bd..10eb963 100644
--- a/BukkitUtils/pom.xml
+++ b/BukkitUtils/pom.xml
@@ -10,8 +10,13 @@
4.0.0
bukkitutils
+ 1.1-SNAPSHOT
+
+ destroystokyo-repo
+ https://repo.destroystokyo.com/repository/maven-public//
+
spigot-repo
https://hub.spigotmc.org/nexus/content/repositories/snapshots/
@@ -24,6 +29,12 @@
reflect
1.0-SNAPSHOT
+
+ com.destroystokyo.paper
+ paper-api
+ 1.10.2-R0.1-SNAPSHOT
+ provided
+
org.bukkit
bukkit
diff --git a/BukkitUtils/src/main/java/eu/mikroskeem/utils/bukkit/ServerUtils.java b/BukkitUtils/src/main/java/eu/mikroskeem/utils/bukkit/ServerUtils.java
new file mode 100644
index 0000000..72ee69b
--- /dev/null
+++ b/BukkitUtils/src/main/java/eu/mikroskeem/utils/bukkit/ServerUtils.java
@@ -0,0 +1,38 @@
+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};
+ }
+}