Skip to content

Commands

ShowdownActions exposes one root command: /showdownactions. Every sub-command requires operator permission level 2.

CommandEffect
/showdownactions reloadReload config.conf and every .conf in actions/.
/showdownactions listPrint every registered action id, sorted.
/showdownactions info <id>Dump a single action’s resolved match, apply, and (if present) showdown clauses.
/showdownactions debug onEnable verbose [ShowdownActions] log output. Does not persist across restart.
/showdownactions debug offDisable verbose log output.

The command is registered through Fabric’s CommandRegistrationCallback and is available on every world (singleplayer included) with op rights.


Re-parses both config.conf and the actions/ directory. The reload pipeline:

  1. Re-parse config.conf. The debug flag updates immediately.
  2. Re-scan actions/. New files are loaded, removed files are dropped, edited files replace their previous version. The new ruleset takes effect at once — in-flight battle hooks never see a half-loaded state.
  3. Re-register each action’s Showdown condition, including in format-specific Showdown dex instances so singles, doubles, and other formats all see the updated rules.

A reload that fails on a single file logs the error and preserves the previous version of that action; the rest of the reload proceeds. After a successful reload, the command echoes the new total:

ShowdownActions reloaded - 14 action(s) registered.

Battles that were already in progress keep the conditions they were registered with at battle start. New battles pick up the new rules.


Prints every registered action id, sorted alphabetically. Useful for a quick “what’s loaded?” check.

Registered actions (3):
- custom_intimidate
- lycanroc_dusk
- rainy_swift_swim

Combine with /showdownactions info <id> (which has tab-completion against this list) to drill into a specific action.


Dumps the resolved match, apply, and (if present) showdown clauses for one action. The <id> argument tab-completes against the registered ids.

Action 'lycanroc_dusk'
enabled=true priority=0 target=SELF
match=MatchClause(species=lycanroc, sugar=SugarPredicates(time=dusk, ...), ...)
apply=ApplyClause(aspect=dusk, boosts=BoostBlock(atk=1, def=0, spa=0, spd=0, spe=1, ...), message=…)

This is the resolved state — whatever ShowdownActions parsed from the file, after defaults are applied to unset fields. Useful for verifying a .conf field actually parsed the way you expected. If a sugar field shows up as null here when you set it in the file, the field name or HOCON syntax is probably wrong.


Toggles verbose logging at runtime. When on:

  • Every (action, pokemon) evaluation is logged, including the compiled Molang and the match/miss result.
  • Every Cobblemon-side effect (forced aspect, console command) is logged when it fires.
  • The battle-start lifecycle logs queued volatiles, side+slot routing, and the per-battle volatile count.
  • Every Showdown JS hook fire and every error is logged through an auto-applied wrapper around your hooks.
  • The Showdown-side condition registration logs how many format-specific dex instances each condition was copied to.

The toggle is volatile — it does not persist across server restart. To make debug logging the default, set debug = true in config.conf and reload.

See Debug Logging for the log line grammar and Debugging and the Showdown Log for a worked example of reading a debug session.


All sub-commands require operator level 2 (the standard “trusted op” level in Brigadier). There’s no LuckPerms node for the command itself; the gate is the op level check.

For per-action gating against a player’s permission, see the permission field on individual actions (Action Files). That uses fabric-permissions-api and falls through to LuckPerms when installed.