Content generated with AI — it may contain mistakes.

Configuring

Drills

The four kinds, the sixteen shipped drills with every key they are written with, and how to add a seventeenth.

A drill is not a name the code knows. It is a block of numbers under drills in config.yml: one of four kinds, and how many targets, how big, how far, where, for how long, whether they move and what the player holds. The sixteen shipped drills are those numbers and nothing else, which makes them the reference for any drill you add. Menus, records, leaderboards and placeholders pick a new block up by its id.

The four kinds

KindWhat the player doesScored on
FLICKHits targets. A hit one disappears and another appears somewhere else.Points per minute: hits earn, misses and expired targets cost.
REACTIONWaits for a grey target to light up, then hits it.The average reaction, corrected for ping; a click before the light costs.
TRACKKeeps the crosshair on a player-shaped target that strafes. Clicking does nothing.The percentage of the session the crosshair was on it.
COMBOFights a player-shaped target with a real weapon, at three blocks of reach. Every hit knocks it back.Points per minute like FLICK, plus a bonus for every hit that extends a combo.

The formulas are on Scoring.

The shipped drills

DrillNameKindWeightTargetsSizeDistanceWhat makes it
gridshotGridshotFLICK1.030.86A 3×3 grid straight ahead, 11° between cells.
scatterScatterFLICK1.030.86–8Three targets anywhere in a 50° spread, 9° apart.
sixshotSixshotFLICK1.360.557Six small targets on a 5×4 grid, 8° between cells.
microshotMicroshotFLICK1.410.457–8One small target close to the crosshair: a 24° spread.
spidershotSpidershotFLICK1.210.76–8Every other target dead ahead, so each flick out comes back.
flickWide flicksFLICK1.210.75–10A 110° spread, each target at least 25° from the last.
precisionPrecisionFLICK1.610.358–12One tiny target, far away.
decayDecayFLICK1.320.756–9Targets expire after 1.2 seconds.
switchTarget switchFLICK1.340.76–9Four up, one lit at a time; only the lit one counts.
strafeStrafe shotFLICK1.410.96–7One target that strafes and hops instead of respawning.
reactionReactionREACTION1.011.06Ten lights, 1 to 3.5 seconds apart.
trackingTrackingTRACK1.010.6 × 1.85A player-sized target strafing at 2–4.5 blocks a second.
evasiveEvasiveTRACK1.410.6 × 1.84.5Faster strafes, quicker turns, more hops.
comboCombo 1.8COMBO1.310.6 × 1.83–3.5Diamond sword, no attack cooldown, 0.8 blocks of knockback.
combo_19Combo 1.9COMBO1.410.6 × 1.83–3.5Diamond sword with the cooldown: an uncharged swing is rushed.
axeAxe timingCOMBO1.510.6 × 1.83–3.5Diamond axe with the cooldown, a 1.6-second combo window.

Every drill runs 30 seconds except reaction, which ends on its tenth light and is capped at 90. Sizes and distances are blocks, before the player's own settings multiply them.

As written in the generated file:

