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

SpigotMC双面更新后,如何在PlayerInteract事件中读取牌子文本?

解决新版Minecraft双面牌子文本读取问题

针对你遇到的PlayerInteractEvent无法直接获取SignSide的问题,可以通过牌子朝向(BlockFace) 和玩家点击的面(BlockFace) 来对应到SignSide,进而读取对应面的文本。以下是具体实现:

完整代码示例

@EventHandler(ignoreCancelled = true)
void onPlayerInteract(PlayerInteractEvent event) {
    // 检查是否为右键点击方块
    if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
        return;
    }
    Block block = event.getClickedBlock();
    if (block == null) {
        return;
    }
    // 检查是否为新版Sign(1.20+)
    if (!(block.getState() instanceof Sign)) {
        return;
    }

    Sign sign = (Sign) block.getState();
    BlockFace signFacing = sign.getFacing();
    BlockFace clickedFace = event.getBlockFace();

    // 判断点击的是牌子正面还是背面
    SignSide targetSide;
    // 牌子的正面朝向是自身朝向的反方向(比如朝北的牌子,正面朝南)
    if (clickedFace.equals(signFacing.getOppositeFace())) {
        targetSide = SignSide.FRONT;
    } else {
        targetSide = SignSide.BACK;
    }

    // 读取对应面的文本(示例:读取第1行,行号范围0-3)
    String targetLine = sign.getSide(targetSide).getLine(0);
    // 后续可以对文本进行处理,比如发送给玩家
    event.getPlayer().sendMessage("你点击的牌子文本:" + targetLine);
}

关键逻辑说明

  1. 类型转换:将BlockState强转为新版Sign接口(替代旧版SignState)
  2. 朝向判断:
    • 新版牌子的getFacing()返回它附着/朝向的方向(比如挂在北墙的牌子,facing为NORTH)
    • 牌子的正面朝向是自身facing的反方向,当玩家点击这个反方向的面时,就是点击了正面
  3. 文本读取:通过sign.getSide(targetSide)获取对应面的SignSide实例,再用getLine(int)读取指定行文本

注意事项

  • 该代码基于**Spigot/Bukkit 1.20+**版本,确保你的开发环境依赖对应版本的API
  • 对站立式牌子(非墙挂),该逻辑同样适用,因为站立牌子的正面朝向就是自身facing的反方向

内容的提问来源于stack exchange,提问作者DNAmaster10

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:46:22