package org.bukkit.craftbukkit; import com.google.common.base.Preconditions; import net.minecraft.core.Holder; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.contents.TranslatableContents; import org.bukkit.JukeboxSong; import org.bukkit.NamespacedKey; import org.bukkit.craftbukkit.util.Handleable; import org.jetbrains.annotations.NotNull; public class CraftJukeboxSong implements JukeboxSong, Handleable { public static JukeboxSong minecraftToBukkit(net.minecraft.world.item.JukeboxSong minecraft) { return CraftRegistry.minecraftToBukkit(minecraft, Registries.JUKEBOX_SONG); } public static JukeboxSong minecraftHolderToBukkit(Holder minecraft) { return CraftJukeboxSong.minecraftToBukkit(minecraft.value()); } public static net.minecraft.world.item.JukeboxSong bukkitToMinecraft(JukeboxSong bukkit) { return CraftRegistry.bukkitToMinecraft(bukkit); } public static Holder bukkitToMinecraftHolder(JukeboxSong bukkit) { Preconditions.checkArgument(bukkit != null); net.minecraft.core.Registry registry = CraftRegistry.getMinecraftRegistry(Registries.JUKEBOX_SONG); if (registry.wrapAsHolder(CraftJukeboxSong.bukkitToMinecraft(bukkit)) instanceof Holder.Reference holder) { return holder; } throw new IllegalArgumentException("No Reference holder found for " + bukkit + ", this can happen if a plugin creates its own trim pattern without properly registering it."); } private final NamespacedKey key; private final net.minecraft.world.item.JukeboxSong handle; public CraftJukeboxSong(NamespacedKey key, net.minecraft.world.item.JukeboxSong handle) { this.key = key; this.handle = handle; } @Override public net.minecraft.world.item.JukeboxSong getHandle() { return this.handle; } @Override @NotNull public NamespacedKey getKey() { return this.key; } @NotNull @Override public String getTranslationKey() { if (!(this.handle.description().getContents() instanceof TranslatableContents)) throw new UnsupportedOperationException("Description isn't translatable!"); // Paper return ((TranslatableContents) this.handle.description().getContents()).getKey(); } }