Add Anchor, Puppet, Tesla kits and perks

Introduce three new kits (Anchor, Puppet, Tesla) and multiple perks, plus related plumbing and behavior changes. Key changes:

- Added kit implementations: AnchorKit (summon iron-golem anchor, knockback resistance/radius effects), PuppetKit (life-drain / fear abilities), TeslaKit (lightning active + passive knockback/fire aura).
- Register new kits and register new perks in SpeedHG startup.
- Added new perks: AdrenalinePerk (post-damage speed proc with cooldown), EnderbluePerk (ender-pearl fall damage handling), Ghost, Pyromaniac, Scavenger (and updated OraclePerk/PerkEventDispatcher usage).
- Extended Perk API (Perk.kt) with onEnderPearlDamage and onPostDamage hooks to support specialized damage handling and post-damage checks.
- PerkManager.isGhost added for checking Ghost perk selection and used to exclude ghost players from targeting/compass logic.
- GameManager.updateCompass now excludes ghost-perk players when computing compass targets.
- Updated PerkEventDispatcher and OraclePerk to integrate new hooks and behaviors.
- Minor language additions in en_US.yml to support new kits/perks.

These changes add new gameplay mechanics and ensure correct event dispatching for pearl/fall/post-damage cases and ghost invisibility to game tracking.
This commit is contained in:
TDSTOS
2026-04-08 02:59:32 +02:00
parent 2be7272f06
commit 1c6b229ad8
15 changed files with 1501 additions and 5 deletions

View File

@@ -57,4 +57,29 @@ abstract class Perk {
*/
open fun onEnvironmentalDamage(player: Player, event: EntityDamageEvent) {}
/**
* Aufgerufen wenn dieser Spieler via Enderperle teleportiert wurde und
* direkt danach Fallschaden erhalten würde (Cause: FALL, nach ENDER_PEARL-Teleport).
*
* Der [PerkEventDispatcher] unterscheidet diesen Fall vom normalen Fallschaden
* über ein internes Tracking-Set und ruft diesen Hook **statt** [onEnvironmentalDamage] auf.
*
* → Überschreiben um den Schaden zu canceln ([event.isCancelled = true]).
*/
open fun onEnderPearlDamage(player: Player, event: EntityDamageEvent) {}
/**
* Aufgerufen **nach** vollständiger Schadensberechnung (MONITOR-Priority),
* wenn `event.finalDamage` den endgültigen Abzug nach Rüstung/Modifiern enthält.
* `player.health` ist hier noch der Vor-Schaden-Wert.
*
* Geeignet für Prüfungen der Form: `player.health - event.finalDamage < X`
*
* Gilt für **jeden** Schadenstyp (Nahkampf UND Umgebung).
* Wird nicht aufgerufen wenn das Event bereits gecancelt ist.
*
* → Primär für [AdrenalinePerk].
*/
open fun onPostDamage(player: Player, event: EntityDamageEvent) {}
}