100 lines
2.6 KiB
Kotlin
100 lines
2.6 KiB
Kotlin
package club.mcscrims.speedhg.kit
|
|
|
|
import club.mcscrims.speedhg.SpeedHG
|
|
import org.bukkit.entity.Player
|
|
import org.bukkit.event.entity.EntityDamageByEntityEvent
|
|
import org.bukkit.event.player.PlayerInteractEvent
|
|
import java.util.UUID
|
|
import java.util.concurrent.ConcurrentHashMap
|
|
|
|
class KitManager(private val plugin: SpeedHG) {
|
|
|
|
private val kits = ConcurrentHashMap<String, AbstractKit>()
|
|
private val selectedKits = ConcurrentHashMap<UUID, AbstractKit>()
|
|
|
|
fun registerKit(kit: AbstractKit) {
|
|
kit.config = plugin.kitConfig.data.getConfigForKit(kit.id)
|
|
kits[kit.id.lowercase()] = kit
|
|
plugin.logger.info("Registered kit: ${kit.displayName} (${kit.id})")
|
|
}
|
|
|
|
fun getKit(id: String): AbstractKit? {
|
|
return kits[id.lowercase()]
|
|
}
|
|
|
|
fun getAllKits(): Collection<AbstractKit> {
|
|
return kits.values
|
|
}
|
|
|
|
fun selectKit(player: Player, kitId: String): Boolean {
|
|
val kit = getKit(kitId) ?: return false
|
|
|
|
val previousKit = selectedKits[player.uniqueId]
|
|
previousKit?.cleanup(player)
|
|
|
|
selectedKits[player.uniqueId] = kit
|
|
|
|
try {
|
|
kit.onSelect(player)
|
|
} catch (e: Exception) {
|
|
plugin.logger.severe("Error during onSelect for kit ${kit.id} and player ${player.name}: ${e.message}")
|
|
e.printStackTrace()
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
fun getSelectedKit(player: Player): AbstractKit? {
|
|
return selectedKits[player.uniqueId]
|
|
}
|
|
|
|
fun startKitForPlayer(player: Player) {
|
|
val kit = selectedKits[player.uniqueId] ?: return
|
|
|
|
try {
|
|
kit.onStart(player)
|
|
} catch (e: Exception) {
|
|
plugin.logger.severe("Error during onStart for kit ${kit.id} and player ${player.name}: ${e.message}")
|
|
e.printStackTrace()
|
|
}
|
|
}
|
|
|
|
fun triggerHit(attacker: Player, victim: Player, event: EntityDamageByEntityEvent) {
|
|
val kit = selectedKits[attacker.uniqueId] ?: return
|
|
|
|
try {
|
|
kit.onHit(attacker, victim, event)
|
|
} catch (e: Exception) {
|
|
plugin.logger.severe("Error during onHit for kit ${kit.id} and player ${attacker.name}: ${e.message}")
|
|
e.printStackTrace()
|
|
}
|
|
}
|
|
|
|
fun triggerInteract(player: Player, event: PlayerInteractEvent) {
|
|
val kit = selectedKits[player.uniqueId] ?: return
|
|
|
|
try {
|
|
kit.onInteract(player, event)
|
|
} catch (e: Exception) {
|
|
plugin.logger.severe("Error during onInteract for kit ${kit.id} and player ${player.name}: ${e.message}")
|
|
e.printStackTrace()
|
|
}
|
|
}
|
|
|
|
fun clearPlayerSelection(player: Player) {
|
|
val kit = selectedKits.remove(player.uniqueId)
|
|
kit?.cleanup(player)
|
|
}
|
|
|
|
fun clearAll() {
|
|
selectedKits.values.forEach { kit ->
|
|
plugin.server.onlinePlayers.forEach { player ->
|
|
if (selectedKits[player.uniqueId] == kit) {
|
|
kit.cleanup(player)
|
|
}
|
|
}
|
|
}
|
|
selectedKits.clear()
|
|
}
|
|
}
|