Commit Graph

112 Commits

Author SHA1 Message Date
TDSTOS
f3f025a51e Update GameStateListener.kt
Fix block breaking
2026-04-13 04:36:16 +02:00
TDSTOS
b526b85262 Optimize code; memory-leaks, race-condition
Fix bugs like StackOverflow, Thread-Leak, or Race-Condition. Optimize code generally
2026-04-13 02:42:24 +02:00
TDSTOS
f9dba5b10d Add HungerListener to slow player hunger
Introduce HungerListener to reduce player exhaustion during active game states, slowing vanilla hunger loss. The listener multiplies EntityExhaustionEvent.exhaustion for Player entities by EXHAUSTION_MULTIPLIER (default 0.5) and does nothing in the LOBBY state. Also register the new listener in SpeedHG so it's active at runtime. The multiplier is configurable in the listener's companion object.
2026-04-13 02:32:48 +02:00
TDSTOS
8cea132c6a Update GameManager.kt
Add GameRule to deactivate advancements announcement
2026-04-13 01:57:32 +02:00
TDSTOS
098b481360 Update en_US.yml 2026-04-13 01:38:06 +02:00
TDSTOS
cb038f48c4 Auto-assign teamless players; remove tablist reset
Call assignTeamlessPlayers() at game start and add helper to auto-assign online players without a team into preset teams. The helper computes the minimal number of active teams based on maxTeamSize, fills non-full teams (choosing the smallest), logs assignments, and is a no-op if preset teams are disabled. Also remove the automatic tab-prefix refresh when a player leaves a team in PresetTeamManager (prefix handling moved/changed elsewhere).
2026-04-13 01:34:59 +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
77560a7486 Update ConnectListener.kt 2026-04-13 00:43:44 +02:00
TDSTOS
bcfe42b1a3 Add 1.8 knockback + various gameplay fixes
Introduce a Paper EntityKnockback-based KnockbackListener implementing classic 1.8-style horizontal knockback (configurable via kits.knockback.extras) and register it in the main plugin.

Other changes:
- Reduce default freeze duration from 200 to 60 ticks in CustomGameSettings and TheWorldKit (3s). Remove the per-freeze hit cap and related logic from TheWorldKit; freezes are now purely timer-based and the FrozenData no longer tracks hitsRemaining. Refactor freeze task/timer logic and cleanup unused imports.
- Fix FeastManager chest creation race by reading chest BlockState on the next tick (schedule runTaskLater) before filling/updating the chest.
- Refactor GameStateListener block handling: always-block diamond ore, block iron before feast, restrict allowed blocks during INVINCIBILITY to a whitelist, and unify INGAME pickup behavior to directly add drops to player inventory. Use block.getDrops(tool, player) to preserve correct vanilla drop context (fortune/silk/age). Rework pickupBlock to use those drops and ensure sound selection logic remains correct.
- Add mushroom harvesting handling: track active mushroom breaker players and handle mushroom chain physics in BlockPhysicsEvent to attribute drops to the correct player (activeMushroomBreaker map + monitor handler). Remove item-despawn cancellation logic.

These changes address physics/race bugs, improve combat feel (1.8 KB), simplify freeze behavior for The World kit, and ensure drop attribution and vanilla drop mechanics are preserved.
2026-04-13 00:38:32 +02:00
TDSTOS
753aeb6dc1 Display variant and style in UI and Discord
Include the configured lunarclient.variantName in the game start Discord embed and expose both the lunar variant and the player's selected playstyle on the lobby/ingame scoreboards. Added placeholders to language file for variant and style. Files changed: GameManager.kt, ScoreboardManager.kt, and en_US.yml.
2026-04-12 20:38:23 +02:00
TDSTOS
ed9b95ae7a Update ConnectListener.kt 2026-04-12 19:47:36 +02:00
TDSTOS
4b379b9121 Add new perks and register them
Introduce five new perks (Berserker, Evasion, Gourmet, Last Stand, Momentum) with implementations and translations. SpeedHG.kt was updated to import and register these perks. en_US.yml was extended with display names, lore and messages for each perk. Brief mechanics:
- Berserker: increased melee damage below a health threshold.
- Evasion: chance to dodge projectiles (arrow/snowball/egg) with visual/sound feedback.
- Gourmet: grants short Regeneration I + Speed I when consuming mushroom stew.
- Last Stand: grants Resistance II + Absorption I when damage drops health below threshold (with cooldown).
- Momentum: awards Speed I after sprinting continuously for a configured duration; removed on combat or stopping sprint.
2026-04-12 19:32:32 +02:00
TDSTOS
72cc136658 Update TablistManager.kt 2026-04-12 19:25:08 +02:00
TDSTOS
adb458213a Update WorldManager.kt 2026-04-12 12:56:42 +02:00
TDSTOS
b95e05da24 Initialize world border on startup
Add a delayed task (runTaskLater 10L) that retrieves the "world" and configures its WorldBorder: center at (0,0,0), size set to startBorder, damageBuffer set to 0.0 and damageAmount set to 1.0. Ensures the world border is initialized shortly after plugin startup/world load.
2026-04-12 12:56:14 +02:00
TDSTOS
c261a3a07c Improve world archive extraction and safety
Refactor WorldManager to reliably extract map archives and harden extraction.

