Menus
The twenty menu files, which ones survive an update, what each screen does, and every aimtrainer action a file can bind.
Twenty files ship under plugins/ExyliaAimTrainer/menus/, and they are updated in three different ways.
| Files | Count | On every start and every reload |
|---|---|---|
menus/*.yml (the player screens) | 13 | Kept up to date without undoing your edits. Yours. |
menus/hotbar.yml | 1 | Copied from the jar over whatever is there. |
menus/admin/*.yml | 6 | The folder is replaced with the one in the jar. |
The player screens go through ExyliaLib's bundled-file update:
- a missing file is written, unless it was installed before and you deleted it;
- a key new in a release is added to your file at once, comments included;
- a default that changed on a key you never touched is not applied, but listed in
/exylialib updates, where you apply or keep it; - anything you changed or deleted is never touched.
menus/hotbar.yml is overwritten from the jar on every start and by the hotbar step of every
/aimtraineradmin reload, and menus/admin/ is replaced wholesale on every start and every reload. Edits
to either are lost without a warning. The hotbar can still be turned off for everyone with
hud.hotbar: false.
A file that fails to parse is reported in the console with its path and the reason, and that one screen does not open until it is fixed. A broken hotbar is reported the same way, and the drill runs without it.
The format is ExyliaLib's declarative menu YAML; see the library's menus page.
The player screens
| File | Opened by | What it shows |
|---|---|---|
main.yml | /aim | The hub: Drills, Duel, Settings, your profile, Leaderboards and History. A Leave button appears only while you are in a drill or a duel. |
drills.yml | /aim drills, Drills | One row per drill, in config.yml order, with its duration and your best rating, which arrives once the database answers. A click starts it; from inside a drill it changes the drill instead. The settings button returns here. |
settings.yml | /aim settings, Settings in the hub, the drill list, the hotbar and the summary screen | Size and distance (left click up, right click down, shift click to type an exact value), colour and style (left next, right previous), the five switches, and the difficulty they add up to. Back returns to the screen it was opened from. |
opponents.yml | /aim duel, Duel | Every online player you can see, those free to duel first. Refreshed every second while open. A busy player shows why and cannot be clicked. |
duel.yml | A free player in the picker | Their record, the format picker and the drill list. The format you pick is remembered on your profile. A drill click sends the request. |
profile.yml | /aim profile, the hub | Lifetime numbers, duel record, duel streak, and buttons to Records, Sessions, Duel history and Leaderboards. |
records.yml | Records in a profile | Your best result per drill, in config.yml order. Always your own, even from another player's profile. |
sessions.yml | /aim sessions, History in the hub, the profile | Your recent drills, newest first. A personal best is drawn as a star. |
history.yml | /aim history, the sessions screen, the profile | Your recent duels, newest first, as a victory or a defeat. |
leaderboard_drills.yml | /aim leaderboard, Leaderboards | The overall board, then one board per drill. |
leaderboard.yml | A board in the picker, /aim leaderboard <drill> | The top leaderboard.entries players. The category buttons along the bottom re-sort the open board in place. The overall board has only Rating and Accuracy. |
drill_result.yml | A drill ending | Rating, score, difficulty, accuracy, speed, and your previous best with the change. A Personal best item appears when you beat it. Play again, Change drill, Settings and Leave. |
result.yml | Coming back from a duel that ended less than a minute ago | Winner, runner-up, the series score and a Rematch button, greyed out when the opponent has left. |
The hotbar
hotbar.yml is drawn over the hotbar during a drill and during a duel. Its items are packets, not real
items: nothing can be dropped or moved. Slots 0 to 4 are left to the real inventory, because slot 0 holds
the drill's weapon.
| Slot | Button | Right click runs |
|---|---|---|
| 5 | Change drill | aimtrainer:open drills |
| 6 | Settings | aimtrainer:open settings |
| 7 | Play again | aimtrainer:replay |
| 8 | Leave | aimtrainer:leave |
In a duel Play again does nothing: there is no drill of your own to replay. Change drill still opens the list there, but a pick is refused as busy.
The admin screens
Reached through /aimtraineradmin. Everything destructive goes through one shared confirmation.
| File | What it does |
|---|---|
admin/main.yml | Counts of arenas, ready arenas, running duels, running drills and players online, and buttons to Arenas, Running duels, Players and Reload. |
admin/arenas.yml | Every arena, sorted by id. One that is enabled and has a spawn is READY; anything else is drawn as INCOMPLETE. New arena asks for an id. |
admin/arena.yml | One arena: rename it (up to 64 characters, colours allowed), set its spawn, enable or disable it, delete it. |
admin/duels.yml | The duels running now. A click asks to cancel one; both players are sent back and nothing is stored. |
admin/players.yml | Online players with their rating, accuracy, sessions and duel record. Free players: click to reset their statistics. Busy players: left click stops their session, right click resets. |
admin/confirm.yml | The confirmation every destructive action uses. |
- INCOMPLETE also covers a disabled arena that has a spawn, although its lore says to set one.
- Disable and Delete stop every drill and cancel every duel in the arena first. Disabling asks for no confirmation; deleting does.
- Stop the session has no confirmation and only stops a drill. On a player in a duel it does nothing; cancel the duel from Running duels instead.
- Reset statistics zeroes the profile (duel record included, settings kept), deletes every record and deletes the session history. The duel history rows are not deleted, although the confirmation says every duel is.
Actions
Every click a menu file, the hotbar or another plugin's file can name lives under the aimtrainer
namespace. Actions that read a row only work from the screen that supplies that row.
Player actions
| Action | Arguments | What it does |
|---|---|---|
aimtrainer:open | [screen] | Opens a screen: main, drills, settings [origin], opponents, profile (your own), records, history, sessions, leaderboard_drills, or leaderboard <drill> [category]. No argument or anything else opens main. origin is the screen Back returns to. |
aimtrainer:train | <drill> | Closes the menu and starts that drill. Inside a drill session it changes the session to that drill instead, in the same arena. |
aimtrainer:replay | — | Closes the menu and runs your current drill again from its countdown, with your current settings. |
aimtrainer:leave | — | Closes the menu, if any, and leaves your drill or forfeits your duel. |
aimtrainer:setting | <size|distance|colour|style> [step] | Moves a setting by a signed number of clicks, 1 by default. Also size_value <number> and distance_value <number> for an exact multiplier, brought inside the range. The settings screen redraws in place. |
aimtrainer:setting_input | <size|distance> | Closes the menu and asks for an exact multiplier inside the configured range, then reopens the settings. |
aimtrainer:toggle | <sidebar|boss_bar|action_bar|hit_sounds|particles> | Flips one switch. |
aimtrainer:select_format | <bestOf> | Picks a format on the open duel screen and remembers it. |
aimtrainer:duel_open | — | Row action in opponents.yml: opens the duel screen for that player. |
aimtrainer:duel_send | <drill> | On the duel screen: sends the request with the selected format. |
aimtrainer:leaderboard_drill | — | Row action in leaderboard_drills.yml: opens that board by rating. |
aimtrainer:leaderboard_category | — | Row action in the categories of leaderboard.yml: re-sorts the open board. |
aimtrainer:rematch | — | Sends a request with the same drill and format to the opponent of your last duel. result.yml passes %match_id%, which the action ignores. |
A setting changed while you are in a drill is saved and applies from the next one.
Admin actions
| Action | Arguments | What it does |
|---|---|---|
aimtrainer:admin_open | [main|arenas|arena <id>|duels|players] | Opens a staff screen; main by default. |
aimtrainer:admin_reload | — | Runs the reload and reopens the admin menu. |
aimtrainer:admin_arena_create | — | Asks for an id; the arena is stored lowercased, named after what was typed, and its screen opens. |
aimtrainer:admin_arena_rename | <id> | Asks for a display name. |
aimtrainer:admin_arena_spawn | <id> | Starts the setup wizard: stand where the spawn goes, facing where the targets should appear. |
aimtrainer:admin_arena_toggle | <id> | Enables or disables the arena; disabling stops everything running in it. |
aimtrainer:admin_arena_delete | <id> | Opens the confirmation for admin_arena_delete_do. |
aimtrainer:admin_arena_delete_do | <id> | Stops everything in the arena and deletes it. |
aimtrainer:admin_duel_cancel | <match uuid> | Opens the confirmation for admin_duel_cancel_do. |
aimtrainer:admin_duel_cancel_do | <match uuid> | Cancels the duel. |
aimtrainer:admin_session_stop | <player uuid> | Stops that player's drill, without confirmation. |
aimtrainer:admin_player_reset | <player uuid> | Opens the confirmation for admin_player_reset_do. |
aimtrainer:admin_player_reset_do | <player uuid> | Resets the profile, the records and the session history. |
None of these check exyliaaimtrainer.admin. See Permissions.
What a drill row knows
Every screen that lists drills — drills.yml, duel.yml and leaderboard_drills.yml — builds the row the
same way, so these values work in any of their templates:
| Placeholder | Value |
|---|---|
%drill_id% | The key in drills. |
%drill_name% | display-name. |
%drill_icon% | icon. |
%drill_description% | description. |
%drill_kind% | The kind's name from menu.kinds. |
%drill_duration% | duration, written out. |
%drill_targets% | targets. |
%drill_size% | size. |
%drill_distance% | distance.min-distance.max. |
%drill_weight% | weight. |
drills.yml adds %size%, %distance%, %difficulty%, %best_rating%, %best_score%,
%best_accuracy% and %sessions% for the viewer; duel.yml adds %format% and %rounds_to_win%.
Any screen can also use the plugin's own %exyliaaimtrainer_*% placeholders, as main.yml does; see
Placeholders.
Something missing on this page? Tell us on Discord