Skip to content

Releases: GreenArrowlol/BedWars1058-updated

v25.3.3

Choose a tag to compare

@GreenArrowlol GreenArrowlol released this 27 Aug 14:13

BedWars1058 v25.3.3

Note

Stable release.

At a glance

Area Change
Scoreboard Team status (check/cross) moved back inline next to the team name on 1.20.3+
Stability Fixed a crash-the-arena NullPointerException in team lookups on a torn-down arena

Fixes

Scoreboard team status floating away from its team on 1.20.3+

Upstream draws the team status mark in the score slot of its sidebar line on 1.20.3 and newer. The client right-aligns the score to the widest line in the sidebar, so the mark ended up parked at the far right edge of the whole scoreboard, detached from the team it belonged to. On a resource pack with a narrow font it could look missing entirely. It is back inline, next to the team name, by default.

Technical detail

New config key:

scoreboard-settings:
  sidebar:
    team-status-in-score-slot: false

Set it to true to restore the upstream score-slot placement. The score slot renders blank (FixedFormat("")) when unused, so no stray numbers show up in its place.

Crash-the-arena NullPointerException in team lookups

An arena being torn down (destroyData()) nulls its team list. A task still mid-flight against that same arena could hit the null list while refreshing a player's sidebar, throwing and killing that arena's game logic for everyone in it.

Technical detail
java.lang.NullPointerException: Cannot invoke "java.util.List.iterator()" because the return
value of "com.andrei1058.bedwars.arena.Arena.getTeams()" is null
    at com.andrei1058.bedwars.arena.Arena.getTeam(Arena.java:1845)
    at com.andrei1058.bedwars.arena.stats.StatisticsOrdered$StringParser.parseString(StatisticsOrdered.java:113)
    at com.andrei1058.bedwars.sidebar.BwSidebar.normalizeLines(BwSidebar.java:216)
    at com.andrei1058.bedwars.arena.Arena.changeStatus(Arena.java:1553)
    at com.andrei1058.bedwars.arena.tasks.GameStartingTask.run(GameStartingTask.java:134)

Arena.getTeams() now returns an empty list instead of null once the arena's data has been torn down, so every call site (getTeam(Player), getTeam(String), and everything else reading the team list) degrades gracefully instead of crashing.

Tip

Tested on Paper 1.8.8 and 1.20.4.


Betas that led here: v25.3.3-beta.3776 covered the scoreboard fix and was run on a live server before this build. The NullPointerException fix landed after that beta and went straight to stable, it was not separately beta-tested.

Base: built on top of v25.3.2.

v25.3.3-beta.3776

v25.3.3-beta.3776 Pre-release
Pre-release

Choose a tag to compare

@GreenArrowlol GreenArrowlol released this 14 Aug 17:40

BedWars1058 v25.3.3-beta.3776

Warning

Test build, not a stable release. Run it on a test server before putting it in front of players.

At a glance

Area Change
Scoreboard The team check and cross sit next to the team name again on 1.20.3+
Config New team-status-in-score-slot toggle for the old right-aligned look

Fixes

The team status floated at the far right of the scoreboard

On 1.20.3 and above the check and the cross were drawn in the score slot of the team line instead of the line itself. The client right-aligns a score to the widest line of the whole sidebar, so on a board with a long line (a next-event timer, a title, a server IP) the mark ended up far away from the team it belongs to:

Y Yellow:                    ✘
R Red:                       ✓

Two things came out of that gap. Players read a mark as belonging to the row above or below it, so an eliminated team looked alive and a living team looked eliminated. And on a narrow sidebar the mark sat so far out that it read as missing entirely.

The status is now rendered inline with the team name on every version, which is what the language file has described all along:

format-scoreboard-team-generic: '{TeamColor}{TeamLetter}&f {TeamName}: {TeamStatus}'
Technical detail

BwSidebar.normalizeLines stripped {TeamStatus} out of the line and handed it to the line score whenever the version support id was 10 or above, which is 1.20.3 and up. The score travels as a FixedFormat number format on the score packet, and vanilla lays those out flush against the right edge of the sidebar box, whose width is set by the longest line.

