Links
Tags
Creators
Details
4.1
Compatibility
Changes
[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.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:VxdGAFxk:lracXC6t"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:VxdGAFxk:lracXC6t"
}

