diff options
author | Spottedleaf <[email protected]> | 2019-05-26 10:40:12 -0700 |
---|---|---|
committer | Spottedleaf <[email protected]> | 2019-05-26 10:40:12 -0700 |
commit | 07762fc610e0d2c116e81278e728a786f70a7cf0 (patch) | |
tree | 41a146fd48489acf1bdebb81dd3a9c57fbc55084 /Spigot-Server-Patches/0405-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch | |
parent | 17fe7a1b43e2bf409fe761760a943e385c6d0e5f (diff) | |
download | Paper-07762fc610e0d2c116e81278e728a786f70a7cf0.tar.gz Paper-07762fc610e0d2c116e81278e728a786f70a7cf0.zip |
Revert Don-t-recheck-type-after-setting-a-block.patch
Diffstat (limited to 'Spigot-Server-Patches/0405-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch')
-rw-r--r-- | Spigot-Server-Patches/0405-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0405-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch b/Spigot-Server-Patches/0405-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch new file mode 100644 index 0000000000..0a15d17ad6 --- /dev/null +++ b/Spigot-Server-Patches/0405-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch @@ -0,0 +1,167 @@ +From 15c47ec9ce65bdbcbeb5cd913f9b2113ba27f091 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/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java +index 57c6455bd8..541461275c 100644 +--- a/src/main/java/net/minecraft/server/EntityPlayer.java ++++ b/src/main/java/net/minecraft/server/EntityPlayer.java +@@ -72,6 +72,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { + public int ping; + public boolean viewingCredits; + private int containerUpdateDelay; // Paper ++ public long loginTime; // Paper + // Paper start - cancellable death event + public boolean queueHealthUpdatePacket = false; + public net.minecraft.server.PacketPlayOutUpdateHealth queuedHealthUpdatePacket; +diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java +index ec760325ba..135d25abd2 100644 +--- a/src/main/java/net/minecraft/server/PlayerList.java ++++ b/src/main/java/net/minecraft/server/PlayerList.java +@@ -95,6 +95,7 @@ public abstract class PlayerList { + } + + public void a(NetworkManager networkmanager, EntityPlayer entityplayer) { ++ entityplayer.loginTime = System.currentTimeMillis(); // Paper + GameProfile gameprofile = entityplayer.getProfile(); + UserCache usercache = this.server.getUserCache(); + GameProfile gameprofile1 = usercache.a(gameprofile.getId()); +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java +index fbdb2df27d..e1973c5d67 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java +@@ -245,6 +245,61 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa + return getData() != null; + } + ++ // Paper start ++ @Override ++ public long getLastLogin() { ++ Player player = getPlayer(); ++ if (player != null) return player.getLastLogin(); ++ ++ NBTTagCompound data = getPaperData(); ++ ++ if (data != null) { ++ if (data.hasKey("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(); ++ ++ NBTTagCompound data = getPaperData(); ++ ++ if (data != null) { ++ if (data.hasKey("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 NBTTagCompound getPaperData() { ++ NBTTagCompound result = getData(); ++ ++ if (result != null) { ++ if (!result.hasKey("Paper")) { ++ result.set("Paper", new NBTTagCompound()); ++ } ++ result = result.getCompound("Paper"); ++ } ++ ++ return result; ++ } ++ // Paper end ++ + public Location getBedSpawnLocation() { + NBTTagCompound data = getData(); + if (data == null) return null; +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +index 8d32982c53..a03796cd5e 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +@@ -132,6 +132,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, EntityPlayer entity) { +@@ -1337,6 +1338,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(NBTTagCompound nbttagcompound) { + hasPlayedBefore = true; + if (nbttagcompound.hasKey("bukkit")) { +@@ -1359,6 +1372,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + } + + public void setExtraData(NBTTagCompound nbttagcompound) { ++ this.lastSaveTime = System.currentTimeMillis(); // Paper ++ + if (!nbttagcompound.hasKey("bukkit")) { + nbttagcompound.set("bukkit", new NBTTagCompound()); + } +@@ -1373,6 +1388,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + data.setLong("firstPlayed", getFirstPlayed()); + data.setLong("lastPlayed", System.currentTimeMillis()); + data.setString("lastKnownName", handle.getName()); ++ ++ // Paper start - persist for use in offline save data ++ if (!nbttagcompound.hasKey("Paper")) { ++ nbttagcompound.set("Paper", new NBTTagCompound()); ++ } ++ ++ NBTTagCompound paper = nbttagcompound.getCompound("Paper"); ++ paper.setLong("LastLogin", handle.loginTime); ++ paper.setLong("LastSeen", System.currentTimeMillis()); ++ // Paper end + } + + @Override +-- +2.21.0 + |