IntelliJ IDEA开发Paper 1.19.3 Kotlin插件遇setExecutor未解析错误求助
问题解决:Unresolved reference: setExecutor
核心错误原因
你在Test.kt的registerCommands()方法里犯了语法错误:
getCommand("jump"!!.setExecutor(JumpCommand()))
这里把非空断言!!错误地加在了字符串"jump"后面,导致编译器认为你在调用字符串的setExecutor方法(而字符串根本没有这个方法),所以报Unresolved reference: setExecutor。正确的写法是先调用getCommand("jump")获取可空的Command对象,再用!!做非空断言,最后调用setExecutor。
其他需要修正的问题
onEnable()里已经设置了一次jump命令的执行器,registerCommands()里重复设置,建议移除其中一处,避免冗余。JumpCommand.kt的onCommand方法最后固定返回false,这会导致服务器在命令执行后显示默认的帮助信息,应该根据命令是否成功执行返回true。
修正后的代码
Test.kt
package me.albindev.test import me.albindev.test.commands.JumpCommand import me.albindev.test.listeners.PlayerJumpListener import org.bukkit.plugin.java.JavaPlugin class Test : JavaPlugin() { override fun onEnable() { // Plugin startup logic logger.info("Hello World!") registerListeners() registerCommands() } private fun registerListeners() { server.pluginManager.registerEvents(PlayerJumpListener(), this) logger.info("registered listeners") } private fun registerCommands() { // 修正语法错误:将!!放在getCommand调用之后 getCommand("jump")!!.setExecutor(JumpCommand()) } override fun onDisable() { // Plugin shutdown logic } }
JumpCommand.kt
package me.albindev.test.commands import net.kyori.adventure.text.Component import net.kyori.adventure.text.format.TextColor import net.kyori.adventure.text.format.TextDecoration import org.bukkit.command.Command import org.bukkit.command.CommandExecutor import org.bukkit.command.CommandSender import org.bukkit.entity.Player import org.bukkit.util.Vector class JumpCommand : CommandExecutor { override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>?): Boolean { if (sender is Player) { if (sender.isOp) { sender.sendMessage(Component.text("Command Was Successful!") .color(TextColor.color(0,255,0)) .decorate(TextDecoration.BOLD)) sender.velocity = sender.velocity.add(Vector(0.0, 10.0, 0.0)) } else { sender.sendMessage(Component.text("YOU ARE NOT OP!") .color(TextColor.color(255, 0, 0)) .decorate(TextDecoration.BOLD)) } // 命令已处理,返回true return true } // 发送者不是玩家,返回提示信息并返回true sender.sendMessage(Component.text("Only players can use this command!") .color(TextColor.color(255,0,0))) return true } }
其他文件无需修改
PlayerJumpListener.kt和plugin.yml的内容没有问题,可以保留原样。
内容的提问来源于stack exchange,提问作者AlbinDev
相关产品推荐
相关产品推荐