plugins/ExyliaAimTrainer/config.yml
drills:
  gridshot:
    display-name: Gridshot
    icon: LIME_CONCRETE
    description: Three targets on a 3×3 grid.
    kind: FLICK
    weight: 1.0
    duration: 30.0
    targets: 3
    size: 0.8
    height: 0.0
    distance:
      min: 6.0
      max: 6.0
    spread:
      yaw: 0.0
      pitch-min: 0.0
      pitch-max: 0.0
    grid:
      columns: 3
      rows: 3
      spacing: 11.0
    lifetime: 0.0
    ordered: false
    return-to-centre: false
    min-separation: 0.0
    weapon: ""
  scatter:
    display-name: Scatter
    icon: GREEN_CONCRETE
    description: Three targets anywhere. Hit them fast.
    kind: FLICK
    weight: 1.0
    duration: 30.0
    targets: 3
    size: 0.8
    height: 0.0
    distance:
      min: 6.0
      max: 8.0
    spread:
      yaw: 50.0
      pitch-min: -8.0
      pitch-max: 22.0
    lifetime: 0.0
    ordered: false
    return-to-centre: false
    min-separation: 9.0
    weapon: ""
  sixshot:
    display-name: Sixshot
    icon: BLUE_CONCRETE
    description: Six small targets on a wide grid.
    kind: FLICK
    weight: 1.3
    duration: 30.0
    targets: 6
    size: 0.55
    height: 0.0
    distance:
      min: 7.0
      max: 7.0
    spread:
      yaw: 0.0
      pitch-min: 0.0
      pitch-max: 0.0
    grid:
      columns: 5
      rows: 4
      spacing: 8.0
    lifetime: 0.0
    ordered: false
    return-to-centre: false
    min-separation: 0.0
    weapon: ""
  microshot:
    display-name: Microshot
    icon: PINK_CONCRETE
    description: Small targets close to the crosshair.
    kind: FLICK
    weight: 1.4
    duration: 30.0
    targets: 1
    size: 0.45
    height: 0.0
    distance:
      min: 7.0
      max: 8.0
    spread:
      yaw: 24.0
      pitch-min: -4.0
      pitch-max: 10.0
    lifetime: 0.0
    ordered: false
    return-to-centre: false
    min-separation: 3.0
    weapon: ""
  spidershot:
    display-name: Spidershot
    icon: COBWEB
    description: Flick out, then back to the centre.
    kind: FLICK
    weight: 1.2
    duration: 30.0
    targets: 1
    size: 0.7
    height: 0.0
    distance:
      min: 6.0
      max: 8.0
    spread:
      yaw: 100.0
      pitch-min: -15.0
      pitch-max: 30.0
    lifetime: 0.0
    ordered: false
    return-to-centre: true
    min-separation: 18.0
    weapon: ""
  flick:
    display-name: Wide flicks
    icon: ORANGE_CONCRETE
    description: Wide flicks. Turn fast, stop exact.
    kind: FLICK
    weight: 1.2
    duration: 30.0
    targets: 1
    size: 0.7
    height: 0.0
    distance:
      min: 5.0
      max: 10.0
    spread:
      yaw: 110.0
      pitch-min: -12.0
      pitch-max: 30.0
    lifetime: 0.0
    ordered: false
    return-to-centre: false
    min-separation: 25.0
    weapon: ""
  precision:
    display-name: Precision
    icon: WHITE_CONCRETE
    description: Tiny, distant targets. Be exact.
    kind: FLICK
    weight: 1.6
    duration: 30.0
    targets: 1
    size: 0.35
    height: 0.0
    distance:
      min: 8.0
      max: 12.0
    spread:
      yaw: 40.0
      pitch-min: -6.0
      pitch-max: 18.0
    lifetime: 0.0
    ordered: false
    return-to-centre: false
    min-separation: 6.0
    weapon: ""
  decay:
    display-name: Decay
    icon: MAGENTA_CONCRETE
    description: Targets vanish after a second.
    kind: FLICK
    weight: 1.3
    duration: 30.0
    targets: 2
    size: 0.75
    height: 0.0
    distance:
      min: 6.0
      max: 9.0
    spread:
      yaw: 70.0
      pitch-min: -10.0
      pitch-max: 25.0
    lifetime: 1.2
    ordered: false
    return-to-centre: false
    min-separation: 12.0
    weapon: ""
  switch:
    display-name: Target switch
    icon: YELLOW_CONCRETE
    description: Only the lit target counts.
    kind: FLICK
    weight: 1.3
    duration: 30.0
    targets: 4
    size: 0.7
    height: 0.0
    distance:
      min: 6.0
      max: 9.0
    spread:
      yaw: 90.0
      pitch-min: -10.0
      pitch-max: 28.0
    lifetime: 0.0
    ordered: true
    return-to-centre: false
    min-separation: 14.0
    weapon: ""
  strafe:
    display-name: Strafe shot
    icon: CYAN_CONCRETE
    description: A strafing target. Lead your shot.
    kind: FLICK
    weight: 1.4
    duration: 30.0
    targets: 1
    size: 0.9
    height: 0.0
    distance:
      min: 6.0
      max: 7.0
    spread:
      yaw: 40.0
      pitch-min: 0.0
      pitch-max: 8.0
    lifetime: 0.0
    ordered: false
    return-to-centre: false
    min-separation: 0.0
    weapon: ""
    motion:
      speed-min: 2.5
      speed-max: 5.5
      acceleration: 10.0
      arc-degrees: 70.0
      switch-min-ticks: 6
      switch-max-ticks: 20
      hop-chance: 0.35
      hop-height: 1.0
      hop-ticks: 10
  reaction:
    display-name: Reaction
    icon: RED_CONCRETE
    description: Hit the target the moment it lights.
    kind: REACTION
    weight: 1.0
    duration: 90.0
    targets: 1
    size: 1.0
    height: 0.0
    distance:
      min: 6.0
      max: 6.0
    spread:
      yaw: 0.0
      pitch-min: 0.0
      pitch-max: 0.0
    lifetime: 0.0
    ordered: false
    return-to-centre: false
    min-separation: 0.0
    weapon: ""
    reaction:
      min-delay: 1.0
      max-delay: 3.5
      attempts: 10
  tracking:
    display-name: Tracking
    icon: LIGHT_BLUE_CONCRETE
    description: Keep your crosshair on the target.
    kind: TRACK
    weight: 1.0
    duration: 30.0
    targets: 1
    size: 0.6
    height: 1.8
    distance:
      min: 5.0
      max: 5.0
    spread:
      yaw: 0.0
      pitch-min: 0.0
      pitch-max: 0.0
    lifetime: 0.0
    ordered: false
    return-to-centre: false
    min-separation: 0.0
    weapon: ""
    motion:
      speed-min: 2.0
      speed-max: 4.5
      acceleration: 8.0
      arc-degrees: 80.0
      switch-min-ticks: 8
      switch-max-ticks: 25
      hop-chance: 0.25
      hop-height: 1.0
      hop-ticks: 10
  evasive:
    display-name: Evasive
    icon: PURPLE_CONCRETE
    description: Faster tracking, more hops.
    kind: TRACK
    weight: 1.4
    duration: 30.0
    targets: 1
    size: 0.6
    height: 1.8
    distance:
      min: 4.5
      max: 4.5
    spread:
      yaw: 0.0
      pitch-min: 0.0
      pitch-max: 0.0
    lifetime: 0.0
    ordered: false
    return-to-centre: false
    min-separation: 0.0
    weapon: ""
    motion:
      speed-min: 3.5
      speed-max: 7.0
      acceleration: 16.0
      arc-degrees: 90.0
      switch-min-ticks: 4
      switch-max-ticks: 14
      hop-chance: 0.5
      hop-height: 1.2
      hop-ticks: 8
  combo:
    display-name: Combo 1.8
    icon: IRON_SWORD
    description: 1.8 combat. Keep the combo going.
    kind: COMBO
    weight: 1.3
    duration: 30.0
    targets: 1
    size: 0.6
    height: 1.8
    distance:
      min: 3.0
      max: 3.5
    spread:
      yaw: 0.0
      pitch-min: 0.0
      pitch-max: 0.0
    lifetime: 0.0
    ordered: false
    return-to-centre: false
    min-separation: 0.0
    weapon: DIAMOND_SWORD
    motion:
      speed-min: 1.5
      speed-max: 3.5
      acceleration: 8.0
      arc-degrees: 60.0
      switch-min-ticks: 6
      switch-max-ticks: 18
      hop-chance: 0.0
      hop-height: 0.0
      hop-ticks: 10
    combo:
      knockback: 0.8
      knockback-up: 0.4
      approach-speed: 4.5
      combo-window: 0.7
      attack-cooldown: false
  combo_19:
    display-name: Combo 1.9
    icon: DIAMOND_SWORD
    description: Hit only on a fully charged swing.
    kind: COMBO
    weight: 1.4
    duration: 30.0
    targets: 1
    size: 0.6
    height: 1.8
    distance:
      min: 3.0
      max: 3.5
    spread:
      yaw: 0.0
      pitch-min: 0.0
      pitch-max: 0.0
    lifetime: 0.0
    ordered: false
    return-to-centre: false
    min-separation: 0.0
    weapon: DIAMOND_SWORD
    motion:
      speed-min: 1.5
      speed-max: 3.5
      acceleration: 8.0
      arc-degrees: 60.0
      switch-min-ticks: 6
      switch-max-ticks: 18
      hop-chance: 0.0
      hop-height: 0.0
      hop-ticks: 10
    combo:
      knockback: 0.9
      knockback-up: 0.4
      approach-speed: 4.5
      combo-window: 1.0
      attack-cooldown: true
  axe:
    display-name: Axe timing
    icon: DIAMOND_AXE
    description: Full axe swings only. Time every hit.
    kind: COMBO
    weight: 1.5
    duration: 30.0
    targets: 1
    size: 0.6
    height: 1.8
    distance:
      min: 3.0
      max: 3.5
    spread:
      yaw: 0.0
      pitch-min: 0.0
      pitch-max: 0.0
    lifetime: 0.0
    ordered: false
    return-to-centre: false
    min-separation: 0.0
    weapon: DIAMOND_AXE
    motion:
      speed-min: 1.5
      speed-max: 3.5
      acceleration: 8.0
      arc-degrees: 60.0
      switch-min-ticks: 6
      switch-max-ticks: 18
      hop-chance: 0.0
      hop-height: 0.0
      hop-ticks: 10
    combo:
      knockback: 0.9
      knockback-up: 0.4
      approach-speed: 4.5
      combo-window: 1.6
      attack-cooldown: true
