Commands
Base command: /mobs. The class-level @CommandPermission("mobs.command") on MobsCommand applies to every subcommand below — there is no separate per-subcommand permission node.
Command | Permission | Completion | Description |
|---|---|---|---|
|
|
| Spawn a mob blueprint at the sender's location. Player-only. |
|
|
| Preview a blueprint's loot table without spawning anything. Player-only. |
|
| — | Reload the plugin configuration and blueprints. |
/mobs summon <blueprint>
Permission: mobs.command. Player-only — the handler takes a Player, not a CommandSender.
<blueprint> is resolved through MobBlueprintContextResolver, which pops the argument and looks it up with AstralMobs#blueprints().findById(id); an unknown id throws InvalidCommandArgument ("Mob blueprint '<id>' not found."). Tab completion (@mobBlueprints, backed by MobBlueprintCompletionHandler) lists the keys of AstralMobs#blueprints().all() — the ids of every loaded mob blueprint.
On success, MobService#summon spawns the resolved blueprint at the sender's current location (sender.getLocation()).
/mobs loot <blueprint> [rolls]
Permission: mobs.command. Player-only. Rolls a blueprint's loot table the configured number of times and reports what came out — nothing is spawned, killed or dropped, and entry actions are not run.
Arg | Type | Default | Description |
|---|---|---|---|
| MobBlueprint | — | The blueprint whose table to roll. |
| int |
| How many times to roll. Must be between 1 and 10 000; outside that the command errors. Tab completion offers 1–1000. |
The rolls resolve requirements and %mob_*% placeholders against a real blueprint mob that is never added to the world, with the sender as the killer — so a requirement-gated entry is evaluated exactly as it would be on a kill.
The output has two blocks:
Entries — one line per entry: its configured chance, how many times it fired, and that as a percentage of the rolls. An entry is tagged
[requirement-gated]when it has requirements (its hit rate can then sit far below its chance),[actions only]when it declares no items, or both — so an entry that never fires is visible rather than silently absent.Drops — the total of each item across all rolls with its average per roll, then the grand total. The per-roll average is the number that says what a kill is actually worth.
A blueprint with no loot table answers "Blueprint '<id>' has no loot table." and rolls nothing.
/mobs reload
Permission: mobs.command. No arguments; works from console or as a player.
Sends the reloading message, then calls AstralMobs#loadConfiguration(), which re-runs:
messages.ymlreloadconfig.ymlreloadBlueprintService#load()— re-scans every YAML file underblueprints/and rebuilds the id lookup used by/mobs summonand its tab completion
On success the sender gets reloaded, followed by a line showing the count of loaded blueprints. If loadConfiguration() throws, the exception is logged to console via AstralMobs#getSLF4JLogger() and the sender gets reload-failed instead.
Reload messages
The three reload messages are plain component values in messages.yml and can be edited freely:
Key | Default |
|---|---|
|
|
|
|
|
|
Permission summary
Node | Grants |
|---|---|
| Base node for |