Spigot登录注册插件PlayerMoveEvent报错求助
问题排查与解决方案
错误核心原因
从堆栈信息java.lang.NoSuchMethodError: 'boolean br.com.daniyusk.API.areLoged(java.lang.String)'可明确:
- 你的
Events类中所有调用API.areLoged(player)的地方,传入的是Player对象,但API类里的areLoged方法参数是String类型,方法签名完全不匹配,导致JVM找不到对应方法。 - 你提到修改过参数类型但未解决,大概率是编译缓存未清理,或服务器仍加载着旧版本插件文件导致的。
具体解决方案
1. 统一方法参数类型(二选一即可)
方案A:修改API方法支持Player参数
更新API类的areLoged方法,直接接收Player对象并处理:
public static boolean areLoged(Player player) { try { // 用玩家名称匹配集合中的字符串 return playersLoged.contains(player.getName()); } catch (NullPointerException e) { System.out.println("Player == NULL"); return false; } }
这种方式不需要修改Events类的任何调用代码,保持原有逻辑即可。
方案B:修改Events类的调用参数
在Events类的所有areLoged调用处,传入玩家名称字符串:
// PlayerJoined方法中 if (!API.areLoged(player.getName())) { // 原有逻辑 } // doNotMove方法中 if (!API.areLoged(player.getName())) { player.teleport(e.getFrom()); } // doNotChat方法中 if (!API.areLoged(player.getName())) { e.setCancelled(true); player.sendMessage("§cRegistre-se/Logue para digitar no chat!"); }
这种方式不需要修改API类的方法定义,仅调整调用处的参数。
2. 清理缓存与重新部署
完成代码修改后,必须执行以下步骤确保服务器加载最新版本:
- 若用Maven/Gradle构建插件,删除项目的
target(Maven)或build(Gradle)目录,重新编译打包生成新jar文件。 - 停止Minecraft服务器,删除
plugins目录下的AuthPlugin旧jar包及相关配置文件夹(如有)。 - 将新编译的jar包放入
plugins目录,重启服务器。
3. 可选:修正方法名拼写(规范建议)
当前方法名areLoged为拼写错误,正确拼写应为areLogged,虽不是当前错误的直接原因,但修正后可避免后续维护时的混淆。
内容的提问来源于stack exchange,提问作者Daniyusk
相关产品推荐
相关产品推荐

