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 { Logger.trace(ArenaUtil::class, "getPossibleParticipants()") return Bukkit.getOnlinePlayers().filter { it.gameMode == GameMode.SURVIVAL } } fun getPossibleSpectators(): List { 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 } } }