Add perk system with GUI and integrations
Introduce a complete passive perk system: Perk base class, PerkManager (registration, selection, lifecycle, persistence), and PlayerPerksRepository (DB schema + upsert/find). Add four example perks (Oracle, Vampire, Featherweight, Bloodlust) and a single PerkEventDispatcher to route combat/environment/kill events to active perks. Provide PerkSelectorMenu GUI and /perks command, integrate perk initialization, registration, application and cleanup into SpeedHG and GameManager, and hook load/evict into StatsListener. Also add language entries and register the command in plugin.yml. This change enables players to select up to two passive perks, persists selections, and dispatches relevant events to perk implementations.
This commit is contained in:
@@ -2,6 +2,7 @@ package club.mcscrims.speedhg
|
||||
|
||||
import club.mcscrims.speedhg.command.KitCommand
|
||||
import club.mcscrims.speedhg.command.LeaderboardCommand
|
||||
import club.mcscrims.speedhg.command.PerksCommand
|
||||
import club.mcscrims.speedhg.command.RankingCommand
|
||||
import club.mcscrims.speedhg.command.TimerCommand
|
||||
import club.mcscrims.speedhg.config.CustomGameManager
|
||||
@@ -20,6 +21,12 @@ import club.mcscrims.speedhg.listener.ConnectListener
|
||||
import club.mcscrims.speedhg.listener.GameStateListener
|
||||
import club.mcscrims.speedhg.listener.SoupListener
|
||||
import club.mcscrims.speedhg.listener.StatsListener
|
||||
import club.mcscrims.speedhg.perk.PerkManager
|
||||
import club.mcscrims.speedhg.perk.impl.BloodlustPerk
|
||||
import club.mcscrims.speedhg.perk.impl.FeatherweightPerk
|
||||
import club.mcscrims.speedhg.perk.impl.OraclePerk
|
||||
import club.mcscrims.speedhg.perk.impl.VampirePerk
|
||||
import club.mcscrims.speedhg.perk.listener.PerkEventDispatcher
|
||||
import club.mcscrims.speedhg.ranking.RankingManager
|
||||
import club.mcscrims.speedhg.scoreboard.ScoreboardManager
|
||||
import club.mcscrims.speedhg.webhook.DiscordWebhookManager
|
||||
@@ -55,6 +62,9 @@ class SpeedHG : JavaPlugin() {
|
||||
lateinit var kitManager: KitManager
|
||||
private set
|
||||
|
||||
lateinit var perkManager: PerkManager
|
||||
private set
|
||||
|
||||
lateinit var databaseManager: DatabaseManager
|
||||
private set
|
||||
|
||||
@@ -111,7 +121,11 @@ class SpeedHG : JavaPlugin() {
|
||||
kitManager = KitManager( this )
|
||||
discordWebhookManager = DiscordWebhookManager( this )
|
||||
|
||||
perkManager = PerkManager( this )
|
||||
perkManager.initialize()
|
||||
|
||||
registerKits()
|
||||
registerPerks()
|
||||
registerCommands()
|
||||
registerListener()
|
||||
registerRecipes()
|
||||
@@ -122,6 +136,7 @@ class SpeedHG : JavaPlugin() {
|
||||
override fun onDisable()
|
||||
{
|
||||
podiumManager.cleanup()
|
||||
if ( ::perkManager.isInitialized ) perkManager.shutdown()
|
||||
if ( ::statsManager.isInitialized ) statsManager.shutdown()
|
||||
if ( ::databaseManager.isInitialized ) databaseManager.disconnect()
|
||||
kitManager.clearAll()
|
||||
@@ -142,6 +157,14 @@ class SpeedHG : JavaPlugin() {
|
||||
kitManager.registerKit( VoodooKit() )
|
||||
}
|
||||
|
||||
private fun registerPerks()
|
||||
{
|
||||
perkManager.registerPerk( OraclePerk() )
|
||||
perkManager.registerPerk( VampirePerk() )
|
||||
perkManager.registerPerk( FeatherweightPerk() )
|
||||
perkManager.registerPerk( BloodlustPerk() )
|
||||
}
|
||||
|
||||
private fun registerCommands()
|
||||
{
|
||||
val kitCommand = KitCommand()
|
||||
@@ -163,6 +186,7 @@ class SpeedHG : JavaPlugin() {
|
||||
}
|
||||
|
||||
getCommand( "leaderboard" )?.setExecutor( LeaderboardCommand() )
|
||||
getCommand( "perks" )?.setExecutor( PerksCommand() )
|
||||
}
|
||||
|
||||
private fun registerListener()
|
||||
@@ -175,6 +199,7 @@ class SpeedHG : JavaPlugin() {
|
||||
pm.registerEvents(KitEventDispatcher( this, kitManager ), this )
|
||||
pm.registerEvents( StatsListener(), this )
|
||||
pm.registerEvents( MenuListener(), this )
|
||||
pm.registerEvents(PerkEventDispatcher( this, perkManager ), this )
|
||||
}
|
||||
|
||||
private fun registerRecipes()
|
||||
|
||||
Reference in New Issue
Block a user