diff options
author | FivePB (Xer) <[email protected]> | 2022-08-08 15:25:41 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2022-08-08 16:25:41 +0100 |
commit | c7e118b39425bd3aa817ad9bb5ed40db8266d785 (patch) | |
tree | 3efd8cfd04875482509b031280ceb8cd6962a43a /patches/server/0293-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch | |
parent | 78b19f89a4658892c5ec79d5062f8c5b95ca149b (diff) | |
download | Paper-c7e118b39425bd3aa817ad9bb5ed40db8266d785.tar.gz Paper-c7e118b39425bd3aa817ad9bb5ed40db8266d785.zip |
Update modern forwarding to v3 (#8219)
Diffstat (limited to 'patches/server/0293-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch')
-rw-r--r-- | patches/server/0293-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch | 164 |
1 files changed, 0 insertions, 164 deletions
diff --git a/patches/server/0293-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch b/patches/server/0293-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch deleted file mode 100644 index d105707985..0000000000 --- a/patches/server/0293-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch +++ /dev/null @@ -1,164 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Zach Brown <[email protected]> -Date: Wed, 2 Jan 2019 00:35:43 -0600 -Subject: [PATCH] Add APIs to replace OfflinePlayer#getLastPlayed - -Currently OfflinePlayer#getLastPlayed could more accurately be described -as "OfflinePlayer#getLastTimeTheirDataWasSaved". - -The API doc says it should return the last time the server "witnessed" -the player, whilst also saying it should return the last time they -logged in. The current implementation does neither. - -Given this interesting contradiction in the API documentation and the -current defacto implementation, I've elected to deprecate (with no -intent to remove) and replace it with two new methods, clearly named and -documented as to their purpose. - -diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index f95e8e53fc0438858921446f44279f747414b12f..eaf95c84896f71f36e250b3a07bb504230e4d85d 100644 ---- a/src/main/java/net/minecraft/server/level/ServerPlayer.java -+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -230,6 +230,7 @@ public class ServerPlayer extends Player { - public int latency; - public boolean wonGame; - private int containerUpdateDelay; // Paper -+ public long loginTime; // Paper - // Paper start - cancellable death event - public boolean queueHealthUpdatePacket = false; - public net.minecraft.network.protocol.game.ClientboundSetHealthPacket queuedHealthUpdatePacket; -diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 734a7b101e5ac9ac4ceb0ba3cb74b94bf2c18683..f6f086d1e5f08e5beae142685cfb682b8e5683f1 100644 ---- a/src/main/java/net/minecraft/server/players/PlayerList.java -+++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -178,6 +178,7 @@ public abstract class PlayerList { - } - - public void placeNewPlayer(Connection connection, ServerPlayer player) { -+ player.loginTime = System.currentTimeMillis(); // Paper - GameProfile gameprofile = player.getGameProfile(); - GameProfileCache usercache = this.server.getProfileCache(); - Optional<GameProfile> optional = usercache.get(gameprofile.getId()); -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java -index e7442952ef1f03969949014492a7ddc6d0796ba5..d7823d7dc88cfba6f6ac9dae220e03dea4a0bcdd 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java -@@ -250,6 +250,61 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa - return this.getData() != null; - } - -+ // Paper start -+ @Override -+ public long getLastLogin() { -+ Player player = getPlayer(); -+ if (player != null) return player.getLastLogin(); -+ -+ CompoundTag data = getPaperData(); -+ -+ if (data != null) { -+ if (data.contains("LastLogin")) { -+ return data.getLong("LastLogin"); -+ } else { -+ // if the player file cannot provide accurate data, this is probably the closest we can approximate -+ File file = getDataFile(); -+ return file.lastModified(); -+ } -+ } else { -+ return 0; -+ } -+ } -+ -+ @Override -+ public long getLastSeen() { -+ Player player = getPlayer(); -+ if (player != null) return player.getLastSeen(); -+ -+ CompoundTag data = getPaperData(); -+ -+ if (data != null) { -+ if (data.contains("LastSeen")) { -+ return data.getLong("LastSeen"); -+ } else { -+ // if the player file cannot provide accurate data, this is probably the closest we can approximate -+ File file = getDataFile(); -+ return file.lastModified(); -+ } -+ } else { -+ return 0; -+ } -+ } -+ -+ private CompoundTag getPaperData() { -+ CompoundTag result = getData(); -+ -+ if (result != null) { -+ if (!result.contains("Paper")) { -+ result.put("Paper", new CompoundTag()); -+ } -+ result = result.getCompound("Paper"); -+ } -+ -+ return result; -+ } -+ // Paper end -+ - @Override - public Location getLastDeathLocation() { - if (this.getData().contains("LastDeathLocation", 10)) { -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index df164a6fe8d53d34db93f4f1f2af6a9c1c98a7e8..500c1a317f58c1b24ae1b7cbcd101f1d327e3ae8 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -168,6 +168,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - private org.bukkit.event.player.PlayerResourcePackStatusEvent.Status resourcePackStatus; - private String resourcePackHash; - private static final boolean DISABLE_CHANNEL_LIMIT = System.getProperty("paper.disableChannelLimit") != null; // Paper - add a flag to disable the channel limit -+ private long lastSaveTime; - // Paper end - - public CraftPlayer(CraftServer server, ServerPlayer entity) { -@@ -1686,6 +1687,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - this.firstPlayed = firstPlayed; - } - -+ // Paper start -+ @Override -+ public long getLastLogin() { -+ return getHandle().loginTime; -+ } -+ -+ @Override -+ public long getLastSeen() { -+ return isOnline() ? System.currentTimeMillis() : this.lastSaveTime; -+ } -+ // Paper end -+ - public void readExtraData(CompoundTag nbttagcompound) { - this.hasPlayedBefore = true; - if (nbttagcompound.contains("bukkit")) { -@@ -1708,6 +1721,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - } - - public void setExtraData(CompoundTag nbttagcompound) { -+ this.lastSaveTime = System.currentTimeMillis(); // Paper -+ - if (!nbttagcompound.contains("bukkit")) { - nbttagcompound.put("bukkit", new CompoundTag()); - } -@@ -1722,6 +1737,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - data.putLong("firstPlayed", this.getFirstPlayed()); - data.putLong("lastPlayed", System.currentTimeMillis()); - data.putString("lastKnownName", handle.getScoreboardName()); -+ -+ // Paper start - persist for use in offline save data -+ if (!nbttagcompound.contains("Paper")) { -+ nbttagcompound.put("Paper", new CompoundTag()); -+ } -+ -+ CompoundTag paper = nbttagcompound.getCompound("Paper"); -+ paper.putLong("LastLogin", handle.loginTime); -+ paper.putLong("LastSeen", System.currentTimeMillis()); -+ // Paper end - } - - @Override |