Skip to content

Task Configuration Examples & Best Practices

Task Configuration Examples & Best Practices

Section titled “Task Configuration Examples & Best Practices”

This guide provides verified working examples from actual Journey task configurations, showing real-world patterns and best practices.

  1. Verified Filter Patterns
  2. Complete Task Examples
  3. Best Practices
  4. Common Patterns

These filter patterns are confirmed working from production task configurations.

// Check zone by UUID
"filter": "q.zone.uuid == '123e4567-e89b-12d3-a456-426614174000'"
// UUID comparison (string)
"filter": "q.zone.uuid == 'c106b35a-1058-4aca-809c-b9588c14ba11'"
// Check if Pokémon is the player's starter
"filter": "q.pokemon.is_starter"
// Check Pokémon species
"filter": "q.pokemon.species.identifier == 'cobblemon:magikarp'"
// Check Pokémon level
"filter": "q.pokemon.is_starter && q.pokemon.level >= 16.0"
// Check if battle is wild
"filter": "q.battle.is_wild"
// Check wild battle with starter in team
"filter": "q.battle.is_wild && q.battle.team.contains_starter"
// Check entity UUID
"filter": "q.entity.uuid == 'bb030064-870d-4513-b49b-bba5c92b19c1'"
// Entity UUID with additional condition
"filter": "q.entity.uuid == '2de91ae9-e18e-4419-bffe-43d1b6cdbb2e'"
// Check item by ID
"filter": "q.item.id == 'cobblemon:pokedex_green'"
// Check if player is in zone (using player function in filter)
"filter": "q.player.is_in_zone('c106b35a-1058-4aca-809c-b9588c14ba11')"
// Check if player completed a task (combined with entity interaction)
"filter": "q.entity.uuid == '2de91ae9-e18e-4419-bffe-43d1b6cdbb2e' && q.player.has_completed_task('journey:evolve_starter')"
// Always true (no filtering)
"filter": "1.0"
"filter": "1.0 == 1.0"

Purpose: Track when players enter a specific zone

{
"name": "<dark_green>Enter the Forest",
"description": ["<gray>Step into the forest zone."],
"sequential": "sequential",
"start_requirement": "",
"icon": {
"item_id": "minecraft:oak_sapling"
},
"repeat_type": "NONE",
"repeat_interval": 0,
"rewards": [],
"tasks": [
{
"id": "test:enter_forest_zone_subtask",
"name": "<dark_green>Enter the Forest Zone",
"description": "<gray>Enter the specified forest zone.",
"event": "ENTER_ZONE",
"event_data": {
"uuid": "123e4567-e89b-12d3-a456-426614174000"
},
"filter": "q.zone.uuid == '123e4567-e89b-12d3-a456-426614174000'",
"target": 1,
"location": {
"x": 100,
"y": 64,
"z": 100
},
"rewards": []
}
]
}

Key Points:

  • sequential: "sequential" means subtasks must be completed in order
  • event_data can optionally specify the zone UUID for optimization
  • location field provides a waypoint marker for the player
  • Filter uses q.zone.uuid to verify the correct zone

Purpose: Multi-stage quest tracking Pokémon capture, leveling, and evolution

{
"name": "<gold>Unleash Your Starter's Potential",
"description": [
"<gray>Your starter Pokémon holds untapped power.",
"<gray>Train diligently to unlock its evolution!"
],
"sequential": "sequential",
"icon": {
"item_id": "cobblemon:great_ball"
},
"repeat_type": "NONE",
"repeat_interval": 0,
"rewards": [
{
"type": "currency",
"data": {
"currency": "impactor:pokedollars",
"amount": 300
}
},
{
"type": "command",
"data": {
"command": "give {player} cobblemon:great_ball 5"
}
}
],
"tasks": [
{
"id": "journey:catch_pokemon_in_zone",
"name": "<blue>Catch Pokémon",
"description": "<gray>Catch 2 Pokémon in the starting zone.",
"event": "POKEMON_CAUGHT",
"event_data": {},
"filter": "q.player.is_in_zone('c106b35a-1058-4aca-809c-b9588c14ba11')",
"target": 2,
"rewards": [
{
"type": "currency",
"data": {
"currency": "impactor:pokedollars",
"amount": 50
}
}
]
},
{
"id": "journey:reach_level",
"name": "<blue>Level Up Your Starter",
"description": "<gray>Raise your starter to level 16.",
"event": "POKEMON_LEVEL_UP",
"event_data": {},
"filter": "q.pokemon.is_starter && q.pokemon.level >= 16.0",
"target": 1,
"rewards": [
{
"type": "currency",
"data": {
"currency": "impactor:pokedollars",
"amount": 50
}
}
]
},
{
"id": "journey:evolve_starter",
"name": "<blue>Unleash Evolution",
"description": "<gray>Evolve your starter Pokémon!",
"event": "POKEMON_EVOLVE",
"event_data": {},
"filter": "q.pokemon.is_starter",
"target": 1,
"rewards": [
{
"type": "currency",
"data": {
"currency": "impactor:pokedollars",
"amount": 200
}
}
]
},
{
"id": "journey:pickup_pokedex",
"name": "<blue>Receive Pokédex",
"description": "<gray>Pick up your Pokédex!",
"event": "ITEM_PICKUP",
"event_data": {},
"filter": "q.item.id == 'cobblemon:pokedex_green'",
"target": 1,
"rewards": [
{
"type": "currency",
"data": {
"currency": "impactor:pokedollars",
"amount": 100
}
}
]
}
]
}

