aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBjarne Koll <[email protected]>2024-09-30 00:26:44 +0200
committerGitHub <[email protected]>2024-09-30 00:26:44 +0200
commitea00be3aaa1a5727151db9cd82d876613c99e727 (patch)
treecbaa8e9ef30c21010dcfe9afd908d69e2ba7d134
parentb410fe86974adfe47eaf361fee92d8a189afed9f (diff)
downloadPaper-ea00be3aaa1a5727151db9cd82d876613c99e727.tar.gz
Paper-ea00be3aaa1a5727151db9cd82d876613c99e727.zip
Do not NPE on uuid resolution in player profile (#11449)
Band-aid fix for the player profile api resolution for a profile with name but without uuid. The real solution is a proper refactoring of the completeFromCache and complete method internally, however this needs further consideration regarding existing faulty behaviour around name lookups from uuid-only profiles.
-rw-r--r--patches/server/0136-Basic-PlayerProfile-API.patch8
1 files changed, 5 insertions, 3 deletions
diff --git a/patches/server/0136-Basic-PlayerProfile-API.patch b/patches/server/0136-Basic-PlayerProfile-API.patch
index f6c4fe4ada..fd65e56d05 100644
--- a/patches/server/0136-Basic-PlayerProfile-API.patch
+++ b/patches/server/0136-Basic-PlayerProfile-API.patch
@@ -16,10 +16,10 @@ public org.bukkit.craftbukkit.profile.CraftPlayerProfile setProperty(Ljava/lang/
diff --git a/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java b/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java
new file mode 100644
-index 0000000000000000000000000000000000000000..9a7add1a7b137a0c9ca9c69fec674a7720d954eb
+index 0000000000000000000000000000000000000000..8849862b45ccbbc635a1c316e9870bca81e55c04
--- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java
-@@ -0,0 +1,449 @@
+@@ -0,0 +1,451 @@
+package com.destroystokyo.paper.profile;
+
+import com.google.common.base.Preconditions;
@@ -250,6 +250,7 @@ index 0000000000000000000000000000000000000000..9a7add1a7b137a0c9ca9c69fec674a77
+ // if old has it, assume its newer, so overwrite, else use cached if it was set and ours wasn't
+ copyProfileProperties(this.profile, profile);
+ this.profile = profile;
++ this.emptyUUID = false; // UUID was just retrieved from user cache and profile isn't null (so a completed profile was found)
+ }
+ }
+
@@ -261,6 +262,7 @@ index 0000000000000000000000000000000000000000..9a7add1a7b137a0c9ca9c69fec674a77
+ // if old has it, assume its newer, so overwrite, else use cached if it was set and ours wasn't
+ copyProfileProperties(this.profile, profile);
+ this.profile = profile;
++ this.emptyName = false; // Name was just retrieved via the userCache
+ } else if (profile != this.profile) {
+ copyProfileProperties(profile, this.profile);
+ }
@@ -281,7 +283,7 @@ index 0000000000000000000000000000000000000000..9a7add1a7b137a0c9ca9c69fec674a77
+ MinecraftServer server = MinecraftServer.getServer();
+ boolean isCompleteFromCache = this.completeFromCache(true, onlineMode);
+ if (onlineMode && (!isCompleteFromCache || (textures && !hasTextures()))) {
-+ ProfileResult result = server.getSessionService().fetchProfile(this.getId(), true);
++ ProfileResult result = server.getSessionService().fetchProfile(this.profile.getId(), true);
+ if (result != null && result.profile() != null) {
+ copyProfileProperties(result.profile(), this.profile, true);
+ }