- Add documentation and ARCHIVE_ROOT constant for expected archive layout (must contain a leading "world/" folder).
- Fix archive type detection (use file.name) and ensure target world folder exists before extraction.
- Implement unzip and untar that strip the leading "world/" prefix, skip the bare root entry, and log unexpected entries.
- Add Zip Slip guards for both ZIP and TAR extraction to prevent path traversal.
- Use buffered input for tar.gz performance and correct tar entry iteration.
- Add extractAsync helper to run I/O off the main thread and invoke a completion callback on the main thread (for potential onEnable migration).
- Improve logging and error messages.
2026-04-12 12:39:19 +02:00
TDSTOS
26a29e8ba9 Support .tar.gz maps and map-system toggle
Add Apache Commons Compress dependency and relocate its packages for shading. Introduce a config guard (map-system.enabled) in SpeedHG.onWorldInit and DataPackManager.install to skip internal map handling when an external map system is enabled. Add untar() to WorldManager using TarArchiveInputStream + GzipCompressorInputStream and update extraction logic to handle .zip and .gz (.tar.gz) archives, extracting to the world parent folder as needed.
2026-04-12 12:26:53 +02:00
TDSTOS
7005546e21 Update LobbyAnnouncer.kt 2026-04-12 11:44:19 +02:00
TDSTOS
aad1f0c9f9 Update en_US.yml 2026-04-12 11:42:53 +02:00
TDSTOS
159cf9155d Require fully-charged hits for kit abilities
Add a guard that returns early unless the attacker's cooled attack strength (getCooledAttackStrength(0f)) is at least 0.9 (≥90%). This prevents spam-clicks from accumulating kit hit-counters after the AttackSpeed attribute change, ensuring only fully charged swings trigger kit ability logic; the check is performed before resolving attacker kit/playstyle/charge data.
2026-04-12 10:14:28 +02:00
TDSTOS
7d7a57b99b Increase attack nerfs and base attack speed
Raise weapon nerf multipliers (swordNerf from 0.5 to 0.75, otherNerf from 0.2 to 0.4) and increase players' GENERIC_ATTACK_SPEED base value on join/quit from 2.0 to 8.0. These adjustments rebalance damage/nerf scaling with the higher default attack speed. Also contains minor whitespace cleanup in the listener file.
2026-04-12 10:10:59 +02:00
TDSTOS
a08908d66f Reset player attack speed on join/quit
Add handlers for PlayerJoinEvent and PlayerQuitEvent that reset a player's GENERIC_ATTACK_SPEED base value to 2.0. Introduces a private setAttackSpeed helper and imports Attribute; ensures players have consistent attack speed when they join or leave the server.
2026-04-12 10:08:09 +02:00
TDSTOS
fd348a86e9 Consolidate ability particle utilities
Remove separate AbilityFeedback and AbilityParticles utilities and consolidate particle helpers into AbilityUtils. Add drawColoredParticleLine, drawGenericParticleLine and a spawnParticleLine helper to centralize line-particle logic (with Color/DustOptions support), and remove the old drawParticleLine and runForNearbyPlayers implementations. Update PuppetKit to use AbilityUtils.drawColoredParticleLine (and import Color) and remove the direct heart particle spawn. This refactors and centralizes particle/feedback behaviour for reuse and clearer APIs.
2026-04-12 07:39:57 +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
140ee8ef3e Exclude kit items from drops on death
Prevent players from dropping kit-owned items when they die by filtering out kit items before dropping inventory contents. Added KitManager.isKitItem(player, item) which checks the player's selected kit and compares against the kit's cached items (using isSimilar). Also added the ItemStack import required for the new method.
2026-04-12 05:45:04 +02:00
Laurin
a60241358b Update status of abilities to 'Fertig'
Signed-off-by: Laurin <100531026+TDSTOS@users.noreply.github.com>
2026-04-12 05:39:26 +02:00
TDSTOS
18ee9937f8 Add ability feedback/particles; refactor kits
Introduce centralized AbilityFeedback and AbilityParticles utilities and update language strings. Refactor IceMage: replace old snowball mechanics with an aggressive Ice Spike Burst (cone projectiles, cooldown tracking, config keys) and a defensive snowball barrage with metadata; reorganize config accessors and passive behaviors. Refactor Ninja: add layered sounds/particles for teleport, rewrite smoke aura as an animated BukkitRunnable with visual rotation and enemy effects, and improve lifecycle/scheduling handling. Update en_US.yml with new kit item names, passive labels, and messages.
2026-04-12 05:38:22 +02:00
TDSTOS
8ff4dee6bf Update SpeedHG.kt 2026-04-12 05:14:13 +02:00
TDSTOS
c986c4b593 Add LobbyAnnouncer with beta broadcasts
Introduce a LobbyAnnouncer module that periodically broadcasts a MiniMessage announcement during the LOBBY state. The new class (game/modules/LobbyAnnouncer.kt) schedules broadcasts every 30 seconds when the new config flag game.beta is true and provides start/stop lifecycle methods. Integrate the announcer into the main plugin (SpeedHG.kt) by adding a lobbyAnnouncer field and starting it during initialization. Also update config.yml to add game.beta: true and change teams.enabled from true to false.
2026-04-12 05:13:50 +02:00
TDSTOS
5a828a3993 Add live config overrides and refactor kits
Introduce runtime-configurable settings and defaults across multiple kits and clean up implementations. Kits (Armorer, Backup, Gladiator, Goblin, IceMage, Puppet, and others) now expose companion-object default constants and read values via override() (SPEEDHG_CUSTOM_SETTINGS) with typed accessors. Activation and tick-time behaviour snapshot these values so mid-round config changes don't produce inconsistent effects. Also includes general refactors: clearer getters, small API/formatting cleanup, improved no-op ability placeholders, and minor behavior protections (e.g. disallow stealing Backup kit).
2026-04-12 05:06:43 +02:00
TDSTOS
411b77cc8d Make kit parameters configurable and refactor
Introduce live-configurable parameters and refactor three kits (Anchor, BlackPanther, Blitzcrank).

