diff --git a/src/main/java/catserver/api/annotation/Backported.java b/src/main/java/catserver/api/annotation/Backported.java
new file mode 100644
index 000000000..3294867e2
--- /dev/null
+++ b/src/main/java/catserver/api/annotation/Backported.java
@@ -0,0 +1,13 @@
+package catserver.api.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * Indicates that the annotated api method is backported from a newer version of Minecraft.
+ */
+@Documented
+@Retention(RetentionPolicy.CLASS)
+@Target({ElementType.METHOD, ElementType.TYPE})
+public @interface Backported {
+ String from() default "";
+}
diff --git a/src/main/java/com/destroystokyo/paper/event/server/ServerTickEndEvent.java b/src/main/java/com/destroystokyo/paper/event/server/ServerTickEndEvent.java
index 072434495..e4a5765d4 100644
--- a/src/main/java/com/destroystokyo/paper/event/server/ServerTickEndEvent.java
+++ b/src/main/java/com/destroystokyo/paper/event/server/ServerTickEndEvent.java
@@ -1,11 +1,13 @@
package com.destroystokyo.paper.event.server;
+import catserver.api.annotation.Backported;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
/**
* Called when the server has finished ticking the main loop
*/
+@Backported(from = "1.13.2")
public class ServerTickEndEvent extends Event {
private static final HandlerList HANDLER_LIST = new HandlerList();
diff --git a/src/main/java/com/destroystokyo/paper/event/server/ServerTickStartEvent.java b/src/main/java/com/destroystokyo/paper/event/server/ServerTickStartEvent.java
index f937824a3..512d5ab0d 100644
--- a/src/main/java/com/destroystokyo/paper/event/server/ServerTickStartEvent.java
+++ b/src/main/java/com/destroystokyo/paper/event/server/ServerTickStartEvent.java
@@ -1,8 +1,10 @@
package com.destroystokyo.paper.event.server;
+import catserver.api.annotation.Backported;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
+@Backported(from = "1.13.2")
public class ServerTickStartEvent extends Event {
private static final HandlerList HANDLER_LIST = new HandlerList();
diff --git a/src/main/java/org/bukkit/craftbukkit/v1_12_R1/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/v1_12_R1/entity/CraftPlayer.java
index 423729941..752628af7 100644
--- a/src/main/java/org/bukkit/craftbukkit/v1_12_R1/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/v1_12_R1/entity/CraftPlayer.java
@@ -1543,6 +1543,13 @@ public org.bukkit.advancement.AdvancementProgress getAdvancementProgress(org.buk
return new CraftAdvancementProgress(craft, data, progress);
}
+ // CatRoom start - Backport APIs
+ @Override
+ public int getPing() {
+ return this.getHandle().ping;
+ }
+ // CatRoom end - Backport APIs
+
@Override
public String getLocale() {
return getHandle().language;
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index cfe8e84ef..8dd4ccf3b 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -1427,6 +1427,24 @@ public interface Player extends HumanEntity, Conversable, CommandSender, Offline
*/
public AdvancementProgress getAdvancementProgress(Advancement advancement);
+ // CatRoom start - Backport APIs
+ /**
+ * Gets the player's estimated ping in milliseconds.
+ *
+ * In Vanilla this value represents a weighted average of the response time
+ * to application layer ping packets sent. This value does not represent the
+ * network round trip time and as such may have less granularity and be
+ * impacted by other sources. For these reasons it should not be used
+ * for anti-cheat purposes. Its recommended use is only as a
+ * qualitative indicator of connection quality (Vanilla uses it for
+ * this purpose in the tab list).
+ *
+ * @return player ping
+ */
+ @catserver.api.annotation.Backported(from = "1.17")
+ public int getPing();
+ // CatRoom end - Backport APIs
+
/**
* Gets the player's current locale.
*