mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-22 10:35:38 +01:00
dc684c60d1
The new behavior of disconnect to block the current thread until the disconnect succeeded is better than throwing it off to happen at some point
50 lines
2.4 KiB
Diff
50 lines
2.4 KiB
Diff
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 64457318250c8ab1dcefdbd1f3373b891d859a7a..b5103f318b685145d10337c833f0026d4785f05f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
|
|
@@ -198,6 +198,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();
|
|
}
|
|
@@ -428,7 +435,11 @@ 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);
|
|
});
|
|
@@ -864,9 +875,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()));
|
|
}
|
|
|
|
for (DataComponentType<?> removed : this.removedTags) {
|