MDRanks/src/main/kotlin/pw/hamzantal/mdranks/commands/CommandUtil.kt

61 lines
1.7 KiB
Kotlin

package pw.hamzantal.mdranks.commands
import org.bukkit.Bukkit
import org.bukkit.entity.Player
import pw.hamzantal.mdranks.Config
import pw.hamzantal.mdranks.RankData
import pw.hamzantal.mdranks.api.RankType
import pw.hamzantal.mdranks.api.Vault
import pw.hamzantal.mdranks.err
import pw.hamzantal.mdranks.placeholders
fun rankUpgradePrerequisites(p: Player, next: RankData, type: RankType = RankType.REG): Boolean {
val balance = Vault.balance(p)
val cost = next.cost(p)
if (balance < cost) {
return false
}
Vault.withdraw(p, cost) {
p.err("unknown_error_withdraw", "cost" to Config.formatC(cost))
}
performUpgradeRank(p, next, type)
return true
}
fun performUpgradeRank(p: Player, data: RankData, type: RankType) {
Vault.updateRank(p, type, data.level)
if (type == RankType.REBIRTH) {
Vault.updateRank(p, RankType.REG, 1, true)
Vault.updateRank(p, RankType.PRESTIGE, 0, true)
}
data.commandsOnUpgrade.forEach {
it.executeCommandWithPrefix(p, data)
}
data.broadcast.forEach {
val msg = it.placeholders(p, data)
Bukkit.broadcastMessage(msg)
}
data.msg.forEach {
val msg = it.placeholders(p, data)
p.sendMessage(msg)
}
data.randomCommandList.forEach {
it.executeCommandWithPrefix(p, data)
}
}
fun String.executeCommandWithPrefix(p: Player, data: RankData) {
val cmd = placeholders(p, data, true)
when {
startsWith("[console]") -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), cmd)
startsWith("[player]") -> p.performCommand(cmd)
startsWith("[op]") -> {
val prev = p.isOp
p.isOp = true
p.performCommand(cmd)
p.isOp = prev
}
else -> throw IllegalStateException("The [commandsOnUpgrade ($this), level (${data.level})] command does not start with a prefix")
}
}