From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: lexikiq Date: Mon, 21 Jun 2021 20:47:24 -0400 Subject: [PATCH] Fix missing CraftMetaSkull serializedProfile Plugins (ab)using NMS may change the "profile" field using reflections instead of the "setProfile" method, especially if they are targeted towards old Minecraft versions. This fixes the potential discrepancies and NPEs. diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java index 9f72e1623fc85301c4ca8751a7e03877a7745948..4b5fdb42a72f0730553e5c5ff2819a6798a99ed8 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java @@ -83,12 +83,18 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta { @Override void serializeInternal(final Map internalTags) { if (this.profile != null) { + refreshSerializedProfile(); // Parchment -- fix NPEs from plugins abusing NMS internalTags.put(SKULL_PROFILE.NBT, serializedProfile); } } private void setProfile(GameProfile profile) { this.profile = profile; + // Parchment start -- fix NPEs from plugins abusing NMS + refreshSerializedProfile(); + } + private void refreshSerializedProfile() { + // Parchment end this.serializedProfile = (profile == null) ? null : NbtUtils.writeGameProfile(new CompoundTag(), profile); } @@ -97,6 +103,7 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta { super.applyToItem(tag); if (this.profile != null) { + refreshSerializedProfile(); // Parchment -- fix NPEs from plugins abusing NMS // SPIGOT-6558: Set initial textures tag.put(SKULL_OWNER.NBT, serializedProfile); // Fill in textures @@ -252,6 +259,8 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta { if (meta instanceof CraftMetaSkull) { CraftMetaSkull that = (CraftMetaSkull) meta; + refreshSerializedProfile(); // Parchment -- fix NPEs from plugins abusing NMS + that.refreshSerializedProfile(); // Parchment -- fix NPEs from plugins abusing NMS // SPIGOT-5403: equals does not check properties return (this.profile != null ? that.profile != null && this.serializedProfile.equals(that.serializedProfile) : that.profile == null); }