StrikePractice 4.0.0 - a big update!
For years we maintained a separate "devbuild" alongside the public release. This update merges all of that development work into one full release, so there is a huge amount of new content here. Below are the highlights and longer list of smaller things.
PLEASE TAKE A BACKUP OF YOUR SETUP BEFORE UPGRADING!
There's always a chance updates of this size (or any size) may cause problems for some users.
==================================================
Major new features:
==================================================
- Modern bot combat system: enable use-modern-bots: true in config.yml for a brand new bot AI (developed by iiAhmedYT). Supports 1.8.8 (legacy) and 1.21.4+ (modern), uses (enchanted) golden apples and potions, and has proper hit/miss behaviour. A bots.yml file is created in the plugin folder to tune it, and the per-version settings live under version-specific/bots/.
- Customizable menus + Menu API: set modern-kit-guis: true in config.yml to use the new fully configurable GUIs. Every menu lives as its own file in the menus/ folder and can be edited freely — unranked/ranked/premium/2v2 queue menus, duel kit selector, duel arena selector, arena selector, bot difficulty selector and a kit preview menu. Includes a custom kit button in the duel menu (when enabled and the player has permission) and a random arena button.
- MiniMessage support in messages.yml: messages.yml now uses the MiniMessage format, so you can use hex colors, gradients and proper clickable/hover components. Messages can also be written as lists for easy multi-line messages, and missing keys are added to your file automatically. Reload it in-game with /sprac reloadmessages (also refreshes scoreboards).
- Titles & subtitles everywhere: countdowns, round results, full match win/loss and bed destruction now show configurable titles and subtitles. Timings (fade-in/stay/fade-out) are configured per-title in the new misc.yml.
- Configurable sounds (misc.yml): the new misc.yml lets you customize sound, volume and pitch for bed break, countdown ticks/go, respawn countdown, and round/fight win & loss independently.
- Revamped arena management with FAWE: completely reworked arena system (ArenasManager) with a FastAsyncWorldEdit reset queue that caches and clones arena copies for fast, memory-friendly resets. Adds stacked/copied arenas (not modifiable by command), an arena enable/disable toggle command, forced corner setting when creating arenas, "keep arenas loaded" while a fight + reset is running, and startup warnings for arenas missing corners or sharing chunks.
- Best-of fights expanded: best-of now works for Party vs Bots and Party Split fights, with round-end titles and a customizable delay between rounds (next-round-delay: 60 in config.yml, in ticks).
- ELO ranks moved to ranks.yml: elo ranks are now configured in a dedicated ranks.yml (with non-overlapping elo-range entries) instead of config.yml. Existing ranks are migrated automatically.
- Smooth death animation: deaths now play a smooth transition instead of an instant teleport, with stats and statistics tracked correctly for it.
==================================================
Other new features, commands & options:
==================================================
- Added /battlekit crafting <kit> to enable/disable crafting per kit
- Added /battlekit displayname <kit> to set a kit's display name
- Added /battlekit saturation <kit> to set the default saturation given with a kit
- Added /battlekit removematerial <kit> to remove an allowed (extra) material
- Added /battlekit edit as an alias of /battlekit give (with instructions)
- Added /party fight <leader> <kit> to directly start a party fight
- Added /party split <kit> and /party ffa <kit>
- Added /duel deny <player>
- Added /sprac reloadmessages to reload messages.yml and scoreboards
- Added /sprac getconfig <path> to read a configuration value
- Added an arena toggle command to enable/disable an arena and its copies
- Added insta-void-y-level: 0 to set the Y level that counts as "void" inside fights (e.g. sumo)
- Added teleport-void-spawn: true / void-spawn-teleport-y-level: -5 to automatically teleport players back to the lobby if they fall into the void at spawn
- Added fix-bot-damage: true as a compatibility option for bot damage on some forks
- Added bedwars-bed-break-commands: [] to run commands when a bed is broken
- Added a storm-wall: section (base-damage / time-multiplier / distance-multiplier) to tune storm wall damage
- Added kit-editor-allowed-commands to whitelist commands usable inside the kit editor, and kit-editor.allow-editing-armor to let players take off armor
- Added an ender pearl teleport restriction that prevents pearling outside of the arena
- Added copper armor/weapons and the netherite axe to the custom kit editor
- Added block-limit-reached message (messages.yml) shown when an arena's build limit is hit
- Added a respawn countdown message and respawn-countdown titles
- Added bed status placeholders for bedwars/bridges
- Added <team1_alive> / <team2_alive> and <team1_wins> / <team2_wins> placeholders
- Extended the <alive> placeholder to work in all fight modes
- Added Party vs Party support for the <opponent> placeholder
- Added Hex color support for clickable messages
- Added auto-give-first-edited-kit option to automatically give the first edited kit
- Registers a harmless fallback /spawn command so it doesn't show red "invalid command" text when no /spawn exists
==================================================
Fixes:
==================================================
- Fixed kill regen applying to unrelated players, to self-damage/kills and with edited kits
- Fixed FAWE best-of reset resetting to a broken state
- Fixed several FAWE reset issues: rare reset failures, x2 extra memory usage, and explosive beds on FAWE arenas
- Fixed double respawn calls / double void deaths in bedwars and bridges
- Fixed spectators triggering void/water death, taking potion splashes, dropping items or picking up exp during fights
- Fixed spectators being removed while still in a fight and removing them before rounds/duels start
- Fixed party split, party vs bots and party-vs-bots best-of logic, plus the last player correctly going into spectate
- Fixed self-party duels and bracket/tournament duel handling
- Fixed bot issues: false hit-delay flagging of other entities, wrong bot names, bots dying in sumo, hit/miss intensity for healing potions, party-vs-bots bot deaths
- Fixed projectile/fireball tracking so non-fighter and spectator projectiles are handled and cleaned up correctly
- Fixed signs being editable during active fights
- Fixed copper oxidation, waxing/unwaxing, and shovel flattening / copper scraping on maps
- Fixed colored bedwars items on 1.21+
- Fixed scoreboard issues: legacy duplication, admin scoreboard errors, leftover sidebar title when toggled off, and red scores on Paper 1.20.3+
- Fixed Vault hooking stability and party-creation economy checks
- Fixed FFA arena validation, kit types and special-arena kits counting FFA/Event arenas
- Fixed duplicate kit names in arenas and kit renaming updating associated arenas
- Fixed memory leak when tags are enabled but scoreboard is disabled
- Fixed disconnecting players not being noticed during fights
- Fixed double start messages for ELO fights and party request comparison bugs
- Fixed ELO rewards logic and /sprac reviveelo doing the opposite
- Fixed rank overlap detection and the ranks migrator
- Fixed lag meter performance calculation and MapUtil bounds validation
- Fixed broken replay inventories and replay crashes from a missing Potion class
- Fixed bot duel and various null pointer exceptions, plus crash protection for menu config typos
- Fixed many placeholder issues (own_wins, opponent_wins, wlr while loading, per-kit queue placeholders, CPS accuracy)
- Fixed bridge gamemode getting stuck if you fell in your own pit, and double scoring in bridge modes
- Fixed thread-safety issues in the packet listener manager
- Many more smaller fixes across fights, parties, menus and messages
==================================================
Performance & internals:
==================================================
- Reworked scoreboards & healthbars for much better performance, and made the healthbar independent from the scoreboard
- Refactored ender pearl cooldowns to no longer use the metadata API (better stability on some Spigot forks)
- Cached players-in-fight lookups and switched several structures to ConcurrentHashMap for thread safety
- No longer force-loads chunks on fight start; keeps relevant arenas loaded only while needed
- Migrated configuration handling to BoostedYAML (cleaner config loading and automatic missing-key insertion)
- Removed StrikePractice's own deprecated API usage internally
==================================================
Developer API:
==================================================
- Added FightDeathEvent
- Added Fight#skipRoundCountdown
==================================================
Removed:
==================================================
- Removed the unused keep-chunks-loaded option (no longer worked on modern versions, was error-prone — use keep-arenas-loaded instead)
- Removed the ToppeStaffMode plugin integration and the LeaderHeadsAPI dependency (use placeholders!)
New stuff:
- Added Hex color support for clickable messages
- Added auto-give-first-edited-kit option (automatically gives the first edited kit, see new config.yml)
- Added more translatable messages for /events commands
Fixes:
- Fixed memory leak when tags are enabled but scoreboard is disabled
- Fixed FAWE BestOf reset resetting to broken state (i.e., not working)
- Fixed killregen applying when damaging/killing yourself
- Fixed killregen issues with edited kits
- Fixed custom kit default items (potions) not appearing
- Fixed fireball not working properly when spectators are nearby
- Fixed ranked ELO range times not being calculated as seconds
- Fixed own_wins and other placeholder issues
- Fixed admin scoreboard errors
- Fixed various issues with clickable messages and commands
- Fixed Vault hooking stability
- Fixed party creation economy check
- Fixed FFA arena validation and kit types
- Improved CPS placeholder accuracy
- Implemented better arena entity tracking and cleanup
- Refactored health bar logic for better stability
Performance improvements:
- Minor optimization to some permission checks
- Refactor enderpearl cooldowns to improve performance and stability on some spigot forks (no longer uses metadata API)
Other:
- Removed unused keep-chunks-loaded option. No longer worked in modern version, was always misunderstood and error-prone. Use keep-arenas-loaded instead.
- Refactored code to remove SP own deprecated API usage
