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)
41 lines
2.3 KiB
Diff
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);
|
|
}
|