Skip to content

Zone System

Zones are 3D areas in your world that react to player presence. Walk into Pallet Town and see a welcome title. Enter the Pokemon Center and become invulnerable. Step into the Safari Zone and trigger a quest. Zones make your world feel alive.

Each zone can contain multiple areas (shapes like spheres, boxes, and cylinders), and each area can have its own messages, tags, and gameplay functions.


Here’s a simple zone that welcomes players to Pallet Town:

File: config/journey/zones/pallet_town.json

{
"name": "<gold><bold>Pallet Town",
"uuid": "c106b35a-1058-4aca-809c-b9588c14ba11",
"color": {
"red": 50,
"green": 200,
"blue": 50
},
"entryMessage": {
"title": "<gold>Pallet Town",
"subtitle": "<gray>Shades of Your Journey Await",
"fade_in": 10,
"stay": 70,
"fade_out": 20,
"type": "title"
},
"exitMessage": {
"title": "",
"subtitle": "",
"fade_in": 0,
"stay": 0,
"fade_out": 0,
"type": "title"
},
"entry_script": "",
"exit_script": "",
"inside_script": "",
"priority": 5,
"areas": [
{
"type": "sphere",
"data": {
"center": {
"x": 1000,
"y": 70,
"z": 1000
},
"radius": 150.0,
"dimension": "minecraft:overworld",
"entry_message": {
"title": "",
"subtitle": "",
"fade_in": 0,
"stay": 0,
"fade_out": 0,
"type": "title"
},
"exit_message": {
"title": "",
"subtitle": "",
"fade_in": 0,
"stay": 0,
"fade_out": 0,
"type": "title"
},
"tags": ["town", "safe_zone"],
"functions": ["DENY_FALL_DAMAGE"]
}
}
]
}

When a player walks within 150 blocks of coordinates (1000, 70, 1000), they’ll see the “Pallet Town” title and won’t take fall damage.


FieldTypeDescription
nameStringDisplay name (supports MiniMessage)
uuidStringUnique identifier (generate one or let Journey create it)
colorObjectRGB color for debug visualization ({"red": 50, "green": 200, "blue": 50})
entryMessageObjectTitle shown when entering the zone
exitMessageObjectTitle shown when leaving the zone
entry_scriptStringScript resource to run on entry (e.g., "journey:pallet_town_enter")
exit_scriptStringScript resource to run on exit
inside_scriptStringScript resource to run every tick while inside
priorityNumberHigher = triggers first when zones overlap (default: 0)
areasArrayArray of area definitions (the actual shapes)

Messages display as Minecraft titles when players cross zone boundaries:

{
"title": "<gold>Welcome!",
"subtitle": "<gray>To the Pokemon Center",
"fade_in": 10,
"stay": 70,
"fade_out": 20,
"type": "title"
}
  • fade_in, stay, fade_out are in ticks (20 ticks = 1 second)
  • Leave title empty ("") to show no message
  • Both zones and individual areas can have their own messages

Each zone can contain multiple areas. Three shapes are available:

A round 3D area centered on a point:

{
"type": "sphere",
"data": {
"center": {"x": 100, "y": 70, "z": 200},
"radius": 50.0,
"dimension": "minecraft:overworld",
"entry_message": {"title": "", "subtitle": "", "fade_in": 0, "stay": 0, "fade_out": 0, "type": "title"},
"exit_message": {"title": "", "subtitle": "", "fade_in": 0, "stay": 0, "fade_out": 0, "type": "title"},
"tags": ["safe_zone"],
"functions": ["DENY_FALL_DAMAGE"]
}
}

Best for: Towns, arenas, circular landmarks.

A vertical cylindrical area:

{
"type": "cylinder",
"data": {
"center": {"x": 500, "y": 60, "z": 300},
"radius": 30.0,
"height": 40.0,
"dimension": "minecraft:overworld",
"entry_message": {"title": "", "subtitle": "", "fade_in": 0, "stay": 0, "fade_out": 0, "type": "title"},
"exit_message": {"title": "", "subtitle": "", "fade_in": 0, "stay": 0, "fade_out": 0, "type": "title"},
"tags": [],
"functions": []
}
}

Best for: Towers, vertical structures, cave entrances.

A rectangular area defined by two opposite corners:

{
"type": "box",
"data": {
"corner1": {"x": 0, "y": 50, "z": 0},
"corner2": {"x": 200, "y": 100, "z": 500},
"dimension": "minecraft:overworld",
"entry_message": {"title": "", "subtitle": "", "fade_in": 0, "stay": 0, "fade_out": 0, "type": "title"},
"exit_message": {"title": "", "subtitle": "", "fade_in": 0, "stay": 0, "fade_out": 0, "type": "title"},
"tags": [],
"functions": []
}
}

Best for: Buildings, rectangular regions, rooms.


Functions modify gameplay mechanics for players inside the area:

FunctionDescription
DENY_FALL_DAMAGEPlayers take no fall damage
DENY_ALL_DAMAGEPlayers are completely invulnerable
DENY_HUNGERHunger does not deplete
DENY_ATTACKPlayers cannot attack entities

