Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions paper-api/src/main/java/org/bukkit/entity/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -3374,6 +3374,16 @@ default <T> void spawnParticle(Particle particle, Location location, int count,
*/
public int getPing();

/**
* Gets the player's most recent measured ping.
*
* This differs from {@link #getPing()} as it represents an average of ping over time,
* whereas this represents simply the most recent ping.
*
* @return player's most recent ping
*/
public int getLastPing();

/**
* Gets the player's current locale.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,10 +100,10 @@ index 21d50675bfe90c2276890779eb23de58ac915b9a..7be34e37562875313b8e43357921b5fe
}
}
diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
index 079ab378920c0e52ef4e42ef20b37bd389f40870..b8a4b4cc02a2fc6b70f4b840796eed501aad6239 100644
index 0fd13e18902991d7ad4cbed0222d91cb71229d7a..a3768425e63722c8b0a99579a680f4cd9a9055c2 100644
--- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
@@ -39,12 +39,13 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -39,13 +39,14 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
protected final MinecraftServer server;
public final Connection connection; // Paper
private final boolean transferred;
Expand All @@ -117,33 +117,36 @@ index 079ab378920c0e52ef4e42ef20b37bd389f40870..b8a4b4cc02a2fc6b70f4b840796eed50
private boolean closed = false;
- private int latency;
+ private volatile int latency; // Paper - improve keepalives - make volatile
public int lastLatency; // Paper - Keep most recent latency in millis
+ private final io.papermc.paper.util.KeepAlive keepAlive; // Paper - improve keepalives
private volatile boolean suspendFlushingOnServerThread = false;
// CraftBukkit start
public final org.bukkit.craftbukkit.CraftServer cserver;
@@ -61,13 +62,14 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -62,7 +63,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
public ServerCommonPacketListenerImpl(MinecraftServer server, Connection connection, CommonListenerCookie cookie) {
this.server = server;
this.connection = connection;
- this.keepAliveTime = Util.getMillis();
+ //this.keepAliveTime = Util.getMillis(); // Paper - improve keepalives
this.latency = cookie.latency();
this.lastLatency = this.latency; // Paper - Keep most recent latency in millis
this.transferred = cookie.transferred();
// Paper start
@@ -70,6 +71,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
this.playerBrand = cookie.brandName();
this.cserver = server.server;
this.pluginMessagerChannels = cookie.channels();
+ this.keepAlive = cookie.keepAlive();
// Paper end
}

@@ -100,13 +102,41 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -102,14 +104,42 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack

@Override
public void handleKeepAlive(ServerboundKeepAlivePacket packet) {
- if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) {
- int i = (int)(Util.getMillis() - this.keepAliveTime);
- this.latency = (this.latency * 3 + i) / 4;
- this.lastLatency = i; // Paper - Keep most recent latency in millis
- this.keepAlivePending = false;
- } else if (!this.isSingleplayerOwner()) {
- this.disconnectAsync(TIMEOUT_DISCONNECTION_MESSAGE, io.papermc.paper.connection.DisconnectionReason.TIMEOUT); // Paper - add proper async disconnect
Expand All @@ -159,6 +162,7 @@ index 079ab378920c0e52ef4e42ef20b37bd389f40870..b8a4b4cc02a2fc6b70f4b840796eed50
+ this.keepAlive.pingCalculator5s.update(response);
+
+ this.latency = this.keepAlive.pingCalculator5s.getAvgLatencyMS();
+ this.lastLatency = (int) java.util.concurrent.TimeUnit.NANOSECONDS.toMillis(response.latencyNS()); // Paper - Keep most recent latency in millis
+ return;
+ }
+
Expand All @@ -185,7 +189,7 @@ index 079ab378920c0e52ef4e42ef20b37bd389f40870..b8a4b4cc02a2fc6b70f4b840796eed50
}

@Override
@@ -233,20 +263,23 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -236,20 +266,23 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
protected void keepConnectionAlive() {
Profiler.get().push("keepAlive");
long millis = Util.getMillis();
Expand Down Expand Up @@ -223,7 +227,7 @@ index 079ab378920c0e52ef4e42ef20b37bd389f40870..b8a4b4cc02a2fc6b70f4b840796eed50
}
}

@@ -427,6 +460,6 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -430,6 +463,6 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
}

protected CommonListenerCookie createCookie(ClientInformation clientInformation) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@
private final boolean transferred;
private long keepAliveTime;
private boolean keepAlivePending;
@@ -46,6 +_,17 @@
@@ -45,15 +_,39 @@
private long closedListenerTime;
private boolean closed = false;
private int latency;
+ public int lastLatency; // Paper - Keep most recent latency in millis
private volatile boolean suspendFlushingOnServerThread = false;
+ // CraftBukkit start
+ public final org.bukkit.craftbukkit.CraftServer cserver;
Expand All @@ -27,9 +29,10 @@

public ServerCommonPacketListenerImpl(MinecraftServer server, Connection connection, CommonListenerCookie cookie) {
this.server = server;
@@ -53,7 +_,18 @@
this.connection = connection;
this.keepAliveTime = Util.getMillis();
this.latency = cookie.latency();
+ this.lastLatency = this.latency; // Paper - Keep most recent latency in millis
this.transferred = cookie.transferred();
+ // Paper start
+ this.playerBrand = cookie.brandName();
Expand All @@ -46,8 +49,11 @@

private void close() {
if (!this.closed) {
@@ -83,7 +_,7 @@
@@ -81,9 +_,10 @@
if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) {
int i = (int)(Util.getMillis() - this.keepAliveTime);
this.latency = (this.latency * 3 + i) / 4;
+ this.lastLatency = i; // Paper - Keep most recent latency in millis
this.keepAlivePending = false;
} else if (!this.isSingleplayerOwner()) {
- this.disconnect(TIMEOUT_DISCONNECTION_MESSAGE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2705,6 +2705,12 @@ public int getPing() {
return this.getHandle().connection.latency();
}

@Override
public int getLastPing() {
if (this.getHandle().connection == null) throw new UnsupportedOperationException("Too early to call this method at this stage");
return this.getHandle().connection.lastLatency;
}

@Override
public String getLocale() {
// Paper start - Locale change event
Expand Down
Loading