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")
 | |
| 	}
 | |
| } |