diff --git a/README.md b/README.md index 64a20d7..ad7270c 100644 --- a/README.md +++ b/README.md @@ -1,126 +1,323 @@ -# 🎼 HardcoreGames (HG) – Projektdokumentation +# SpeedHG -## ⚙ Allgemeine Mechaniken & Einstellungen -* **Teams:** Maximal To2 (Teams of 2). Spieler mĂŒssen sich ĂŒber den `/team` Command zusammenschließen. -* **Kompass:** Zeigt ĂŒber der Actionbar in die Richtung des nĂ€chsten Gegners (`< Next Enemy in Direction: %direction% >`). Es werden keine Spielernamen preisgegeben. -* **Hit-Cooldown:** Der Standard-HitCooldown ist entfernt. -* **Ressourcen:** Vor dem Feast kann kein Eisen abgebaut werden. Nach dem Feast greift ein "Iron-Nerf". -* **Auto-Pickup:** Automatisches Aufsammeln von Items ist aktiv. Speziell beim Start gehen Pilze, Kakaobohnen und Kakteen beim Abbauen direkt ins Inventar. -* **Kills & XP:** Ein "Pro Kill" gewĂ€hrt ein halbes XP-Level. +> **A Spigot / Paper plugin for the *SpeedHG* Hunger-Games variant by McScrims Network.** +> Built with Kotlin · Paper API 1.21 · Version `1.0.0` --- -## ⏳ Spielphasen -1. **Lobby:** - * *Dauer:* Bis 8 Spieler in der Runde sind, ansonsten Start via `/start` Command. -2. **Invincibility (Schutzzeit):** - * *Dauer:* 3 Minuten. - * *Effekte:* Spieler erhalten Speed & Haste bis zum Ende dieser Phase. -3. **Battle:** - * *Dauer:* Bis nur noch ein Spieler lebt. - * *Events:* - * **Feast:** Startet ab Minute 10. - * **Pit:** Im normalen Spiel ab Minute 30; bei einem Event ab Minute 45. - * **Deathmatch:** Gibt es ab 4 Spielern ein "Loot Feast" beim Deathmatch. - * *Maximale Dauer:* Normales Spiel = 1 Stunde; Event = 1 Stunde 15 Minuten. -4. **End:** - * *Dauer:* 1 Minute. +## Table of Contents + +- [Overview](#overview) +- [Dependencies](#dependencies) +- [Game Flow](#game-flow) +- [Configuration](#configuration) +- [Kits](#kits) +- [Perks](#perks) +- [Commands](#commands) +- [Permissions](#permissions) +- [Architecture](#architecture) +- [Adding a New Kit](#adding-a-new-kit) +- [Adding a New Perk](#adding-a-new-perk) +- [Runtime Configuration via `SPEEDHG_CUSTOM_SETTINGS`](#runtime-configuration-via-speedhg_custom_settings) --- -## 📈 Level- & Ranking-System -* **Leveling:** Spieler starten bei Level 1 und können bis Level 100 aufsteigen. Höhere Level schalten bestimmte Extras frei, um schwĂ€cheren Spielern das Spiel zu erleichtern. -* **Einranken:** Es werden 5 Spiele benötigt, um einen Rang zu erhalten. Das Ergebnis berechnet sich aus *Performance + Letzter Rang*. -* **Punktevergabe:** Nach jedem Spiel erhalten Spieler je nach Performance entweder Punkteabzug (`-5 bis -15 RR`) oder Punktezuwachs (`+10 bis +30 RR`). +## Overview + +SpeedHG is a competitive Hunger-Games game-mode where every player selects a **Kit** (with an Aggressive or Defensive playstyle) and up to **2 passive Perks** before the round starts. The world border steadily shrinks, disasters trigger, and a feast spawns mid-game to force confrontation. + +Key features at a glance: + +- 17 fully-implemented Kits, each with 2 Playstyles (Aggressive / Defensive) +- 14 passive Perks with persistent DB-backed selection +- Hit-charge system for active abilities (configurable hits-to-charge per kit) +- Dynamic WorldBorder shrink, Feast, and Pit events +- Anti-runner detection, soup-based healing, team support +- Lunar Client integration (waypoints, scoreboard) +- Discord webhook for game results +- MySQL-backed stats, ranking, and leaderboard +- Fully i18n-able via `en_US.yml` (MiniMessage format) --- -## đŸŒȘ Spiel-Systeme +## Dependencies -### Perks-System -Spieler können anstelle von "Sidekits" verschiedene Perks wĂ€hlen (2 Perks pro Spieler), welche das Spielerlebnis beeinflussen. Man kann so verschiedene Abilities kombinieren. -* **Allgemeine Passive Perks:** Gegner wegkicken oder sich zu einem Gegner teleportieren. -* **Orakel-Perk:** Ähnlich wie der Assassine. Zeigt Kit und Entfernung des nĂ€chsten Gegners an. *Sonderfall:* Wenn das Spielo-Kit ausgewĂ€hlt ist, zeigt das Orakel an, ob der nĂ€chste Gamble gut oder schlecht wird. +| Dependency | Role | +|-----------------|-------------------------------------| +| `WorldEdit` | Arena construction for GladiatorKit | +| `Apollo-Bukkit` | Lunar Client integration | +| `Kup` | Internal rank/permission bridge | -### Naturkatastrophen-System -In jedem Biom können verschiedene Katastrophen auftreten: -* **Mesa:** Tornado, Erdbeben -* **Savanne:** Meteore -* **Generell (bei hoher Bauhöhe):** Donner (Blitze) +All three must be present on the server; the plugin will not load without them. --- -## đŸ›Ąïž Kit-System -**Grundregel fĂŒr FĂ€higkeiten:** Nach dem Start der Runde hat jeder Spieler *einen* freien Use seiner Abilities. Danach werden die weiteren Uses erst ab einer bestimmten Anzahl an ausgeteilten Hits freigeschaltet. *Wichtig:* Vor der Kitauswahl wird der PlayStyle auf Null gesetzt, um Fehler zu vermeiden. VerlĂ€sst ein Spieler das Inventar ohne Wahl, wird der PlayStyle standardmĂ€ĂŸig auf **DEFENSIVE** gesetzt. +## Game Flow -Hier sind alle dokumentierten Kits und ihre FĂ€higkeiten: +``` +LOBBY → STARTING → INVINCIBILITY → INGAME → ENDING +``` -* **Goblin [Fertig]** - * *Aggressive (Steal):* 60 Sekunden lang aktiv. Kopiert das Kit des Gegners und gibt eine minimale Chance, Suppen zu klauen. - * *Passive (Bunker):* Spawnt bei Aktivierung einen Bunker um den Spieler herum. -* **Venom [Fertig]** - * *Aggressive (Wither):* Bei Aktivierung: Lohen-Sound + Beam + Blindness I (5 Sek.) + Instant Damage (2 Herzen) + Wither I. - * *Passive (Shield of Darkness / Dunklerpanzer):* 8 Sekunden aktiv. Lohen-Sound + Smoke + Barriere. Die Barriere blockt Projektile (SchneebĂ€lle, Eier, Pfeile) und reflektiert TrĂ€nke. Sie bricht ab 15 normalem Schaden. Der Spieler erhĂ€lt nur 1 Herz Damage (1.5 bei Crits) und nur Schaden von Gegnern wird ĂŒbertragen. Bricht die Barriere, ertönt ein Wither-Sound. -* **Eismagier (IceMage) [Fertig]** - * *Aggressive:* Speed I in Eisbiomen. Angriffe auf Gegner haben eine Chance auf Slowness. - * *Passive (Schneeball):* Ein geworfener Schneeball explodiert in alle Richtungen (360°). Getroffene Gegner erhalten Freeze (3 Sek.) und Slowness II (2 Sek.). -* **Backup [Fertig]** - * Kann sich zu jeder beliebigen Zeit in der Runde ein Kit aussuchen. -* **Ninja [Fertig]** - * *Aggressive (Teleport):* Wenn der Spieler sneakt, teleportiert er sich hinter den Gegner (der in den letzten 10 Sekunden geschlagen wurde). - * *Passive (Smoke):* Erzeugt Rauch um den Spieler. Laufen Gegner hinein, bekommen sie Blindness I und Slowness I. -* **Spielo [Fertig]** - * *Aggressive (Höheres Risiko):* Gambeln auf Knopfdruck ("Automat"). Gibt Random Items oder löst ein Event aus. - * *Passive (Sicherer):* Inventar mit Slot-Automat (wenn kein Spieler in der NĂ€he ist). Der Spieler kann keine Dia-Armor bekommen, hat dafĂŒr aber keinen Instant Death zu befĂŒrchten. -* **Tesla [Fertig]** - * *Aggressive:* Es erscheinen zufĂ€llige Blitze im Umkreis von 5 Blöcken (1,5 Herzen Schaden). - * *Passive:* Gegner in der NĂ€he werden weggeknockt und bekommen Brandschaden. *EinschrĂ€nkung:* Funktioniert ab einer Höhe von 50 Blöcken nicht mehr. -* **Rattlesnake [Fertig]** - * Modus, bei dem man Speed II bekommt. LĂ€d sich durch Sneaken auf (je lĂ€nger, desto weiter springt man; 3 bis 10 Blöcke). - * *Hit:* Wenn man einen Gegner anspringt (Vor Feast 1x, danach 3x nötig), bekommt dieser Poison II (8 Sek.). - * *Miss:* Wenn der Sprung nicht trifft, erhĂ€lt der Gegner verschiedene andere Effekte (Nausea, Slowness). -* **Armorer [Fertig]** - * Bekommt alle 2 Kills bessere RĂŒstung (Schuhe & Brustplatte). - * Falls der Spieler bereits ein Teil besitzt, wird dieses durch das aktuelle RĂŒstungslevel ersetzt, sobald es zerbricht. -* **Voodoo [Fertig]** - * *Aggressive:* 20% Wahrscheinlichkeit, getroffenen Gegnern den Wither-Effekt zu geben. Hat der Gegner unter 50% Leben, kann er fĂŒr 5 Sekunden festgehalten werden. - * *Passive:* Spieler kann Gegner in der NĂ€he mit einem Fluch belegen (gibt negative Effekte). WĂ€hrend der Gegner verflucht ist, erhĂ€lt der Voodoo-Spieler temporĂ€re Buffs. -* **Black Panther [Fertig]** - * *Aggressive:* 12 Sekunden lang 6,5 Damage (3,25 Herzen) mit der Faust. Pusht Gegner in der NĂ€he weg (Partikel fliegen hinterher, Enderperlen machen extra Schaden). - * *Passive ("Wakanda Forever!"):* Springt auf Gegner und macht Instant Damage (3 Herzen) plus eine Explosion mit Krater (Ă€hnlich wie Meteor). -* **Dreizack (Trident) [Fertig]** - * *Aggressive:* 3x Charges hoch und runter springen zu können. Beim runter springen schlĂ€gt ein Blitz ein - * *Defensive:* Falls der Dreizack in der Hand oder Offhand ist, gibt es eine 20% Chance, dass Gegner beim Schlagen abprallen und Slowness I fĂŒr 2 Sekunden bekommen -* **Anchor [Fertig]** - * EingeschrĂ€nktes NoKnockback. Baut man den Anchor ab, ertönt der Eisengolem-Sterbesound. - * *Aggressive:* 5-Block-Radius, aus dem man sich nicht bewegen kann, aber man macht 0,5 Herzen mehr Schaden. - * *Passive:* GrĂ¶ĂŸerer Radius (vermutlich 7,5 - 10 Blöcke). -* **Blitzcrank [Fertig]** - * *Offensive:* Hook. - * *Defensive:* Stun. - * *Ult (Beide Styles):* FlĂ€chenschaden im Umkreis. -* **Puppet (basiert auf Fiddlesticks) [Fertig]** - * *Aggressive:* Saugt fĂŒr 2 Sekunden Leben von nahen Gegnern (Pro Spieler: 4 Herzen/Sekunde; Max 8 Herzen Heilung). Die FĂ€higkeit kann abgebrochen werden. - * *Defensive:* Gegner in der NĂ€he bekommen Blindness und Slowness fĂŒr 4 Sekunden. -* **TheWorld [Fertig]** - * *Aggressive:* Welle in alle Richtungen mit Partikeln. Teleportiert in Blickrichtung bei Aktivierung (Max 3). - * *Defensive:* Welle in alle Richtungen mit Partikeln. Friert Gegner in der NĂ€he fĂŒr 10 Sekunden ein. Maximal 5 Hits gegen gefrorene Gegner möglich. -* **Gladiator [Fertig]** *(FĂ€higkeiten nicht nĂ€her erlĂ€utert).* +| Phase | Description | +|-----------------|------------------------------------------------------------------------------------------| +| `LOBBY` | Waiting for `min-players`. Every 15 s an idle message is broadcast. | +| `STARTING` | Countdown (`lobby-time` seconds). Aborts if player count drops. | +| `INVINCIBILITY` | Players are teleported, kits & perks applied, Speed I + Haste I active. No damage dealt. | +| `INGAME` | Combat enabled, WorldBorder shrinks, timer counts up, Feast & Pit events fire. | +| `ENDING` | Winner announced, server shuts down after a short delay. | + +Default timing values (overridable in `config.yml`): + +| Setting | Default | +|--------------------|------------| +| Min players | 8 | +| Lobby time | 120 s | +| Invincibility time | 120 s | +| Border start | 600 blocks | +| Border end | 150 blocks | +| Border shrink time | 900 s | --- -## ✅ Checklisten-Status (Stand: 28.03.2026) +## Configuration -**Abgeschlossene Systeme:** -* [x] Compass -* [x] Start (Speed, Haste, Auto-Pickup) -* [x] Phasen (Lobby, Invis, Battle, End) -* [x] Level (Elo- / Rank-System) -* [x] Perks-System -* [x] Kit-System -* [x] Naturkatastrophen-System -* [x] Map-System -* [x] Teams-System +### `config.yml` -**Noch Offen:** -* [ ] Custom World-Generation +```yaml +game: + beta: true + min-players: 2 + lobby-time: 60 + invincibility-time: 120 + border-start: 600.0 + border-end: 100.0 + border-shrink-time: 900 # seconds + max-radius-teleport: 50.0 + ranked: false + +teams: + enabled: false + preset-count: 10 + max-size: 2 + +anti-runner: + enabled: false + +discord: + enabled: false + webhook-url: "YOUR_WEBHOOK_URL" + +database: + host: "localhost" + port: 3306 + name: "speedhg" + username: "speedhg_user" + password: "your_password" + use-ssl: false + pool: + max-size: 10 + min-idle: 2 +``` + +### `SPEEDHG_CUSTOM_SETTINGS` Environment Variable + +For production overrides without touching `config.yml`, pass a JSON blob via environment variable (see [Runtime Configuration](#runtime-configuration-via-speedhg_custom_settings)). + +--- + +## Kits + +Players select a kit in the lobby and choose a **Playstyle** (Aggressive `[AGG]` / Defensive `[DEF]`). +Active abilities are triggered by right-clicking the kit item. Most abilities require a configurable number of hits to charge first (`global_hits_required`, default: 15). + +| Kit | Aggressive Active | Defensive Active | Passive (AGG) | Passive (DEF) | +|------------------|----------------------------------------------------------------|---------------------------------------------------------|----------------------------------------------|-------------------------------------------------| +| **Anchor** | Summon Iron Golem anchor — no-knock + bonus damage in radius | ← same | Partial knockback resistance | Partial knockback resistance | +| **Armorer** | — | — | Strength I on kill | Protection I on armor | +| **Backup** | — | — | — | — | +| **BlackPanther** | Wakanda Leap — leap forward, hit enemies on land | ← same | — | — | +| **Blitzcrank** | Rocket Grab — pull nearest enemy to you | ← same | — | — | +| **Gladiator** | Sky arena 1v1 duel (glass cage, Wither IV after 180 s) | ← same | — | — | +| **Goblin** | Steal enemy kit for 60 s | Spawn a bunker for cover | — | — | +| **IceMage** | Ice Spike Burst — cone of freezing projectiles | Freeze Burst — 16 snowballs in circle | Speed in cold biomes, slowness chance on hit | 33 % slowness proc on being hit | +| **Ninja** | Vanish + backstab: teleport behind last-hit enemy | Shadow Step: teleport to nearest enemy | Last-hit tracking | — | +| **Puppet** | Puppet Trap — summon entity traps | ← similar | — | — | +| **Rattlesnake** | Pounce — sneak-charge then leap, applies Poison II | — | Poison II on pounce hit | 25 % reflect Poison II on being hit | +| **Spielo** | — | — | — | — | +| **Tesla** | Lightning strike AoE | ← same | — | Knock-back + ignite reflect on being hit | +| **TheWorld** | Shockwave + 3× Blink forward | Shockwave + Freeze nearby enemies (10 s, 5-hit cap) | — | Frozen enemies have a 5-hit break cap | +| **Trident** | Dive — launch up, lightning on landing (charge-based) | — | — | Parry — chance to bounce + Slowness on attacker | +| **Venom** | Venom Blast — Blindness I + Wither I + 2 hearts instant damage | Barrier — absorbs up to 15 damage, reflects projectiles | — | — | +| **Voodoo** | Curse — apply Glowing + delayed damage to nearby enemies | ← similar | 20 % Wither proc on hit | Speed + Regen while cursed enemies are nearby | + +### Kit Item + +Each kit provides its signature item in the player's inventory at game start. Items are tracked in `cachedItems` (UUID → `List`) and cleaned up on `onRemove`. + +--- + +## Perks + +Players may equip **up to 2 Perks** before the round starts. Selections are persisted to the database per-player UUID. + +| Perk | Effect | +|-------------------|-------------------------------------------------------------------------------------| +| **Adrenaline** | Dropping below 3 hearts → Speed II for 5 s (30 s cooldown) | +| **Berserker** | Below 4 hearts → deal 15 % more melee damage | +| **Bloodlust** | On kill: Speed I + Regen I for 5 s | +| **Enderblood** | Ender Pearl landings deal no fall damage | +| **Evasion** | 15 % chance to dodge incoming projectiles | +| **Featherweight** | Full immunity to fall damage | +| **Ghost** | Invisible to compass tracking and the Oracle perk | +| **Gourmet** | Consuming soup → Regen I + Speed I for 2 s | +| **Last Stand** | Taking damage below 3 hearts → Resistance II + Absorption I for 4 s (60 s cooldown) | +| **Momentum** | Sprint for 4 s without combat → Speed I | +| **Oracle** | Shows kit + distance to the nearest enemy on sneak / compass | +| **Pyromaniac** | Immune to fire, lava, magma blocks, and burn ticks | +| **Scavenger** | Every kill drops an extra Golden Apple at the corpse | +| **Vampire** | 10 % chance on melee hit to heal œ heart | + +--- + +## Commands + +| Command | Alias | Permission | Description | +|--------------------------------------------|------------------|-------------------------|-----------------------------------| +| `/kit ` | — | — | Select a kit via command | +| `/kitinfo ` | `/perkinfo ` | — | Show name + lore of a kit or perk | +| `/perks` | — | — | Open the Perk Selector GUI | +| `/leaderboard` | — | — | View the top 10 players | +| `/timer