Three optional blocks, and a fourth

grid, motion, reaction and combo are left out of a drill when they do nothing: a grid with columns: 0, a motion with speed-max: 0, a reaction with attempts: 0, a combo with knockback: 0. Write one in to turn it on.

Every key

The drill itself

KeyWhat it is
The key itself (gridshot)The drill id: what /aim train gridshot takes, what records, sessions and boards are filed under.
display-nameWhat players read in menus, messages, the boss bar and the sidebar. Palette tokens allowed.
iconThe menu row's item: a material, or a head written the way the menu files write one. Empty is TARGET.
descriptionOne line under the drill in menus.
kindFLICK, REACTION, TRACK or COMBO.
weightHow hard the drill is by itself. It multiplies the difficulty, and so the rating, of every session. 0 or less is 1.0.
durationSeconds a session lasts. A REACTION drill ends on its attempts and uses this as a cap. 0 or less is 30.
targetsTargets up at once. FLICK only, and only when the target does not move; every other drill uses one. Never below 1.
sizeThe width of a target in blocks, before the player's size setting. 0 or less is 0.8.
heightThe height of a target, or 0 for a cube as tall as it is wide. The player-shaped targets use 1.8.
lifetimeSeconds a still FLICK target stays up before it expires and costs points. 0 never expires.
orderedFLICK only: targets light one at a time, oldest first; a hit on an unlit one is a miss.
return-to-centreFLICK only: every other target is placed dead ahead, so each flick out is followed by a flick back.
min-separationDegrees kept between a new target and every target already up, and the one just cleared. 0 turns it off.
weaponA material put in the player's first hotbar slot for the drill. Empty, or a name that is not an item, keeps the hand empty.

