Update kit management & anchor kit

This commit is contained in:
TDSTOS
2025-12-09 01:01:00 +01:00
parent a3b521940c
commit 728b7534ac
6 changed files with 395 additions and 121 deletions

View File

@@ -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()
}
}