From 63a3da7c564de2786cafedc60dd13e13d8ae6c92 Mon Sep 17 00:00:00 2001 From: Eclipse <116838833+eclipseisoffline@users.noreply.github.com> Date: Sun, 16 Jun 2024 23:35:18 +0000 Subject: [PATCH] Fix reading custom jukebox songs (#4757) * Read sound event objects properly in jukebox song * Add debug log for unexpected sound event type --- .../java/org/geysermc/geyser/level/JukeboxSong.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/level/JukeboxSong.java b/core/src/main/java/org/geysermc/geyser/level/JukeboxSong.java index fd6ce693d..156a62cd1 100644 --- a/core/src/main/java/org/geysermc/geyser/level/JukeboxSong.java +++ b/core/src/main/java/org/geysermc/geyser/level/JukeboxSong.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.level; import org.cloudburstmc.nbt.NbtMap; +import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.mcprotocollib.protocol.data.game.RegistryEntry; @@ -33,7 +34,16 @@ public record JukeboxSong(String soundEvent, String description) { public static JukeboxSong read(RegistryEntry entry) { NbtMap data = entry.getData(); - String soundEvent = data.getString("sound_event"); + Object soundEventObject = data.get("sound_event"); + String soundEvent; + if (soundEventObject instanceof NbtMap map) { + soundEvent = map.getString("sound_id"); + } else if (soundEventObject instanceof String string) { + soundEvent = string; + } else { + soundEvent = ""; + GeyserImpl.getInstance().getLogger().debug("Sound event for " + entry.getId() + " was of an unexpected type! Expected string or NBT map, got " + soundEventObject); + } String description = MessageTranslator.deserializeDescription(data); return new JukeboxSong(soundEvent, description); }