Update kit management & anchor kit
This commit is contained in:
@@ -1,41 +1,73 @@
|
||||
package club.mcscrims.speedhg.kit
|
||||
|
||||
import club.mcscrims.speedhg.SpeedHG
|
||||
import club.mcscrims.speedhg.kit.impl.AnchorKit
|
||||
import net.kyori.adventure.text.Component
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent
|
||||
import org.bukkit.event.player.PlayerInteractEvent
|
||||
import org.bukkit.event.player.PlayerMoveEvent
|
||||
import java.util.UUID
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
||||
class KitManager(private val plugin: SpeedHG) {
|
||||
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)
|
||||
fun initialize()
|
||||
{
|
||||
registerKit(
|
||||
kitClass = AnchorKit::class.java as Class<AbstractKit>,
|
||||
id = "anchor",
|
||||
displayName = plugin.chatFormatter.format( "kits.anchor.displayName" ),
|
||||
description = emptyList(),
|
||||
icon = Material.ANVIL
|
||||
)
|
||||
}
|
||||
|
||||
fun registerKit(
|
||||
kitClass: Class<AbstractKit>,
|
||||
id: String,
|
||||
displayName: Component,
|
||||
description: List<String>,
|
||||
icon: Material
|
||||
) {
|
||||
val kit = kitClass.getDeclaredConstructor().newInstance( id, displayName, description, icon, PlayStyle.NULL, plugin, plugin.abilityContext, plugin.gameManager )
|
||||
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? {
|
||||
fun getKit(
|
||||
id: String
|
||||
): AbstractKit?
|
||||
{
|
||||
return kits[id.lowercase()]
|
||||
}
|
||||
|
||||
fun getAllKits(): Collection<AbstractKit> {
|
||||
fun getAllKits(): Collection<AbstractKit>
|
||||
{
|
||||
return kits.values
|
||||
}
|
||||
|
||||
fun selectKit(player: Player, kitId: String): Boolean {
|
||||
val kit = getKit(kitId) ?: return false
|
||||
fun selectKit(
|
||||
player: Player,
|
||||
kitId: String
|
||||
): Boolean
|
||||
{
|
||||
val kit = getKit( kitId ) ?: return false
|
||||
|
||||
val previousKit = selectedKits[player.uniqueId]
|
||||
previousKit?.cleanup(player)
|
||||
previousKit?.cleanup( player )
|
||||
|
||||
selectedKits[player.uniqueId] = kit
|
||||
|
||||
try {
|
||||
kit.onSelect(player)
|
||||
kit.onSelect( player )
|
||||
} catch (e: Exception) {
|
||||
plugin.logger.severe("Error during onSelect for kit ${kit.id} and player ${player.name}: ${e.message}")
|
||||
e.printStackTrace()
|
||||
@@ -44,56 +76,99 @@ class KitManager(private val plugin: SpeedHG) {
|
||||
return true
|
||||
}
|
||||
|
||||
fun getSelectedKit(player: Player): AbstractKit? {
|
||||
fun getSelectedKit(
|
||||
player: Player
|
||||
): AbstractKit?
|
||||
{
|
||||
return selectedKits[player.uniqueId]
|
||||
}
|
||||
|
||||
fun startKitForPlayer(player: Player) {
|
||||
fun startKitForPlayer(
|
||||
player: Player
|
||||
) {
|
||||
val kit = selectedKits[player.uniqueId] ?: return
|
||||
|
||||
try {
|
||||
kit.onStart(player)
|
||||
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) {
|
||||
fun triggerHit(
|
||||
attacker: Player,
|
||||
victim: Player,
|
||||
event: EntityDamageByEntityEvent
|
||||
) {
|
||||
val kit = selectedKits[attacker.uniqueId] ?: return
|
||||
|
||||
try {
|
||||
kit.onHit(attacker, victim, event)
|
||||
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) {
|
||||
fun triggerDamaged(
|
||||
attacker: Player,
|
||||
victim: Player,
|
||||
event: EntityDamageByEntityEvent
|
||||
) {
|
||||
val kit = selectedKits[victim.uniqueId] ?: return
|
||||
|
||||
try {
|
||||
kit.onDamaged( attacker, victim, event )
|
||||
} catch (e: Exception) {
|
||||
plugin.logger.severe("Error during onDamaged for kit ${kit.id} and player ${victim.name}: ${e.message}")
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
fun triggerInteract(
|
||||
player: Player,
|
||||
event: PlayerInteractEvent
|
||||
) {
|
||||
val kit = selectedKits[player.uniqueId] ?: return
|
||||
|
||||
try {
|
||||
kit.onInteract(player, event)
|
||||
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 triggerMove(
|
||||
player: Player,
|
||||
event: PlayerMoveEvent
|
||||
) {
|
||||
val kit = selectedKits[player.uniqueId] ?: return
|
||||
|
||||
try {
|
||||
kit.onMove( player, event )
|
||||
} catch (e: Exception) {
|
||||
plugin.logger.severe("Error during onMove for kit ${kit.id} and player ${player.name}: ${e.message}")
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
fun clearAll() {
|
||||
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)
|
||||
}
|
||||
if ( selectedKits[player.uniqueId] == kit ) kit.cleanup( player )
|
||||
}
|
||||
}
|
||||
selectedKits.clear()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user