Files
ParchmentMC/patches/server/0009-Fix-missing-CraftMetaSkull-serializedProfile.patch
Lexi Larkin 4a430b2238 Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@171ba7c Move Log4j plugins to own source set (#9428)
PaperMC/Paper@4356758 Call missing BlockDispenseEvents (#8518)
PaperMC/Paper@c0936a7 Updated Upstream (Bukkit/CraftBukkit/Spigot) (#9440)
PaperMC/Paper@12c9700 Fix ThrownEggHatchEvent#setHatching (#9448)
PaperMC/Paper@dadd8b5 Don't allow for supporting block checks to load chunks
PaperMC/Paper@48ea66e Optimize player lookups for beacons
PaperMC/Paper@d7d3f63 Use Nullable annotation for Entity source (#9435)
PaperMC/Paper@e105354 Fix incorrect new blockdata in EntityChangeBlockEvent (#9445)
PaperMC/Paper@5de0f8a Add Sign#getInteractableSideFor (#9388)
PaperMC/Paper@6b325cd Array backed synched entity data (#9460)
PaperMC/Paper@805fdd8 Add deprecations to SignSide string methods (#9467)
PaperMC/Paper@b3dc7a3 fix item meta for tadpole buckets (#9473)
PaperMC/Paper@f9473d9 Add gradle wrapper validation action
PaperMC/Paper@a3c760e Handle block state in EntityDamageByBlockEvent (#9396)
PaperMC/Paper@a60eeb8 Fix mob breaking doors not spawning particles (#9443)
PaperMC/Paper@1f8ca77 Prevent desync for poi and pistons (#9270)
PaperMC/Paper@92bc19b Fix missing item interaction cancelling case (#9427)
PaperMC/Paper@836586d Fix missing item types in SlotType for armor change event (#9379)
PaperMC/Paper@ece4fd3 Suppress Item Meta Validation Checks (#9331)
PaperMC/Paper@aefb73c Add Owner UUID api for AreaEffectCloud (#9364)
PaperMC/Paper@22ed60c Fix BanList API (#9450)
PaperMC/Paper@de3f149 Fix possible NPE on painting creation (#9391)
PaperMC/Paper@fe780d0 Add back accidentally dropped Wandering Trader patch (#9492)
PaperMC/Paper@b533905 fix 2 vanilla issues (#8940)
PaperMC/Paper@c793bd9 Allow LEFT_CLICK_AIR in 3.0->4.5 range of entity (#9211)
2023-07-17 14:01:20 -04:00

41 lines
2.3 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: lexikiq <noellekiq@gmail.com>
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 47c8148e6413c51ffdd30082bfb37a7fb8a73a71..fe48cb0fbf3b510b365bed06d84c0c62edd1ad19 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java
@@ -133,6 +133,11 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta {
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);
}
@@ -141,6 +146,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
@@ -303,6 +309,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) && Objects.equals(this.noteBlockSound, that.noteBlockSound);
}