Repository navigation
Your_Dex_Type.json
A dex type: which Pokémon to complete, how they count, and the rewards for reaching each percentage. Every .json file in config/DexRewards/dex_types/ is one dex type, and the file name is its ID. national.json is the dex type national, used with /dex rewards national and in placeholders like %player_dex_count national%.
Note
- If the
dex_types/folder is missing or empty, DexRewards createsnational.json. Delete or edit it freely once you have your own dex types. - Settings missing from a dex type file use the defaults listed below. Unlike the other config files, they aren't written back into the file.
- All text uses MiniMessage formatting.
📄 Default national.json (first two of its 21 reward groups)
{
"display_name": "National Dex",
"pokedex": "cobblemon:national",
"require_caught": true,
"require_shiny": false,
"require_all_forms": false,
"valid_species": [],
"ignored_species": [],
"valid_labels": [],
"ignored_labels": [],
"ignored_forms": [],
"reward_groups": {
"newcomer": {
"required_percent": 2.0,
"display_name": "Newcomer",
"icon_item": {
"id": "cobblemon:poke_ball"
},
"icon_lore": [
"<gray>Rewards:",
"<white> • 16x Poké Ball",
"<white> • 8x Potion"
],
"rewards": {
"poke_ball": {
"type": "item",
"display_name": "%item_count%x %item%",
"item": {
"id": "cobblemon:poke_ball"
},
"min_count": 16,
"max_count": 16
},
"potion": {
"type": "item",
"display_name": "%item_count%x %item%",
"item": {
"id": "cobblemon:potion"
},
"min_count": 8,
"max_count": 8
}
}
},
"rookie": {
"required_percent": 5.0,
"display_name": "Rookie",
"icon_item": {
"id": "cobblemon:great_ball"
},
"icon_lore": [
"<gray>Rewards:",
"<white> • 16x Great Ball",
"<white> • 4x Revive"
],
"rewards": {
"great_ball": {
"type": "item",
"display_name": "%item_count%x %item%",
"item": {
"id": "cobblemon:great_ball"
},
"min_count": 16,
"max_count": 16
},
"revive": {
"type": "item",
"display_name": "%item_count%x %item%",
"item": {
"id": "cobblemon:revive"
},
"min_count": 4,
"max_count": 4
}
}
}
}
}| Field | Type | Default | Description |
|---|---|---|---|
display_name |
string | "National Dex" |
The name shown by %dex_type%. |
pokedex |
string | "cobblemon:national" |
The Cobblemon Pokédex this dex type starts from. See Pokédexes. |
require_caught |
boolean | true |
Pokémon must be caught (or otherwise obtained) to count. If false, seeing them is enough. |
require_shiny |
boolean | false |
Pokémon must be shiny to count. |
require_all_forms |
boolean | false |
Count every form separately instead of every species. See How-It-Works. |
valid_species |
list | [] |
If not empty, only these species count. See Species. |
ignored_species |
list | [] |
These species never count. |
valid_labels |
list | [] |
If not empty, only species with at least one of these labels count. See Labels. |
ignored_labels |
list | [] |
Species with any of these labels never count. |
ignored_forms |
list | [] |
Forms that never count when require_all_forms is on. See Ignored Forms. |
reward_groups |
object | {} |
The reward tiers. See Reward Groups. |
require_caught and require_shiny combine into four counting modes. See How-It-Works.
pokedex is the ID of one of Cobblemon's Pokédexes, or one added by a datapack:
cobblemon:national, cobblemon:kanto, cobblemon:johto, cobblemon:hoenn, cobblemon:sinnoh, cobblemon:unova, cobblemon:kalos, cobblemon:alola, cobblemon:galar, cobblemon:hisui, cobblemon:paldea
Warning
If pokedex isn't a loaded Pokédex, the dex type is skipped and an error is logged:
Dex type dex_types/<file>.json has an unknown pokedex '<id>'. Skipping it until it is fixed.
Species are written as their lowercase name with no spaces or symbols and no cobblemon: prefix: bulbasaur, mrmime, farfetchd, typenull.
Labels are Cobblemon's species tags. Useful ones include:
| Label | Species |
|---|---|
gen1 … gen9
|
Species introduced in that generation. |
legendary, mythical, ultra_beast, paradox
|
Each special group. |
starter |
Starter Pokémon. |
baby, fossil
|
Baby and fossil Pokémon. |
Example: a Gen 1 dex without legendaries:
"valid_labels": ["gen1"],
"ignored_labels": ["legendary", "mythical"]Form names are matched without case: "mega" and "Mega" both work. Cobblemon lists some forms that only exist in battle or can't be caught. If they aren't ignored, a require_all_forms dex type can never be completed. This list covers them:
"ignored_forms": [
"Mega", "Mega-X", "Mega-Y", "Primal", "Gmax", "Low-Key-Gmax", "Rapid-Strike-Gmax", "Eternamax",
"Ultra", "Zen", "Galar-Zen", "School", "Busted", "Hangry", "Blade", "Complete",
"Sunshine", "Sunny", "Rainy", "Snowy", "Gorging", "Gulping", "Noice-Face", "Ash",
"Pirouette", "Hero", "Terastal", "Stellar",
"Cornerstone-Tera", "Hearthflame-Tera", "Teal-Tera", "Wellspring-Tera"
]You may also want to ignore forms that can't be obtained on your server, such as Partner (Pikachu) or Eternal (Floette).
reward_groups is a map of group ID → group. The group ID is how a claim is saved in Player_Data.json. Groups appear in the rewards GUI in the order they're listed.
Caution
Renaming a group's ID makes it unclaimed for every player, so they can claim it again.
Every field is required. Use "rewards": {} for a group with no rewards.
| Field | Type | Description |
|---|---|---|
required_percent |
number | The completion percentage needed to unlock the group, from 0 to 100. 0 unlocks it right away. |
display_name |
string | The group's name, shown by %group_name%. |
icon_item |
object | The group's item in the rewards GUI. See Items. |
icon_lore |
list | The lore on the group's item in the GUI, in every state. A good place to list the rewards. |
rewards |
object | A map of reward ID → reward. Every reward is given when the group is claimed. See Rewards. |
Every reward has a type and a display_name. display_name is for your own reference and isn't currently shown in-game.
Gives an item. If the player's inventory is full, it drops at their feet.
| Field | Type | Description |
|---|---|---|
item |
object | The item to give. See Items. |
min_count |
integer | The fewest items to give. |
max_count |
integer | The most items to give. A random amount between min_count and max_count is given each time. Use the same value for both to give a fixed amount. |
"potions": {
"type": "item",
"display_name": "Potions",
"item": { "id": "cobblemon:potion" },
"min_count": 1,
"max_count": 5
}Runs commands from the server console, without command feedback in chat. %player% is replaced with the player's name.
| Field | Type | Description |
|---|---|---|
commands |
list | The commands to run, in order. The leading / is optional. |
"announcement": {
"type": "command",
"display_name": "Completion Announcement",
"commands": ["say %player% has completed their pokedex!"]
}Gives a Pokémon. If the player's party is full, it goes to their PC.
| Field | Type | Description |
|---|---|---|
pokemon |
string | The Pokémon, written the same way as Cobblemon's /givepokemon command, e.g. "pikachu level=5" or "magikarp shiny=yes level=1". |
"shiny_magikarp": {
"type": "pokemon",
"display_name": "Shiny Magikarp",
"pokemon": "magikarp shiny=yes level=1"
}Tip
A shiny Pokémon given as a reward counts toward shiny dex types, just like a caught one.
Items use Minecraft's item format: an id, plus optional components.
"item": {
"id": "minecraft:diamond_sword",
"components": {
"minecraft:custom_name": "{\"text\":\"Dex Blade\",\"italic\":false}",
"minecraft:enchantments": { "levels": { "minecraft:sharpness": 5 } }
}
}Text components such as minecraft:custom_name and minecraft:lore are written as JSON text inside a string, as above.
Warning
If an item can't be read (an unknown ID, or a component with a mistake), it becomes air and a warning is logged with the reason.
Shiny Kanto dex. Every Kanto Pokémon caught as a shiny:
{
"display_name": "Shiny Kanto",
"pokedex": "cobblemon:kanto",
"require_caught": true,
"require_shiny": true,
"reward_groups": {
"first_shiny": {
"required_percent": 1.0,
"display_name": "First Shiny",
"icon_item": { "id": "minecraft:gold_nugget" },
"icon_lore": ["<gray>Rewards:", "<white> • 1x Gold Ingot"],
"rewards": {
"gold": { "type": "item", "display_name": "Gold", "item": { "id": "minecraft:gold_ingot" }, "min_count": 1, "max_count": 1 }
}
}
}
}Rotom forms. Every Rotom appliance form, caught:
{
"display_name": "Rotom Collector",
"pokedex": "cobblemon:national",
"require_all_forms": true,
"valid_species": ["rotom"],
"reward_groups": {
"complete": {
"required_percent": 100.0,
"display_name": "Every Rotom",
"icon_item": { "id": "minecraft:redstone_block" },
"icon_lore": ["<gray>Catch all 6 Rotom forms"],
"rewards": {
"rare_candy": { "type": "item", "display_name": "Rare Candy", "item": { "id": "cobblemon:rare_candy" }, "min_count": 3, "max_count": 3 }
}
}
}
}Settings left out of these examples use their defaults.
| Problem | What happens |
|---|---|
| The file isn't valid JSON | The dex type is skipped and the error is logged. |
pokedex doesn't exist |
The dex type is skipped and an error is logged. |
| The filters leave no Pokémon | The dex type loads and a warning is logged. It counts as 0% complete, so only 0% groups unlock. |
| An item can't be read | It becomes air and a warning is logged. |
Changes apply with /dex reload, which also recalculates every online player's progress.
- How-It-Works: counting modes, forms and shiny tracking.
- Reward_GUI.json: how groups look in the rewards GUI.
- Placeholders: showing dex type and group values.