Content generated with AI — it may contain mistakes.

Reference

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.

FilesCountOn every start and every reload
menus/*.yml (the player screens)13Kept up to date without undoing your edits. Yours.
menus/hotbar.yml1Copied from the jar over whatever is there.
menus/admin/*.yml6The 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.
hotbar.yml and admin/ are not yours

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

FileOpened byWhat it shows
main.yml/aimThe 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, DrillsOne 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 screenSize 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, DuelEvery 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.ymlA free player in the pickerTheir 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 hubLifetime numbers, duel record, duel streak, and buttons to Records, Sessions, Duel history and Leaderboards.
records.ymlRecords in a profileYour 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 profileYour recent drills, newest first. A personal best is drawn as a star.
history.yml/aim history, the sessions screen, the profileYour recent duels, newest first, as a victory or a defeat.
leaderboard_drills.yml/aim leaderboard, LeaderboardsThe overall board, then one board per drill.
leaderboard.ymlA 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.ymlA drill endingRating, 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.ymlComing back from a duel that ended less than a minute agoWinner, 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.

SlotButtonRight click runs
5Change drillaimtrainer:open drills
6Settingsaimtrainer:open settings
7Play againaimtrainer:replay
8Leaveaimtrainer: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.

FileWhat it does
admin/main.ymlCounts of arenas, ready arenas, running duels, running drills and players online, and buttons to Arenas, Running duels, Players and Reload.
admin/arenas.ymlEvery 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.ymlOne arena: rename it (up to 64 characters, colours allowed), set its spawn, enable or disable it, delete it.
admin/duels.ymlThe duels running now. A click asks to cancel one; both players are sent back and nothing is stored.
admin/players.ymlOnline 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.ymlThe confirmation every destructive action uses.
What the admin buttons actually do
  • 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

ActionArgumentsWhat 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

ActionArgumentsWhat 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:

PlaceholderValue
%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