Dropping the score does not bring the red vanilla numbers back. SidebarLine.getTrimReplacePlaceholdersScore returns an empty string for a line that is not a ScoredLine, and the version providers still wrap it in a FixedFormat, so the score slot renders blank.

The score refresh added in v25.3.2 stays in place and only does work when the score slot is actually in use.

Changes

New config key

config.yml gains one key, added automatically on an existing install with the value below:

scoreboard-settings:
  sidebar:
    team-status-in-score-slot: false

Set it to true to get the previous right-aligned rendering back on 1.20.3+. On older versions the status is inline either way, the key does nothing there.

Note

Nothing else changes. Custom sidebars keep working, {TeamStatus} is filled in place like it is on 1.8 through 1.20.2.


Base

Built on top of v25.3.2.

Tip

Built against Paper 1.20.4. The change only applies from 1.20.3 up, so that is where it is worth a look; 1.8 through 1.20.2 render the status inline already and are untouched.

v25.3.2

Choose a tag to compare

@GreenArrowlol GreenArrowlol released this 14 Aug 17:04

BedWars1058 v25.3.2

Note

Stable release. Closes the 25.3.2 beta line, everything that was tested across the four pre-releases is in here.

At a glance

Area Change
Scoreboard Eliminated teams lose their check mark like they should
Console No more RefreshLifeTask exception spam
Lobby Match items no longer follow players out of a game
Lobby Block glitch used to climb walls is closed
Commands /bw reload says what it actually does
Placeholders %bw1058_stats_*% no longer print raw for new players
Metrics bStats removed, ArrowStats in its place

Fixes

Eliminated teams kept showing as alive

On 1.20.3 and above the team status is drawn in the score slot of its scoreboard line. The sidebar library only re-sent the line text when refreshing placeholders, never the score, so the status froze at whatever it was when the sidebar was built. A team could be wiped out and still show a check mark for the rest of the game. The score is now re-sent whenever its content changes.

Technical detail

WrappedSidebar.refreshPlaceholders() calls ScoreLine.sendUpdateToAllReceivers(), which only sends the team packet carrying the line prefix and suffix. The score FixedFormat text goes out from sendCreate and from setScoreAmount(int). On top of that refreshContent() compares prefix and suffix only, so a line whose text never changes is skipped entirely. BwSidebar.refreshScores() renders each scored line and re-sends the score when it differs from the last one sent.

RefreshLifeTask exception every tick

A sidebar still pointing at an arena that had been disabled or restarted threw on the health refresh, because such an arena drops its player list:

java.lang.NullPointerException: Cannot invoke "java.util.List.iterator()" because the return
value of "com.andrei1058.bedwars.api.arena.IArena.getPlayers()" is null
    at com.andrei1058.bedwars.sidebar.SidebarService.refreshHealth(SidebarService.java:322)
    at com.andrei1058.bedwars.sidebar.thread.RefreshLifeTask.run(RefreshLifeTask.java:28)

Items from the previous match followed players into the lobby

Team selector wool and beds stayed in the inventory after a win, a loss or a leave. The routine that hands out lobby items gave up before clearing whenever the player had not landed in the lobby world yet, which is what happens on Paper because the teleport is async. The inventory is now cleared straight away and the lobby items are sent once the teleport lands.

Note

This also fixes lobby items going missing after a game, which was the same early return.

Lobby block glitch

Those leftover blocks could be placed in the lobby for just long enough to jump on, which was enough to climb over walls. The placement was cancelled, but only after the client had already predicted and drawn the block. Block items are now denied while the interaction is handled, both in the lobby and for anyone not building in a running game, so the block never appears at all. Only the item usage is denied, so menu items keep working.

/bw reload messages were misleading

The command warned in red that a full restart was needed, which stopped being true once the reload was extended, and it listed the lobby among the startup only settings even though the lobby is set live with /bw setlobby.

Stats placeholders printed raw for players with no record

A player who had never finished a game had no stats row, so every %bw1058_stats_*% placeholder was left on screen as literal text. They now fall back to a configurable message, and a latent NullPointerException on null timestamps is guarded.

Before:  Kills: %bw1058_stats_kills%
After:   Kills: 0

Changes

