StrikePractice – 1v1, 2v2, Bots Fights, PvP Events, Parties, Build fights and more

Plugins StrikePractice – 1v1, 2v2, Bots Fights, PvP Events, Parties, Build fights and more

Version: 4.0.0
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 to enable/disable crafting per kit - Added /battlekit displayname to set a kit's display name - Added /battlekit saturation to set the default saturation given with a kit - Added /battlekit removematerial to remove an allowed (extra) material - Added /battlekit edit as an alias of /battlekit give (with instructions) - Added /party fight to directly start a party fight - Added /party split and /party ffa - Added /duel deny - Added /sprac reloadmessages to reload messages.yml and scoreboards - Added /sprac getconfig 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 / and / placeholders - Extended the placeholder to work in all fight modes - Added Party vs Party support for the 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
New stuff:
- Added kill regen option to restore inventory and health on kill (/battlekit killregen)
- Added random kit support - kits with "randomkit" in their name will select random allowed kit
- Added "plain_" prefix support for PlaceholderAPI placeholders (plain-placeholderapi-placeholders: true to enable)
- Added prevention of /arena ffa for invalid arenas
- Added FAWE (FastAsyncWorldEdit) arena reset and fixes to this (use-fawe-reset: true to enable)

Fixes:
- Fixed enderpearl cooldown not properly handling exp bar when change-item-name is false
- Fixed replay system crashes on newer versions due to missing Potion class
- Fixed kill regen not checking for totems
- Fixed null checks for kit icons and simplified API
- Fixed bot difficulty icon metadata flag visibility
- Fixed unnecessary errors/debug messages in debug mode
- Fixed block disappear command functionality

Performance improvements:
- Just minor improvement to old arena reset
- Enhanced arena reset system performance with better memory management
- Reduced unnecessary logging in SoundManager
- FAWE integration for improved reset performance

Other:
- Refactored arena reset system for better extensibility
- Improved build system and development workflow
- Better error handling and debug logging
- Some other minor improvements and refactors
New stuff:
- Added kit selector for FFA arenas with multiple kits. Add with /arena kits
- Added support for specifying kit name in FFA join command as /<ffa arena> [kit] or /ffaarena <arena> [kit]
- (BETA) Added FastAsyncWorldEdit (FAWE) support for arena resets, significantly improving performance
- Added placeholder <ffa_players_arenaname> to display player count in specific FFA arenas
- Added support for HikariCP for database connections, improving performance
- Added top wins statistics and placeholders, see /sprac placeholders
- Added enderpearl-cooldown.change-item-name configuration option to not change the item name during cooldown
- Added tnt.source-damage-multiplier option for /battlekit fireball gamemode, (0 by default)
- Improved Discord webhooks to include /duel too in "duel" webhook (copy "unranked" as "duel" in its config)
- Improved spectator features to not show non-StrikePractice NPCs in spectator menu

Fixes:
- Fixed FFA arena placeholders and player count when using copied arenas
- Fixed players getting stuck in blocks during FFA arena resets (at least attempted this fix)
- Fixed insta void to only apply to started fights, not during countdown
- Fixed spawnitems not supporting hex colors
- Fixed waiting-for-duel and start messages being sent in wrong order
- Fixed an issue with top stats cache not loading properly
- Fixed sound issues with Minecraft 1.20.3+ by implementing XSound
- Fixed some arena rollback issues (also see FAWE support, beta)
- Fixed surrender command
- Fixed issues with bedwars rounds
- Fixed projectile explosion errors

Performance improvements:
- Fixed spectator issues and optimized inside arena checks
- Significantly optimized can-build checks (much faster than before)
- Improved item/entity clearing
- Added automatic removal of projectiles and falling blocks when resetting arenas
- Optimized performance by avoiding unnecessary ItemMeta checks
- Simplified some placeholders for better performance
- Improved arena reset system

Other:
- Removed 1.7.10 support
- Improved build system and CI workflow
- Upgraded our development related systems to Java 21 (the plugin still works even with Java 8!)
- Better error logging and clarifications
- Refactored arena reset system for better extensibility
  • Like
