Tactical 5v5
Changelog
Every release, what changed in it and when. Updates are free for as long as the product exists.
These are the release notes that ship inside the product, word for word — the file RELEASE_NOTES.md in your archive. They are kept in English so that what you read here is exactly what you receive.
1.0.9
17 September 2026
Two things about licensing that were only ever visible in your console, and one sentence that was plainly wrong.
/licence tells you where you stand
There was no way to ask. The enforcement stage, the date a deadline names, and — this is the one that matters — a right our server withdrew while your server was running were written to the console at startup and nowhere else. Nothing is ever cut mid-session, by design; the withdrawal waits for your next restart. But if you were not watching the console the day it was logged, you would not learn about it until that restart refused, weeks later, without warning.
/licence now shows the stage, what it means, the deadline if one is set, and whether a refusal is waiting. Admin permission, and it never prints your key — a screenshot of a production console gets shared one time too many.
A fresh install no longer announces a problem it does not have
Installing this on a new machine with a perfectly valid key printed:
> could not reach the licence server. The plugin is running on its signed licence and will keep > doing so for about 15 more day(s).
Nothing was wrong. The plugin dates your first launch so the grace window has an honest starting point, and that timestamp was being read as "we had contact and lost it a moment ago". So the very first line you read about your licence was a warning, on an install that was fine, seconds before the background check succeeded.
A first start now says what is true: the licence is valid, verified offline, and confirmation with the server is happening in the background. If an hour passes with still no answer, the warning comes back — because by then it means something.
Also
licence-deadlineset to something that is not ayyyy-MM-dddate is now reported as the/pluginsand/versionreport1.0.9. Nothing else in the archive changed.
misconfiguration it is, instead of being printed at you as though it were a date.
1.0.8
17 September 2026
Two corrections to 1.0.7. Neither changes how the server plays, and there is nothing you must do.
The obfuscated jar can be extracted again
1.0.7's jar contained 160 files whose names differed from another file's only by capitalisation — a.class beside A.class, 75 such groups. Java never notices, because the server reads the jar without unpacking it. Anything that does unpack it notices a great deal: Windows and macOS treat those two names as the same file, so extracting the jar there silently lost about half of them.
That matters because this package ships guides for Pterodactyl and for hosting panels, and panels unpack things. The obfuscator is now told not to produce those names, and the build refuses to finish if any two entries in the jar collide that way — so this cannot come back quietly.
A licence deadline with no date now says so
If you set licence-enforcement: deadline and left licence-deadline empty, the plugin behaved exactly like warn and said nothing about it. The setting looked active and did nothing, which is worse than not having it: you would believe a date was being announced when none was.
It now names the problem in the console and tells you which of the two settings to correct. A malformed date — 01/12/2026, or soon — is treated the same way rather than being printed at your players as if it meant something. As always, none of this can stop your server: deadline never blocks a start, correctly configured or not.
1.0.7
17 September 2026
The code you receive is now obfuscated, and your copy is now built for you.
The plugin is obfuscated
Class, method and field names inside the plugin are scrambled: of the 867 classes that make up the plugin itself, 859 are renamed, packages included. The eight that keep their names are the ones the server loads by name, and they have to.
Obfuscating a plugin that uses reflection is where this usually goes wrong, so it was checked by running it rather than by reading it. This exact build was installed on our own live server, and a full bots-only 5v5 was played on it start to finish — the bot bridge is the most reflection-heavy path in the product, so it is the one that would break first. It did not, and the database and Redis connected normally.
What is deliberately left readable is the part you might build against: com.boteramc.api, the public contract. Anything written against it keeps working exactly as documented.
Your download is yours
Copies fetched from your client area are built for you: they carry your buyer id, woven into the file in more than one place. The file works on any server your licence covers, and it names the account it came from if it turns up somewhere it should not. That is said here plainly because knowing about it is the point — it is what makes a shared copy traceable rather than anonymous.
Nothing else changed
This is worth stating plainly, because it decides how cautious you need to be about updating. The 1.0.6 and 1.0.7 archives were compared file by file: the plugin jar is the only file whose contents changed, apart from this document, the build manifest and the checksum list, and the world save timestamps that every shutdown rewrites.
Same configuration files, same worlds, same maps, same scripts, same guides. Your config.yml is not touched, no migration runs, and no setting was renamed or removed.
/pluginsand/versionreport1.0.7.
1.0.6
17 September 2026
Licensing arrives, and nothing about your server changes today. Read the first item before you worry about the second.
Your server keeps starting, with or without a key
This release adds the licence system that will, eventually, tie a copy of this setup to the person who bought it. It ships in its gentlest setting and it does not gate anything:
licence: ""
licence-enforcement: "warn" # warn | deadline | enforce
On warn — the default, and what you get by installing this update — the server always starts. With no key you get one reminder line in the console and nothing else. No feature is withheld, no timer runs out, and an empty licence: is a perfectly valid way to run this release.
There are two further settings, and you choose when, or whether, to move to them. deadline behaves exactly like warn but names a date in the reminder. enforce is the one that actually requires a key. Moving between them is a one-line configuration change — the code does not differ, which is the point: by the time anything is enforced, the same code will have been running on your server for weeks.
It does not phone home unless you ask it to
With no key pasted in, the plugin makes no network request at all. Nothing is sent, nothing is counted, nothing is reported. That is not a promise about intent, it is how it is wired: the check is skipped entirely when licence: is empty.
When you do paste a key, it asks boteramc.com at startup and every twelve hours whether the licence is still valid, and it sends the key, a random number, the version, and hashed machine fingerprints. No IP address, no server name, no player data, nothing about your game.
And if that server is down, your server does not care: the key is signed and verifies offline, our side can only ever withdraw a right rather than grant one, there is a fifteen-day grace window, and nothing is ever cut in the middle of a round.
Where your key will come from
A client area now exists at boteramc.com/licence. When keys are issued, yours lives there, along with a build made for you. Nothing is required of you before then.
Also in this release
- The plugin reports
1.0.6in/pluginsand/version. - The packaging script that builds this archive was out of date in one of the three places it is
kept on the build machine. All three now agree, which is the only way that check means anything.
1.0.5
12 September 2026
Two things a buyer sees on their first screen, one thing the bots were doing wrong in every round, and the sound of the guns.
Your lobby scoreboard no longer advertises example.com
A fresh 1.0.4 install printed example.com at the bottom of the lobby sidebar, to every player, until somebody noticed and edited it. The packager rewrites the seller's own domain to example.com across every shipped text file, which is right in a guide and wrong in a setting — config.yml is read back by the server, so it obeyed it. server-website and store-url arrived populated and the comment beside branding.website-url promised that leaving it empty removes the line, which it could not, because the legacy key won the lookup.
Both are blank in this release. If you are on 1.0.4 and would rather not update yet, the fix is two lines in plugins/BoteraMC/config.yml: set server-website and store-url to '', or to your own addresses.
The release itself now refuses to build if a placeholder survives anywhere in a file the server reads back — checked on the finished archive, not on the step that was supposed to clean it.
Bots walk to the bomb
Reported from a live 5v5: the defenders never defused, because they got stuck moving. They did. Five separate faults sat between deciding to retake and arriving, none of which logged anything:
- The arenas are enclosed in barrier blocks. A barrier stops you walking through it, so the
- 93% of the grid was somewhere nobody could reach: rooftops, sealed alcoves, ledges behind a
bots.nav.max-nodeswas not the limit that applied. The search table was sized for half of what- When the pathfinder cannot reach a goal it returns the closest cell it managed; the follower took
- One defender is assigned to walk onto the spike. The assignment expired every three seconds and
navigation grid treated it as a floor — and every cell in the open air above the map's outer shell became somewhere a bot could be sent. Standing and blocking are different questions now.
wall, the ground outside the arena. 135,051 of 144,495 cells. Those are dropped at bake time, and the bake warns you if an arena's spawns and sites end up in disconnected regions — which is the single most useful thing it can tell you about a map you built yourself.
one expansion inserts, so every long path stopped at about 39% of the number you set. It means what it says now.
that as a path. Nothing downstream could tell the difference, so a bot walked to a dead end, stopped, and asked for the same impossible route again.
was re-picked by proximity, so on a retake it moved between bots and each one abandoned its approach. It stays with its holder now unless somebody is decisively better placed.
Measured over matched thirteen-minute windows, bots stuck while moving fell from 10 to 2–3, and path waits that timed out from 110 to 5.
Two commands were added for anyone building a map: /bot nav at <x> <y> <z> says what the grid believes about a cell and what the world actually has there, and /bot nav reach <from> <to> runs the real pathfinder and answers connected, ran out of budget or no route. A bot that cannot free itself now writes one line to the log saying where it stood and where it was trying to go.
The guns sound like guns
Every weapon-fire sound was re-synthesised and measured rather than tuned by ear.
| before | after | |
|---|---|---|
| Slowest attack, across all 64 fire sounds | 11.48 ms | 0.69 ms |
| Low end tracking the weapon's calibre | r = 0.39 | r = 0.82 |
An 11-millisecond rise is a thump, not a shot. And the bass used to be roughly the same on a Hornet and a Vigil — a submachine gun and a heavy sniper — which is why nothing felt heavy. It now follows the weapon: 16.7% of energy below 200 Hz on the lightest, 40.7% on the heaviest.
Ability sounds were levelled the same way. They had 16.6 dB between the quietest and the loudest by accident — spell.stone, a wall nobody has to react to, was seven times louder than the click that confirms you equipped something. They sit on a deliberate four-step ladder now: alerts you must react to, events near you, confirmations of your own input, and sustained beds. The cues that exist to start a reaction start immediately — a flash peaked 133 ms in and now peaks at 10 ms.
And casting a signature or a bought ability made no sound at all at the moment of the cast. Only the ultimate had one wired; the other two cues had been in the resource pack the whole time.
TAB and the scoreboards
Pressing TAB in a deathmatch used to show the lobby panel: "Players 1 / 40" and the server's website, the same thing you see standing in the lobby. Free-for-all, duels and the training range each have their own panel now — the mode, what is at stake, and where you stand.
They also describe the mode you are actually in. In Infected the sidebar ranked you by kills and announced your "Place #3" — a number that mode does not play for, ranking you against your own side — while the bar above your hotbar already read SURVIVOR · SURV 4 · INF 2. Infected shows the two sides and the clock; Gun Game calls your progress a rung rather than a kill count, and starts you on rung one rather than zero.
The tab list sorts by rank properly: Netherite III, II and I shared a sort key and fell back to alphabetical order, so your position among your own division depended on your username.
Also fixed
/forfeitsaid you were not in a ranked match when you were, in Ranked-vs-Bots. The flag- The Help menu's category tiles did nothing when pressed. The class has promised since it was
/bot debugshowed a dead bot exactly like a live one — same behaviour, same frozen distance to- The lobby sidebar read the legacy website key directly instead of the resolved one, so an empty
- Walking out of a map you were editing threw an exception every tick. The Map Studio overlay
means "the season ladder is at stake"; a bot match puts the bot ladder at stake, which is rated without being ranked.
written that clicking one opens the relevant menu; PLAY, PROFILE, SOCIAL and REWARDS now do, through the same command a player would type, so they still respect its permission checks.
the spike. It says alive= first now.
branding.website-url could not remove the line as documented.
marks spawns and sites with particles in the map's own world; leaving that world made it measure a distance between two worlds, which Bukkit refuses. The overlay now stops at the boundary — there is nothing there to draw — while the bar and the hint stay, so you can still see what you were in the middle of.
1.0.4
11 September 2026
Almost everything here was found the same way: by pointing a real Minecraft client at the packaged server and reading what it was actually sent, rather than reading the source that sends it. Four of the defects below were invisible to every static check in the project and obvious within a minute of looking at a screen.
The training range is a training range now
The room that ships has three shooting lanes marked into its floor and two firing lines. The plugin ignored all of it: targets went on a twelve-block semicircle around the world's spawn point, which is not the firing position — so you arrived facing a wall with the lanes behind you, some targets stood inside the scenery, and one was placed a hundred metres up on a roof.
The layout is now measured off the world and written in config.yml under training: — the spawn, five target positions and the setup stand. Three targets at 24 m, two at 35 m, all on the lanes, all facing you. A target that moves travels along its lane, changing range rather than walking into the next lane's line of fire. If a configured target has no floor under it, the server says so at startup instead of leaving it hovering.
What the range can teach you now
| Spray pattern | Hold a burst and it draws where every round went, then reads back the group size, how far it climbed, how far it walked sideways, and how tight your first five were |
| Recoil curve | Draws the gun in your hands — its real curve, walked from the same code that fires it — in blue while it climbs and gold while it sways |
| Pop-up drill | One target at a time at a random lane position, timed from the moment it appears. Reaction, average and best |
| Timed drill | Ten targets against the clock |
| Sparring bot | Five difficulty steps, each showing its real reaction time and aim accuracy |
| All seventeen weapons | With cost, body and head damage and magazine, taken from the weapon itself |
| Target setup | A stand between the spawn and the firing line: which lines are up, what moves, armour on or off, headshots only |
The range also remembers you. Accuracy, headshot rate, drill time, reaction and group size were all measured correctly and thrown away at the door; they are stored now, and leaving prints this session against your all-time bests. A first visit is told it is a first visit rather than being shown zeros to beat.
Weapons are held properly in third person
The pose rolled every rifle ninety degrees about its own barrel, so it was carried flat on its side with the sights facing outward. The barrel points forward and the sights point up, and the pose is derived from the models' own geometry rather than chosen by eye. Each of the seventeen weapons is positioned from its own grip, because one translation cannot hold a pistol and a machine gun — their grips are nine units apart. Weapons are also 18 % larger, which is a real carbine's length against the player carrying it.
Every mode shows the score you are playing for
Free-for-all, duels and the training range had no scoreboard at all, and nothing removed the lobby's — so a player four kills into a deathmatch was reading their season rank and lifetime win rate while their kills, their place and the clock were nowhere on screen. All three have their own board now, built from the same parts as the lobby's so they read as one product.
Fixes
- The parkour could not be completed. Checkpoints record every block the builder stepped on and
- The sparring bot could not be shot, and could not shoot. It is not registered as a trainee, so
recoil-capwas not a cap. Past the ceiling every further round still added a twentieth of a- Reconnecting reset your One in the Chamber timer. Leaving while waiting for your round back
- Spell cooldowns followed you into the lobby. Disconnecting mid-round left them running, and
- The target setup switch could only be pressed once. "Off" was drawn with the icon the menu
- Disconnecting from the training range left your counters, buffers and drawn patterns in memory
- The lobby, the NPC hover lines, the auto announcer and four range tooltips each wrote "10 agents,
the run demanded you touch all of them in order, so jumping a gap the builder walked across ended your run silently: you reached the last platform reading 53/66 and the finish never fired. Nobody had ever recorded a time. Landings now claim any checkpoint within a jump of the last one.
every combat check refused it: rounds passed straight through with no marker and no damage. The same mistake had already been found and fixed in free-for-all and in duels.
degree, so a full magazine overshot the configured value on every automatic — the Bulwark reached 9.9° against a configured 5.5. If you have tuned recoil, your weapons now stop where you told them to.
kept the timestamp, and your next match handed the round over immediately.
logging back in fired an "Ability ready" banner and sound for each one, in the lobby, for abilities you were not holding.
uses for empty slots, so turning the dummies' armour off made the button disappear.
until the next restart.
40 abilities, 17 guns" by hand. They count now, so they cannot be wrong after a roster change.
1.0.3
10 September 2026
The last release fixed what happened when you followed the documentation. This one fixes what was wrong inside the box regardless of what you did — found by checking the archive itself against what the code, the tests and the licences say it should be, rather than checking the source they were written from.
Your server plays the game it was balanced for
Five gameplay values shipped at superseded numbers. The tests guarding them were green the whole time, because they read the copy of config.yml inside the plugin jar and the archive ships the one from plugins/BoteraMC/, which wins.
| setting | you had | now |
|---|---|---|
economy.win-bonus | 3900 | 3000 |
economy.base-round-income | 3900 | 3000 |
economy.loss-bonus | 2400 | 1900 |
economy.max-loss-bonus | 3400 | 2900 |
audio.footsteps.crouch-range | 9.0 | 0.0 |
The economy figures are the ones every weapon price, the buy menu and the bots' purchase thresholds were written around; at 3900 a round win paid for a rifle and a heavy shield, and the eco round — the decision that gives the mode its shape — did not exist. Crouching is silent again, to players and to bots alike, so there is a way to move without being heard.
If you are upgrading, change these five values in plugins/BoteraMC/config.yml. The old numbers were not a balance choice — they were a figure nobody picked, left behind when the economy was revised, and every weapon price, the buy menu and the bots' purchase thresholds were written around the new ones. A server still on 3900 is playing a version of the mode with no eco round in it.
Nothing overwrites your configuration, so this will not happen on its own. If you have deliberately tuned the economy for your own community, keep what you have — you are the exception this paragraph is written around.
Things your players can see
/season info never worked for them. The command answers the current season to anybody — that is what the code does first, before it checks anything — but the command itself required admin, and Minecraft checks that before the plugin is ever asked. So the help menu listed "/season info - current season" for everyone and the server refused everyone. It answers now.
The first season was named Saison 1 in French, seeded into the database on install and shown on the lobby scoreboard of every player. New installs get Season 1. If your server is already running, the old name stays until you change it — one row in the seasons table.
Seventeen messages had a space before their punctuation — "joined the server for the first time !", "Right click to accept !", "Ping : " — which is how French is written and not English. The greeting every new player gets, the queue-accept prompt, the rank promotion, the friend-added message, and the arena, world and staff tool labels.
Your players were also offered the map-editing and QA commands in tab-completion — /mapbuild, /mapdump, /spellqa, /mapintegrity, /botadmin. They could never run them, and now they are not shown them either. Staff still see everything.
The plugin tells you which version it is
/plugins reported BoteraMC 1.0.0-SNAPSHOT in 1.0.0, 1.0.1 and 1.0.2 — the wrong number, with the suffix that means "not released". It now reports the version you bought. The build refuses to produce an archive whose plugin disagrees with the release it is being packaged as.
The release notes are the release's
The copy of this file in 1.0.2 stopped at 1.0.1. The packaging source held a stale copy under a filename that differed only in capitalisation, so a sync that looked successful updated nothing.
Documents that describe this product
legal/ASSET_ORIGIN.md described a resource pack that no longer exists — an old checksum and a file count from several rebuilds ago — and listed every sound in it as the author's own work. Eighteen of them are announcer recordings by VoiceBosch under CC BY-SA 4.0, which legal/THIRD_PARTY_LICENSES.md states correctly. Two legal documents in one folder disagreed about who owns part of what you bought. The attribution inside the pack, NOTICE-voice.txt, was right throughout, so nothing you received was ever uncredited.
THIRD_PARTY_LICENSES.md said the pack's art and sounds are generated by scripts "included in the repository, so the buyer can regenerate or restyle the pack". Those scripts are not in your archive and never were. Changing the pack means editing it directly, which is what docs/RESOURCE_PACK_REBRAND_GUIDE.md describes.
The resale procedure's worked example told you to rebrand to the placeholder name this product was itself renamed away from — a string the release checks refuse to let out of the door, so following the first command of the resale procedure produced a server that could not be repackaged. Both rebranding guides now use one neutral placeholder, ArenaCraft.
If you are reselling
legal/REBRAND_REQUIRED_BEFORE_RESALE.md is required to be in your archive now, rather than happening to be there. It, ASSET_ORIGIN.md, THIRD_PARTY_LICENSES.md and WORLD_PROVENANCE.txt are checked for individually before a release is allowed out — previously their absence would only have been noticed if some other document happened to link to them.
1.0.2
10 September 2026
Everything a buyer is told to run, run. This release came out of following the documentation literally — installing from the archive the way the guides describe, then executing every command they name — and fixing what did not work.
The scripts you are told to run now work on your machine
validate-setup.sh and validate-setup.ps1 did not recognise a normal install. Both install guides say to copy the contents of server/ into your Paper directory, which leaves plugins/ at the root and no server/ folder — and then both say "Check it". The validator answered "wrong directory?" and exited. It now knows all three layouts, and on a running server it says which of its checks are pre-ship ones that do not apply to you, rather than silently skipping them.
It also checks two things only a real install can have: that you renamed server.properties.example, and that the EULA is accepted — the most common reason a fresh server refuses to start.
The Windows validator was not a version of the shell one at all; it has been rewritten, and the two now produce identical output on the same server.
rebrand.sh and rebrand.ps1 edit your configuration now. setup.ps1 refuses to apply a preset to a running server, which its Linux counterpart already did — applying one to a live server looked like it worked and was discarded on the next shutdown.
Presets
production-mariadb pointed at a database that does not exist and, with fail-on-unavailable: true, that means a server that will not start. It now matches the database MARIADB_GUIDE.md tells you to create. It also no longer renames your server to a placeholder when you apply it.
small-sqlite pointed its database at a folder that does not exist.
Documentation
Five guides said the bots-only acceptance match is "nine rounds, about seventeen minutes". It is first to match.rounds-to-win, seven to thirteen rounds — measured runs took ten and twelve. The guides now name the setting instead of a number that was never fixed.
Two guides opened with an unzip command naming the wrong archive version.
README_FIRST.md listed a script you do not have and omitted restore and start, which you do.
Your configuration file
Seven comment lines in config.yml and five in spells.yml were in French. The top of config.yml carried a note from the seller's own backlog. setup.mode is documented honestly now: it is a label, and nothing behaves differently for one value or another.
Quieter, and one thing bots never did
Bot team callouts were mirrored to the server console — 149 lines against 88 of everything else in a single match. They go to the players they are for, and the console stays readable.
Bots never turned their heads: the field that sets head rotation was looked up on the wrong class, so it silently fell back to body rotation only, on every version.
1.0.1
9 September 2026
A maintenance release. Everything below was found by going through the package as a buyer would, and every fix is verified on a server started from the archive itself.
The server starts the way it was tuned
The package now ships scripts/start.sh and scripts/start.bat. Use them instead of a bare java -jar: they carry the JVM settings this product was measured against — a G1 collector aimed at short pauses, and two code-cache flags that came from diagnosing real stutter on the development server. They also check the three things that actually go wrong on a first run: no server jar, Java older than 21, and an unaccepted EULA. Set BOTERAMC_MEMORY to change the heap; it defaults to 6G.
Backup and restore actually work
backup.sh and backup.ps1 were backing up nothing you have: they named paths from the development machine. They now take your worlds, the whole plugins/ folder — jar included — and the server's own settings and player lists, into a plain folder under backups/.
restore.sh and restore.ps1 now ship. The backup guide told you to run a restore script that was not in the package. Restoring is a dry run by default, refuses anything that is not a backup this product made, and moves whatever it replaces into replaced-<date>/ so a restore can itself be undone.
Presets do something
setup.sh printed a message and did nothing at all on Linux. setup.ps1 wrote to a path from the development machine. Both now apply a preset properly: they show what it would change, take a configuration backup first, and only write when you add --apply.
Three files in every preset — modules.yml, menus.yml, messages.yml — were never read by anything and have been removed; the module switches live in config.yml, where they always did.
A preset can no longer stop the server booting
Seven presets set the storage backend to MariaDB, including ones about free-for-all settings and duels. Applying one on a default SQLite install produced a server that refused to start against a database you had never configured. Only the two presets named for MariaDB ask for it now, and the plugin's own default storage is SQLite — which needs nothing installed.
Documentation
validate-setup.sh shipped with Windows line endings and would not run on Linux at all. Five guides were stubs in the wrong language, three of them duplicating a guide that already covered the subject; they have been removed or rewritten, and every reference now points at the real one. The install guides gave three different java commands and one wrong configuration key.
Note
The resource pack contains 332 textures. Earlier material said 400; the smaller number is the correct one and is what has always shipped.
1.0.0
9 September 2026
The first public release.
What you get
One competitive arena, ready to play. Meridian, with two bomb sites, five attacker and five defender spawns, a twelve-point free-for-all spawn ring and pre-computed bot navigation. Every mode below runs on it the first time you start the server.
The Map Studio. One command — /mapstudio — turns any world you legally own into a BoteraMC arena. You place spawns and sites by standing where they go; it generates the free-for-all spawn points from the map's own walkable area, builds the bot navigation, runs a real bot match to test the map, and refuses to activate one that is not ready. No coordinates, no config files, no console. See ARENA_SETUP.md.
Eight game modes. Tactical 5v5 search-and-destroy, Deathmatch, Agents, Gun Game, One in the Chamber, Infected, 1v1 duels, and the training range.
Ten agents with forty abilities, a sixteen-rank ranked ladder, a season pass, missions, daily rewards, cosmetics, a shop, parties, friends, a tournament system, moderation tools and a lobby with parkour, NPCs and holograms.
Bots that play the game. They path on baked navigation, take sites, plant and defuse, and can fill any mode. bot qa 5v5 <map> plays a full match without a single human.
No third-party plugins. Nothing to buy, nothing to install alongside it, nothing that can break when somebody else ships an update.
Notes for this release
- Storage defaults to SQLite, which needs nothing installed.
STORAGE_GUIDE.mdcovers moving to - Server operators hold
boteramc.admin. Op yourself and every admin command, including the Map - The resource pack is required by default: the HUD is drawn with a custom font, and without the
- Additional arenas are not included. Earlier builds carried more maps; they were third-party
MariaDB when you want it.
Studio, is available. A permissions plugin can still override this per group.
pack players see empty boxes. RESOURCE_PACK_GUIDE.md explains hosting it.
recreations whose licences do not permit commercial distribution, so they were removed rather than shipped. The Map Studio is how you add your own, and original replacements will be added free.
Known limitations
- The Discord bridge ships disabled and is not part of this product.
- Redis is supported but off by default; a single server does not need it.
- SQLite is intended for one instance. Run MariaDB if you plan to run more than one.
Getting updates
Updates are published to the same product page you bought from. UPDATE_GUIDE.md describes how to apply one without losing your configuration — in short: keep plugins/BoteraMC/, replace the jar.