Skip to content

Your_Dex_Type.json

Unariginal edited this page Oct 16, 2026 · 1 revision

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 creates national.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
        }
      }
    }
  }
}

Top Level

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.

Pokédexes

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

Species are written as their lowercase name with no spaces or symbols and no cobblemon: prefix: bulbasaur, mrmime, farfetchd, typenull.

Labels

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"]

Ignored Forms

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

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.

Rewards

Every reward has a type and a display_name. display_name is for your own reference and isn't currently shown in-game.

Item — "type": "item"

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
}

Command — "type": "command"

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!"]
}

Pokémon — "type": "pokemon"

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

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.

Example Dex Types

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.

Errors

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.

See Also

Clone this wiki locally