You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 14:42:13