Key Points:

  • Sequential task with 4 stages
  • Combines multiple event types: POKEMON_CAUGHT, POKEMON_LEVEL_UP, POKEMON_EVOLVE, ITEM_PICKUP
  • Uses q.player.is_in_zone() in POKEMON_CAUGHT filter to restrict to specific zone
  • Uses q.pokemon.is_starter method to target only the starter
  • Each subtask has its own rewards, plus task completion rewards

Purpose: Teach fishing mechanics and require specific battle victories

{
"name": "<blue>Master the Waters",
"description": ["<gray>Learn to fish!"],
"sequential": "sequential",
"icon": {
"item_id": "cobblemon:poke_rod"
},
"repeat_type": "NONE",
"repeat_interval": 0,
"rewards": [
{
"type": "currency",
"data": {
"currency": "impactor:pokedollars",
"amount": 500
}
}
],
"tasks": [
{
"id": "masterwaters:go_to_beach",
"name": "<blue>Go to the Beach",
"description": "<gray>Travel to the beach.",
"event": "ENTER_ZONE",
"event_data": {},
"filter": "q.zone.uuid == '21af4251-ed97-499c-8445-3e6152fbcbb7'",
"target": 1,
"location": {
"x": -40,
"y": 64,
"z": -69
},
"rewards": [
{
"type": "command",
"data": {
"command": "give {player} cobblemon:poke_rod 1"
}
}
]
},
{
"id": "masterwaters:speak_to_fisherman",
"name": "<blue>Speak to the Fisherman",
"description": "<gray>Learn how to fish.",
"event": "ENTITY_INTERACT",
"event_data": {},
"filter": "q.entity.uuid == 'bb030064-870d-4513-b49b-bba5c92b19c1'",
"target": 1,
"location": {
"x": -47,
"y": 63,
"z": -72
},
"rewards": []
},
{
"id": "masterwaters:battle_wild_pokemon",
"name": "<blue>Battle Wild Pokémon",
"description": "<gray>Defeat 10 wild Pokémon.",
"event": "BATTLE_VICTORY",
"event_data": {},
"filter": "q.battle.is_wild",
"target": 10,
"rewards": [
{
"type": "currency",
"data": {
"currency": "impactor:pokedollars",
"amount": 200
}
}
]
},
{
"id": "masterwaters:catch_magikarp",
"name": "<blue>Catch a Magikarp",
"description": "<gray>Catch a Magikarp.",
"event": "POKEMON_CAUGHT",
"event_data": {},
"filter": "q.pokemon.species.identifier == 'cobblemon:magikarp'",
"target": 1,
"rewards": [
{
"type": "currency",
"data": {
"currency": "impactor:pokedollars",
"amount": 300
}
}
]
}
]
}

Key Points:

  • Zone entry gives item reward immediately
  • ENTITY_INTERACT event for NPC dialogue
  • BATTLE_VICTORY with compound filter checking battle type AND Pokémon type
  • Species-specific catching requirement

Example 4: Non-Sequential Exploration Quest

Section titled “Example 4: Non-Sequential Exploration Quest”

Purpose: Discover multiple zones in any order with optional objectives

