开发PaperMC Minecraft插件时遭遇未解析引用color错误
解决PaperMC插件中Kotlin的「未解析引用color」错误
你的错误根源是代码里的链式调用逻辑错了:sender.sendMessage(Component.text("You jumped")).color(...) 这行里,sendMessage()的返回值是布尔值(表示消息是否发送成功),而不是你构建的Component对象,所以编译器找不到color()方法。
正确的做法是先构建好带颜色的Component,再把它传给sendMessage(),或者直接在Component.text()之后链式调用color():
修正后的完整代码:
import org.bukkit.command.Command import org.bukkit.command.CommandExecutor import org.bukkit.command.CommandSender import org.bukkit.entity.Player import net.kyori.adventure.text.Component import net.kyori.adventure.text.format.TextColor import org.bukkit.util.Vector class jumpCommand : CommandExecutor { override fun onCommand(sender: CommandSender, command: Command, p2: String, p3: Array<out String>?): Boolean { if (sender is Player) { if (sender.isOp) { // 先构建带颜色的Component,再传入sendMessage val successMsg = Component.text("You jumped").color(TextColor.color(0, 255, 75)) sender.sendMessage(successMsg) sender.velocity = sender.velocity.add(Vector(5.0, 10.0, 5.0)) } else { // 也可以直接链式调用后传入sendMessage sender.sendMessage(Component.text("some message").color(TextColor.color(255, 0, 0))) } } return false } }
额外说明:Kyori Adventure的API设计是通过链式调用修改Component的属性(比如颜色、样式),这些调用必须直接作用在Component对象上,而不是sendMessage的返回值。另外注意你的onCommand最后返回false,这会让Minecraft显示该命令的默认用法提示,如果不需要的话可以改成return true。
内容的提问来源于stack exchange,提问作者Angkan Dey
相关产品推荐
相关产品推荐

