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

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。

其他需要修正的问题

  1. onEnable()里已经设置了一次jump命令的执行器,registerCommands()里重复设置,建议移除其中一处,避免冗余。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:05:39