Reactions: spacy and voiqx
This update may contain some breaking changes to some gamemodes:
- Explosions now follow /battlekit extramaterials. Meaning that arena won't explode unless players could also break them by hand (which requires the blocks to be added in /battlekit extramaterials)
- "/battlekit bedwars" now works differently than "/battlekit bridge|mlgrush". Make sure these gamemodes still work (see /battlekit info and make sure "deathcooldown" is enabled for gamemodes where there should be a cooldown and "bestofreset" is enabled if the arena should reset between rounds)

You can wait a while before updating if you want to make sure it does not break anything.

New stuff:
- Make block explosions follow extramaterials (POSSIBLY BREAKING CHANGE!! Add the blocks you want to be breakable by explosions)
- Added command /battlekit shootfireballs <kit> (allow shooting fireballs, see "fireball" in the config.yml)
- Added command /battlekit autotnt <kit> to automatically ignite TNT
- Added command /battlekit nofalldamage <kit> (to disable fall damage)
- Real bedwars, kill after breaking bed (/battlekit bedwars)
- Changed /battlekit mlrush|bridge (and help info) because they no longer work like /battlekit bedwars
- Added alias commands: /duel requests and /duel settings
- Added placeholders <win_streak>, <win_streak_kit> (only with SQL database) and <opponent_rank>
- Added botfight#getBots method in the developer API
- Added enderpearl-cooldown.modify-exp-level configuration
- Added RoundEndEvent for winners/losers in the developer API
- Added PartyJoinEvent, PartyLeaveEvent, and PartyInviteEvent in the developer API
- Added respawn-countdown-time for separate death countdown duration
- Added support for async-teleport (this was in some very old versions but was removed)
- Added /surrender command (pretty much same as StrikeSurrender addon)
- Added snowball on snow block break in spleef (snowball-on-snow-break in the config)
- Added copied arenas for FFA (use-copied-arena-for-ffa in the config)
- Allow windcharge explosion in non-build kits
- Improved TNT experience and Fireball functionality
- Make /battlekit extramaterial support newer items
- Make messages work as a list too (easier to add multiline messages)
- Better support for newer Minecraft versions (1.21.1)

Fixes:
- Fixed command "/battlekit extramaterials <kit> all"
- Fix: make block below water unbreakable if part of the map
- Fixed issue with resetting beds placed by players
- Fixed error with <wlr> placeholder while loading
- Fixed renaming newer items in hand
- Fixed kit editor not using correct location for countdown.
- Fixed bridge and insta void not respawning in the bridge gamemode
- Fixed extra bedwars check for player online and fight status
- Fixed error with bedwars colored items
- Fixed double scoring in bridge gamemodes
- Fixed improper handling of block breaking
- Fixed projectile explosion issues and windcharge explosion

Other:
- Removed unused code etc.
- Small overall optimizations and refactoring
- Minor corrections (e.g., typos) and cleanup
- Fixing paper 1.20.6 remapping
- Improve paper 1.20.5+ compability
- Initial support for 1.20.5 & 1.20.6 (1_20_R4)
- Fix color support for placeholders
- Fail siltently when setting 1.8 inventories
- Clearing crafting/cursor item when clearing inventory
- Improved how NPC (bot) data is saved
- Other minor improvements to bots/NPCs
- Improved performance by refactoring how healthbars are removed
- Fixed brackets arena sometimes not being available when a round starts
- Added separate option "disable-lobby-teleport" to completely disable SP from teleporting to spawn
- Fixed a bug caused by update checks not having a timeout
- Fixed plugin not enabling if citizens doesn't work
- Fixed blocks below water being breakable even if the bloc kwas part of the map
- Fixed SP API#forcewin with party vs party
- Fixed errors related to scoreboard scores and some spigot versions
- Fixed party friendly fire when player damages themselves
- Improved how /battlekit stickspawn checks for y coordinate changes
- Bunch of internal refactoring and other work was done
:)
  • Like