distance

KeyWhat it is
minThe nearest a target is placed from the player's eyes, in blocks. Never below 1.
maxThe farthest. Never below min.

A target is placed at a random distance in that range. Grids, reaction targets and moving targets use the middle of it. The player's distance setting multiplies both ends.

spread

Degrees around where the player faces when the drill begins.

KeyWhat it is
yawThe total horizontal spread: 60 is 30° to either side. Clamped to 0..340.
pitch-minThe lowest elevation; negative is below eye level. Not below -80.
pitch-maxThe highest elevation. Not above 80, never below pitch-min.

A target is never placed inside the floor: it is lifted so its bottom clears the ground the player stands on by 0.2 blocks.

grid

KeyWhat it is
columnsCells across. 0 turns the grid off.
rowsCells down. At least 1 once the grid is on.
spacingDegrees between the centres of two neighbouring cells. 0 or less is 10.

motion

A target that strafes along an arc in front of the player. Speeds are blocks per second.

KeyWhat it is
speed-min, speed-maxThe range a new speed is drawn from at every change. speed-max: 0 turns the motion off.
accelerationHow fast it reaches a new speed, in blocks per second squared. 0 or less is 8.
arc-degreesThe width of the arc it walks. 0 or less is 60.
switch-min-ticks, switch-max-ticksTicks between two changes of direction and speed. At least 1.
hop-chanceThe chance, 0 to 1, that a change of direction comes with a hop.
hop-heightHow high a hop goes, in blocks.
hop-ticksTicks a hop takes. At least 1.