Metrics moved from bStats to ArrowStats

bStats is gone from the jar, along with every custom chart it carried. Reporting now goes to ArrowStats instead, anonymously, on a background thread.

Opting out

# plugins/ArrowStats/config.yml
enabled: false

Note

That file is shared between plugins, so turning it off opts the server out of every ArrowStats plugin at once, not just this one.

Bedwars-updated


Requirements

  • JDK 21 to build and to run.
  • Spigot or Paper with compiled NMS. Forks without NMS are not supported.

Base

Previous stable was v25.3.1. The pre-releases that led here are still up: beta.2900, beta.acd8, beta.1d0b4, beta.08a6.

Tip

Tested on Paper 1.20.4.

v25.3.2-beta.1d0b4

v25.3.2-beta.1d0b4 Pre-release
Pre-release

Choose a tag to compare

@GreenArrowlol GreenArrowlol released this 14 Aug 16:55

BedWars1058 v25.3.2-beta.1d0b4

Warning

Test build, not a stable release. Run it on a test server before putting it in front of players.

At a glance

Area Change
Scoreboard Eliminated teams lose their check mark like they should
Console No more RefreshLifeTask exception spam
Lobby Match items no longer follow players out of a game
Lobby Block glitch used to climb walls is closed

Fixes

Eliminated teams kept showing as alive

On 1.20.3 and above the team status is drawn in the score slot of its scoreboard line. The sidebar library only re-sent the line text when refreshing placeholders, never the score, so the status froze at whatever it was when the sidebar was built. A team could be wiped out and still show a check mark for the rest of the game. The score is now re-sent whenever its content changes.

Technical detail

WrappedSidebar.refreshPlaceholders() calls ScoreLine.sendUpdateToAllReceivers(), which only sends the team packet carrying the line prefix and suffix. The score FixedFormat text goes out from sendCreate and from setScoreAmount(int). On top of that refreshContent() compares prefix and suffix only, so a line whose text never changes is skipped entirely. BwSidebar.refreshScores() renders each scored line and re-sends the score when it differs from the last one sent.

RefreshLifeTask exception every tick

A sidebar still pointing at an arena that had been disabled or restarted threw on the health refresh, because such an arena drops its player list:

java.lang.NullPointerException: Cannot invoke "java.util.List.iterator()" because the return
value of "com.andrei1058.bedwars.api.arena.IArena.getPlayers()" is null
    at com.andrei1058.bedwars.sidebar.SidebarService.refreshHealth(SidebarService.java:322)
    at com.andrei1058.bedwars.sidebar.thread.RefreshLifeTask.run(RefreshLifeTask.java:28)

Items from the previous match followed players into the lobby

Team selector wool and beds stayed in the inventory after a win, a loss or a leave. The routine that hands out lobby items gave up before clearing whenever the player had not landed in the lobby world yet, which is what happens on Paper because the teleport is async. The inventory is now cleared straight away and the lobby items are sent once the teleport lands.

Note

This also fixes lobby items going missing after a game, which was the same early return.

Lobby block glitch

Those leftover blocks could be placed in the lobby for just long enough to jump on, which was enough to climb over walls. The placement was cancelled, but only after the client had already predicted and drawn the block. Block items are now denied while the interaction is handled, both in the lobby and for anyone not building in a running game, so the block never appears at all. Only the item usage is denied, so menu items keep working.


Base

Built on top of v25.3.2-beta.acd8.

Tip

Tested on Paper 1.20.4.

About this upload

Re-uploaded from source. The original upload was lost when the repository was rebuilt as a standalone project. The jar here is a fresh build of the same commit.

v25.3.2-beta.08a6

v25.3.2-beta.08a6 Pre-release
Pre-release

Choose a tag to compare

@GreenArrowlol GreenArrowlol released this 14 Aug 16:49

BedWars1058 v25.3.2-beta.08a6

Warning

Test build, not a stable release. Run it on a test server before putting it in front of players.

At a glance

Area Change
Metrics bStats removed, ArrowStats in its place

Important

This build carries every fix from v25.3.2-beta.1d0b4 unchanged. Metrics are the only thing that moved.


Changes

Metrics moved from bStats to ArrowStats