Reactions: spacy and voiqx
- Improved compatibility with newer materials, especially with /battlekit extramaterials command and related functionality
- Made brackets/sumo work even if in main arenas world
- Fixed issues related to damage events in the bridge/bedwars mode
- Refactored allowed blocks checking and fixed extramaterials issues
- Added debugging for block breaking
- Fix issue when error during fight would keep arena marked as in use
- Fixed some typos (Invanlid -> Invalid etc.)
- Made keep-arenas-loaded not crash if it fails for specific arena
- Fixed /battlekit types <kit> none showing in preview menu
- Added debugging for SQL based fight stats
- Allowed bots to receive kits even if inventories were disabled (i.e., on survival servers)
- Added warning log messages in case of invalid spawnitem names
- Fixed koth team placeholder not working (unless arena "koth" was available)
- Fixed autoReconnect for MySQL
- Reduce best of X round reset delays
- Fixed arena copypaste not copying new materials
- Improved stats SQL queries performance
- Added custom cache configuration for stats and fixed koth team placeholder
- Arena reset functionality to include more entities
- Added API method #respawnInFight and added Fight#hasStarted
- Unobfuscated Difficulty and SimpleFight in the API
- Other internal changes and refactoring
- Other minor fixes and changes
This release has some nice new features, includes many fixes (and many related to the developer API) and some other minor changes.
The complete list of changes can be found below in a less readable format (sorry I was lazy)


Features:
- remove pearls immediately when one dies in a duel (or when the round ends)
- "duel-max-rounds for" /duel (20 default) to customize max rounds for duels
- 'spectator-keep-inside-arena' to force spectators to stay inside arenas
- possibility to decide gamemode for spectators (SURVIVAL by default)
- allow removing broadcast message
- trace debug logging (/sprac trace - not useful for most people unless you want to debug something more complex)
- added api#getLastSelectedEditedKit(Player) in the developer API
- debug log error when cooldown module failed to load
- add api#sendDuelRequest in the developer API
- made some command messages better
- added debug logging to "deleteeditedkits"
- update api (more in fixes section)
- added <is_in_queue> placeholders
- overall better debug logging

Fixes:
- ensure sync when giving spawn items (removed async item giving)
- Use autoReconnect=true by default for SQL databases
- added extra check to make sure the arena is available (for some reason the plugin would sometimes try to start a fight in an arena that was already in use when no other arenas were available - the "hacky" fix is for duels only though)
- fix: add Recordable in the API
- fix: bed break if newer material bed
- fixed blockdisappear in ffa arenas
- fixed lms event duration and arena displayname placeholders
- fix: ignore errors when setting biome
- fix: api#getQueuedKit not returning party queue kit
- fixed BotDuelEndEvent.WinnerType not being included in the API
- fixed RoundStartEvent#getPlayer2 although it was deprecated
- removed use of async inventory close
- fixed error on #forceEnd if reason is null
- check kit type in /queue <kit>
- made ffa fight players thread-safe
- fixed language items not being saved sometimes
- fix: send left-queue before actually left the queue for placeholders to work
- mark CitizensNPC as api class (even though it's kind of a bad decision but may help addon devs
- fixed bedwars materials not always changing
- unobfuscate DefaultCachedBlockChange
- mark multiple fight related things as @APIClass
- do not teleport to duplicate ffa arenas on /ffaarena
- /arena alerts not turning off debug logging
- keep DefaultPlayerStats unobfuscated for legacy reasons
- add short delay when forceEnding a fight due to error
- fixed prevent taking armor off in kit editor
- fixed deleting database keeping data.dat failing
- fixed some errors with kit editor
- error with koth capper 1.20
- made storm-wall-outside-arenas work with performance-mode
- fixed attempting to use long scoreboard lines on 1.13
- offline-player-stats was missing from config.yml, disabled by default
- API: do not obfuscate PlayerStats#CachedStatistic etc
- fix: error with CheckKitItemsHelper.java:54
- possibly fix some data migration, use "unknown" as fallback

Misc:
- refactor: minor refactor
- fix some dependencies and repositories (mainly for development)
- remove old references to /party open
- use HIGHEST priority in bedwars EntityDamageEvent, fixes compatibility with some other plugins
- Improved 1.20 (and other newer version) compatibility
  • Like
Reactions: spacy and voiqx
Fixes:
- Fixed /sprac placeholders
- Fixed top_elo_rank not displaying "(none)"
- Fixed placeholders in post match inventory message
- Fixed (hopefully) newer items (netherite etc.) support for kit editor abuse
- Fixed check for duplicate armor in inventory in kit editor
- Fixed automatically add fight_players#id and stats#id columns
- Fixed removing wrong item from bot's inventory (soup/gapple)
- Fixed difficulty selector item arrangement in multiple row inventories
-...