From dbae092d41e9202f7bc0a1a7fe5c674810813b4f Mon Sep 17 00:00:00 2001 From: ItzMatick Date: Sun, 13 Sep 2026 15:45:43 +0200 Subject: [PATCH 1/5] Added getInstrument method to BlockData API --- .../java/org/bukkit/block/data/BlockData.java | 10 ++++- .../block/data/CraftBlockData.java | 37 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/paper-api/src/main/java/org/bukkit/block/data/BlockData.java b/paper-api/src/main/java/org/bukkit/block/data/BlockData.java index 436c7acbb913..557cf0964e0d 100644 --- a/paper-api/src/main/java/org/bukkit/block/data/BlockData.java +++ b/paper-api/src/main/java/org/bukkit/block/data/BlockData.java @@ -1,6 +1,7 @@ package org.bukkit.block.data; import org.bukkit.Color; +import org.bukkit.Instrument; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Server; @@ -13,7 +14,6 @@ import org.bukkit.block.structure.Mirror; import org.bukkit.block.structure.StructureRotation; import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -323,4 +323,12 @@ default float getDestroySpeed(final @NotNull ItemStack itemStack) { * @return true if block is replaceable */ boolean isReplaceable(); + + /** + * Gets the {@link Instrument} associated with this block. + * This determines the instrument sound that would be played if a Note Block were placed directly above or below this block. + * + * @return the associated instrument + */ + Instrument getInstrument(); } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java index 770653e31a55..39630daca245 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java @@ -30,10 +30,12 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateHolder; import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.phys.shapes.VoxelShape; import org.apache.commons.lang3.mutable.MutableDouble; import org.bukkit.Color; +import org.bukkit.Instrument; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.SoundGroup; @@ -656,4 +658,39 @@ public boolean isRandomlyTicked() { public boolean isReplaceable() { return this.state.canBeReplaced(); } + + @Override + public Instrument getInstrument() { + NoteBlockInstrument instrument = this.state.instrument(); + + return switch (instrument) { + case HARP -> Instrument.PIANO; + case BASEDRUM -> Instrument.BASS_DRUM; + case SNARE -> Instrument.SNARE_DRUM; + case HAT -> Instrument.STICKS; + case BASS -> Instrument.BASS_GUITAR; + case FLUTE -> Instrument.FLUTE; + case BELL -> Instrument.BELL; + case GUITAR -> Instrument.GUITAR; + case CHIME -> Instrument.CHIME; + case XYLOPHONE -> Instrument.XYLOPHONE; + case IRON_XYLOPHONE -> Instrument.IRON_XYLOPHONE; + case COW_BELL -> Instrument.COW_BELL; + case DIDGERIDOO -> Instrument.DIDGERIDOO; + case BIT -> Instrument.BIT; + case BANJO -> Instrument.BANJO; + case PLING -> Instrument.PLING; + case TRUMPET -> Instrument.TRUMPET; + case TRUMPET_EXPOSED -> Instrument.TRUMPET_EXPOSED; + case TRUMPET_OXIDIZED -> Instrument.TRUMPET_OXIDIZED; + case TRUMPET_WEATHERED -> Instrument.TRUMPET_WEATHERED; + case ZOMBIE -> Instrument.ZOMBIE; + case SKELETON -> Instrument.SKELETON; + case CREEPER -> Instrument.CREEPER; + case DRAGON -> Instrument.DRAGON; + case WITHER_SKELETON -> Instrument.WITHER_SKELETON; + case PIGLIN -> Instrument.PIGLIN; + case CUSTOM_HEAD -> Instrument.CUSTOM_HEAD; + }; + } } From ff64e4684678ae237a5f007aea1c66672480452b Mon Sep 17 00:00:00 2001 From: ItzMatick Date: Sun, 13 Sep 2026 17:45:21 +0200 Subject: [PATCH 2/5] using paper enum convertor --- .../block/data/CraftBlockData.java | 34 ++----------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java index 39630daca245..95a97d05ab17 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java @@ -661,36 +661,8 @@ public boolean isReplaceable() { @Override public Instrument getInstrument() { - NoteBlockInstrument instrument = this.state.instrument(); - - return switch (instrument) { - case HARP -> Instrument.PIANO; - case BASEDRUM -> Instrument.BASS_DRUM; - case SNARE -> Instrument.SNARE_DRUM; - case HAT -> Instrument.STICKS; - case BASS -> Instrument.BASS_GUITAR; - case FLUTE -> Instrument.FLUTE; - case BELL -> Instrument.BELL; - case GUITAR -> Instrument.GUITAR; - case CHIME -> Instrument.CHIME; - case XYLOPHONE -> Instrument.XYLOPHONE; - case IRON_XYLOPHONE -> Instrument.IRON_XYLOPHONE; - case COW_BELL -> Instrument.COW_BELL; - case DIDGERIDOO -> Instrument.DIDGERIDOO; - case BIT -> Instrument.BIT; - case BANJO -> Instrument.BANJO; - case PLING -> Instrument.PLING; - case TRUMPET -> Instrument.TRUMPET; - case TRUMPET_EXPOSED -> Instrument.TRUMPET_EXPOSED; - case TRUMPET_OXIDIZED -> Instrument.TRUMPET_OXIDIZED; - case TRUMPET_WEATHERED -> Instrument.TRUMPET_WEATHERED; - case ZOMBIE -> Instrument.ZOMBIE; - case SKELETON -> Instrument.SKELETON; - case CREEPER -> Instrument.CREEPER; - case DRAGON -> Instrument.DRAGON; - case WITHER_SKELETON -> Instrument.WITHER_SKELETON; - case PIGLIN -> Instrument.PIGLIN; - case CUSTOM_HEAD -> Instrument.CUSTOM_HEAD; - }; + NoteBlockInstrument noteBlockInstrument = this.state.instrument(); + + return CraftBlockData.fromVanilla(noteBlockInstrument, Instrument.class); } } From 5110f39a15b98e8b2428d79f3b68cd4c7dfe5a3f Mon Sep 17 00:00:00 2001 From: ItzMatick Date: Fri, 18 Sep 2026 12:54:14 +0200 Subject: [PATCH 3/5] Added getInstrument method to BlockType class --- .../src/main/java/org/bukkit/block/BlockType.java | 9 +++++++++ .../org/bukkit/craftbukkit/block/CraftBlockType.java | 10 ++++++++++ .../bukkit/craftbukkit/block/data/CraftBlockData.java | 3 +-- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/paper-api/src/main/java/org/bukkit/block/BlockType.java b/paper-api/src/main/java/org/bukkit/block/BlockType.java index 6045210bdd9a..abf75e10a6d8 100644 --- a/paper-api/src/main/java/org/bukkit/block/BlockType.java +++ b/paper-api/src/main/java/org/bukkit/block/BlockType.java @@ -4,6 +4,7 @@ import java.util.function.Consumer; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; +import org.bukkit.Instrument; import org.bukkit.Keyed; import org.bukkit.Material; import org.bukkit.Registry; @@ -2805,4 +2806,12 @@ private static B getBlockType(@KeyPattern.Value final Stri * @return false if this block never has collision, true if it might have collision */ boolean hasCollision(); + + /** + * Gets the {@link Instrument} associated with type. + * This determines the instrument sound that would be played if a Note Block were placed directly above or below this type of block. + * + * @return the associated instrument + */ + Instrument getInstrument(); } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockType.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockType.java index 15a8d8c6f168..686750434b95 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockType.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockType.java @@ -23,7 +23,9 @@ import net.minecraft.world.level.block.FireBlock; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; import net.minecraft.world.phys.BlockHitResult; +import org.bukkit.Instrument; import org.bukkit.Material; import org.bukkit.Registry; import org.bukkit.World; @@ -251,4 +253,12 @@ public boolean hasCollision() { return this.getHandle().hasCollision; } // Paper end - hasCollision API + + // Paper start - getInstrument API + @Override + public Instrument getInstrument() { + NoteBlockInstrument noteBlockInstrument = this.getHandle().defaultBlockState().instrument(); + return CraftBlockData.fromVanilla(noteBlockInstrument, Instrument.class); + } + // Paper end - getInstrument API } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java index 95a97d05ab17..54cf576b5cde 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java @@ -662,7 +662,6 @@ public boolean isReplaceable() { @Override public Instrument getInstrument() { NoteBlockInstrument noteBlockInstrument = this.state.instrument(); - - return CraftBlockData.fromVanilla(noteBlockInstrument, Instrument.class); + return fromVanilla(noteBlockInstrument, Instrument.class); } } From f649541518da94fa80751afbc0ab215c40e00ae2 Mon Sep 17 00:00:00 2001 From: ItzMatick Date: Fri, 18 Sep 2026 16:56:32 +0200 Subject: [PATCH 4/5] Added getInstrument method to BlockType class --- paper-api/src/main/java/org/bukkit/block/data/BlockData.java | 1 + .../main/java/org/bukkit/craftbukkit/block/CraftBlockType.java | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/paper-api/src/main/java/org/bukkit/block/data/BlockData.java b/paper-api/src/main/java/org/bukkit/block/data/BlockData.java index 557cf0964e0d..b8cd60248117 100644 --- a/paper-api/src/main/java/org/bukkit/block/data/BlockData.java +++ b/paper-api/src/main/java/org/bukkit/block/data/BlockData.java @@ -330,5 +330,6 @@ default float getDestroySpeed(final @NotNull ItemStack itemStack) { * * @return the associated instrument */ + @NotNull Instrument getInstrument(); } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockType.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockType.java index 686750434b95..c4a85e572118 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockType.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockType.java @@ -254,11 +254,9 @@ public boolean hasCollision() { } // Paper end - hasCollision API - // Paper start - getInstrument API @Override public Instrument getInstrument() { NoteBlockInstrument noteBlockInstrument = this.getHandle().defaultBlockState().instrument(); return CraftBlockData.fromVanilla(noteBlockInstrument, Instrument.class); } - // Paper end - getInstrument API } From 3248681ad814d014686f96eb9a75ecf98710f5bd Mon Sep 17 00:00:00 2001 From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com> Date: Fri, 18 Sep 2026 21:37:35 +0200 Subject: [PATCH 5/5] inline --- paper-api/src/main/java/org/bukkit/block/BlockType.java | 4 ++-- .../java/org/bukkit/craftbukkit/block/CraftBlockType.java | 4 ++-- .../org/bukkit/craftbukkit/block/data/CraftBlockData.java | 3 +-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/paper-api/src/main/java/org/bukkit/block/BlockType.java b/paper-api/src/main/java/org/bukkit/block/BlockType.java index abf75e10a6d8..afce96d3a11b 100644 --- a/paper-api/src/main/java/org/bukkit/block/BlockType.java +++ b/paper-api/src/main/java/org/bukkit/block/BlockType.java @@ -2808,8 +2808,8 @@ private static B getBlockType(@KeyPattern.Value final Stri boolean hasCollision(); /** - * Gets the {@link Instrument} associated with type. - * This determines the instrument sound that would be played if a Note Block were placed directly above or below this type of block. + * Gets the {@link Instrument} associated with this block. + * This determines the instrument sound that would be played if a Note Block were placed directly above or below this block. * * @return the associated instrument */ diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockType.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockType.java index c4a85e572118..679bb41b88d0 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockType.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockType.java @@ -256,7 +256,7 @@ public boolean hasCollision() { @Override public Instrument getInstrument() { - NoteBlockInstrument noteBlockInstrument = this.getHandle().defaultBlockState().instrument(); - return CraftBlockData.fromVanilla(noteBlockInstrument, Instrument.class); + NoteBlockInstrument instrument = this.getHandle().defaultBlockState().instrument(); + return CraftBlockData.fromVanilla(instrument, Instrument.class); } } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java index 54cf576b5cde..c6d08228c9c9 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java @@ -661,7 +661,6 @@ public boolean isReplaceable() { @Override public Instrument getInstrument() { - NoteBlockInstrument noteBlockInstrument = this.state.instrument(); - return fromVanilla(noteBlockInstrument, Instrument.class); + return fromVanilla(this.state.instrument(), Instrument.class); } }