promotional bannermobile promotional banner

SableCraft Standards

Do you have Standards? Every server command you end up needing, and an economy other mods can drive. /fly, /god, /home, /warp, /tpa, /back, /top, /kit, /vanish, /invsee, mail, mutes, bans - the set every server installs , built to work WITH other mods!
Back to Files

Standards 1.4.0 / MC 26.1.2

File namestandards-1.4.0+mc26.1.2.jar
Uploader
sablednahsablednah
Uploaded
Sep 1, 2026
Downloads
6
Size
849.3 KB
Mod Loaders
NeoForge
File ID
8785778
Type
R
Release
Supported game versions
  • 26.1.2

Curse Maven Snippet

NeoForge

implementation "curse.maven:sablecraft-standards-1670445:8785778"

Learn more about Curse Maven

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, /realname and /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.

    /realname is open to everyone on purpose: if only staff can tell who somebody is, the feature is a disguise. Colour codes need standards.nick.color; without it they are stripped rather than refused, because somebody who pasted a code they did not know about wanted the word.

  • /i and /item — give yourself a stack. This reverses a NO in COMMANDS.md, which had reasoned that vanilla's /give covers 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 /i months after the verdict. A bare /i stone gives a full stack, capped at what the item really stacks to. Op-gated; vanilla's /give is untouched.

  • /tpx, /tphere and /tppos — the admin teleports, at /tpx rather than /tp because 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 /tppos takes a dimension without needing /execute in first. They route through the normal teleport machinery, so they get safe landing and a /back trail.

  • /motd, /rules and /info — owner-written text, as numbered keys in messages.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 a rules.txt would need all of it again. The MOTD also prints on join, last, so the other join lines do not push it off the screen.

  • /butcher and /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 add all.

  • 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 by python3 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_TIME statistic, 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.

    startingGroup is not defaultGroup: 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.satisfiedBy is 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 tracks as 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.
    • /more fills the held stack; /condense merges 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 /craft already exists.
    • /itemname and /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 /info take 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 of messages.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.
    • /rank on 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 running reduced_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 as does not cover it, because brigadier checks permissions at parse time against whoever typed the line. /sudo parses 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

  • /sudo told 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.

  • /condense counted 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.

  • /world could 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 own logicalHeight.

  • /butcher skipped 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 new force tier, 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 holds Sablednah and sablednah as 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 /nick said "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. /kitaccess raised msg.kit.unknown without 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.fmt now 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 &, so standards.nick.color gated a feature that was unreachable — the second time this exact trap has cost a feature, after the permission wildcards and *. Both are now greedyString split in code. CLAUDE.md records it as a rule: any argument that can contain punctuation must not be word().

This mod has no additional files