Список изменений
[4.5.6] — Bug Sweep Pass 3 (2026-03-20)
Fixed — 5 issues across 5 files
High
-
BUG-PM-01 ·
PlayerManager/MatchService/WithdrawCommand— stolen heart item is unclickable after Component-API migration (PlayerManager.java,MatchService.java,WithdrawCommand.java)PlayerManager.onPlayerInteractidentified stolen hearts by comparingmeta.getDisplayName()to the language-file string. After the 4.5.4 fix migrated item names tometa.displayName(Component), the legacygetDisplayName()call returns""— the comparison always failed and hearts could never be consumed. Fix: aNamespacedKeyPDC tagstolen_heartis now written to every heart item on creation (MatchServiceandWithdrawCommand).PlayerManagerreads the PDC tag instead of the display name. -
BUG-EB-01 ·
EnderBow— position swap has no team check (EnderBow.java)performProjectileHitswapped the shooter and any hitLivingEntityunconditionally. Shooting a teammate teleported them to the shooter's position. Fix: addedisFriendlyFirecheck before performing the swap; returns early for friendly targets.
Medium
- BUG-CB-01 ·
CornucopiaBuilder/ArenaManager— build progress spams all online players (CornucopiaBuilder.java,ArenaManager.java)clearArea()usedBukkit.broadcastMessage()for three status messages ("Pre-loading chunks", "Clearing area", "Clearing N%"). These messages were delivered to every player on the server, not just players in the arena being built. Fix: replaced all fourbroadcastMessagecalls withplugin.getLogger().info().
Low
- DUPE-IMPORT · Duplicate
importstatements across 8 manager/model files (ScoreboardManager.java,ArenaManager.java,DungeonManager.java,Arena.java,LegendaryRecipe.java,HologramManager.java,LobbyManager.java,MessageManager.java) A previous tooling pass accidentally injected theColorUtilimport statement 9–27 times per file. While harmless at runtime, it produced compiler noise and inflated source size. Fix: de-duplicated all import blocks; one import per class per file.
Changed
pom.xml— version4.5.5→4.5.6.plugin.yml— version4.5.5→4.5.6.
[4.5.5] — Bug Sweep Pass 2 (2026-03-20)
Fixed — 7 issues across 6 files
High
-
BUG-GT-01 ·
GameTask— world border Phase 1 and Phase 2 execute simultaneously for 60 seconds (GameTask.java) Phase 1 ran whiletimer ∈ (grace, main]and Phase 2 whiletimer ∈ (main−60, main]. During the last 60 s of the main phase both conditions were true, so Phase 2 calledborder.setSize()immediately after Phase 1 — resetting the border back tomiddleSizeon every tick and then fast-shrinking todmSize. Players saw the border snap suddenly rather than transitioning smoothly. Fix: made the ranges mutually exclusive — Phase 1 covers(grace, main−60]and Phase 2 covers(main−60, main](else-if chain). -
BUG-FM-01 ·
MatchService— feast never spawns from the second match onward (MatchService.java)resetArena()calledfeastManager.cleanup(arenaName)which removed feast chests but did not clear thefeastSpawnedguard set inFeastManager. On the next match the guard was still set, sospawnFeast()was never called again for the lifetime of the server. Fix: changed the call tofeastManager.resetArena(arenaName)which calls bothcleanup()andfeastSpawned.remove(). -
BUG-CD-01 ·
MatchService— countdown cancels immediately becausegetGamePlayers()is empty duringSTARTINGstate (MatchService.java) The not-enough-players check instartCountdownused:arena.getGamePlayers().values().stream().filter(GamePlayer::isAlive).count() < 2gamePlayersis not populated until the match transitions toPLAYING, soaliveCountwas always 0 → the countdown broadcast "not_enough_players" and cancelled on the very first tick. Fix: replaced the alive-count check witharena.getPlayers().size() < 2, which counts the raw joined-player list that is populated duringSTARTING.
Medium
- BUG-AB-04 ·
DeathNote—sendActionBar(String)deprecated on Paper 1.21 (DeathNote.java) The progress bar was sent viaplayer.sendActionBar(String), a deprecated overload removed in newer Paper builds. Fix: wrapped the string withLegacyComponentSerializer.legacySection().deserialize().
Low
- BUG-AB-05 ·
VoidStaff,SoulGauntlet,DeathScythe,WitherSickles—sendActionBar(String)deprecated (13 call-sites) (VoidStaff.java,SoulGauntlet.java,DeathScythe.java,WitherSickles.java) Same issue as BUG-AB-04. All 13 remaining String-based action-bar calls replaced withLegacyComponentSerializer.legacySection().deserialize().
Changed
pom.xml— version4.5.4→4.5.5.plugin.yml— version4.5.4→4.5.5.

