Support multiple named billboards per arena
Build / build (push) Successful in 1m16s

This commit is contained in:
Michael Burgess
2026-08-07 11:13:50 -04:00
parent 412c9411b8
commit 796f8bd1de
6 changed files with 189 additions and 78 deletions
+25 -15
View File
@@ -25,7 +25,8 @@ slightly faster round. Last player standing wins.
All admin/config commands live under `/blockparty` (alias `/bp`) and work from console
where it makes sense (`create`, `delete`, `enable`, `disable`, `info`, `list`, `reload`).
Commands that require a physical location (`setlobby`, `setspawn`, `setspectator`,
`setbillboard`, `pos1`, `pos2`) require a player sender.
`setbillboard`, `pos1`, `pos2`) require a player sender. `delbillboard`, `billboards`, `info`
work fine from console.
### Admin
| Command | Description |
@@ -38,8 +39,9 @@ Commands that require a physical location (`setlobby`, `setspawn`, `setspectator
| `/blockparty setlobby <arena>` | Set the waiting-room location |
| `/blockparty setspawn <arena>` | Set the in-game spawn location |
| `/blockparty setspectator <arena>` | Set the spectator/eliminated location |
| `/blockparty setbillboard <arena>` | (Optional) place a display block here that mirrors the current target color |
| `/blockparty delbillboard <arena>` | Remove the billboard, if one is set |
| `/blockparty setbillboard <arena> [name]` | (Optional) place a named display block here that mirrors the current target color; `name` defaults to `default`, so you can have any number by giving each a unique name |
| `/blockparty delbillboard <arena> [name]` | Remove a named billboard (defaults to `default`) |
| `/blockparty billboards <arena>` | List an arena's billboards and whether each is enabled |
| `/blockparty pos1 <arena>` | Set floor region corner 1 |
| `/blockparty pos2 <arena>` | Set floor region corner 2 |
| `/blockparty setfloor <arena> <mat1,mat2,...>` | Set the allowed floor materials |
@@ -86,8 +88,9 @@ Commands that require a physical location (`setlobby`, `setspawn`, `setspectator
each round (BlockParty does not scan the world every round — it restores from the saved
layout for performance and determinism).
8. Optionally, stand somewhere visible near/above the floor and run `/bp setbillboard lobby1`
(or `/bp setbillboard lobby1 <name>` to add more than one, e.g. one per side of the arena)
to place a big display block that mirrors the round's target color — purely cosmetic and
entirely optional (see "Billboard" below).
entirely optional (see "Billboards" below).
9. `/bp info lobby1` to confirm there are no validation errors.
10. `/bp enable lobby1`.
11. Players run `/bp join lobby1`. Once `min-players` is reached the countdown starts
@@ -112,22 +115,29 @@ Commands that require a physical location (`setlobby`, `setspawn`, `setspectator
(`generated-layout`) so it can be restored exactly, every round, without re-scanning or
re-randomizing the world.
### Billboard
### Billboards
An arena billboard is a `BlockDisplay` entity that visually shows the currently selected
target color/block each round, in addition to the title/actionbar/hotbar-item cues. It is
entirely optional:
target color/block each round, in addition to the title/actionbar/hotbar-item cues. An arena
may have any number of them (e.g. one visible from each side of the floor), each independently
named, positioned and toggled. Entirely optional:
- Per-arena: only spawned if `/bp setbillboard <arena>` has been run (stored as `billboard`
in the arena's yml). `/bp delbillboard <arena>` removes it.
- Per-arena toggle: `billboard-enabled` in the arena's yml (default `true`) lets you keep the
location set but temporarily turn it off without deleting it.
- Global toggle: `ui.billboard` in `config.yml` (default `true`) disables billboards across
- Per-billboard: `/bp setbillboard <arena> [name]` places/updates one at your current location;
`name` defaults to `default` if omitted, so the simple single-billboard flow needs no name at
all. Give each a distinct `name` to have several at once (e.g. `/bp setbillboard lobby1 north`,
`/bp setbillboard lobby1 south`). `/bp delbillboard <arena> [name]` removes one. `/bp billboards
<arena>` lists an arena's billboards and whether each is enabled.
- Per-billboard toggle: stored per name in the arena's yml (`billboards.<name>.enabled`, default
`true`) — set to `false` to keep the location saved but temporarily stop displaying it, without
running `delbillboard`.
- Global toggle: `ui.billboard` in `config.yml` (default `true`) disables every billboard on
every arena at once, e.g. for performance-constrained servers.
The entity is non-persistent (not saved to the world, so it never survives a server restart on
its own — BlockParty re-creates it on demand) and is despawned automatically when the arena is
disabled, deleted, or the plugin shuts down, so it never leaks entities.
Every billboard shows the same current target color in sync — they're just multiple vantage
points on the same information. Entities are non-persistent (not saved to the world, so they
never survive a server restart on their own — BlockParty re-creates them on demand) and are all
despawned automatically when the arena is disabled, deleted, or the plugin shuts down, so
nothing leaks.
## Player usage