Don't store removed components in multiple places (#11091)
This commit is contained in:
@ -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) {
|
|
||||||
@ -112,7 +112,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ // Paper end
|
+ // Paper end
|
||||||
+
|
+
|
||||||
for (Map.Entry<DataComponentType<?>, Optional<?>> e : this.unhandledTags.build().entrySet()) {
|
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);
|
itemTag.builder.set((DataComponentType) e.getKey(), value);
|
||||||
@@ -0,0 +0,0 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
|
@@ -0,0 +0,0 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
|
||||||
|
|
||||||
|
|||||||
@ -476,14 +476,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ // Paper end - improve checking handled data component types
|
+ // Paper end - improve checking handled data component types
|
||||||
Set<Map.Entry<DataComponentType<?>, Optional<?>>> keys = tag.entrySet();
|
Set<Map.Entry<DataComponentType<?>, Optional<?>>> keys = tag.entrySet();
|
||||||
for (Map.Entry<DataComponentType<?>, Optional<?>> key : keys) {
|
for (Map.Entry<DataComponentType<?>, Optional<?>> key : keys) {
|
||||||
// Paper start - don't lose unhandled tags
|
- if (!CraftMetaItem.getHandledTags().contains(key.getKey())) {
|
||||||
if (key.getValue().isEmpty()) {
|
+ if (!handledTags.contains(key.getKey())) { // Paper - improve checking handled data component types
|
||||||
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
|
|
||||||
key.getValue().ifPresent((value) -> {
|
key.getValue().ifPresent((value) -> {
|
||||||
this.unhandledTags.set((DataComponentType) key.getKey(), value);
|
this.unhandledTags.set((DataComponentType) key.getKey(), value);
|
||||||
|
});
|
||||||
@@ -0,0 +0,0 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
|
@@ -0,0 +0,0 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
|
||||||
this.version = version;
|
this.version = version;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user