-
Notifications
You must be signed in to change notification settings - Fork 0
Command Reference
All commands live under /sign and require operator permission (or the omnisign.edit permission node — see Permissions) to configure. Every subcommand that edits a sign requires you to be looking directly at it within reach, unless noted otherwise.
| Command | Description |
|---|---|
/sign command add console <command> |
Adds a command that runs with full console (permission level 4) permissions. |
/sign command add player <command> |
Adds a command that runs with the clicking player's own permission level. |
/sign command remove <index> |
Removes one command by its index. |
/sign command clear |
Removes all hidden commands from the sign. |
/sign command list |
Lists every command sign in the world (not just the one you're looking at), with commands nested underneath each. |
/sign command copy |
Copies the targeted sign's hidden commands to your personal clipboard. |
/sign command paste |
Pastes your clipboard onto the targeted sign. |
/sign command test |
Dry-run: runs the sign's commands immediately, as you, bypassing cooldown. |
/sign command redstone on|off |
Toggles whether the sign's hidden commands also fire automatically when it receives a redstone signal, with no click needed. Always runs with console permission (there's no player to run as). |
/sign command proximity <radius 1-16> |
Enables the sign firing automatically for any player who walks within radius blocks. Fires once per approach, respects console/player mode and permissions normally since a real player triggered it. |
/sign command proximity off |
Disables the proximity trigger. |
/sign command schedule <ticks 20-72000> |
Enables the sign firing on its own timer, every ticks ticks (20 ticks = 1 second), with no player or redstone involved. |
/sign command schedule off |
Disables the scheduled trigger. |
/sign command chain <id> |
Adds a chain entry pointing at the sign with that ID — when this sign triggers, that sign's hidden commands run too (and its own chains, cascading up to 8 hops deep). Cycle-safe. |
/sign command id |
Shows (assigning one first if needed) this sign's permanent chain ID, for use with chain above. |
/sign command delay <ticks 1-72000> |
Adds a pause to the command list: everything after it runs once the wait is over (20 ticks = 1 second). If the triggering player logs off during the wait, the rest is skipped. |
/sign command order sequential|random|cycle |
sequential (default) runs every command in order; random runs one random command per trigger; cycle runs the next command per trigger, wrapping around. Delays only apply to sequential. |
/sign command cooldown <seconds 0-2592000> |
Each player must wait this long between uses of the sign. 0 disables. |
/sign command limit player <uses> |
Each player can use the sign at most this many times. 0 disables. |
/sign command limit total <uses> |
The sign can be used this many times by everyone combined, then it's "used up". 0 disables. Also applies to redstone and scheduled triggers. |
/sign command limit reset |
Clears the sign's use counters and cooldown timers. |
Cooldowns and limits apply to hidden-command signs, on right-click and proximity triggers (per-player rules) and on redstone/scheduled triggers (total limit only). A refused click tells the player why; /sign command test ignores limits. Counters are cleared automatically when the sign is broken.
Example - a kit sign usable once per player per day:
/sign command add console give {player} bread 16
/sign command cooldown 86400
Example - a countdown that then teleports the clicker:
/sign command add console title {player} title "Teleporting..."
/sign command delay 60
/sign command add console tp {player} 0 100 0
Placeholders available in any command: {player}, {uuid}, {x}, {y}, {z}. A redstone-fired or scheduled sign has no player, so {player} resolves to redstone and {uuid} to all zeroes; a proximity-fired sign uses the real approaching player, and a chained sign inherits whatever player context (or lack of one) started the chain.
Chaining without typing anything: run /sign wand to get a chain wand (a plain stick with a distinctive name — not a custom item, so this stays purely server-side). Right-click a hidden-command sign to select it, then right-click a second sign to link them; right-clicking the first sign again cancels the selection. This does the same thing as /sign command id + /sign command chain <id> in one motion.
| Command | Description |
|---|---|
/sign animate addframe <line1>|<line2>|<line3>|<line4> |
Adds one frame. 1–4 lines separated by |; missing lines are left blank. Supports &-color codes. |
/sign animate interval <ticks> |
Sets how many ticks between frame changes (20 ticks = 1 second). |
/sign animate remove <index> |
Removes one frame. |
/sign animate clear |
Stops and clears the sign's animation. |
/sign animate list |
Lists every animated sign in the world, with its frames nested underneath. |
Example:
/sign animate addframe &6==>|&eStep Right Up!
/sign animate addframe &e<==|&6Step Right Up!
/sign animate interval 20
A "WARP HUB" sign cycling between two colors:
![]() |
![]() |
Frames can include live values that refresh automatically: {online}, {max} (players), {time} (server clock), {date}, {daytime} (in-game clock) and {day} (in-game day number). A single-frame animation makes a live display:
/sign animate addframe &6Players|&e{online}/{max}|&7{time}
| Command | Description |
|---|---|
/sign menu create <rows 1-6> <title> |
Creates (or resizes/retitles) the sign's menu. Title supports &-color codes. |
/sign menu page add |
Adds a new empty page, returns its index. |
/sign menu page remove <page> |
Removes a page (can't remove the last remaining one — use clear instead). |
/sign menu page list |
Lists the pages on the sign you're looking at. |
/sign menu button add <page> <slot> <item> <name> |
Adds a button. item accepts any item ID (e.g. minecraft:diamond). |
/sign menu button lore <page> <slot> <text> |
Appends one lore line to a button (call repeatedly for multiple lines). |
/sign menu button command <page> <slot> console|player <command> |
Attaches a command to a button, run in console or player mode. |
/sign menu button remove <page> <slot> |
Removes a button. |
/sign menu clear |
Removes the sign's entire menu. |
/sign menu list |
Lists every menu sign in the world, with pages and buttons nested underneath. |
/sign menu test |
Opens the menu immediately, as a preview, without needing to right-click the sign. |
When a menu has more than one page, the last two slots of the bottom row automatically become live Previous/Next navigation buttons — avoid placing your own buttons there once you add a second page.
The menu GUI is fully locked: nothing can be picked up, placed, or shift-clicked in or out of it — it's a pure button grid, not a real inventory.

Setup requires editing the config file first — you cannot paste a webhook URL in-game.
/sign discord addonly ever takes a short name, never the URL itself, so the secret URL can't leak into/sign discord list, exports, or templates.
- Stop the server and open
config/omnisign-common.toml.- Add your webhook to the
discordWebhookslist as"name=url"— the quotes around it are required TOML syntax, not optional, or the config will fail to load:discordWebhooks = ["reboot=https://discord.com/api/webhooks/123456789/abcdefg"]- Restart the server.
- In-game, reference it by name only —
rebootin this example, never the URL:/sign discord add reboot Server is rebooting!If you try to
/sign discord add <the URL>directly, it will look up that string as a name, fail to find a match, and silently never send.
| Command | Description |
|---|---|
/sign discord add <webhook> <message> |
Attaches a notification. webhook is a name configured in discordWebhooks (see Configuration), not a URL. |
/sign discord remove <index> |
Removes one notification. |
/sign discord clear |
Removes all Discord notifications from the sign. |
/sign discord list |
Lists every sign with a Discord notification, across the world. |
/sign discord test |
Sends the sign's notifications right now, without triggering the sign for real. |
Discord notifications fire before any hidden commands run, so a sign that also runs a shutdown command (a "reboot sign") can't cut the notification off:
/sign discord add reboot 🔄 Server is rebooting (triggered by {player})
/sign command add console stop
| Command | Description |
|---|---|
/sign template save <name> |
Saves the targeted sign's full setup (commands + animation + menu + Discord) under a name, to disk. |
/sign template apply <name> |
Applies a saved template to the targeted sign, overwriting its current setup. |
/sign template delete <name> |
Deletes a saved template. |
/sign template list |
Lists all saved template names. |
Templates are stored server-wide and shared across every world on the server (not tied to a save).
| Command | Description |
|---|---|
/sign inspect |
Shows everything the sign you're looking at does: commands (with chains and delays), run mode and order, triggers, limits, how often it's been used, plus any animation, menu and Discord setup. |
/sign wand inspect |
Gives you an inspect wand (a plain blaze rod with a distinctive name — no custom item, so the mod stays server-side only). Right-click any sign with it to see the same summary. |
/sign log [count] |
Shows the most recent player-caused triggers (default 10, up to 50): time, position, kind (click, menu, proximity) and player. Also written to config/omnisign/triggers.log. Redstone and scheduled triggers are not logged. |
Reverts your most recent change to any sign (across command/animate/menu/Discord edits), up to 20 steps back per player. Every destructive command's success message includes a reminder to use this.
| Command | Description |
|---|---|
/sign export <name> |
Saves every OmniSign sign currently loaded to a backup file. |
/sign import <name> |
Restores a backup — applies saved data to whatever sign block currently exists at each saved position (skips positions where the chunk isn't loaded or the block there isn't a sign anymore). |
/sign backups |
Lists available backup files. |
This backs up OmniSign's data, not the sign blocks themselves — a sign must already physically exist at a position for import to do anything there.

