Commit Graph

19 Commits

Author SHA1 Message Date
TDSTOS
ee4601e102 Fix McScrimsAPI implementation 2026-04-15 22:55:46 +02:00
TDSTOS
86435a9dec Add new command; update kit command
A new command /kitinfo has been added to provide information about kits / perks at any time. The command /kit now also works in invincibility for players without kits. Sounds when picking up items has been removed
2026-04-14 00:43:36 +02:00
TDSTOS
7589b05433 Replace TeamManager with PresetTeam GUI system
Replace the old dynamic /team invite system with a fixed GUI-based preset team implementation. Removes TeamManager, Team, TeamListener and the TeamCommand, and introduces PresetTeam, PresetTeamManager and GUI listeners/menus (TeamSelectionMenu/TeamSelectionListener). Codepaths that referenced teamManager were migrated to presetTeamManager (GameManager win/compass logic, Lunar rich presence, Oracle perk, scoreboards, tablist, lobby items). Lobby now shows a team wool item when teams are enabled and the tablist/scoreboard display and prefix logic were adapted to reflect preset teams. Configuration supports teams.enabled, teams.preset-count and teams.max-size; scheduled invite cleanup and old team-reset logic were removed accordingly.
2026-04-13 01:23:29 +02:00
TDSTOS
4a28c58d2e Add /help command and various gameplay fixes
Introduce a HelpCommand (/help) and register it in SpeedHG; add its localized help text and plugin.yml entry. Prevent kit ability use while in gladiator by checking metadata in KitEventDispatcher and add a matching translation key. Early-return in KitCommand during ENDING state. Fix English message in TeamCommand and adjust spacing in LeaderboardMenu lore. Remove an unused import in SpeedHG and add necessary imports.
2026-04-12 07:20:20 +02:00
TDSTOS
05957f59dc Convert legacy color codes; fix tablist & deps
Add conversion of legacy Bukkit color codes (§-codes) to MiniMessage tags in ServerRankProvider to avoid MiniMessage parsing errors when deserializing rank prefixes. Introduce convertLegacyToMiniMessage and use it before mm.deserialize. Fix tablist footer formatting by adjusting the ping tag closure in TablistManager. Update plugin.yml dependency name from "Volcano" to "Kup".
2026-04-11 23:03:34 +02:00
TDSTOS
13f6ce5638 Add tablist manager and Volcano rank provider
Introduce a TablistManager to manage per-player scoreboard teams, tab header/footer and periodic updates; uses a ServerRankProvider abstraction. Add DefaultServerRankProvider and VolcanoServerRankProvider (uses CoreAPI) in ServerRankProvider.kt. Wire TablistManager into SpeedHG: initialize in onLoad, update on join, and shutdown on disable. Add local VolcanoAPI.jar as compileOnly dependency and declare Volcano as a plugin dependency in plugin.yml.
2026-04-11 02:34:42 +02:00
TDSTOS
cd8e3e37a7 Integrate Lunar Client and gameplay tweaks
Add Lunar Client support and make various kit/listener/ui adjustments.

- Add Apollo (Lunar Client) compileOnly dependencies and new LunarClientManager wired into plugin initialization. Update plugin.yml (depend Apollo-Bukkit, add speedhg.admin.staff permission) and config.yml (lunarclient name/variantName) for rich presence and mod settings.
- Rework Tesla kit passive: remove periodic aura task in favor of chance-on-hit effect (AURA_CHANCE) to reduce continuous scheduling and simplify behavior; adjust constants and particle/sound logic accordingly.
- Add Anchor golem death handler to KitEventDispatcher to suppress drops/exp for golems spawned by AnchorKit.
- Update AnvilSearchMenu to clear item-on-cursor before closing and ensure search tracker is unregistered in the right order.
- Remove join/quit attack-speed cooldown handling in GameStateListener and tidy up some permission/command descriptions in plugin.yml.

These changes enable Lunar features, improve performance by removing repeated scheduled tasks, and fix gameplay/drop/UI edge cases.
2026-04-11 00:49:42 +02:00
TDSTOS
4d32fe677c Add team system and team-based win condition
Introduce a full in-memory team system and integrate it into gameplay and UI.

- Add Team, TeamManager, TeamListener and TeamCommand to manage teams, invites, accept/deny, leave, kick and info. TeamManager stores teams and pending invites (INVITE_TTL_MS) using concurrent maps and exposes helper/query methods (areInSameTeam, allAliveInSameTeam, getInviterFor, cleanExpiredInvites, reset).
- Wire TeamManager into SpeedHG: initialize, schedule periodic invite cleanup, register command and listener, and reset teams on plugin disable.
- Update GameManager to consider teams for win conditions, build team winner names, exclude teammates from random teleport/compass logic, and credit all winning team members for stats/ranking.
- Move ability charge feedback out of individual kits into KitEventDispatcher: remove per-kit onFullyCharged overrides and add centralized ActionBar/sound feedback (sendChargeUpdateActionBar/sendChargeReadyActionBar). ActiveAbility no longer defines onFullyCharged.
- Make OraclePerk ignore teammates when finding nearest enemy.
- Add config entries for teams and corresponding language strings; tweak some default values in CustomGameSettings (gladiator arena radius/height and minor formatting changes).