reaction

KeyWhat it is
min-delayThe shortest wait, in seconds, before the target lights. Never below 0.2.
max-delayThe longest wait. Never below min-delay.
attemptsLights to answer before the session ends. 0 turns the section off.

combo

KeyWhat it is
knockbackBlocks the target is shoved back per hit. 0 turns the section off.
knockback-upUpward velocity per hit, in blocks per tick; 0.4 is a player's. 0 or less is 0.4, capped at 1.0.
approach-speedBlocks per second the target closes the distance after being shoved. 0 or less is 4.
combo-windowSeconds a hit may follow the previous one and still extend the combo. 0 or less is 0.7.
attack-cooldowntrue judges every hit by the attack cooldown of the item in hand, as 1.9 combat does. false plays 1.8 combat.

How each kind uses them

FLICK

The drill starts with targets targets up. A hit removes the target and puts another one up, never where the hit one was:

  • With a grid, the new target takes a random free cell. The grid sits straight ahead of where the player faced, every cell the same distance away, so a flick between two neighbours is the same angle anywhere on it. A cell with a target in it is never drawn, and neither is the one just cleared unless nothing else is free. If spacing would make neighbouring targets touch, it is widened to the target's width plus 2°. spread and min-separation are not used.
  • With return-to-centre, targets alternate: the first one dead ahead, the next anywhere in the spread, then dead ahead again.
  • Otherwise the target goes anywhere in spread and distance, at least min-separation degrees from every target already up and from the one just cleared. After 24 tries without finding such a place, the first try is used.

lifetime expires a target that was not hit in time: it costs expire-penalty, breaks the streak and is replaced like a hit one. With ordered, the unlit targets are drawn in the grey idle look of the player's style, the oldest is lit, and hitting any other is a miss.

A FLICK drill with a motion block is a moving flick: one target for the whole session, strafing on the floor at the middle of the distance range. A hit counts and the target stays. targets, grid, lifetime and ordered do nothing on a moving flick.

REACTION

One target straight ahead, in the grey idle look. After a wait drawn from min-delay..max-delay it lights up; the click that follows is the reaction, timed from the moment the light was sent, minus the player's ping. A click before the light is a false start. After attempts lights the session completes, or earlier if duration runs out.

TRACK