bStats is gone from the jar, along with every custom chart it carried. Reporting now goes to ArrowStats instead, anonymously, on a background thread.

com/andrei1058/bedwars/libs/arrowstats/   13 classes, about 21 KB
bstats                                    0 matches

Opting out

# plugins/ArrowStats/config.yml
enabled: false

Note

That file is shared between plugins, so turning it off opts the server out of every ArrowStats plugin at once, not just this one.

What gets collected

Server and player count, Minecraft version, server software, online mode, plugin version, Java version, operating system, architecture and CPU core count. Server location is worked out from the request address on the server side, the client never sends it.

Bedwars-updated


Tip

Tested on Paper 1.20.4.

v25.3.2-beta.acd8

v25.3.2-beta.acd8 Pre-release
Pre-release

Choose a tag to compare

@GreenArrowlol GreenArrowlol released this 14 Aug 16:55

BedWars1058 v25.3.2-beta.acd8

Warning

Test build, not a stable release. Run it on a test server before putting it in front of players.

At a glance

Area Change
Placeholders %bw1058_stats_*% no longer print raw for new players
Stability Fixed a NullPointerException when formatting a null timestamp
Carried over /bw reload message corrections from v25.3.2-beta.2900

Fixes

Stats placeholders printed raw for players with no record

A player who had never finished a game had no stats row, so every %bw1058_stats_*% placeholder was left on screen as literal text instead of a value. They now fall back to a default.

Before:  Kills: %bw1058_stats_kills%
After:   Kills: 0

Null timestamp crash

Formatting a first play or last play timestamp that was still null threw a NullPointerException on the same code path. Guarded.


Base

Built on top of v25.3.2-beta.2900.

Tip

Tested on Paper 1.20.4.

About this upload

Re-uploaded from source. The original upload was lost when the repository was rebuilt as a standalone project. The jar here is a fresh build of the same commit.

v25.3.2-beta.2900

v25.3.2-beta.2900 Pre-release
Pre-release

Choose a tag to compare

@GreenArrowlol GreenArrowlol released this 14 Aug 16:55

BedWars1058 v25.3.2-beta.2900

Warning

Test build, not a stable release. Run it on a test server before putting it in front of players.

At a glance

Area Change
Commands /bw reload says what it actually does

Fixes

/bw reload messages were misleading

The command warned in red that a full restart was needed, which stopped being true once the reload was extended, and it listed the lobby among the startup only settings even though the lobby is set live with /bw setlobby. Both are corrected, so the output now matches what the reload really covers.


Base

Built on top of v25.3.1.

Tip

Tested on Paper 1.20.4.

About this upload

Re-uploaded from source. The original upload was lost when the repository was rebuilt as a standalone project. The jar here is a fresh build of the same commit.

v25.3.1

Choose a tag to compare

@GreenArrowlol GreenArrowlol released this 14 Aug 16:30

BedWars1058 v25.3.1

Note

First stable release of this fork. Maintenance only, no gameplay changes.

At a glance

Area Change
Scoreboard Sidebar, tab list and name tags work again
Build Resolves on a clean machine, no dead repositories
Java Builds and runs on JDK 21

Fixes

Scoreboard, tab list and name tags were empty

On the newer SidebarLib the sidebar provider was never initialised, so a NullPointerException was thrown as soon as a player joined and the whole sidebar stack came up blank. The plugin now resolves and sets the correct version specific provider on startup.

Technical detail

SidebarManager.init() in SidebarLib 26.6 no longer picks the versioned provider by itself, which left sidebarProvider null and made every createSidebar call throw. SidebarService now looks up ...sidebar.<vX_Y_RZ>.ProviderImpl and sets it after init, checking both the relocated package used in the shaded jar and the original one.

Build

No more offline repository dependency

The build used to pull flow-nbt and SlimeWorldManager from repo.glaremasters.me, which went down and took the whole build with it. Those libraries are now vendored in vendor-repo/, so the project builds on a clean machine with no external access.


Requirements

  • JDK 21 to build and to run.
  • Spigot or Paper with compiled NMS. Forks without NMS are not supported.

Tip

Tested on Paper 1.20.4.