From 412a28a37adce1ff66dca7bf74f05310d83f3e84 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Tue, 16 Jul 2024 16:39:57 -0700
Subject: [PATCH] Don't store removed components in multiple places (#11091)

---
 ...-removed-data-components-in-ItemMeta.patch | 49 -------------------
 patches/server/Fix-ItemFlags.patch            |  2 +-
 ...ve-checking-handled-tags-in-itemmeta.patch |  9 ++--
 3 files changed, 4 insertions(+), 56 deletions(-)
 delete mode 100644 patches/server/Don-t-lose-removed-data-components-in-ItemMeta.patch

diff --git a/patches/server/Don-t-lose-removed-data-components-in-ItemMeta.patch b/patches/server/Don-t-lose-removed-data-components-in-ItemMeta.patch
deleted file mode 100644
index cbf156a045..0000000000
--- a/patches/server/Don-t-lose-removed-data-components-in-ItemMeta.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Jake Potrebic <jake.m.potrebic@gmail.com>
-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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
---- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
-+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
-@@ -0,0 +0,0 @@ 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();
-         }
-@@ -0,0 +0,0 @@ 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())) {
-+            // Paper start - don't lose unhandled tags
-+            if (key.getValue().isEmpty()) {
-+                this.unhandledTags.remove(key.getKey());
-+            } else if (!CraftMetaItem.getHandledTags().contains(key.getKey())) {
-+                // Paper end - don't lose unhandled tags
-                 key.getValue().ifPresent((value) -> {
-                     this.unhandledTags.set((DataComponentType) key.getKey(), value);
-                 });
-@@ -0,0 +0,0 @@ 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()));
-         }
- 
-         for (DataComponentType<?> removed : this.removedTags) {
diff --git a/patches/server/Fix-ItemFlags.patch b/patches/server/Fix-ItemFlags.patch
index d640951e50..42762d86ba 100644
--- a/patches/server/Fix-ItemFlags.patch
+++ b/patches/server/Fix-ItemFlags.patch
@@ -112,7 +112,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +        // Paper end
 +
          for (Map.Entry<DataComponentType<?>, Optional<?>> e : this.unhandledTags.build().entrySet()) {
-             e.getValue().ifPresentOrElse((value) -> {
+             e.getValue().ifPresent((value) -> {
                  itemTag.builder.set((DataComponentType) e.getKey(), value);
 @@ -0,0 +0,0 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
  
diff --git a/patches/server/improve-checking-handled-tags-in-itemmeta.patch b/patches/server/improve-checking-handled-tags-in-itemmeta.patch
index d1f23d3efb..0030cb6171 100644
--- a/patches/server/improve-checking-handled-tags-in-itemmeta.patch
+++ b/patches/server/improve-checking-handled-tags-in-itemmeta.patch
@@ -476,14 +476,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +        // Paper end - improve checking handled data component types
          Set<Map.Entry<DataComponentType<?>, Optional<?>>> keys = tag.entrySet();
          for (Map.Entry<DataComponentType<?>, Optional<?>> key : keys) {
-             // Paper start - don't lose unhandled tags
-             if (key.getValue().isEmpty()) {
-                 this.unhandledTags.remove(key.getKey());
--            } else if (!CraftMetaItem.getHandledTags().contains(key.getKey())) {
-+            } else if (!handledTags.contains(key.getKey())) { // Paper - improve checking handled data component types
-                 // Paper end - don't lose unhandled tags
+-            if (!CraftMetaItem.getHandledTags().contains(key.getKey())) {
++            if (!handledTags.contains(key.getKey())) { // Paper - improve checking handled data component types
                  key.getValue().ifPresent((value) -> {
                      this.unhandledTags.set((DataComponentType) key.getKey(), value);
+                 });
 @@ -0,0 +0,0 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
          this.version = version;
      }