{
"name": "<gold>Venture Forth into Ultra Space",
"description": [
"<gray>Discover all unique biomes within Ultra Space."
],
"sequential": "linear",
"rewards": [
{
"type": "currency",
"data": {
"currency": "impactor:pokedollars",
"amount": 2000
}
}
],
"icon": {
"item_id": "cobblemon:ultra_ball"
},
"repeat_type": "NONE",
"repeat_interval": 0,
"tasks": [
{
"id": "venture_forth:observe_deep_sea",
"name": "<blue>Explore Ultra Deep Sea",
"description": "<gray>Enter the Ultra Deep Sea biome.",
"event": "ENTER_ZONE",
"event_data": {},
"filter": "q.zone.uuid == 'ULTRA_DEEP_SEA_UUID'",
"target": 1,
"time_limit": "35s",
"optional": true,
"rewards": [
{
"type": "currency",
"data": {
"currency": "impactor:pokedollars",
"amount": 250
}
}
]
},
{
"id": "venture_forth:explore_desert",
"name": "<blue>Explore Ultra Desert",
"description": "<gray>Traverse the Ultra Desert biome.",
"event": "ENTER_ZONE",
"event_data": {},
"filter": "q.zone.uuid == 'ULTRA_DESERT_UUID'",
"target": 1,
"rewards": [
{
"type": "currency",
"data": {
"currency": "impactor:pokedollars",
"amount": 250
}
}
]
}
// ... more zones
]
}

Key Points:

  • sequential: "linear" allows completing subtasks in any order
  • optional: true on some subtasks - not required for task completion
  • time_limit: "35s" adds time pressure to specific objectives
  • Each subtask rewards incrementally toward final reward

Example 5: Daily Repeatable with Prerequisites

Section titled “Example 5: Daily Repeatable with Prerequisites”

Purpose: Daily quest with task completion requirement

{
"name": "<gold>Welcome to Ultra Megalopolis",
"description": [
"<gray>Complete your daily tasks in Ultra Megalopolis."
],
"sequential": "sequential",
"icon": {
"item_id": "cobblemon:ultra_badge"
},
"repeat_type": "DAILY",
"repeat_interval": 1,
"rewards": [
{
"type": "currency",
"data": {
"currency": "impactor:pokedollars",
"amount": 1000
}
}
],
"tasks": [
{
"id": "intro:speak_to_nova",
"name": "<blue>Speak to Space Cadet Nova",
"description": "<gray>Learn about Ultra Space.",
"event": "ENTITY_INTERACT",
"event_data": {
"uuid": "b1c5f9df-a4c6-4d07-bea3-60ad488ccde7"
},
"filter": "q.entity.uuid == 'b1c5f9df-a4c6-4d07-bea3-60ad488ccde7'",
"target": 1,
"location": {
"x": 342,
"y": 20,
"z": -268
},
"rewards": [
{
"type": "currency",
"data": {
"currency": "impactor:pokedollars",
"amount": 200
}
}
]
},
{
"id": "intro:speak_to_captain_phyco",
"name": "<blue>Speak to Captain Phyco",
"description": "<gray>Receive your mission.",
"event": "ENTITY_INTERACT",
"event_data": {
"uuid": "2de91ae9-e18e-4419-bffe-43d1b6cdbb2e"
},
"filter": "q.entity.uuid == '2de91ae9-e18e-4419-bffe-43d1b6cdbb2e' && q.player.has_completed_task('journey:evolve_starter')",
"target": 1,
"time_limit": "45s",
"location": {
"x": 245,
"y": 23,
"z": -360
},
"rewards": [
{
"type": "currency",
"data": {
"currency": "impactor:pokedollars",
"amount": 500
}
}
]
}
]
}

Key Points:

  • repeat_type: "DAILY" with repeat_interval: 1 for daily reset
  • Filter combines entity check AND task completion check
  • Time limit on second subtask
  • event_data can specify UUID for optimization (though filter still needed)

DO:

"filter": "q.pokemon.is_starter"
"filter": "q.zone.uuid == 'uuid-here'"
"filter": "q.player.is_in_zone('uuid-here')"

DON’T:

"filter": "query.pokemon.is_starter()" // Wrong prefix
"filter": "pokemon.is_starter()" // Missing 'q.' prefix

Always use strings for UUIDs:

"filter": "q.zone.uuid == '123e4567-e89b-12d3-a456-426614174000'"
"filter": "q.entity.uuid == 'bb030064-870d-4513-b49b-bba5c92b19c1'"

Use && for multiple conditions:

"filter": "q.pokemon.is_starter && q.pokemon.level >= 16.0"
"filter": "q.battle.is_wild && q.battle.team.contains_starter"
"filter": "q.entity.uuid == 'npc-uuid' && q.player.has_completed_task('task:id')"

Optionally specify context in event_data:

{
"event": "ENTER_ZONE",
"event_data": {
"uuid": "zone-uuid-here"
},
"filter": "q.zone.uuid == 'zone-uuid-here'"
}

