Server-Configured
Admins pre-define task pools for each board
Bounty Boards are command-accessed systems that display rotating pools of server-configured tasks. Servers can hook board access to any function they desire (NPCs, GUI buttons, signs, physical entities, etc).
Bounty Boards provide:
Server-Configured
Admins pre-define task pools for each board
Scheduled Rotation
Tasks refresh at configured intervals (in ticks)
Simple Task Pools
Just list task IDs to populate the board
Flexible Access
Servers choose how players access boards
Access: NPC in town squareRotation: Daily (1728000 ticks)Tasks: Simple beginner questsAccess: Guild hall sign/NPCRotation: Weekly (12096000 ticks)Tasks: Challenging group contentAccess: Event NPC/GUIRotation: 6 hours (432000 ticks)Tasks: Time-limited event questsBounty boards are configured in config/journey/bounty_boards/.
File: config/journey/bounty_boards/town_board.json
{ "id": "town_board", "name": "<gold>Town Bulletin Board", "description": [ "<gray>Daily tasks from the townspeople", "<gray>Refreshes every 24 hours" ], "displayedTasks": 3, "rotationInterval": 1728000, "lastRotation": 1761311119724, "taskPool": [ "journey:catch_any_pokemon", "journey:harvest_oran_berries", "journey:win_wild_battles", "journey:level_up_pokemon", "journey:heal_pokemon" ]}Configuration Fields:
| Field | Type | Description |
|---|---|---|
id | String | Unique identifier for the board |
name | String | Display name (supports MiniMessage) |
description | String[] | Board description lines |
displayedTasks | Integer | How many tasks to show at once |
rotationInterval | Long | Ticks between rotations (20 ticks = 1 sec) |
lastRotation | Long | Last rotation timestamp (auto-generated) |
taskPool | String[] | List of task IDs |
Task pools are simple arrays of task IDs:
{ "taskPool": [ "journey:catch_pokemon", "journey:win_battles", "journey:harvest_berries", "journey:level_up_pokemon", "journey:heal_pokemon", "journey:break_stone" ]}Tasks are selected randomly from the pool when rotation occurs.
Common interval values (in ticks, 20 ticks = 1 second):
// 1 hour"rotationInterval": 72000
// 6 hours"rotationInterval": 432000
// 12 hours"rotationInterval": 864000
// 24 hours (daily)"rotationInterval": 1728000
// 7 days (weekly)"rotationInterval": 12096000Bounty boards are accessed via commands. Servers can hook these commands to any trigger:
# Open a specific board/journey bountyboard open <board_id>
# List available boards/journey bountyboard listNPC Integration (using Cobblemon NPCs):
{ "right_click_script": [ "q.player.execute_command('/journey bountyboard open town_board');" ]}Sign Integration:
/journey bountyboard open town_boardGUI Button Integration:
command: "/journey bountyboard open town_board"Custom Trigger:
Simple board with daily rotation:
{ "id": "town_board", "name": "<gold>Town Bulletin Board", "description": [ "<gray>Daily tasks from the townspeople", "<gray>Refreshes every 24 hours" ], "displayedTasks": 3, "rotationInterval": 1728000, "lastRotation": 1761311119724, "taskPool": [ "journey:catch_any_pokemon", "journey:harvest_oran_berries", "journey:win_wild_battles", "journey:level_up_pokemon", "journey:heal_pokemon", "journey:explore_zones" ]}6 tasks in pool, 3 displayed at once, rotates daily.
High-difficulty weekly board:
{ "id": "weekly_challenge_board", "name": "<light_purple>Weekly Challenges", "description": [ "<gray>Difficult challenges with great rewards", "<gray>Refreshes every 7 days" ], "displayedTasks": 2, "rotationInterval": 12096000, "lastRotation": 1761311119724, "taskPool": [ "journey:legendary_hunt", "journey:master_battles", "journey:shiny_collection", "journey:raid_completion" ]}Fast-rotating easy tasks:
{ "id": "quick_tasks_board", "name": "<green>Quick Tasks", "description": [ "<gray>Simple tasks that refresh every 6 hours", "<gray>Perfect for quick rewards!" ], "displayedTasks": 5, "rotationInterval": 432000, "lastRotation": 1761311119724, "taskPool": [ "journey:catch_5_pokemon", "journey:win_3_battles", "journey:harvest_10_berries", "journey:heal_pokemon", "journey:talk_to_npc", "journey:visit_zone", "journey:break_100_blocks", "journey:place_100_blocks", "journey:fish_10_items", "journey:trade_with_villager" ]}10 tasks in pool, 5 displayed, rotates every 6 hours.
/journey bountyboard open <board_id>Open a specific bounty board GUI.
Permission: journey.bountyboard.open
Examples:
/journey bountyboard open town_board/journey bountyboard open guild_board/journey bountyboard listList all configured bounty boards.
Permission: journey.bountyboard.list
Output:
===== Bounty Boards =====town_board - Town Bulletin Boardguild_board - Guild Bounty Boardweekly_board - Weekly Challenges/journey bountyboard rotate <board_id>Manually trigger board rotation.
Permission: journey.bountyboard.rotate
Example:
/journey bountyboard rotate town_boardBehavior:
/journey bountyboard info <board_id>View detailed board information.
Permission: journey.bountyboard.info
Example:
/journey bountyboard info town_boardOutput:
===== Board: Town Bulletin Board =====ID: town_boardDisplayed Tasks: 3Pool Size: 6 tasksRotation Interval: 24 hours (1728000 ticks)Last Rotation: 3 hours agoNext Rotation: 21 hours
Current Tasks: - journey:catch_any_pokemon - journey:harvest_oran_berries - journey:win_wild_battles/journey bountyboard reloadReload all bounty board configurations.
Permission: journey.bountyboard.reload
Example:
/journey bountyboard reloadBehavior:
✅ Variety - Include different task types (combat, exploration, collection)
✅ Balance Pool Size - Pool should be 2-3x larger than displayed tasks
✅ Test Rotations - Verify task selection feels fair
✅ Task Difficulty - Match pool difficulty to board purpose
✅ Match Player Activity - Daily boards for daily players
✅ Reasonable Intervals - Not too fast (overwhelming) or slow (boring)
✅ Consider Task Length - Longer tasks need longer rotation intervals
✅ Clear Triggers - Make it obvious how to access boards
✅ Thematic NPCs - Use appropriate NPCs for board theme
✅ Multiple Access Points - Provide several ways to access important boards
Check:
Check:
/bountyboard rotate to manually triggerCheck:
config/journey/tasks/Bounty boards display Journey tasks:
config/journey/tasks/Bounty boards are individual, global tasks are collaborative:
Customize the bounty board GUI:
config/journey/guis/