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

Bukkit插件开发:无法正确从config.yml读取配置键,求排查方向

核心问题点

  • Java字符串比较错误:你代码中使用==对比字符串entity.getType().toString() == mobname,==在Java中是对比对象内存地址,不是对比字符串内容,永远会返回false,所以功能不会触发。
  • 大小写不匹配:entity.getType().toString()返回的是全大写的实体类型名称(比如杀死兔子会返回RABBIT),但你的配置文件里mobs.rabbit.name填的是小写的rabbit,就算用对了字符串对比方法也匹配不上。
  • 重载命令逻辑顺序错误:你是先发重载提示再执行reloadConfig(),如果修改了重载提示文本,第一次执行重载永远返回的是修改前的内容,且命令处理完成后没有返回true,会触发客户端未知命令提示。
  • 遗漏命令注册(大概率问题):Bukkit插件自定义命令必须在plugin.yml中完成注册才能生效,你没有贴出该文件,如果没有配置命令,/mobeffects指令本身就无法使用。

修正方案

  1. 替换字符串对比逻辑
    把mobDeath方法中的
if (entity.getType().toString() == mobname)

替换为

if (entity.getType().toString().equalsIgnoreCase(mobname))

equalsIgnoreCase会忽略大小写对比字符串内容,刚好适配你配置文件里的小写名称。

  1. 修正重载命令逻辑
    把onCommand方法中重载部分的逻辑调整为:
if (args[0].equalsIgnoreCase("reload")) {
  this.reloadConfig(); // 先重载配置,再读配置发消息
  for (String msg: this.getConfig().getStringList("reload.message")) {
    sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg));
  }
  return true; // 命令处理完成返回true,避免报错
}
  1. 检查plugin.yml配置
    确保你的plugin.yml中已经注册了对应命令,示例配置:
name: LukesMobEffects
main: com.mk7smp.LukesMobEffects.Main
version: 1.0
commands:
  mobeffects:
    description: 重载MobEffects配置
    usage: /<command> reload
permissions:
  mobeffects.reload:
    description: 允许使用重载命令
    default: op

排查方向

如果修改后还是不生效,可以在代码关键位置加控制台日志定位问题:

  • 在mobDeath方法开头加getLogger().info("触发实体死亡事件,实体类型:"+entity.getType().toString());,确认事件是否正常触发
  • 在字符串对比前加getLogger().info("配置读取到的实体名:"+mobname+",当前死亡实体名:"+entity.getType().toString());,确认读取的配置是否正确、是否能匹配上

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:15:10