It can be used for starter selection, dojo-style rewards, fossil choices, special creature gifts, custom item rewards, or any other map event where the player must choose one option from a configured set.
KantoStarters uses configurable choice sessions.
Each session can contain multiple choices, but each physical block is linked to one specific option.
For example, a classic starter table can be built with three blocks:
- one block linked to
start / bulbasaur - one block linked to
start / charmander - one block linked to
start / squirtle
When the player right-clicks one of these bound blocks, a custom dialogue screen opens with a preview, dialogue text, and a YES/NO confirmation.
If the player confirms the choice, the mod can run commands, give items, and mark that session as completed for that player.
Creating and Binding a Choice to a Block
Before binding a block in the world, you need to create or edit a choice session in the config file:
config/kantostarters/choice_sessions.json
A choice station is based on two IDs:
sessionId — the group of choices, such as start, dojo, or mtmoonchoiceId — the specific Cobblemon ID inside that session, such as bulbasaur, charmander, or helix_fossil
Example:
{
"sessionId": "start",
"enabled": true,
"oneTimeChoice": true,
"blockIfAlreadyHasCobblemon": false,
"textColour": "#3050c8",
"secondConfirmLines": [],
"choices": [
{
"choiceId": "bulbasaur",
"displayName": "Bulbasaur",
"previewSpecies": "bulbasaur",
"dialogId": "start_bulbasaur_dialog",
"dialogLines": [],
"itemRewards": [],
"previewScale": 1.0,
"previewOffsetX": -1,
"previewOffsetY": 4,
"commands": [
"pokegive %player% bulbasaur level=5"
]
}
]
}
After editing the config, reload the mod:
/kantostarters reload
Then you can bind a block to that configured choice:
- Place or choose a block in the world.
- Look directly at the block.
- Run the command:
/kantostarters set <sessionId> <choiceId>
Example:
/kantostarters set start bulbasaur
After that, players can right-click the block to open that specific choice.
To remove a binding from the block you are looking at:
/kantostarters unset
To test a configured choice without binding a block:
/kantostarters open <sessionId> <choiceId>
All setup commands require operator/admin permission.
Default Config
On first launch, KantoStarters creates its config files inside:
config/kantostarters/
The main file is:
config/kantostarters/choice_sessions.json
By default, the mod includes example sessions for:
start — Bulbasaur, Charmander, and Squirtledojo — Hitmonlee and Hitmonchanceladoneevee — Eeveemtmoon — Helix Fossil and Dome Fossil
These are only default examples. You can edit, remove, expand, or replace them with your own custom sessions.
Always create the session and choice in choice_sessions.json before using /kantostarters set.
Choice Sessions
Each session controls a group of related choices.
Important session fields:
{
"sessionId": "start",
"enabled": true,
"oneTimeChoice": true,
"blockIfAlreadyHasCobblemon": false,
"textColour": "#3050c8",
"secondConfirmLines": [],
"choices": []
}
sessionId
The internal ID session's name.
This is used in commands such as:
/kantostarters set start bulbasaur
enabled
If set to false, the session cannot be used.
oneTimeChoice
If set to true, each player can complete that session only once.
After confirming a choice, the player receives internal tags such as:
ks_done_startks_choice_start_bulbasaur
blockIfAlreadyHasCobblemon
If set to true, players who already have a Cobblemon in their party or PC cannot use this session.
This is useful for starter systems where you do not want players to claim a starter after already receiving or catching something.
textColour
Controls the dialogue text color.
secondConfirmLines
Optional extra confirmation dialogue.
This is useful when you want a second warning before the final choice is locked in.
Choice Options
Each choice controls one selectable option inside a session.
Example:
{
"choiceId": "bulbasaur",
"displayName": "Bulbasaur",
"previewSpecies": "bulbasaur",
"dialogId": "start_bulbasaur_dialog",
"dialogLines": [],
"itemRewards": [],
"previewScale": 1.0,
"previewOffsetX": -1,
"previewOffsetY": 4,
"commands": [
"pokegive %player% bulbasaur level=5"
]
}
choiceId
The internal ID of the choice.
displayName
The name shown and used by the choice screen.
previewSpecies
Controls the preview shown in the choice screen.
For Cobblemon previews, use a species ID:
"previewSpecies": "bulbasaur"
For item previews, use a full item ID:
"previewSpecies": "cobblemon:helix_fossil"
dialogId
The ID used to load dialogue lines from the dialogue config files.
Example:
"dialogId": "start_bulbasaur_dialog"
dialogLines
Fallback dialogue lines used if no dialogId is found.
itemRewards
Direct item rewards.
Example:
"itemRewards": [
{
"itemId": "minecraft:diamond",
"count": 1
}
]
If the player's inventory is full, leftover items are dropped near the player.
previewScale, previewOffsetX, previewOffsetY
Controls the visual position and size of the preview inside the choice screen.
These are useful when a model or item appears too big, too small, too high, or too low.
commands
Commands executed when the player confirms the choice.
Example:
"commands": [
"pokegive %player% bulbasaur level=5"
]
Supported placeholders:
%player% — player name%uuid% — player UUID%choice% — selected choice ID%session% — session ID
Commands are executed by the server with admin permission.
Dialog Files
KantoStarters generates separate dialog files for different languages:
config/kantostarters/choice_dialog_arrays_en_us.jsonconfig/kantostarters/choice_dialog_arrays_pt_br.json
Example:
{
"start_bulbasaur_dialog": [
"I see! BULBASAUR is your choice.",
"It's very easy to raise.",
"So, [player], you want to go with",
"the GRASS COBBLEMON BULBASAUR?"
]
}
Supported placeholders:
[player][choice_display][choice_id][preview_species]
The mod automatically tries to use the player's selected Minecraft language.
If a matching dialogue file is not found, it falls back to en_us.
You can add more languages by creating files using the same format.
Example:
config/kantostarters/choice_dialog_arrays_es_es.json
Dialog Formatting
Dialog lines are automatically wrapped for the custom choice screen.
For best results, keep each line short and readable.
You can also use:
/p
as a page break inside dialogue arrays.
Example:
{
"example_dialog": [
"This is the first page.",
"/p",
"This is the second page."
]
}
Default Starter Screen Control
KantoStarters can control whether the default Cobblemon starter selection screen is allowed to open.
To enable the default starter screen:
/kantostarters DefaultPickStarters on
To disable the default starter screen:
/kantostarters DefaultPickStarters off
If you are using KantoStarters as your main starter selection system, you will probably want:
/kantostarters DefaultPickStarters off
This lets your custom choice stations handle starter selection instead.
Important:
KantoStarters does not automatically give a starter on join by itself. You should build and configure your own starter area, bind the desired blocks, and decide how players access those choices.
Commands
Reload configs:
/kantostarters reload
Shows basic debug info:
/kantostarters debug
Lists configured sessions and choices:
/kantostarters list
Bind the block you are looking at:
/kantostarters set <sessionId> <choiceId>
Remove the binding from the block you are looking at:
/kantostarters unset
Open a choice directly for testing:
/kantostarters open <sessionId> <choiceId>
Enable or disable blocking players who already have a Cobblemon for a session:
/kantostarters BlockIfAlreadyHasCobblemon <sessionId> <true|false>
Enable the default Cobblemon starter screen:
/kantostarters DefaultPickStarters on
Disable the default Cobblemon starter screen:
/kantostarters DefaultPickStarters off
Reset all KantoStarters choice tags for the player running the command:
/kantostarters reset all
Reset one session for the player running the command:
/kantostarters reset <sessionId>
All commands require operator/admin permission.
KantoStarters can be used for more than just the first starter selection.
No. KantoStarters requires Cobblemon.
No. KantoStarters does not add physical blocks, but you can bind any block (even invisible barriers) as a choice option.
If you have ideas or feedback, you can share them through our public issue tracker or send a direct message to "cobblekanto" at Discord.