61 lines
1.7 KiB
Kotlin
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")
|
|
}
|
|
} |