Apply multiple functions by listing them:

{
"functions": ["DENY_ALL_DAMAGE", "DENY_ATTACK", "DENY_HUNGER"]
}

This creates a safe zone where players can’t be hurt, can’t hurt others, and don’t get hungry.


Tags are string identifiers attached to areas. They serve two purposes:

Tags let you control Cobblemon spawning within zone areas. Define tags on your areas, then reference them in Cobblemon spawn configurations:

{
"tags": ["city", "water_types", "rare_spawns"]
}

These tags can be used as spawn conditions in Cobblemon’s spawning system to allow or deny specific Pokemon from spawning in tagged areas.

Use tags to organize your zones logically:

{
"tags": ["gym", "pewter", "rock_type"]
}

Zones can execute scripts at three lifecycle points. Scripts have access to player Molang functions and zone context data.

Runs once when a player enters the zone:

{
"entry_script": "journey:pallet_town_enter"
}

Runs once when a player leaves the zone:

{
"exit_script": "journey:pallet_town_exit"
}

Runs every tick while a player is inside:

{
"inside_script": "journey:healing_zone_tick"
}

Scripts have access to:

Data PathDescription
q.zone.nameZone name
q.zone.uuidZone UUID
q.zone.colorZone color (hex)
q.other_zones.contains(name_or_uuid)Check other zones the player is in
All q.player.* functionsFull player Molang functions

When zones overlap, priority controls which zone’s entry/exit events fire first:

{
"name": "Viridian City",
"priority": 5
}
{
"name": "Pewter Gym",
"priority": 20
}

Higher numbers = higher priority. Place specific zones (gym buildings, shops) at higher priority than general zones (cities, routes).


Zones integrate directly with the task system through events:

{
"event": "ENTER_ZONE",
"filter": "q.zone.uuid == 'c106b35a-1058-4aca-809c-b9588c14ba11'",
"target": 1
}

Check if a player is in a zone during any event:

{
"event": "POKEMON_CAPTURE",
"filter": "q.player.is_in_zone('safari-zone-uuid')",
"target": 5
}

A town zone with a Pokemon Center sub-area inside it:

{
"name": "<gold><bold>Pallet Town",
"uuid": "c106b35a-1058-4aca-809c-b9588c14ba11",
"color": {"red": 50, "green": 200, "blue": 50},
"entryMessage": {
"title": "<gold>Pallet Town",
"subtitle": "<gray>Shades of Your Journey Await",
"fade_in": 10,
"stay": 70,
"fade_out": 20,
"type": "title"
},
"exitMessage": {
"title": "",
"subtitle": "",
"fade_in": 0,
"stay": 0,
"fade_out": 0,
"type": "title"
},
"entry_script": "journey:pallet_town_enter",
"exit_script": "",
"inside_script": "",
"priority": 5,
"areas": [
{
"type": "sphere",
"data": {
"center": {"x": 1000, "y": 70, "z": 1000},
"radius": 150.0,
"dimension": "minecraft:overworld",
"entry_message": {"title": "", "subtitle": "", "fade_in": 0, "stay": 0, "fade_out": 0, "type": "title"},
"exit_message": {"title": "", "subtitle": "", "fade_in": 0, "stay": 0, "fade_out": 0, "type": "title"},
"tags": ["town", "safe_zone"],
"functions": ["DENY_FALL_DAMAGE"]
}
},
{
"type": "box",
"data": {
"corner1": {"x": 995, "y": 69, "z": 995},
"corner2": {"x": 1005, "y": 75, "z": 1005},
"dimension": "minecraft:overworld",
"entry_message": {
"title": "<white>Pokemon Center",
"subtitle": "",
"fade_in": 5,
"stay": 40,
"fade_out": 10,
"type": "title"
},
"exit_message": {"title": "", "subtitle": "", "fade_in": 0, "stay": 0, "fade_out": 0, "type": "title"},
"tags": ["pokemon_center"],
"functions": ["DENY_ALL_DAMAGE", "DENY_HUNGER"]
}
}
]
}

The outer sphere covers the whole town (no fall damage). The inner box covers just the Pokemon Center (full invulnerability + no hunger). Players see “Pokemon Center” as a title when they walk inside the building.


Zone files go in config/journey/zones/:

config/journey/zones/
├── pallet_town.json
├── pewter_city.json
├── route_1.json
└── gyms/
├── pewter_gym.json
└── cerulean_gym.json

CommandDescription
/zone create <name>Create a new zone
/zone delete <name>Delete a zone
/zone listList all zones
/zonemanagerOpen the visual zone editor GUI

  • Choose the right shape: Spheres for round areas, boxes for buildings, cylinders for towers
  • Use priority for nesting: Give buildings higher priority than the surrounding town
  • Keep inside scripts lightweight: They run 20 times/second per player
  • Use functions over scripts when possible: Functions are more efficient for common operations
  • Combine areas in one zone: A town can have one sphere for the overall area and multiple boxes for individual buildings
  • Use consistent tag naming: Lowercase with underscores (safe_zone, pokemon_center)