Note: event_data is for optimization/hints - the filter still does the actual validation.

Available reward types:

// Currency (requires Impactor)
{
"type": "currency",
"data": {
"currency": "impactor:pokedollars",
"amount": 500
}
}
// Command execution
{
"type": "command",
"data": {
"command": "give {player} minecraft:diamond 1"
}
}
// MoLang script
{
"type": "script",
"data": {
"scripts": [
"q.player.tell_minimessage('<green>Quest complete!');"
]
}
}
// Timeline trigger
{
"type": "timeline",
"data": {
"timeline": "namespace:timeline_id"
}
}
{
"name": "<color>Display Name", // Shown in UI (supports MiniMessage)
"description": ["Line 1", "Line 2"], // Array of description lines
"sequential": "sequential", // "linear", "sequential", or "randomized"
"start_requirement": "", // MoLang condition to start (empty = always available)
"icon": {
"item_id": "minecraft:diamond" // Item for task icon
},
"repeat_type": "NONE", // NONE, DAILY, WEEKLY, CUSTOM
"repeat_interval": 0, // Days between repeats (for CUSTOM)
"rewards": [], // Task completion rewards
"tasks": [] // Array of subtasks
}
{
"id": "namespace:subtask_id", // Unique identifier
"name": "<color>Display Name", // Shown in UI
"description": "<gray>Details", // Description text
"event": "EVENT_TYPE", // Event to listen for
"event_data": {}, // Optional event context
"filter": "q.condition == value", // MoLang filter expression
"target": 1, // How many times event must occur
"location": { // Optional waypoint marker
"x": 0,
"y": 64,
"z": 0
},
"time_limit": "45s", // Optional time limit (format: "30s", "5m", "1h")
"optional": false, // If true, not required for completion
"rewards": [] // Subtask completion rewards
}

{
"sequential": "sequential",
"tasks": [
{
"id": "step1",
"event": "ENTER_ZONE",
"filter": "q.zone.uuid == 'zone1'",
"target": 1
},
{
"id": "step2",
"event": "ENTITY_INTERACT",
"filter": "q.entity.uuid == 'npc1'",
"target": 1
},
{
"id": "step3",
"event": "POKEMON_CAUGHT",
"filter": "q.pokemon.species.identifier == 'cobblemon:pikachu'",
"target": 1
}
]
}
{
"sequential": "linear",
"tasks": [
{
"id": "collect1",
"event": "POKEMON_CAUGHT",
"filter": "q.pokemon.species.identifier == 'cobblemon:bulbasaur'",
"target": 1
},
{
"id": "collect2",
"event": "POKEMON_CAUGHT",
"filter": "q.pokemon.species.identifier == 'cobblemon:charmander'",
"target": 1
},
{
"id": "collect3",
"event": "POKEMON_CAUGHT",
"filter": "q.pokemon.species.identifier == 'cobblemon:squirtle'",
"target": 1
}
]
}
{
"tasks": [
{
"id": "defeat_wild",
"event": "BATTLE_VICTORY",
"filter": "q.battle.is_wild",
"target": 50,
"rewards": [
{
"type": "currency",
"data": {
"currency": "impactor:pokedollars",
"amount": 1000
}
}
]
}
]
}
{
"tasks": [
{
"id": "catch_in_zone",
"event": "POKEMON_CAUGHT",
"filter": "q.player.is_in_zone('zone-uuid-here')",
"target": 5
}
]
}
{
"start_requirement": "q.player.has_completed_task('namespace:previous_task')",
"tasks": [
// ... subtasks only accessible after completing previous_task
]
}

Based on actual working configurations, these query paths are confirmed:

  • q.zone.uuid - Zone UUID (string)
  • q.zone.name - Zone display name (from context)
  • q.pokemon.species - Species identifier (e.g., “cobblemon:pikachu”)
  • q.pokemon.level - Pokémon level (number)
  • q.pokemon.is_starter - Check if starter (returns 1.0/0.0)
  • q.pokemon.is_shiny - Check if shiny (returns 1.0/0.0)
  • q.battle.is_wild - Check if wild battle
  • q.battle.pokemon.type - Pokémon type in battle (string)
  • q.entity.uuid - Entity UUID (string)
  • q.item.id - Item resource location (string)
  • q.player.is_in_zone('uuid') - Check if player in zone
  • q.player.has_completed_task('namespace:task_id') - Check task completion
  • q.player.has_flag('flag_name') - Check player flag
  • All other player functions from MoLang documentation

This guide is based on actual working task configurations from Journey servers. All examples are tested and verified.