Skip to content

Commands

Commands are registered through Brigadier, so tab completion knows which tilesets exist and which players you can invite.

Node Grants Default
dungeon.use entering a dungeon at all op
dungeon.admin creating, destroying and inspecting dungeon worlds, and toggling the daily bypass op
mazegen.use generating mazes, and using the build tools op

dungeon.use defaults to op. Opening a new feature to the whole server at once risks somebody spending their one daily on a broken dungeon, which they cannot get back until tomorrow. Grant it in LuckPerms or permissions.yml when you are ready.

Command Does
/dungeon where you stand: today’s entry, Souls and shards, current run
/dungeon run [tileset] build today’s dungeon and go in
/dungeon leave end your run
/dungeon party who is with you
/dungeon invite <player> ask somebody to come
/dungeon knock <player> ask to be let into theirs
/dungeon accept [player] confirm an invite or a knock
/dungeon join <player> enter a run already in progress, until its lever is pulled

Everything here needs dungeon.admin.

Command Does
/dungeon dryrun <tileset> [days] build a whole dungeon with no player, report it, throw it away
/dungeon loot <tier> [theme] roll one chest and print what came out
/dungeon grant <player> <shards> add or remove Soul Shards, −16 to 16
/dungeon admin toggle your own daily bypass
/dungeon close <run> force a run to end
/dungeon reload re-read config.yml
/dungeon world create <id> make an empty dungeon world
/dungeon world destroy <id> delete one
/dungeon world list list them
/dungeon world bench <count> time world creation, 1–64
/dungeon dryrun v1
/dungeon dryrun v1 7

It builds the day’s dungeon from the console with nobody in it, reports the room count, the monsters by kind, the chests, the boss room’s bounds, the lever, the floating sign’s text, the exit portal’s block, every NPC it stood up, both info boards’ contents and the boss spawning, then deletes the world.

The optional day count runs it for a date in the future, which is how you find out whether a change works on all five elements rather than just the one today happens to be.

It also prints the economy: the exchange rate, the price of a seat, the cap, and the shards a run of this tileset is expected to pay. That report goes red when a tileset has no [loot] sign in it and no clear bonus is set, because a Soul cannot be earned on it at all.

If you add a feature, add a line to the dryrun. Everything in this project that broke silently broke because nothing printed it.

/dungeon admin turns the daily bypass on and off for whoever runs it. With it on, entry is free and the daily is never consulted, no day is stamped and no run is counted, and nothing found counts: chests hold their loot and never a Soul Shard, and the clear bonus pays nothing.

The toggle lives in memory and is cleared when you log in, so a night of testing cannot leave an account sitting outside the economy it was being used to tune. That is the reason it is a toggle rather than a permission, since a permission is invisible and stays on.

Membership is checked on presence rather than on the way in, since a player can arrive by /tp, a spectator teleport, a /back plugin, a portal or a login at a saved position, and those routes cannot all be listed. Teleports, world changes, joins, respawns and portals are checked as they happen, and a sweep once a second covers anything that moves a player without firing an event. Anyone who fails is put back at the same home a run sends people to, and the console says who, how, and which check refused them.

dungeon.admin on its own does not pass. It has to be dungeon.admin with the bypass switched on for the session, for the same reason the bypass defaults off at login. /dungeon world create therefore says so rather than teleporting you into a world you would be removed from a second later.

The ejection count is in /dungeon dryrun, where it should read zero.

/dungeon reload re-reads config.yml: loot tiers, NPC roles, board settings and the souls numbers. It does not touch the ledger, which is state rather than configuration, and reloading it would roll back everybody’s day.

Purses already saved are not re-folded when the exchange rate changes. Loose shards are folded into Souls as they are earned and again when the ledger is read at startup, so a change to shards-per-soul reaches what people already hold at the next restart.

The generator underneath. Builders mostly need savetile and the rest is tileset plumbing.

Command Does
/maze savetile <set> <name> save the current selection as a tile
/maze tool / tool wand <set> the tile stamp and cell wand
/maze select / frame selection helpers
/maze tiles / newset / deletetile / deleteset manage tilesets
/maze gen / preview generate a maze, or print what one would be
/maze undo / cancel take one back, or stop one mid-paste
/maze daily what today’s maze would be
/maze weights <set> <tile> <value|auto> tile frequency
/maze convert / export schematic migration and topology export
/maze demotiles rewrite the built-in demo tileset
/maze modes generator algorithms
/maze reload re-read config

/maze reload does not reload tilesets and says so when you run it. To force one, use /maze tiles <name>, which reloads from disk. savetile re-reads the set as it writes.