DArena/src/main/kotlin/nl/kallestruik/darena/util/ArenaUtil.kt

79 lines
2.6 KiB
Kotlin

package nl.kallestruik.darena.util
import nl.kallestruik.darena.arenas.Arena
import nl.kallestruik.darena.managers.ArenaManager
import org.bukkit.Bukkit
import org.bukkit.GameMode
import org.bukkit.entity.Entity
import org.bukkit.entity.Player
import org.bukkit.entity.Projectile
object ArenaUtil {
fun getPossibleParticipants(): List<Player> {
Logger.trace(ArenaUtil::class, "getPossibleParticipants()")
return Bukkit.getOnlinePlayers().filter { it.gameMode == GameMode.SURVIVAL }
}
fun getPossibleSpectators(): List<Player> {
Logger.trace(ArenaUtil::class, "getPossibleSpectators()")
return Bukkit.getOnlinePlayers().filter { it.gameMode == GameMode.SPECTATOR }
}
fun clearPlayer(player: Player) {
player.inventory.close()
player.inventory.clear()
player.exp = 0F
player.level = 0
player.health = 20.0
player.saturation = 0F
player.foodLevel = 20
player.fireTicks = 0
player.fallDistance = 0F
for (effect in player.activePotionEffects) {
player.removePotionEffect(effect.type)
}
}
fun resolveDamager(damager: Entity): Player? {
if (damager is Player)
return damager
if (damager is Projectile && damager.shooter is Player)
return damager.shooter as Player
return null
}
fun formatTime(timeLeft: Int): String {
val minutes = (timeLeft / 60).toString().padStart(2, '0')
val seconds = (timeLeft % 60).toString().padStart(2, '0')
return "$minutes:$seconds"
}
fun formatTimeMillis(timeLeft: Long): String {
val minutes = (timeLeft / 1000 / 60).toString().padStart(2, '0')
val seconds = ((timeLeft / 1000) % 60).toString().padStart(2, '0')
val millis = (timeLeft % 1000).toString().padStart(3, '0')
return "$minutes:$seconds.$millis"
}
fun finishPlayer(player: Player, arena: Arena, arenaManager: ArenaManager) {
Logger.trace(ArenaManager::class, "finishPlayer(player: $player, arena: ${arena.config.name}, arenaManager: $arenaManager)")
arena.makeSpectator(player)
arena.session!!.playersFinished++
if (arena.config.endConditions.playersFinished != -1
&& arena.session!!.playersFinished >= arena.config.endConditions.playersFinished
) {
arenaManager.end()
return
}
if (arenaManager.currentArena!!.session!!.participants.size <= arenaManager.currentArena!!.config.endConditions.playersLeft) {
arenaManager.end()
return
}
}
}