Zone System
Zone System
Section titled “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.
Quick Start
Section titled “Quick Start”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.
Zone Structure
Section titled “Zone Structure”| Field | Type | Description |
|---|---|---|
name | String | Display name (supports MiniMessage) |
uuid | String | Unique identifier (generate one or let Journey create it) |
color | Object | RGB color for debug visualization ({"red": 50, "green": 200, "blue": 50}) |
entryMessage | Object | Title shown when entering the zone |
exitMessage | Object | Title shown when leaving the zone |
entry_script | String | Script resource to run on entry (e.g., "journey:pallet_town_enter") |
exit_script | String | Script resource to run on exit |
inside_script | String | Script resource to run every tick while inside |
priority | Number | Higher = triggers first when zones overlap (default: 0) |
areas | Array | Array of area definitions (the actual shapes) |
Messages
Section titled “Messages”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_outare in ticks (20 ticks = 1 second)- Leave
titleempty ("") to show no message - Both zones and individual areas can have their own messages
Area Types
Section titled “Area Types”Each zone can contain multiple areas. Three shapes are available:
Sphere
Section titled “Sphere”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.
Cylinder
Section titled “Cylinder”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.
Zone Functions
Section titled “Zone Functions”Functions modify gameplay mechanics for players inside the area:
| Function | Description |
|---|---|
DENY_FALL_DAMAGE | Players take no fall damage |
DENY_ALL_DAMAGE | Players are completely invulnerable |
DENY_HUNGER | Hunger does not deplete |
DENY_ATTACK | Players 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:
1. Spawning Control
Section titled “1. Spawning Control”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.
2. Custom Categorization
Section titled “2. Custom Categorization”Use tags to organize your zones logically:
{ "tags": ["gym", "pewter", "rock_type"]}Scripts
Section titled “Scripts”Zones can execute scripts at three lifecycle points. Scripts have access to player Molang functions and zone context data.
Entry Script
Section titled “Entry Script”Runs once when a player enters the zone:
{ "entry_script": "journey:pallet_town_enter"}Exit Script
Section titled “Exit Script”Runs once when a player leaves the zone:
{ "exit_script": "journey:pallet_town_exit"}Inside Script
Section titled “Inside Script”Runs every tick while a player is inside:
{ "inside_script": "journey:healing_zone_tick"}Script Context
Section titled “Script Context”Scripts have access to:
| Data Path | Description |
|---|---|
q.zone.name | Zone name |
q.zone.uuid | Zone UUID |
q.zone.color | Zone color (hex) |
q.other_zones.contains(name_or_uuid) | Check other zones the player is in |
All q.player.* functions | Full player Molang functions |
Priority System
Section titled “Priority System”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).
Using Zones in Tasks
Section titled “Using Zones in Tasks”Zones integrate directly with the task system through events:
Enter Zone Objective
Section titled “Enter Zone Objective”{ "event": "ENTER_ZONE", "filter": "q.zone.uuid == 'c106b35a-1058-4aca-809c-b9588c14ba11'", "target": 1}Zone-Restricted Objectives
Section titled “Zone-Restricted Objectives”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}Complete Example: Town with Buildings
Section titled “Complete Example: Town with Buildings”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.
File Location
Section titled “File Location”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.jsonCommands
Section titled “Commands”| Command | Description |
|---|---|
/zone create <name> | Create a new zone |
/zone delete <name> | Delete a zone |
/zone list | List all zones |
/zonemanager | Open 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)