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

Spigot 1.19自定义刷怪笼插件问题:右键设刷物品无效

问题分析与解决方法

核心问题点

  • 未校验点击方块的类型,直接强制转换Block为CreatureSpawner会导致类型不匹配时静默失败
  • 变量player未定义,需通过event.getPlayer()获取触发事件的玩家
  • 使用setblock命令修改NBT的方式易出现格式错误,且效率低于直接调用Spigot API

修正后的完整代码

@EventHandler
private void onRightClick(PlayerInteractEvent event) {
    // 仅响应右键方块的操作
    if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
        return;
    }

    Block clickedBlock = event.getClickedBlock();
    // 校验点击的是刷怪笼方块
    if (clickedBlock == null || !(clickedBlock.getState() instanceof CreatureSpawner)) {
        return;
    }

    Player player = event.getPlayer();
    ItemStack mainHandItem = player.getInventory().getItemInMainHand();
    // 校验主手持有非空气物品
    if (mainHandItem.getType().isAir()) {
        return;
    }

    CreatureSpawner spawner = (CreatureSpawner) clickedBlock.getState();
    NamespacedKey itemKey = mainHandItem.getType().getKey();

    // 直接用API构建刷怪笼的物品生成NBT数据
    CompoundTag spawnData = new CompoundTag();
    CompoundTag entityTag = new CompoundTag();
    CompoundTag itemTag = new CompoundTag();

    entityTag.putString("id", "minecraft:item");
    itemTag.putString("id", itemKey.toString());
    itemTag.putByte("Count", (byte) 1);
    entityTag.put("Item", itemTag);
    spawnData.put("entity", entityTag);

    spawner.setSpawnData(spawnData);
    spawner.update(true); // 保存修改并刷新刷怪笼状态
}

关键改进说明

  • 增加操作与类型校验:过滤非右键方块的操作,提前排除非刷怪笼方块,避免无效执行
  • 替换命令为API操作:通过CreatureSpawner原生方法设置生成数据,无需依赖控制台执行命令,稳定性和效率更高
  • 补充空值校验:防止主手为空或方块为空时触发异常
  • 修正玩家对象获取:从事件中正确获取玩家实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:50:05