Standards 1.4.0 / MC 1.21.11
Curse Maven Snippet
What's new
Tested with two clients before release, which found six bugs the self-test structurally could
not reach — a /sudo that told the caller nothing, /condense counting the wrong thing and
leaving ghost items, /world landing on the Nether roof, /butcher skipping exactly the modded
mobs it exists to clear, and /nick refusing your own name. Each is described under Fixed.
Added
/nick,/realnameand/whois. A nickname replaces your name in chat only — the tab list and the nameplate keep the real one, and that is the design rather than a limitation. It is what keeps a nickname a flourish instead of a disguise, and it means "who is that" is answerable by anyone who glances at tab without knowing a command exists. Nicknames wear a~by default.A nickname may not be another player's real name, nor another player's nickname, checked against every name the server has seen rather than who is online — impersonating somebody who is asleep is the version that works, since they are not there to object. The rule lives in the store, not the command, so an admin setting one for somebody else goes through the same door.
/realnameis open to everyone on purpose: if only staff can tell who somebody is, the feature is a disguise. Colour codes needstandards.nick.color; without it they are stripped rather than refused, because somebody who pasted a code they did not know about wanted the word./iand/item— give yourself a stack. This reverses a NO inCOMMANDS.md, which had reasoned that vanilla's/givecovers it and "the short alias is the only draw". The short alias is the draw, and in a mod whose stated thesis is that muscle memory is the product, that is sufficient — the owner was still reaching for/imonths after the verdict. A bare/i stonegives a full stack, capped at what the item really stacks to. Op-gated; vanilla's/giveis untouched./tpx,/tphereand/tppos— the admin teleports, at/tpxrather than/tpbecause merging onto vanilla's literal would leave the winner depending on mod load order. They exist beside vanilla for two reasons: a permission node instead of an op level, so a builder can be trusted with them without also getting/stop; and/tppostakes a dimension without needing/execute infirst. They route through the normal teleport machinery, so they get safe landing and a/backtrail./motd,/rulesand/info— owner-written text, as numbered keys inmessages.yml(msg.rules.1,.2, …) printed until a number is missing. No second file format: that file already handles colours, vocabulary and upgrades without eating your edits, and arules.txtwould need all of it again. The MOTD also prints on join, last, so the other join lines do not push it off the screen./butcherand/killall— clear mobs in a radius. What it refuses to touch is the whole command: never players, never tamed animals, never named mobs, and never anything the game marks as deliberately placed. Passive mobs only if you addall.Per-kit access —
/kitaccess <kit> <everyone|ops|permission>. An op-only kit of test gear, or a rank's daily kit, without hand-editing permissions for each one.This also closes a hole. Per-kit nodes existed, but they were gathered once at server start, and a kit created since then had none — which the check read as "open to everybody". A new VIP kit was therefore claimable by the whole server until the next restart, and no grant or deny could close it, because there was nothing to grant. Access now travels with the kit, so it applies the moment the kit exists.
NODES.md— every permission node with its default, generated from the source bypython3 scripts/nodes.py. Plus/standards nodes, which lists what a running server has actually registered, including the start-up-built ones no static list can know.Automatic promotions — a guest ladder that runs itself.
startingGroup = "guest" promotions = ["guest -> regular after 24h and 2h played"]Two clocks, because they answer different questions. Real time since we first saw somebody asks for patience — a few minutes is enough to lose the fly-by griefer who is on another server by now, and it costs an honest new player nothing. Played time asks them to have actually done something, and is counted only while they are not AFK — unlike Minecraft's own
PLAY_TIMEstatistic, which happily counts a player idling in a corner all night, which is exactly the promotion you did not want to give. Give both and both must pass.startingGroupis notdefaultGroup: that one is consulted last for everybody and nobody is a member of it, while this is real membership a player can be promoted out of. A player who already has a group is left alone, so an admin's ranking is never undone by a later login.Conditions are a seam rather than a fixed pair — a vote, a website purchase, a moderator's nod are the same shape as a clock, and
Rule.satisfiedByis the only place that decides.Configure a rule under LuckPerms and the server says so at startup instead of silently doing nothing, and names LuckPerms' own
tracksas the equivalent. The warning only appears when rules exist.Eight more from the catalogue, clearing every MAYBE that was worth building:
/repair/fix— mend the held item, or/repair all. Says so when the item cannot be damaged rather than reporting success on a stack of cobblestone./morefills the held stack;/condensemerges partial stacks and is open to everyone, because it creates nothing. Deliberately not EssentialsX's nine-ingots-to-a-block conversion: that is a crafting operation and/craftalready exists./itemnameand/itemlore—&colours work; lore adds a line at a time, because a set-everything command needs a separator and whichever character were chosen is the one somebody wants in their text./powertool/pt— bind a command to an item, run it by right-clicking. A staff shortcut, distinct from LegendQuest's/bind, which is a game ability on an item. Dispatched as the holder with the holder's permissions, so it can never be an escalation./motd/rules/infotake placeholders —{player}(their nickname if they have one),{name},{rank},{playtime},{world},{online},{max}— so the welcome can greet somebody properly instead of shouting at the room. The full list is in the header ofmessages.yml. A placeholder that does not exist is reported in the log rather than shown to a player, which is the unfilled-placeholder guard below catching its second bug./rankon its own is open to everyone, and answers only about the person asking: what you are, and what you are working towards — "next: regular — needs 18m more and 45m more played". Needing an operator to tell you your own rank made the ladder something happening to a player rather than something they were climbing. The editing subcommands stay op-gated./depth/compass— redundant with F3, except on a server runningreduced_debug_info, where players have no coordinates or bearing at all. Separate nodes, so you can give out a compass and not a Y coordinate./world/worlds— same X and Z, different dimension. Does not scale coordinates: that rule belongs to portals, and dividing by eight silently would be wrong exactly when it mattered./sudo— run a command as somebody with their permissions. This reverses the catalogue's reasoning:/execute asdoes not cover it, because brigadier checks permissions at parse time against whoever typed the line./sudoparses against the target, so it can fail — and that refusal is the answer. It is how you test what a rank can really do without asking somebody to log in, which cost a two-client session last time./playtime/leaderboard— time online and not AFK, so an AFK farm does not climb the board. The same counter promotions wait on.
Fixed
/sudotold the caller nothing. The target saw the refusal as though they had typed it — correct — but from the asking side an attempt and a refusal looked identical. It now reports the outcome, and distinguishes refused from no such command: brigadier reports a permission refusal as "Unknown or incomplete command", which is true for the target and useless for you./condensecounted the wrong thing, and left ghost items. It reported items moved — two stacks of 32 said "32" — when what a player wants to know is slots freed. And a fully drained stack was left in its slot at zero count, which a client can render as a phantom item./worldcould land you on the Nether roof. Your Y carried across, so arriving from above the clouds put the safe-landing search on top of the bedrock ceiling: a perfectly safe landing somewhere nobody is meant to stand. The Y is now clamped to the destination's ownlogicalHeight./butcherskipped the mobs it exists to clear. ZombieMod names every zombie (hidden) and marks some persistent, so both "somebody's mob" guards fired on the whole horde. Mods use custom names as a data channel and nothing can tell that from a player's name tag — hence the newforcetier, which drops those two guesses and keeps the three certainties./nick <your own name>was refused as impersonation. Offline UUIDs are case-sensitive, so the name cache holdsSablednahandsablednahas two players and your own name matched the other. Your own name now clears the nickname instead — nobody has ever meant "impersonate myself".A bare
/nicksaid "Unknown or incomplete command". It now shows what chat calls you, with a clickable[Clear].A message could reach a player with a placeholder still in it.
/kitaccessraisedmsg.kit.unknownwithout its{list}argument, so an admin was told "No kit called x. Try: ", braces and all — four other call sites passed it and one did not.Lang.fmtnow warns once per key when it renders a line that still contains one, so the next of these is found in the log rather than by a player.Colour codes in a nickname could not be typed at all. Brigadier's
word()accepts letters, digits and_.+-and stops dead at&, sostandards.nick.colorgated a feature that was unreachable — the second time this exact trap has cost a feature, after the permission wildcards and*. Both are nowgreedyStringsplit in code.CLAUDE.mdrecords it as a rule: any argument that can contain punctuation must not beword().
This mod has no additional files

