【问题标题】:Minecraft rank system kotlin display rank befor usernameMinecraft 排名系统 kotlin 显示用户名前的排名
【发布时间】:2021-10-26 17:14:47
【问题描述】:

我正在 kotlin 中为 Minecraft 做一个等级系统。现在我想在制表符和聊天消息中显示玩家姓名前的排名

聊天示例: [所有者] Fabboy:你好世界 [用户] 玩家:嘿 Fabboy

有人知道我是怎么做到的吗? (排名保存在配置中,Minecraft 1.17.1,Java 16)

我不是使用 Kotlin 编程的专业人士,因此非常感谢您提供详细的回答

代码:

package dev.fabboy.bork

import net.kyori.adventure.text.Component
import net.kyori.adventure.text.TextComponent
import org.bukkit.Bukkit
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerJoinEvent
import org.bukkit.plugin.java.JavaPlugin
import org.bukkit.scoreboard.DisplaySlot

const val version = "0.1"

//
lateinit var INSTANCE: Bork

class Bork : JavaPlugin(), Listener {

    override fun onEnable() {
        INSTANCE = this
        println("----------\n[Bork] Plugin loaded \nVersion: $version\nVersion from: 2021-09-07\n${(System.currentTimeMillis())}\n----------")
        server.pluginManager.registerEvents(this, this)
        getCommand("broadcast")?.setExecutor(Broadcast())
        getCommand("setrank")?.setExecutor(setrank())
        getCommand("rank")?.setExecutor(rank())



    }

    override fun onDisable() {
        Bukkit.getConsoleSender().sendMessage("[Bork] Plugin Disabled")
    }

    @EventHandler
    fun onJoin(joinEvent: PlayerJoinEvent) {
        val player = joinEvent.player
        var j = this.config.get("Bork.${player.uniqueId}.joins", 0) as Int
        var r = this.config.get("Bork.${player.uniqueId}.rank", 1) as Int
        j += 1

        var ranker = ""
        if(r == 1){
            ranker = "§3User"
        }
        if(r == 2){
            ranker = "§dVIP"
        }
        if(r == 3){
            ranker = "§6Admin"
        }
        if(r == 4){
            ranker = "§cOwner"
        }

        player.sendMessage("§e-------------§r§lPrivate§r§e--------------§r\n§lWelcome§r\n${(player.displayName() as TextComponent).content()}\nThis is your: §e§l$j Join§r\nYour Rank: $ranker §r\n§e----------------------------------§r\nRanks:\n1. §3User§r\n2. §dVIP§r\n3. §6Admin§r\n4. §cOwner§r\n§e-------------§r§lPrivate§r§e--------------")

        this.config.set("Bork.${player.uniqueId}.joins", j)
        this.config.set("Bork.${player.uniqueId}.rank", r)
        this.saveConfig()

    }

}

【问题讨论】:

  • 您当前的代码是什么?比如你已经做了什么?
  • 你可以edit你的问题包括所有细节
  • 我已经添加了代码

标签: java kotlin config minecraft


【解决方案1】:

要更改聊天消息,您必须使用事件AsyncPlayerChatEvent

Java 代码:

@EventHandler
public void onChat(AsyncPlayerChatEvent e) {
   Player p = (Player) e.getPlayer();
   e.setFormat(getRank(p) + " " + p.getDisplayName() + ": " e.getMessage()); // here you define the chat message
}

Kotlin 代码(类似的东西):

@EventHandler
fun onChat(e: AsyncPlayerChatEvent) {
   Player p = (Player) e.getPlayer();
   e.setFormat(getRank(p) + " " + p.getDisplayName() + ": " e.getMessage()); // here you define the chat message
}

【讨论】:

    猜你喜欢
    • 2015-02-23
    • 2021-10-07
    • 2013-01-23
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多