NexusCore Administration Framework 1.1.0 · Minecraft 1.21.1 · Java 21 · NeoForge, Fabric and Forge
The M4-complete release. It rolls builds 1.0.1 through 1.0.5 into one artifact and verifies them together on all three loaders.
Server-side only — players join with a completely unmodified vanilla client, admin panel included.
🔒 Security
Four security defects are closed in this version. If you are running v1.0.0, upgrade — it is unsupported.
/execute as <player>no longer borrows that player's NexusCore permissions. A vanilla level-2 operator could previously act with another player's permissions, with the audit naming the impersonated player as the actor. A substituted command source is now refused, and both the audit actor and the rate-limit subject resolve to the real issuer.- Two confused-deputy paths are closed by the same fix. A
run_commandclick event on a sign, or in a written book on a lectern, built a command source at permission level 2 with the clicking player as the entity — so a crafted sign could make a privileged player unwittingly run an administrative command in their own name. - Two permission values failed open. They now fail closed.
- Any non-player command source was granted root (carried from
1.0.1)./execute as @e[…] run nexus …ran with full privileges, andoperatorBootstrap=falseconstrained nobody.
Fixed
/teleportgenuinely exists again. For two builds it had been deleted rather than replaced, so every command block, datapack function and/execute run teleportusing the canonical name failed — while the log claimed NexusCore had taken it over.permissions.jsonis genuinely re-read. Hand edits used to be ignored and silently overwritten by the next permission change, while/nexus reloadreported success. The reload now reports the group count it actually loaded.- Safe mode no longer leaves you unable to kick a griefer. It had been deleting vanilla's
/kick,/ban,/banlist,/pardonand/listand installing nodes that then refused. Vanilla's nodes now stay in place in safe mode. - The admin panel opens in safe mode instead of refusing, degrading with a barrier tile that names the unstarted module.
- A failure inside a panel button can no longer escape into vanilla's container handling. Clicks run guarded: logged with a correlation id, container closed, and the player gets the reference.
/nexus reloadno longer throws in safe mode and half-applies settings./nexus helpno longer claims vanilla's commands as NexusCore's, and the vanilla takeover is no longer silently gated onregisterAliases.
Added
- Safe mode — start with
-Dnexuscore.safemode=trueto run core modules only, for recovering a server you cannot otherwise start. Deliberately a system property and not a config key, because a badconfig.jsonis one of the things safe mode exists to recover from. - The command reference is generated from the code (50 commands, 48 permission nodes), and
/nexus helprenders from the same descriptors, so the two cannot disagree.
Upgrading from v1.0.0
Replace the jar and restart. Existing servers need one operator action, because 1.0.1 closed a
defect where nobody below admin could confirm a destructive action:
/nexus permission group add default nexuscore.command.core.confirm
Without it a moderator can open a permanent ban and never complete it.
Verified
214 automated tests, 0 failures, 0 errors, 0 skipped. Eight runtime runs — normal and safe mode on each of NeoForge 21.1.235, Fabric and MinecraftForge 52.1.16 — with zero NexusCore errors, the audit chain intact after every run, and a clean shutdown. A real player exercised most of the feature set on a real dedicated server, including the admin panel rendering to an unmodified vanilla client.
All three jars are reproducible — byte-identical whether built locally or by CI from a bare checkout.
⚠️ Known issues in this version
NexusCore publishes its unfixed defects rather than hiding them. This is every High and Medium defect in the project's own list, not a selection — the remaining 13 are Low and are in IMPLEMENTATION_STATUS.md. Read these before you rely on it:
/seen <unknown name>can stall the server.IdentityService.resolve()falls back to a blocking Mojang HTTP lookup on the server thread, so a slow or unreachable Mojang API stalls the whole server for as long as the request takes. Reachable by any ordinary player. First item scheduled for1.1.1.- Vanish misbehaves for onlookers. Four related faults that appear only on another player's client: chat renders as a validation error, un-vanishing does not restore the entity for clients that saw it vanish, vanish is not re-applied to players who join later, and the vanished set survives death while the invisibility flag does not.
- A second ban or mute does not deactivate the first.
/unbanlifts one and reports success while the player stays banned; active counts double-count, and the strictest record is not the one returned. audit.lognever rotates. It is read fully into heap and SHA-256'd on the server thread at startup, at shutdown, and on everyverifyandtail— unbounded growth plus a synchronous full read.- A transient read error can quarantine an intact
permissions.json.JsonStore.read()quarantines on anyIOException, so a one-off read failure moves a healthy file aside and the next boot starts from defaults. config.jsonsilently loses operator keys. Loading rewrites the file from the typed object, deleting any key the schema does not know, while reportingno problems found.players.jsonis rewritten in full on every login and logout. Never pruned, and each write copies a full.bakand fsyncs twice.- Fabric death messages lose their cause. Every styled death reads
<Player> died— on Fabric only. /pardonand/banliststrand vanilla ban state. Pre-takeover vanilla bans become un-liftable, and/ban-ipand/pardon-ipare separate commands NexusCore never takes over, so IP bans are neither audited nor listed.- Only one player has ever been online at a time during testing. Everything that needs a second player is unverified — including the four vanish faults above, which appear only on another player's client.
The authoritative list of every confirmed defect is IMPLEMENTATION_STATUS.md.
Not built, and not promised: economy, chat channels, jail and reports, scheduler, backups, the benchmark harness, and the custom-screen client GUI.