From 080f5dc4df1ceef269f7b82c5d51bc178d2e69f8 Mon Sep 17 00:00:00 2001 From: md_5 Date: Wed, 21 May 2025 22:26:37 +1000 Subject: [PATCH] SPIGOT-8050: Consumable component serialization issue --- .../consumable/CraftConsumableComponent.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/components/consumable/CraftConsumableComponent.java b/src/main/java/org/bukkit/craftbukkit/inventory/components/consumable/CraftConsumableComponent.java index 2463ac672..baf0ca3f1 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/components/consumable/CraftConsumableComponent.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/components/consumable/CraftConsumableComponent.java @@ -11,6 +11,8 @@ import net.minecraft.sounds.SoundEffects; import net.minecraft.world.item.ItemUseAnimation; import net.minecraft.world.item.component.Consumable; import net.minecraft.world.item.consume_effects.ConsumeEffect; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; import org.bukkit.Sound; import org.bukkit.configuration.serialization.SerializableAs; import org.bukkit.craftbukkit.CraftSound; @@ -34,9 +36,9 @@ public class CraftConsumableComponent implements ConsumableComponent { public CraftConsumableComponent(Map map) { Float consumeSeconds = SerializableMeta.getObject(Float.class, map, "consume-seconds", false); - Animation animation = SerializableMeta.getObject(Animation.class, map, "animation", false); + Animation animation = Animation.valueOf(SerializableMeta.getString(map, "animation", false)); Boolean hasConsumeParticles = SerializableMeta.getBoolean(map, "has-consume-particles"); - Sound sound = SerializableMeta.getObject(Sound.class, map, "sound", false); + Sound sound = Registry.SOUNDS.get(NamespacedKey.fromString(SerializableMeta.getString(map, "sound", false))); List consumableEffects = SerializableMeta.getList(ConsumableEffect.class, map, "effects"); List consumeEffects = (List) consumableEffects.stream().map(consumableEffect -> CraftConsumableEffect.bukkitToMinecraftSpecific(((CraftConsumableEffect) consumableEffect))).toList(); @@ -48,8 +50,8 @@ public class CraftConsumableComponent implements ConsumableComponent { public Map serialize() { Map result = new LinkedHashMap<>(); result.put("consume-seconds", this.getConsumeSeconds()); - result.put("animation", this.getAnimation()); - result.put("sound", this.getSound()); + result.put("animation", this.getAnimation().name()); + result.put("sound", this.getSound().getKey().toString()); result.put("has-consume-particles", this.hasConsumeParticles()); result.put("effects", this.getEffects());