Список изменений
[4.1] — Bug-Fix Patch 1
Fixed
Critical
-
C-03 ·
arena.max-playersdefault value (config.yml) Changed the default from1000to24. The previous value caused spawn-circle radii of ~1500 blocks, placing cage pistons in unloaded chunks and silently failing block placement — players were teleported into the void at match start. -
C-02 ·
ArenaStartEventfired twice per match (MatchService.java) Removed the prematurecallEvent(new ArenaStartEvent(arena))call insidestartMatch(). The event is now fired exactly once, insidereleasePlayers()when the state transitions toPLAYINGand the game actually begins. Previously, any listener hooked toArenaStartEvent(scoreboards, rewards, third-party integrations) would execute twice. -
C-05 ·
DeathNote— non-thread-safeHashMapin passive task (DeathNote.java) ReplacedHashMapwithConcurrentHashMapfor bothprogressMapandtargetMap. These maps are written by the 1-tick passiveBukkitRunnableand concurrently removed byonQuit/onDeathevent callbacks. -
C-04 ·
Arena.spectators— non-thread-safeArrayList(Arena.java) Changed toCollections.synchronizedList(new ArrayList<>()). The spectator list is modified on the main thread (handleDeath) and iterated from async contexts (checkWin, scoreboard updates).
High
-
H-05 ·
DatabaseManager.loadArena()did not mark players as alive (DatabaseManager.java) After loading player UUIDs on server reload,GamePlayer.setAlive(true)is now called for each loaded player. Without this,checkWin()saw zero alive players immediately after reload and ended the match in the same tick. -
H-02 ·
ShadowBlade.revealPlayer()showed vanished player to entire server (ShadowBlade.java)revealPlayer()now iterates only the players in the same arena instead of callinggetOnlinePlayers()server-wide. In multi-arena setups, players in other arenas would receive a spuriousshowPlayer()call. BotharmorMapandvanishedPlayersupgraded fromHashMaptoConcurrentHashMapto eliminate race conditions between the timed-reveal BukkitRunnable, onDeath, and onQuit callbacks.
Medium
- M-07 · Wrong permission node in
BlockBreakListener(BlockBreakListener.java) Changedhg.admintohoplitebr.adminto match the permission declared inplugin.yml. Admins withhoplitebr.admincould not break blocks inside an arena during WAITING / STARTING / ENDING phases.

