A two-team objective gamemode for Minecraft 26.2 paper servers.
Each team (RED / BLUE) defends one or more core beacons, mineable only by the other team. Mining progress shows above your hotbar while you're digging, and a persistent sidebar HUD tracks every one of your team's cores' health at all times - flashing and chiming when an enemy gets close. When a team's last core is broken, the other team wins (with some fireworks) - the map resets itself and everyone lands back in the lobby, ready for a rematch (possibly on a different map).
Supports multiple registered maps, picked round-robin each round, each with its own bounding box, spawns, cores, protection regions and kits, and its own saved "reset baseline" that gets reloaded after every round - plus a lobby (a fixed spawn + protected region, entirely separate from any map) where players land on join and whenever no round is live.
Join discusson at https://matrix.to/#/#goodoldmc:tchncs.de Play at IP: goodoldmc.com
mvn clean package
Produces target/Recored-<version>.jar. Drop it into your server's plugins/ folder.
Pushing a version tag (git tag v1.0.1 && git push origin v1.0.1) instead builds it on GitHub
and attaches the jar to a new Release - no local
build needed. Tag a commit on the paper-26.2 branch (this port), not master (the original
fabric mod).
All admin commands require recored.admin (granted to ops by default).
- Lobby: look at one corner of the lobby area,
/recored pos1; the opposite corner,/recored pos2; stand where players should land,/recored setlobby. Building/breaking inside it is blocked while any round isn't RUNNING (and inside team spawn regions while one is) - switch to creative mode to bypass that and edit it anyway. - A map:
/recored map create <id>, then for that id:/recored map corner1/corner2(look at a block) - the map's bounding box/recored map setspawn <id> <red|blue>(stand there) - each team's spawn/recored map addcore <id> <red|blue> <l|r>(look at a block, e.g. a beacon) - up to two cores per team/recored map setregion <id> <red|blue>(uses your last/recored pos1/pos2) - that team's protected spawn area/recored map setkit <id> <red|blue>- captures your current inventory as that team's kit/recored map save <id>- captures every block (and any chest/barrel/furnace/etc. contents) in the bounding box as the reset baseline (do this last, once the map actually looks how you want it to reset to)
/recored map listshows what's still missing before a map counts as READY.
Upgrading from an older version:
map save's file format changed to also cover container contents. Run/recored map save <id>again for each of your maps - a.snapshotfile saved before this update won't load.
Multiple maps can be registered; a ready round picks the next one round-robin.
/recored join <red|blue> hands you a "Not Ready" item - right-click it to ready up. Once
both teams are equal size (at least one player each) and everyone's ready, a countdown starts
automatically and the round begins on whichever map is next in rotation. /recored leave
before that; /recored status any time. Your sidebar shows team sizes, how many are ready,
and the countdown the whole time you're waiting - not just once a round is actually running.
Mining an enemy core takes a few seconds of continuous digging (/recored coretime <seconds>
to change how long, default 10s) and can be shared/resumed by any teammate (so it's never
lost if you let go, or a teammate takes over) but stops within a tick or two of you actually
stopping - looking away or moving out of reach. Your own core can't be mined at all, not even
in creative. Your effective mining speed is also slowed to match coretime, so your own
client's local mining prediction - which the server otherwise has no control over - takes
exactly as long as the real thing; without this a core would visibly (and misleadingly) seem
to "break and reappear" every few seconds as your client's much-faster local guess kept
getting corrected, even though server-side progress was accumulating normally underneath the
whole time. An enemy standing near one of your cores plays
a warning note for anyone nearby and flips that core's sidebar line into an alert: a ⚠ marker
and bold text alternating white/health-colour, so it's noticeable even with sound off. Losing
all your cores ends the round for your team. Admins: /recored start force-starts (bypassing ready-up, if a map is ready),
/recored reset aborts back to WAITING, /recored respawndelay <seconds> adjusts the pause
before a dead player's forced respawn (default 1s, automatically bumped to at least 3s once
any core has fallen).
/recored sign set <command...> (looking at a sign) attaches a command that runs as whoever
right-clicks it - /recored sign remove detaches it.
While a round is RUNNING, a rostered non-admin player can't use any command except /help and
/matrix - everything else is silently blocked. Admins (recored.admin) are never restricted.
If PlaceholderAPI is installed,
Recored registers its own placeholders on startup (nothing to configure) - any PAPI-aware
plugin can then show live round stats anywhere it supports placeholders, including on a sign
via SignManager (/sign edit line 1 %recored_phase%,
refreshed automatically at whatever interval you've set with /sign admin interval), a
scoreboard plugin, or chat formatting:
| Placeholder | Value |
|---|---|
%recored_phase% |
WAITING / STARTING / RUNNING / ENDED |
%recored_active_map% |
the map id currently being played, or - |
%recored_red_players% / %recored_blue_players% |
players on each team right now |
%recored_ready% |
ready count, e.g. 3/4 (- once RUNNING) |
%recored_countdown% |
seconds left in the ready countdown, or - |
%recored_red_cores% / %recored_blue_cores% |
cores still standing (- outside RUNNING) |
%recored_respawn_delay% / %recored_coretime% |
current settings, in seconds |
No PlaceholderAPI installed? Recored just skips registering them - everything else works the same either way.
- Original mod:
fabric-example-mod-26.2(Fabric, client+server)