16 KiB
Changelog
All notable OG-fork changes are documented here. Upstream history is at https://github.com/Plugily-Projects/BuildBattle.
5.1.12 - 2026-09-16
Changes
- Classic and Teams matches are played in rounds.
Time-Manager.<Classic|Teams>.Rounds(default 3) sets how many builds a match holds; each round announces its own theme, runsIn-Gameseconds of building, then walks every plot for a vote. Plots are wiped between rounds, the votes add up, and the highest total after the last round wins.Rounds: 1is the old single-build flow. Time-Manager.<Classic|Teams>.Random-Theme(default on) lets the plugin draw each round's theme at random fromthemes.ymlinstead of holding the vote, so building starts at once. Off, the vote runs before every round. Either way a theme is never repeated within a match while unused ones remain.- Shipped
In-Gameshortened to 150 seconds for Classic and 180 for Teams to fit three rounds. The config migration only adds the two new keys to an existingconfig.yml; lowerIn-Gamethere by hand. - The Classic theme list in
themes.ymlgrows from 60 to 146 entries, leaning on concrete objects, animals, vehicles and food that fit a short round. - Round announcements are the new
In-Game.Messages.Plot.Round.Startand.Titlekeys inlanguage.yml, added to an existing file by the language migration;%arena_round%and%arena_rounds%placeholders resolve in Classic, Teams and Guess The Build. The sidebar showsRound: 1/3and the boss bar phase readsBuilding 1/3whenever a match has more than one round. - Plot vote shortened from 20 to 15 seconds per plot in the shipped
config.yml(Time-Manager.<Classic|Teams>.Voting.Plot); the migration leaves an existing value alone. - Builders are no longer teleported to the plot spawn for straying five blocks
past the plot. Each player now has
Plot.Border.Grace(default 3) blocks of room outside their plot, and the one-block shell beyond that is drawn for them alone as a rainbow stained-glass wall (Plot.Border.Block, alsoRAINBOW_WOOL,RAINBOW_TERRACOTTA,RAINBOW_CONCRETEor any block) through client-side block changes, withinPlot.Border.Distance(default 8) blocks of them. Nothing in the world changes and other players never see it. The wall covers all six faces, skips real solid blocks and is only drawn during build time; in Guess The Build it surrounds the plot being built. A move that would still end past the wall is cancelled, and anyone found beyond it by any other route (teleport, vehicle, the three-second sweep) is pulled to the nearest legal spot at their own height, or to the plot spawn if that spot is blocked.Plot.Border.Enabled: falsehides the wall and keeps the limit;Plot.Move-Outside: truestill lifts it altogether. Derived from EternalCombat's border module (Apache License 2.0) via Duels-OG, with the notice kept inPlotBorderManager; the config migration adds thePlot.Borderblock. LanguageMigratorno longer falls through from the language.yml update into the heads main-menu update.
5.1.11 - 2026-09-14
Changes
- The arena sidebar now follows the Scoreboard-OG network board's look: a
♥ BuildBattle-OG ♥title, one blank line between labelled blocks and atrue-og.netfooter. The lobby card shows the mode, map, player count and countdown; Classic and Teams show the theme, phase, clock, player count or teammate and the plot being judged; Guess The Build shows the builder, the theme the viewer may know, round, clock, own points and the leader; the end card names the winner. Lines are built in code, so theScoreboard.Contentlists inlanguage.ymlare no longer read, and every line stays within 16 legacy characters so 1.8 clients on ViaBackwards see it uncut. - Arena worlds no longer come up as vanilla terrain. The shaded MiniGamesBox
deserializes arena locations with
Bukkit.createWorld(new WorldCreator(name))for any world that is not loaded, so the first boot after 5.1.10 shipped the ready-madeBB1arena generated plain overworlds namedBB1-mapandBB1-hubwhen the map folders were not in place yet, and MyWorlds recorded them with an empty chunk generator.ArenaRegistrynow refuses to register an arena whose worlds cannot be loaded from an existing folder, so that path is never reached. - Maps are stored under a cold-storage directory instead of the server root,
the way Splegg-OG and TheHerobrine-OG do it:
MyWorlds.Map-Base(defaultmaps, relative to the server root) holds one folder per map. On every enable each world named inarenas.ymlis resolved to<Map-Base>/<Name>/(case-insensitively, ignoring-and_, and for an arena's game world also by itsmapname, soBB1-mapfindsmaps/PlazaandBB1-hubfindsmaps/BB1_Hub), any loaded copy is unloaded, the server-root copy is deleted and replaced with a fresh copy, and MyWorlds loads it. A world without a map there is loaded from the server root as before. SetMap-Baseempty to turn the copy off. - Bundled
BuildBattle-OG:voidchunk generator, pinned onto every arena world the plugin loads unless MyWorlds already has one for it (MyWorlds.Void-Generator), so chunks outside the saved map stay void. - README: Quick Setup no longer asks for a manual copy to the server root or
/mw load; the Bundled maps and Configuration sections describe the map directory and the two new keys. - The boss bar is now a timer for the current phase instead of MiniGamesBox's
rotating messages. Its title names the phase (waiting with the player count,
starting, theme vote, building, plot vote, builder picking a theme, guess the
build, next round, game over, restarting) with a
mm:ssclock andtrue-og.net, its colour follows the phase and it drains from full to empty as the phase runs out.BaseArenarecords the length of each phase from the timer and state changes,PhaseBossbarManageris returned fromgetBossbarManager()so MiniGamesBox's own join and leave hooks drive it, andBossbar.Intervalinconfig.ymlno longer has an effect. - Every
plugily.xyzlink a player could see in game now readstrue-og.net: the boss bar, theBossbarandScoreboardlists inlanguage.ymlandlocales/language_default.yml.
5.1.10 - 2026-09-14
Changes
- Ship
arenas.ymlconfigured for the open source TrueOG maps. ArenaBB1now points atPlaza(public domain, twelve 31x31 plots around a central plaza) asBB1-mapandBB1_Hub(Green Leave Lobby, CC BY-SA 3.0) asBB1-hub, with all twelve plot cuboids, the plaza centre as start and spectator location, the hub spawn as lobby and end location, andmaximumplayers: 12. A fresh install needs the two worlds copied in and registered with MyWorlds, nothing else. Both maps live undermaps/in the true-og repository. - README: Quick Setup follows the bundled-map path first; the manual setup GUI flow is kept for custom arenas and additional lobbies. New "Bundled maps" section documents the worlds, licenses and layout.
5.1.9 - 2026-09-12
Changes
- Claim
/hub,/lobbyand/spawninside BuildBattle worlds before any other plugin sees them, the way/votealready is. Splegg-OG and TheHerobrine-OG register/hubas well, and Bukkit hands the bare label to whichever plugin loads first, so an arena player's/hubcould run another minigame's command and teleport them out while the arena still counted them; Spawn-OG's/spawndid the same./lobbyis now an alias of/hubeverywhere, and the three labels are topped up intoCommands.Whiteliston startup so MiniGamesBox's in-game command block does not report them. /bb joinand/bbjoinwith no lobby list every arena with its state, fill and a clickable join line, like/hbjoin./bb joinnow also accepts a bare number (/bb join 1) and a case-insensitive id, and replaces the bundled MiniGamesBox join argument.
5.1.8 - 2026-09-12
Changes
- Render the arena sidebar through Scoreboard-OG's sidebar API when Scoreboard-OG
1.2.0or newer is installed, so the network board comes back by itself after a match and/togglescoreboardis honoured. Without it the MiniGamesBox board is used as before. /hubnow puts MiniGamesBox's inventory snapshot back before the teleport home. The snapshot is taken after the teleport into the arena, so it belongs to the arena world's MyWorlds inventory; restoring it after the teleport overwrote the survival inventory MyWorlds had just swapped back in.- MyWorlds settings are applied at runtime only, the way TheHerobrine-OG and
Splegg-OG do it.
MyWorlds/config.ymlis no longer rewritten on startup. - The locale service stub no longer carries the remote fetch code; every fetch answers with an empty stream, so the bundled locale is the only one that loads.
- Plot teleport targets are resolved on the main thread instead of a ForkJoin worker reading block state.
5.1.7 - 2026-08-24
Changes
-
Register
<bb_score>and<bb_rank>MiniPlaceholders through Utilities-OG.<bb_score>is the player'sPOINTS_TOTAL;<bb_rank>maps it onto a builder-themed ladder (Apprentice through Master Builder, then Inception's Forger, Dreamer, Extractor and Dom), with Dreamweaver reserved for the top scorer once they also hold Dom. -
Back both with a plugin-wide score cache seeded from the stats backend on enable and kept live by MiniGamesBox's statistic change event, so values are current the moment a game's points are awarded.
5.1.6 - 2026-08-17
Changes
-
Join signs now match TheHerobrine-OG's style: gold map name, black-on-sign player counts, and bold
JOIN/STARTING/LIVE/FULL/ENDING/RESTARTINGstate labels. A language-file migration (version 3) rewrites the sign lines andPlaceholders.Game-Stateson existing installs while leaving the MOTD state labels unchanged. -
Arena chat now renders the standard TrueOG name segment (union bracket tag, display name, LuckPerms suffix) like TheHerobrine-OG, with a caret colored by the sender's Chat-OG message color, while keeping the queue count,
SPEC,VOTE/JUDGING, and theme prefixes.
5.1.5 - 2026-08-05
Changes
- Scope creative mode to arena builders.
BuilderCreativeManagergrants a runtime creative exemption only while a player is an active builder inside an arena world, and suppresses GameModeInventories-OG's inventory swap for arena participants so the swap cannot clobber armour and offhand contents. - Remember where a player was before they joined an arena.
PreJoinLocationStorekeeps that location on disk, reloading an unloaded world through MyWorlds when it is needed, and expires entries afterMyWorlds.PreJoin-Location-Expiry-Days. - Add the
MyWorlds.Protected-Worldslist so arenas, plots and lobby locations can never be placed in the server's main overworld, nether or end. - Bundle
powerups.ymland write it out on first start, so the shaded MiniGamesBox-Classic reader stops logging "File powerups.yml does not exist!". - Suppress the shaded library's "Loaded locale" console spam.
- Drop a dead clause from the console-noise filter. It tried to hide the "you are using some fork that was not tested by us" warning, but that message is written straight to the console sender rather than through the plugin logger the filter is attached to, so the condition could never fire. That warning is therefore still printed on startup; suppressing it needs a different mechanism and is left for a later release. The "Loaded locale" suppression is unaffected and still works.
- Breaking: the bundled
arenas.ymltemplate now names its worldsBB1-hubandBB1-mapinstead ofbb_lobbyandbb_game_1. Chat-OG resolves a world to a multi-world game by a<letters><digits>-prefix and keys the per-game Discord channel off it, so arena worlds have to follow that shape to get scoped chat and the Discord relay. Existing arenas keep the names they already have — changing the template does not migrate them. To adopt the convention, rename the world folders and update botharenas.ymland your MyWorlds configuration, then add a matchingBBentry underdiscord.gamesin Chat-OG's config. - Render
language.ymlvalues through Utilities-OG's colorizer when that plugin is installed, so MiniMessage tags,<#rrggbb>hex,<gradient:...>, named colours and the&*rainbow code all work in messages, titles, action bars, scoreboards and signs. Only values that actually contain such a construct are converted; values using plain&codes are passed through byte-for-byte, so nothing that ships with the plugin changes appearance. Without Utilities-OG, every value keeps its previous formatting. - Remove seven permission nodes from
plugin.ymlthat nothing ever checked:buildbattle.admin.stopgame,.addsign,.plotwand,.create,.forcestart.theme,.supervotes.manageandbuildbattle.command.bypass. The nodes that actually gate those behaviours arebuildbattle.admin.stop,.admin.locwand,.admin.setupand.command.override; grant those instead. In particular, bypassing in-game command blocking has always requiredbuildbattle.command.override, which was never declared, while the declaredbuildbattle.command.bypassdid nothing. - Declare the permission nodes that were checked but never listed, including
buildbattle.admin.setup,.stop,.locwand,.teleport,.spychat,.statistic,.forceplay,.themeandbuildbattle.command.selectplot, sobuildbattle.admin.*grants the whole admin surface. - Disable the plugin instead of half-starting it when MyWorlds is missing. The startup check returned early after the base plugin had already enabled, leaving the server with a plugin marked enabled but no arenas, commands or listeners.
- Suppress Guess The Build answers through Paper's
AsyncChatEventrather than the legacyAsyncPlayerChatEvent. Registering a legacy chat listener forced the whole server onto Paper's legacy chat path, and the handler raced Chat-OG for ownership of the event, so a correct guess could reach the world and Discord before it was suppressed. - Stop
/hubregistration from throwing when the command is absent fromplugin.yml. - Fix a malformed
Core-Version: 1148-marker inpowerups.ymlthat parsed as0and would have left a duplicateDo-Not-Editblock behind on migration. - Report
1.19as a supported version ininternal/data.yml, and bringlocales/locale_data.ymlup to the current release. - Build Utilities-OG from a git submodule, add
bootstrap.sh, and harvest vendored library licenses intoMETA-INF/licensesautomatically instead of listing them one by one.
5.1.4 - 2026-05-20
Changes
- Add a
/hubcommand that returns players from BuildBattle lobbies or active games to the main world spawn. - Return players to the main world when they reconnect from an arena world, or when they quit mid-game.
- Clean up arena membership, plot membership, scoreboards, bossbars, action bars,
player visibility and empty-game shutdown when a player leaves via
/hub. - Whitelist
hubby default for in-arena command blocking. - Show
&4BuildBattle-OG, the arena name, its state and the player count on default sign lines. - Remove external telemetry, custom chart registration, the bundled metrics implementation and the metrics plugin id.
5.1.3 - 2026-04-23
Changes
- Remove the Plugily Projects service hooks. Upstream's
ServiceRegistry.registerService()pingedhttps://api.plugily.xyz/ping.phpon enable and constructedLocaleServiceandMetricsService. The override skips the ping and leavesserviceEnabled=false, which also disables:- remote translation fetching from
api.plugily.xyz/locale/v3/fetch.php, so the bundledDefaultlocale is used instead; - automatic error reporting to
api.plugily.xyz/error/report.php, sinceReportedExceptiongates onisServiceEnabled(); - Plugily's internal
MetricsServicetimer.
- remote translation fetching from
- Replace upstream's
UpdateCheckerwith one that returnsUP_TO_DATEinstead of callingapi.spiget.org, disabling both the on-enable check and the OP-join notifier. - Exclude the upstream
ServiceRegistryandUpdateCheckerclasses from the shaded jar so the local overrides win after relocation. - Fix the head cache.
- Add MyWorlds fork compatibility and backport to the 1.19.4 API.
- Migrate the build from Maven to Gradle and rename the project to BuildBattle-OG.