From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Fri, 9 Dec 2022 01:47:23 -0800 Subject: [PATCH] fix Instruments properly handle Player#playNote diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index 652489579c7014b46ebf67b0c72d2e50508955c2..4edffaef5075de849a3489cdfdee0eaf53b0df57 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -776,62 +776,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void playNote(Location loc, Instrument instrument, Note note) { if (this.getHandle().connection == null) return; - String instrumentName = null; - switch (instrument.ordinal()) { - case 0: - instrumentName = "harp"; - break; - case 1: - instrumentName = "basedrum"; - break; - case 2: - instrumentName = "snare"; - break; - case 3: - instrumentName = "hat"; - break; - case 4: - instrumentName = "bass"; - break; - case 5: - instrumentName = "flute"; - break; - case 6: - instrumentName = "bell"; - break; - case 7: - instrumentName = "guitar"; - break; - case 8: - instrumentName = "chime"; - break; - case 9: - instrumentName = "xylophone"; - break; - case 10: - instrumentName = "iron_xylophone"; - break; - case 11: - instrumentName = "cow_bell"; - break; - case 12: - instrumentName = "didgeridoo"; - break; - case 13: - instrumentName = "bit"; - break; - case 14: - instrumentName = "banjo"; - break; - case 15: - instrumentName = "pling"; - break; - case 16: - instrumentName = "xylophone"; - break; + // Paper start - fix all this (modeled off of NoteBlock) + net.minecraft.world.level.block.state.properties.NoteBlockInstrument nms = CraftBlockData.toNMS(instrument, net.minecraft.world.level.block.state.properties.NoteBlockInstrument.class); + float f; + if (nms.isTunable()) { + f = (float) Math.pow(2.0D, (note.getId() - 12.0D) / 12.0D); + } else { + f = 1.0f; } - float f = (float) Math.pow(2.0D, (note.getId() - 12.0D) / 12.0D); - this.getHandle().connection.send(new ClientboundSoundPacket(BuiltInRegistries.SOUND_EVENT.wrapAsHolder(CraftSound.getSoundEffect("block.note_block." + instrumentName)), net.minecraft.sounds.SoundSource.RECORDS, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), 3.0f, f, this.getHandle().getRandom().nextLong())); + if (!nms.hasCustomSound()) { + this.getHandle().connection.send(new ClientboundSoundPacket(nms.getSoundEvent(), net.minecraft.sounds.SoundSource.RECORDS, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), 3.0f, f, this.getHandle().getRandom().nextLong())); + } + // Paper end } @Override