aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0894-fix-Instruments.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0894-fix-Instruments.patch')
-rw-r--r--patches/server/0894-fix-Instruments.patch53
1 files changed, 53 insertions, 0 deletions
diff --git a/patches/server/0894-fix-Instruments.patch b/patches/server/0894-fix-Instruments.patch
new file mode 100644
index 0000000000..b0d3525e46
--- /dev/null
+++ b/patches/server/0894-fix-Instruments.patch
@@ -0,0 +1,53 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+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 6b64a88d7653f2df288764a988d957d94b625ebe..28963293732ff801ab0926a4b6affaec52cada54 100644
+--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+@@ -716,29 +716,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+
+ if (this.getHandle().connection == null) return;
+
+- Sound instrumentSound = switch (instrument.ordinal()) {
+- case 0 -> Sound.BLOCK_NOTE_BLOCK_HARP;
+- case 1 -> Sound.BLOCK_NOTE_BLOCK_BASEDRUM;
+- case 2 -> Sound.BLOCK_NOTE_BLOCK_SNARE;
+- case 3 -> Sound.BLOCK_NOTE_BLOCK_HAT;
+- case 4 -> Sound.BLOCK_NOTE_BLOCK_BASS;
+- case 5 -> Sound.BLOCK_NOTE_BLOCK_FLUTE;
+- case 6 -> Sound.BLOCK_NOTE_BLOCK_BELL;
+- case 7 -> Sound.BLOCK_NOTE_BLOCK_GUITAR;
+- case 8 -> Sound.BLOCK_NOTE_BLOCK_CHIME;
+- case 9 -> Sound.BLOCK_NOTE_BLOCK_XYLOPHONE;
+- case 10 -> Sound.BLOCK_NOTE_BLOCK_IRON_XYLOPHONE;
+- case 11 -> Sound.BLOCK_NOTE_BLOCK_COW_BELL;
+- case 12 -> Sound.BLOCK_NOTE_BLOCK_DIDGERIDOO;
+- case 13 -> Sound.BLOCK_NOTE_BLOCK_BIT;
+- case 14 -> Sound.BLOCK_NOTE_BLOCK_BANJO;
+- case 15 -> Sound.BLOCK_NOTE_BLOCK_PLING;
+- case 16 -> Sound.BLOCK_NOTE_BLOCK_XYLOPHONE;
+- default -> null;
+- };
+-
+- float f = (float) Math.pow(2.0D, (note.getId() - 12.0D) / 12.0D);
+- this.getHandle().connection.send(new ClientboundSoundPacket(CraftSound.bukkitToMinecraftHolder(instrumentSound), net.minecraft.sounds.SoundSource.RECORDS, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), 3.0f, f, this.getHandle().getRandom().nextLong()));
++ // Paper start - fix all this (modeled off of NoteBlock)
++ net.minecraft.world.level.block.state.properties.NoteBlockInstrument noteBlockInstrument = CraftBlockData.toNMS(instrument, net.minecraft.world.level.block.state.properties.NoteBlockInstrument.class);
++ float pitch;
++ if (noteBlockInstrument.isTunable()) {
++ pitch = (float) Math.pow(2.0D, (note.getId() - 12.0D) / 12.0D);
++ } else {
++ pitch = 1.0f;
++ }
++ if (!noteBlockInstrument.hasCustomSound()) {
++ this.getHandle().connection.send(new ClientboundSoundPacket(noteBlockInstrument.getSoundEvent(), net.minecraft.sounds.SoundSource.RECORDS, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), 3.0f, pitch, this.getHandle().getRandom().nextLong()));
++ }
++ // Paper end
+ }
+
+ @Override