One player-shaped target strafing along the arc of its motion block, at the middle of the distance range. Every tick the plugin checks whether the player's crosshair is on the target where the player's client was drawing it; the target lights while it is and turns grey while it is not. Clicks are neither hits nor misses.

A TRACK drill without a motion block stands still, which makes it pointless.

COMBO

One player-shaped target that fights the way an opponent moves. It strafes round the player with its motion block, walks back to the nearest end of the distance range whenever it is farther, backs off when it is closer than 60% of that, and every hit throws it away with knockback and lifts it with knockback-up. For six ticks after a hit it only flies. It is never allowed farther than two and a half times the far end of the distance range.

A fight is played the way the game plays one:

  • Three blocks of reach. Every other kind extends the player's reach so a target across the arena can be clicked; a fight keeps the game's own three blocks.
  • The weapon in hand. weapon is placed in the first hotbar slot, unbreakable and without a tooltip.
  • The hurt window. A hit landing within ten ticks of the last one that landed does nothing: it is neither a hit nor a miss. Spam clicking a 1.8 fight lands no more hits than clean clicks.
  • The combo. A hit within combo-window of the previous hit extends the combo and earns combo-points on top of hit-points; a later one starts a new combo at one.
  • The attack cooldown. With attack-cooldown: true, a hit on a swing that was not charged is rushed and counts as a miss. Every swing, hit or not, and every change of held slot starts the cooldown over. The charge and the thresholds are on Scoring. With false, the weapon is handed out with an attack speed no swing can outrun, so the client draws no cooldown at all.

weapon works on any kind, but only a COMBO drill reads the cooldown. Without a weapon the hand is empty, which in a 1.9 fight is the fist's own cooldown.

Adding a drill

A new key under drills is a new drill. Nothing else is needed.

plugins/ExyliaAimTrainer/config.yml
drills:
  pinpoint:
    display-name: Pinpoint
    icon: LIGHTNING_ROD
    description: Tiny targets that expire. Be quick and exact.
    kind: FLICK
    weight: 1.8
    duration: 45.0
    targets: 2
    size: 0.3
    distance:
      min: 9.0
      max: 13.0
    spread:
      yaw: 60.0
      pitch-min: -8.0
      pitch-max: 20.0
    lifetime: 1.5
    min-separation: 10.0

Run /aimtraineradmin reload. Menus list drills in the order the file does, and tab completion offers the new id at once.

Ids are keys in the database

Records, sessions and duel history are stored by drill id, in a column 32 characters long: keep ids at or under 32. Do not name a drill overall, which is the name of the overall leaderboard. A renamed id starts with empty records and boards, and the old rows stay in the database under the old one; change display-name instead when only the wording has to change.

Removing a drill takes it out of every menu. A player resting after that drill is sent home the next time they replay it. Removing every drill brings the shipped sixteen back: an empty drills section is read as the defaults.

A change to a drill's numbers reaches a session the next time it starts or is replayed; a run already going keeps the numbers it started with.

The default drill

KeyDefaultWhat it does
training.default-drillgridshotThe drill /aim train starts without a name. If it is not a configured drill, the first drill in the file is used.

/aim duel <player> without a drill does not use default-drill: it proposes the first drill in the file.

Upgrading an older file

The file carries a version, and an older one is migrated on start. Only what is still exactly as it shipped is changed; a value you edited, or a drill you added, is left alone.

  • Shipped drills still at their old 60- or 45-second durations run 30 seconds.
  • Shipped descriptions still reading as they first shipped are shortened to one lore line.
  • A gridshot without a grid block, on a file with no scatter, is kept under the id scatter and a new gridshot on a 3×3 grid is written in.
  • A fight's old cooldown-ticks becomes attack-cooldown: any wait at all was a 1.9 fight.
  • combo and combo_19 get a DIAMOND_SWORD when they have no weapon, and sixshot, microshot, spidershot and axe are written in when missing.

Something missing on this page? Tell us on Discord