Content generated with AI — it may contain mistakes.

Journeys

Steps and objectives

Every key of a step, the twenty-two objective types with their parameters and an example each, filters, hints and time limits.

A step is one thing to do. It has an objective the plugin watches for, the guidance that shows the way, and optional text, rewards, effects, a hint and a time limit.

steps:
  - id: tools
    title: '{highlight}Craft a wooden pickaxe'
    description: ['Open a crafting table and make one.']
    objective:
      type: CRAFT
      filter: [WOODEN_PICKAXE]
    guidance:
      beacon: false
    on-start: ['[SOUND] BLOCK_NOTE_BLOCK_CHIME;1;1.4']
    on-complete: ['console: give %player_name% torch 8']
    rewards: [ { type: EXPERIENCE, value: '20' } ]
    hint-after: 40s
    hint: 'Right-click a crafting table.'
    skippable: true
    timeout: 10m

Step keys

KeyDefaultWhat it does
idstep-<n>Unique within the journey, lower case. Progress, stats and placeholders follow it, so keep it when you reword a step.
titlethe idThe step's name on the panel, the toast and in /journey.
descriptionnoneLines under the title on the panel and in /journey.
objective—Required. See below. A step without a readable objective is reported and skipped.
guidanceeverything onHow the way is shown. See Guidance.
on-start, on-completenoneEffect lines.
rewardsnonePaid when the step is completed; a skipped step pays nothing, and that run loses the journey's completion rewards (see Skipping).
hint-afterhint-after in config.yml (45 s)Idle time on the step before the hint is sent. 0s turns it off for this step.
hinta line pointing at /journeyThe hint. Sent once per step; the beacon pulses and a sound plays with it.
skippabletrueWhether players may skip this step. Skipping asks for confirmation; a step that cannot be skipped answers with a refusal.
timeoutnoneA time limit. Running out fails the step: the whole journey stops, the player is told they ran out of time, and the step counts as abandoned. The journey's triggers can start it again, from the first step.

Objective keys

Every objective has a type; the other keys depend on it.

KeyDefaultUsed by
amount1How many times, or the target value for LEVEL (level), PLAYTIME (minutes) and WAIT (seconds).
filteranyMaterial or entity names, upper case. materials, blocks, items and entities are read as aliases.
worldsanyWorld names the action must happen in.
locationnoneworld,x,y,z. For REACH, the place to reach; for the others, the action must happen within radius of it.
radius3 for REACH, 4 otherwiseBlocks around location.
regionnoneAn ExyliaLib region id, for REACH.
npc, command, text, cinematic, condition, key, duration—One per type, as the table below says.

Objective types

TypeParametersDone whenExample
REACHlocation + radius, or regionThe player stands within the radius, or inside the region. Checked on every move and once a second, so teleports count.{ type: REACH, location: 'world,0,64,0', radius: 4 }
INTERACT_NPCnpcThe player clicks that NPC: the bare id for this plugin's and ExyliaDisplays' NPCs, <plugin>:<id> for another plugin's. The NPC glows for them.{ type: INTERACT_NPC, npc: guide }
INTERACT_BLOCKfilter, optional location + radiusThe player right-clicks a matching block with the main hand.{ type: INTERACT_BLOCK, filter: [LECTERN] }
BREAK_BLOCKamount, filter, worlds, optional location + radiusThe player breaks matching blocks. Blocks a player placed do not count, for the materials the filter names; a step with no filter does not check.{ type: BREAK_BLOCK, amount: 10, filter: [STONE, DEEPSLATE] }
PLACE_BLOCKsameThe player places matching blocks. Each spot counts once per session, so placing and breaking the same block again does not count twice.{ type: PLACE_BLOCK, amount: 4, filter: [TORCH] }
CRAFTsameThe player crafts a matching item; counts the recipe's result amount per craft. A shift-click that crafts a whole stack counts as one craft.{ type: CRAFT, filter: [WOODEN_PICKAXE] }
SMELTsameThe player takes smelted items out of a furnace; counts the items taken.{ type: SMELT, amount: 8, filter: [IRON_INGOT] }
ENCHANTsameThe player enchants a matching item at an enchanting table.{ type: ENCHANT, filter: [DIAMOND_SWORD] }
FISHsameThe player catches matching items; counts the stack caught.{ type: FISH, amount: 3, filter: [COD, SALMON] }
KILL_MOBsame, filter holds entity typesThe player kills matching mobs. Mobs from spawners, spawn eggs and dispensed eggs, and built iron golems and snow golems, do not count.{ type: KILL_MOB, amount: 5, filter: [ZOMBIE] }
KILL_PLAYERamount, worlds, optional location + radiusThe player kills other players.{ type: KILL_PLAYER, amount: 1, worlds: [pvp] }
PICKUP_ITEMsame as BREAK_BLOCKThe player picks up matching items; counts the stack picked up. Items any player dropped do not count.{ type: PICKUP_ITEM, amount: 16, filter: [OAK_LOG] }
CONSUMEsameThe player eats or drinks a matching item.{ type: CONSUME, filter: [BREAD] }
EQUIPfilterThe player wears, or holds in either hand, a matching item. Checked once a second.{ type: EQUIP, filter: [IRON_CHESTPLATE] }
RUN_COMMANDcommandThe player runs the command. Compared by prefix, any case, slash optional: /spawn counts /spawn now. Counted after the command ran.{ type: RUN_COMMAND, command: /kit starter }
CHATtextThe player sends a chat line containing the text, any case.{ type: CHAT, text: hello }
LEVELamountThe player's experience level reaches amount. Checked once a second.{ type: LEVEL, amount: 10 }
PLAYTIMEamountThe player's playtime reaches amount minutes, from ExyliaLib's playtime tracking (network-wide, idle time excluded). Checked once a second.{ type: PLAYTIME, amount: 60 }
WAITdurationThat much time has passed since the step started. A bare number is seconds.{ type: WAIT, duration: 30s }
WATCH_CINEMATICcinematicThe cinematic, played when the step starts, ends — watched, skipped or refused alike, so a cinematic that cannot play never holds a journey.{ type: WATCH_CINEMATIC, cinematic: intro }
PLACEHOLDERconditionThe condition is true. Checked once a second; fails closed.{ type: PLACEHOLDER, condition: '%vault_eco_balance% >= 100' }
CUSTOMkey, amountThe key is fired for the player that many times. A step asking for exylia:mines:break counts exylia:mines:break:gold too, never the other way round.{ type: CUSTOM, key: exylia:crates:open, amount: 3 }

Every type that counts an action respects worlds and an optional location + radius, so "break ten stone in the tutorial mine" is BREAK_BLOCK with a location and a radius. An empty filter accepts anything. What farming is not covered is in the FAQ.

The CUSTOM keys other Exylia plugins fire are listed on Integrations.

A step the plugin cannot read

A step whose objective is missing what it needs — a REACH with no place, an INTERACT_NPC with no NPC, a PLACEHOLDER whose condition does not parse — is reported naming the file and the path, and skipped until it is fixed. The rest of the journey still runs. The editor keeps such a step in the file and marks it, so a step can be half-built in game without breaking the journey around it.

Progress and completion

Progress counts only for the step a player is on. When a step's objective is met:

  1. its rewards are paid and its on-complete lines run;
  2. the step feedback plays (sound, toast, particles);
  3. JourneyStepCompleteEvent is fired;
  4. the next step starts, or the journey is completed.

The panel and /journey show a count (3/10) for every step whose amount is above one, and for LEVEL, PLAYTIME and WAIT.

Something missing on this page? Tell us on Discord