Minecraft 1.19.4 Bukkit插件:检测唱片机内特定音乐唱片
解决Minecraft 1.19.4 Bukkit插件中检测唱片机内特定唱片的问题
你的原代码存在几个核心问题,导致无法实现需求:
- 监听的是左键点击(
Action.LEFT_CLICK_BLOCK),但你需要的是右键触发检测 - 通过
BlockData判断唱片的逻辑错误,唱片机内的唱片存储在其BlockState实例中,而非BlockData - 条件里的
blockD.getMaterial().isRecord() = true是语法错误,且这个判断逻辑本身不成立
以下是正确的实现代码,以检测唱片机内是否为CAT唱片为例:
import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.Jukebox; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; public class TestCD implements Listener { @EventHandler public void onJukeboxRightClick(PlayerInteractEvent event) { // 过滤非右键点击、未点击方块的情况 if (event.getAction() != org.bukkit.event.block.Action.RIGHT_CLICK_BLOCK || event.getClickedBlock() == null) { return; } Block clickedBlock = event.getClickedBlock(); // 判断点击的是唱片机 if (clickedBlock.getType() != Material.JUKEBOX) { return; } // 将BlockState转为Jukebox实例 Jukebox jukebox = (Jukebox) clickedBlock.getState(); ItemStack record = jukebox.getRecord(); // 判断唱片机内存在唱片,且是目标唱片(这里以CAT唱片为例) if (record != null && record.getType() == Material.MUSIC_DISC_CAT) { event.getPlayer().sendMessage("检测到CAT唱片!"); } } }
关键说明:
- 使用
Jukebox类的getRecord()方法可以直接获取唱片机内的唱片物品栈 - 目标唱片的Material类型可以通过
Material.MUSIC_DISC_XXX获取,比如MUSIC_DISC_11、MUSIC_DISC_WAIT等 - 先做空值判断,避免
NullPointerException
内容的提问来源于stack exchange,提问作者Daweii
相关产品推荐
相关产品推荐

