mirror of https://github.com/PaperMC/Paper.git
Fixes CraftMetaBlockState block entity data components
This commit is contained in:
parent
2a6a5fef59
commit
268c70507f
|
@ -0,0 +1,57 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
||||
Date: Thu, 2 May 2024 11:44:52 -0700
|
||||
Subject: [PATCH] Fixes CraftMetaBlockState block entity data components
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java
|
||||
index 88a48b7bd1ae7381ddd63052b02f03dcc6671411..99ee41e79891d6017f065492efab5af95b1b4c38 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java
|
||||
@@ -220,6 +220,7 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
|
||||
// Paper end
|
||||
|
||||
for (TypedDataComponent<?> component : this.blockEntityTag.collectComponents()) {
|
||||
+ if (CraftMetaItem.DEFAULT_HANDLED_DCTS.contains(component.type())) continue; // Paper - if the component type was already handled by CraftMetaItem, don't add it again
|
||||
tag.builder.set(component);
|
||||
}
|
||||
}
|
||||
@@ -340,6 +341,13 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
|
||||
Preconditions.checkArgument(blockStateType == blockState.getClass() && blockState instanceof CraftBlockEntityState, "Invalid blockState for " + this.material);
|
||||
|
||||
this.blockEntityTag = (CraftBlockEntityState<?>) blockState;
|
||||
+ // Paper start - when a new BlockState is set, the components from that block entity
|
||||
+ // have to be used to update the fields on CraftMetaItem
|
||||
+ final PatchedDataComponentMap patchedMap = new net.minecraft.core.component.PatchedDataComponentMap(this.blockEntityTag.getHandle().getBlock().asItem().components());
|
||||
+ final net.minecraft.core.component.DataComponentMap map = this.blockEntityTag.collectComponents();
|
||||
+ patchedMap.setAll(map);
|
||||
+ this.updateFromPatch(patchedMap.asPatch(), null);
|
||||
+ // Paper end
|
||||
}
|
||||
|
||||
private static Material shieldToBannerHack() {
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
|
||||
index ab23597a099a2785c803e08c93ff9f046a4af677..03f9fff7c06bf5f166d6277e3aa6adb5f646042d 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
|
||||
@@ -310,6 +310,11 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
|
||||
}
|
||||
|
||||
CraftMetaItem(DataComponentPatch tag, Set<DataComponentType<?>> extraHandledTags) { // Paper - improve handled tags on type changes
|
||||
+ // Paper start - properly support data components in BlockEntity
|
||||
+ this.updateFromPatch(tag, extraHandledTags);
|
||||
+ }
|
||||
+ protected final void updateFromPatch(DataComponentPatch tag, Set<DataComponentType<?>> extraHandledTags) {
|
||||
+ // Paper end - properly support data components in BlockEntity
|
||||
CraftMetaItem.getOrEmpty(tag, CraftMetaItem.NAME).ifPresent((component) -> {
|
||||
this.displayName = component;
|
||||
});
|
||||
@@ -1871,7 +1876,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
|
||||
// Paper start - improve checking handled tags
|
||||
@org.jetbrains.annotations.VisibleForTesting
|
||||
public static final Map<Class<? extends CraftMetaItem>, Set<DataComponentType<?>>> HANDLED_DCTS_PER_TYPE = new HashMap<>();
|
||||
- private static final Set<DataComponentType<?>> DEFAULT_HANDLED_DCTS = Set.of(
|
||||
+ protected static final Set<DataComponentType<?>> DEFAULT_HANDLED_DCTS = Set.of(
|
||||
CraftMetaItem.NAME.TYPE,
|
||||
CraftMetaItem.ITEM_NAME.TYPE,
|
||||
CraftMetaItem.LORE.TYPE,
|
Loading…
Reference in New Issue