- AnchorKit: replace hardcoded constants with default values + live config accessors (partial_resistance, golem_hp, radii, bonus dmg, monitor interval). Snapshot config on activation, update doc comments to JSON keys, minor API/formatting cleanup, and make passive/active logic use dynamic radii and damages.
- BlackPantherKit: add defaults and live getters for fist mode, push, pounce and extras (push_knockback_speed/y, fist_mode_damage, projectile_delay_ticks). Snapshot values on activate, update docs to expose JSON keys, and small behavioral formatting fixes.
- BlitzcrankKit: add defaults and live getters for hook, stun and ult settings (range, pull_strength, radii, durations, cooldown, raycast params), update docs and remove unused imports; snapshot config where needed.

Also: several minor code cleanups (whitespace/formatting, removal of unused imports, fully qualified event references) and improved in-code documentation for custom settings. These changes enable per-kit overrides via SPEEDHG_CUSTOM_SETTINGS and make runtime behavior consistent by snapshotting values at ability execution.
2026-04-12 04:08:08 +02:00
TDSTOS
c1be2ddabd Add extensible kit config and use in kits
Introduce a generic `extras` map and typed accessors to CustomGameSettings.KitOverride (getLong/getInt/getDouble/getFloat/getBoolean) and add documentation/examples for runtime JSON overrides. Expose Kit.override() to return the live KitOverride from SpeedHG and document how kits should read config values. Refactor NinjaKit to read all runtime parameters from overrides (teleport cooldown, hit window, smoke radius/duration/refresh/effect), snapshot config at activation, simplify smoke rendering/logic, and clean up cooldown/teleport code. Refactor TheWorldKit to use typed override fields and extras (shockwave, blink and freeze settings), snapshot values for abilities, tidy particle/physics code and improve lifecycle handling. Miscellaneous formatting, comments and small API cleanups across files.
2026-04-12 03:13:06 +02:00
TDSTOS
55a00ee15c Add chat listener and fix ability height/fall logic
Add a ChatListener and register it to render chat with rank prefixes/colors. Enforce a maximum knockback altitude (MAX_KNOCKBACK_HEIGHT_Y) and block height-restricted ability use in Blitzcrank and BlackPanther; surface a localized height_restriction message. Add per-kit noFallDamage tracking for BlackPanther and Trident and cancel fall damage for flagged players in the KitEventDispatcher. Improve hitsRequired resolution: CustomGameSettings will treat a hardcoded 0 as an explicit cooldown-only value (never overridden) and the ActiveAbility getter now only accepts positive override values. Misc fixes: allow throwable items (potions/pearls) to bypass active-item handling, tighten ninja last-hit tracking, fix kit item drop detection in GameStateListener, tweak tablist prefix/suffix handling, and bump TheWorld ability cooldown from 20000ms to 25000ms. Also update language entries and minor formatting/cleanup.
2026-04-12 02:08:09 +02:00
TDSTOS
92260d90cb Add bullet icons to leaderboard lore entries
Replace the previous plain gray label lines in the leaderboard item lore with a dark_gray '▪' bullet followed by a gray label and the value (applies to Rank, Score, Kills, K/D, Wins, and Win Rate). Also tidy minor spacing around the meta.lore call. Purely cosmetic formatting changes to improve readability of the leaderboard tooltips.
2026-04-11 23:47:29 +02:00
TDSTOS
4dd53b4c9b Update ItemBuilder.kt 2026-04-11 23:43:33 +02:00
TDSTOS
8e960e4e62 Update ItemBuilder.kt 2026-04-11 23:41:18 +02:00
TDSTOS
0cbed26ad0 Update ServerRankProvider.kt 2026-04-11 23:30:43 +02:00
TDSTOS
f00bd1d8f4 Add stats & leaderboard menus and lobby items
Add StatsMenu and LeaderboardMenu GUI implementations and wire them into the lobby hotbar. LobbyItemManager now builds a tutorial written-book, a player-head Profile & Stats item, and a leaderboard gold-ingot item, tags them with PDC keys, and opens the appropriate menu or book on interact. Leaderboard loads top-10 asynchronously from the stats manager. Also add corresponding language keys for item names/lores and menu titles.
2026-04-11 23:29:58 +02:00
TDSTOS
cdef2315d0 Sort kits and perks by ID
Ensure kits and perks are displayed in alphabetical order by their ID. KitSelectorMenu.getFilteredKits now returns a sorted list (preserving search filtering) and PerkSelectorMenu uses a new getFilteredPerks() helper that returns perks sorted by id, improving menu ordering and consistency.
2026-04-11 23:09:55 +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
198275973e Translate Spielo kit UI/messages to English
Replace German UI strings in SpieloKit with English equivalents (inventory title, button labels, and click lore) and add full English localization for the Spielo kit in en_US.yml. Adds spielo kit entries including name, lore, item names/descriptions, and gamble result messages (instant_death, gamble_event, gamble_bad, gamble_neutral, gamble_good).
2026-04-11 22:57:19 +02:00
Laurin
8ea957129e Remove 'Kits' item from the README checklist
Signed-off-by: Laurin <100531026+TDSTOS@users.noreply.github.com>
2026-04-11 22:49:06 +02:00
TDSTOS
59cdc4d202 Add SpieloKit gambling kit and UI hooks
Introduce a new kit SpieloKit with aggressive (instant gamble) and defensive (slot-machine GUI) playstyles. Implements outcome resolution (instant death, disaster events, negative/neutral/positive loot), animations, cooldowns, safe-radius checks, and a 3×9 SlotMachineGui with spinning reel animation and spin button. Adds registration of SpieloKit in SpeedHG and integrates SlotMachineGui dispatch into MenuListener (inventory click + close handlers). Includes utility methods for effects, sounds, particles and loot pools.
2026-04-11 22:48:51 +02:00
TDSTOS
f6eb654d47 Add Blitzcrank, Ninja and Trident kits
Add three new kits (Blitzcrank, Ninja, Trident) and register them in SpeedHG. Each kit includes full ability implementations (hook/stun/ult for Blitzcrank, teleport/smoke for Ninja, dive/parry for Trident) with their internal cooldowns, tasks and item handling. Update AbilityUtils.createBeam signature/logic (now accepts Player and improved beam stepping/hit detection) and adjust VenomKit to pass the player to createBeam. Extend en_US.yml with translations for the new kits and fix a few markup strings.
2026-04-11 05:36:31 +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
da7e495374 Add ranking, feast guards and i18n updates
Use Rank info in leaderboard display (adds playerrank, passes numeric score) and adjust message placeholders. Add prefix placeholder injection in LanguageManager. Introduce max-radius-teleport config and use it for player teleport on join. Restore broadcasting of player quit messages on disconnect. Enforce no-iron crafting before feast (deny craft, notify player & play sound) and cancel entity spawns until feast starts. Update config.yml with max-radius-teleport and refresh en_US language strings (add no_iron_before_feast and translate/update several GUI/perk entries).
2026-04-11 01:41:50 +02:00
TDSTOS
0896bc85a5 Add LobbyItemManager; PDC support; misc fixes
Introduce LobbyItemManager to provide interactive lobby hotbar items (kits & perks) tagged via PersistentDataContainer and open the appropriate GUIs. Wire the manager into SpeedHG (field, init, event registration) and clear lobby items at game start in GameManager. Add ItemBuilder.pdc helper and necessary imports for setting PDC. Fix potion duration calculation to use invincibilityTime*20. Change AnchorKit icon/trigger material to ANVIL. Update config (border start/end/shrink and disable anti-runner) and update en_US language entries (lobby item names, leaderboard format, kit lore/formatting and small text fixes).
2026-04-11 01:18:38 +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
9ad3a8f342 Update README.md 2026-04-09 02:33:52 +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