geforkt von Mirrors/Paper
89d51d5f29
Because this exploit has been widely known for years and has not been fixed by Mojang, we decided that it was worth allowing people to toggle it on/off due to how easy it is to make it configurable. It should be noted that this decision does not promise all future exploits will be configurable.
57 Zeilen
2.8 KiB
Diff
57 Zeilen
2.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
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 fc47eb2de7e8d39b3a053e5458529267cc86408d..1a0023472b9ba5bbc0ee1d16824219d94944bdf9 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -688,7 +688,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
Sound instrumentSound = instrument.getSound();
|
|
if (instrumentSound == null) return;
|
|
|
|
- float pitch = note.getPitch();
|
|
+ // Paper start - use correct pitch (modeled off of NoteBlock)
|
|
+ final net.minecraft.world.level.block.state.properties.NoteBlockInstrument noteBlockInstrument = CraftBlockData.toNMS(instrument, net.minecraft.world.level.block.state.properties.NoteBlockInstrument.class);
|
|
+ final float pitch = noteBlockInstrument.isTunable() ? note.getPitch() : 1.0f;
|
|
+ // Paper end
|
|
this.getHandle().connection.send(new ClientboundSoundPacket(CraftSound.bukkitToMinecraftHolder(instrumentSound), net.minecraft.sounds.SoundSource.RECORDS, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), 3.0f, pitch, this.getHandle().getRandom().nextLong()));
|
|
}
|
|
|
|
diff --git a/src/test/java/io/papermc/paper/block/InstrumentSoundTest.java b/src/test/java/io/papermc/paper/block/InstrumentSoundTest.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..28fc01045675247e75438bdc039fb8a90493419f
|
|
--- /dev/null
|
|
+++ b/src/test/java/io/papermc/paper/block/InstrumentSoundTest.java
|
|
@@ -0,0 +1,27 @@
|
|
+package io.papermc.paper.block;
|
|
+
|
|
+import java.util.Arrays;
|
|
+import java.util.stream.Stream;
|
|
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
|
|
+import org.bukkit.Instrument;
|
|
+import org.bukkit.craftbukkit.CraftSound;
|
|
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
|
|
+import org.bukkit.support.AbstractTestingBase;
|
|
+import org.junit.jupiter.params.ParameterizedTest;
|
|
+import org.junit.jupiter.params.provider.MethodSource;
|
|
+
|
|
+import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
+
|
|
+class InstrumentSoundTest extends AbstractTestingBase {
|
|
+
|
|
+ static Stream<Instrument> bukkitInstruments() {
|
|
+ return Arrays.stream(Instrument.values()).filter(i -> i.getSound() != null);
|
|
+ }
|
|
+
|
|
+ @ParameterizedTest
|
|
+ @MethodSource("bukkitInstruments")
|
|
+ void checkInstrumentSound(final Instrument bukkit) {
|
|
+ final NoteBlockInstrument nms = CraftBlockData.toNMS(bukkit, NoteBlockInstrument.class);
|
|
+ assertEquals(nms.getSoundEvent(), CraftSound.bukkitToMinecraftHolder(bukkit.getSound()));
|
|
+ }
|
|
+}
|