These changes enable 2-player teams (configurable), friendly-fire prevention, invite lifecycle handling, and team-aware endgame logic.
2026-04-09 02:33:14 +02:00
TDSTOS
8c2ab684bb 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.
2026-04-04 03:16:43 +02:00
TDSTOS
7b6557122b Add ranking system and /ranking command
Introduce a ranking system: add Rank enum and RankingManager enhancements (isRankingEnabled toggle, getRank(), RR change handling, rank-up/down detection and player notifications with titles/sounds). Add a new /ranking admin command (toggle, status, rank) with tab completion and register it in plugin startup. Surface player rank on the scoreboard (ScoreboardManager) and add related language entries and plugin.yml permission/command metadata. Logging updated to include ranked state.
2026-04-03 22:28:56 +02:00
TDSTOS
8e96a07a65 Add timer command, recraft module & recipes
Introduce a /timer admin command with tab completion (speedhg.admin.timer) and a parseTimeToSeconds utility; add CommandSender.sendMsg extension and language strings. Add RecraftManager module that enforces a configurable recraft-nerf (reduces extra recraft points for alive players) and starts from GameManager; wire the new module into GameManager. Register mushroom-stew shapeless recipes for cocoa and cactus in plugin startup and tidy command registration. Update plugin.yml with permission/command entries and adjust imports as needed.
2026-03-27 16:26:18 +01:00
TDSTOS
72a58fdd9c Add Kit GUI (menu/anvil) and integrate MenuListener
Introduce a full chest-based kit selection UI and anvil search: add Menu, MenuHolder, KitSelectorMenu, KitItemFactory, AnvilSearchMenu (with AnvilSearchTracker) and a central MenuListener to dispatch menu and anvil interactions. Integrate the GUI into KitCommand (opens selector on no args, enforces mid-game selection rules, remove/replace backup kits when switching) and register MenuListener in the main plugin. Add permission speedhg.bypass and update ConnectListener to kick joiners when a game is running unless they have the bypass permission. Remove static playstyle lore from language file (now rendered dynamically), and apply small import/refactor cleanups (use wildcard imports for kit impls, java.util.* replacements).
2026-03-26 17:06:40 +01:00
TDSTOS
2d720d962c Add persistent player stats and DB support
Introduce MySQL persistence and an in-memory stats system with async saving.

- Add HikariCP & MySQL connector dependencies and relocate libs in build.gradle.kts.
- Add DatabaseManager (HikariCP) to manage connection pool and lifecycle.
- Add PlayerStats data model and PlayerStatsRepository for table creation, reads, upserts and batch upserts (with prepared statements).
- Add StatsManager: coroutine-based cache, dirty-flags, async batch saves, auto-save (every 5 minutes), load/save APIs and shutdown save.
- Add StatsListener: load on AsyncPlayerPreLoginEvent and save on PlayerQuitEvent.
- Wire DB and stats into main plugin: connect on enable (disable plugin on fail), initialize StatsManager, save/disconnect on disable, register leaderboard command and stats listener.
- Update GameManager to record kills/wins/deaths and adjust scrimScore on events.
- Add LeaderboardCommand and language entries for leaderboard output; expose command in plugin.yml.
- Add database configuration section to config.yml.
- Minor refactor: KitCommand plugin accessor changed to a getter.

These changes provide a robust, pooled DB connection and efficient stats persistence (batched/upserted) to reduce DB load and ensure data safety during shutdown.
2026-03-26 00:10:26 +01:00
TDSTOS
ea86272c01 Add IceMage kit and playstyle support
Introduce a new IceMage kit and wire playstyle support across the plugin. Changes include:

- Add IceMageKit with aggressive/defensive active & passive abilities, item distribution, and lifecycle hooks; caches ability instances and given items to reduce allocations.
- Register IceMageKit in SpeedHG on plugin startup.
- Update KitCommand to require a playstyle argument, validate it, select the kit's playstyle, and provide tab-completion for playstyles.
- Extend KitEventDispatcher with IceMage-specific handlers: spawn a circular volley of snowballs on ability use (cancelling the original projectile), mark spawned snowballs with persistent data, and apply freeze/slow effects on hit.
- Adjust GoblinKit to use a plugin getter and make inner ability classes static to avoid capturing the outer instance.
- Update language lines and plugin.yml usage to reflect the new /kit <kitName> <playstyle> usage.

These changes implement the IceMage feature and ensure proper playstyle selection and event handling while keeping allocations low and behavior consistent.
2026-03-25 05:02:59 +01:00
TDSTOS
72c461ab28 Add KitCommand 2026-03-25 02:37:16 +01:00
TDSTOS
e411879b20 Remove legacy modules, add language & scoreboard
Large refactor removing many legacy subsystems (abilities, kit system, database repos, recraft, world manager, extensive config classes, lunar/luckperms integrations and various listeners/commands). Introduces a lightweight LanguageManager, AntiRunningManager, ScoreboardManager, ConnectListener and a SoupListener; simplifies the main SpeedHG plugin to initialize these components and register the connection listener. Build changes: update Gradle wrapper to 8.10, remove paperweight and several external dependencies, add fr.mrmicky:fastboard and simplify shadowJar/build task configuration. Adds default language resource (languages/en_US.yml) and updates plugin/config resources. Purpose: simplify and decouple the plugin, reduce dependency surface and prepare for a leaner, modular rewrite.
2026-03-25 00:55:20 +01:00
TDSTOS
bb47145a73 Fix start errors 2025-12-12 05:12:09 +01:00
Laurin
3092a19086 Updated plugin.yml 2025-12-11 18:15:39 +01:00
Laurin
0daabe3de2 First commit 2025-12-01 03:45:44 +01:00