aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/1037-Don-t-lose-removed-data-components-in-ItemMeta.patch
diff options
context:
space:
mode:
authorNoah van der Aa <[email protected]>2024-04-30 00:16:07 +0200
committerGitHub <[email protected]>2024-04-30 00:16:07 +0200
commit44ee092878a4a561fd565aa72cb5f2006ee64701 (patch)
tree9c205d66741f572049804538f54837ddb4b1d4d5 /patches/server/1037-Don-t-lose-removed-data-components-in-ItemMeta.patch
parentfbe3c006751aff00e2940a1e9b99bbf15c2f2a37 (diff)
downloadPaper-44ee092878a4a561fd565aa72cb5f2006ee64701.tar.gz
Paper-44ee092878a4a561fd565aa72cb5f2006ee64701.zip
1.20.6 (#10623)
Diffstat (limited to 'patches/server/1037-Don-t-lose-removed-data-components-in-ItemMeta.patch')
-rw-r--r--patches/server/1037-Don-t-lose-removed-data-components-in-ItemMeta.patch47
1 files changed, 47 insertions, 0 deletions
diff --git a/patches/server/1037-Don-t-lose-removed-data-components-in-ItemMeta.patch b/patches/server/1037-Don-t-lose-removed-data-components-in-ItemMeta.patch
new file mode 100644
index 0000000000..156a09cd69
--- /dev/null
+++ b/patches/server/1037-Don-t-lose-removed-data-components-in-ItemMeta.patch
@@ -0,0 +1,47 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Fri, 26 Apr 2024 21:33:20 -0700
+Subject: [PATCH] Don't lose removed data components in ItemMeta
+
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
+index a1faf7906f8734149538d52173fcb3401200e594..dd17d7d88ad43e0c426a7a508709fc8993d3a5c9 100644
+--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
++++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
+@@ -174,6 +174,13 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+ return this;
+ }
+
++ // Paper start - support removing component types
++ <T> Applicator remove(DataComponentType<T> type) {
++ this.builder.remove(type);
++ return this;
++ }
++ // Paper end - support removing component types
++
+ DataComponentPatch build() {
+ return this.builder.build();
+ }
+@@ -384,7 +391,9 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+
+ Set<Map.Entry<DataComponentType<?>, Optional<?>>> keys = tag.entrySet();
+ for (Map.Entry<DataComponentType<?>, Optional<?>> key : keys) {
+- if (!CraftMetaItem.getHandledTags().contains(key.getKey())) {
++ if (key.getValue().isEmpty()) {
++ this.unhandledTags.remove(key.getKey());
++ } else if (!CraftMetaItem.getHandledTags().contains(key.getKey())) {
+ key.getValue().ifPresentOrElse((value) -> {
+ this.unhandledTags.set((DataComponentType) key.getKey(), value);
+ }, () -> {
+@@ -780,9 +789,9 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+ }
+
+ for (Map.Entry<DataComponentType<?>, Optional<?>> e : this.unhandledTags.build().entrySet()) {
+- e.getValue().ifPresent((value) -> {
++ e.getValue().ifPresentOrElse((value) -> {
+ itemTag.builder.set((DataComponentType) e.getKey(), value);
+- });
++ }, () -> itemTag.remove(e.getKey()));
+ }
+
+ CompoundTag customTag = (this.customTag != null) ? this.customTag.copy() : null;