Cobblemon Economy is an all-in-one economy + shop + quest layer for Cobblemon servers.
This page is a strict admin guide: install, required/optional mods, shops, skins, quantity controls, quests, JSON config examples, and current hard limits. If a behavior is not described here, do not assume it is supported.
1.21.11.7.1raid_win objectives)tower_win objectives)academy) grading integrationraid_win): fully supported when Cobblemon Raid Dens is installed.RAID_BATTLE_START / RAID_END).raid_win quest progression and raid rewards are triggered from raid win events.tower_win): no hard dependency required./eco item) to apply tour_de_combat tag for reliable detection.cobblemon-economy-<version>.jar into mods/.world/config/cobblemon-economy/./eco reload after JSON edits (full restart is safest after major changes).What /eco reload does:
config.json, shops.json, quests.json, quest_npcs.json, and quest_boards_bindings.json.What /eco reload does not do:
Per world folder:
world/config/cobblemon-economy/config.json -> global economy settings.world/config/cobblemon-economy/shops.json -> all shop definitions.world/config/cobblemon-economy/quests.json -> all quest definitions.world/config/cobblemon-economy/quest_npcs.json -> quest NPC board definitions.world/config/cobblemon-economy/quest_boards_bindings.json -> block-position to quest-board ID bindings.world/config/cobblemon-economy/milestone.json -> capture milestone rewards.world/config/cobblemon-economy/skins/*.png -> custom NPC skins.world/config/cobblemon-economy/economy.db -> economy database.world/config/cobblemon-economy/quests.db -> quest state database.config.jsonTo make the reward rules easier to read, the generated config now uses explicit capture-related keys:
capture_event_base_rewardcapture_multi_reward0.0.capture_shiny_multipliercapture_radiant_multipliercapture_legendary_multipliercapture_paradox_multiplierExact payout behavior with default values:
capture_event_base_reward.capture_multi_reward.milestone.json.Special multiplier rule:
base + bonus.capture_event_base_reward = 100 and capture_shiny_multiplier = 5: shiny payout = 500.5 + legendary 10 = x15 total special payout.Important scope note:
capture_multi_reward only affects repeat normal captures.capture_event_base_reward / special multipliers separately.Legacy keys are still read for compatibility:
captureRewardcapture_rewardnewDiscoveryRewardpokedex_new_species_bonus_rewardnormal_capture_reward_requires_new_pokedex_entryspecial_capture_reward_ignores_pokedex_historyshinyMultiplierradiantMultiplierlegendaryMultiplierparadoxMultiplierWhen the config is rewritten, Cobblemon Economy saves the explicit key names.
Recommended strict Pokedex-only setup:
{
"capture_event_base_reward": 100,
"capture_multi_reward": 0
}
With that setup:
quest_boards_bindings.json is normally managed by /eco questboard bind and /eco questboard unbind.dimension;x;y;z.cobblemon-economy:quest_board block has no explicit binding, it falls back to the first entry found in quest_npcs.json./bal or /balance/pco/pay <player> <amount>/eco reload/eco shop list/eco shop get <id>/eco quest list/eco questnpc list/eco questnpc get <id>/eco questboard list/eco questboard open <id>/eco questboard bind <id>/eco questboard unbind/eco skin <name>/eco item/balance <player> <add|remove|set> <amount>/pco <player> <add|remove|set> <amount>Edit shops.json:
{
"shops": {
"general_shop": {
"title": "General Shop",
"currency": "POKE",
"skin": "shopkeeper",
"skinModel": "steve",
"isSellShop": false,
"items": [
{ "id": "minecraft:diamond", "name": "Diamond", "price": 1000 },
{ "id": "cobblemon:poke_ball", "name": "Poke Ball", "price": 200 }
]
}
}
}
Important fields:
currency: POKE or PCO.skin: PNG name (without .png) from world/config/cobblemon-economy/skins/.skinModel: steve or alex (optional, default steve).isSellShop: true for sell mode.items: list of items/command-items.id, including type: "command" entries.type: "command", use id as a stable internal key (example: server:vote_key), not as a real given item.Shop item behavior (exact):
type: "item":id as the item to give/sellcomponentsnbtdropTable or lootTabletype: "command":command once per quantity purchased%player% placeholder onlydisplayItem.material, displayItem.displayname, and displayItem.enchantEffect only for the GUI iconNot supported / do not rely on this in shops:
%player% in shop commands.displayItem changing the real purchased item for type: "item" entries.components or nbt customizing the visual icon of type: "command" entries.dropTable entries. If you need weights or advanced rolls, use a Minecraft lootTable instead.components JSON string rule:
"base"shopkeeper_spawn_egg or /summon cobblemon-economy:shopkeeper)./eco shop get <shopId>.world/config/cobblemon-economy/skins/ (example: nurse.png)./eco skin nurse.You can also define defaults in JSON per shop or quest NPC:
"skin": "nurse""skinModel": "alex"1x -> 2x -> 4x -> 8x -> 16x -> 32x -> 64x.For a sell shop:
"isSellShop": true.Sell matching rule:
namespace:* format such as minecraft:* or cobblemon:*.-25% to +25%.lootTable rolls once per purchased quantity.dropTable gives one random item ID per purchased quantity.lootTable and dropTable are present on the same entry, lootTable wins.dropTable entries are simple item IDs only; they do not support per-drop NBT/components/weights.dropTable, lootTable, and wildcards are best used in buy shops, not deterministic sell shops.Quest system uses 2 files:
quests.json = mission definitions.quest_npcs.json = which NPC/board offers which quests.Flow:
Lifecycle rules that matter:
requiresCompleted is optional and empty by default in the bundled quest set.quests.json (Exact Authoring Guide)Top-level key must be quests.
{
"quests": {
"my_quest_id": {
"name": "My Quest",
"repeatPolicy": "DAILY",
"repeatable": true,
"timeLimitMinutes": 1440,
"cooldownMinutes": 0,
"requiresCompleted": [],
"objectives": [],
"rewards": {
"pokedollars": 2000,
"pco": 0,
"commands": []
}
}
}
}
Quest definition behavior:
name: display name shown on the board.repeatPolicy:DAILY = next board rotation / next reset windowALWAYS = can become available again immediately after claim unless cooldownMinutes is setONCE = permanently locked after claimrepeatable:true except for ONCErepeatable: false, the quest behaves like a one-time quest after claimtimeLimitMinutes:cooldownMinutes:> 0, this explicit per-player cooldown is used after claim0, availability falls back to repeatPolicyrequiresCompleted:COMPLETED or CLAIMEDrewards:pokedollars, pco, and commands can be combined in the same quest rewardRecommended quest presets:
repeatPolicy: "DAILY"repeatable: truecooldownMinutes: 0repeatPolicy: "ALWAYS"repeatable: truecooldownMinutes: <minutes>repeatPolicy: "ONCE"repeatable: falsecapturefossil_revivebattle_winraid_wintower_winFilter logic:
"types": ["water", "ice"] means water OR ice.species + pokeball + shiny means all three conditions must match.dimensions takes priority over dimension if both are present.Use any combination:
species (array)types (array)labels (array)pokeball (array)dimension (single string) or dimensions (array)shiny (true/false)Exact support by objective type:
capture:species, types, labels, pokeball, dimension, dimensions, shinyfossil_revive:species, types, labels, dimension, dimensions, shinypokeball is not available for fossils and should not be usedbattle_win, raid_win, tower_win:count onlyQuest reward commands:
rewards.commands executes as server permission level 4.%player% is the only supported placeholder.{
"quests": {
"catch_shiny_gyarados": {
"name": "Red Leviator",
"repeatPolicy": "DAILY",
"repeatable": true,
"objectives": [
{
"type": "capture",
"count": 1,
"species": ["cobblemon:gyarados"],
"shiny": true
}
],
"rewards": {
"pokedollars": 15000,
"pco": 120,
"commands": []
}
}
}
}
Yes: this setup shows a shiny Gyarados preview on the quest board.
{
"quests": {
"raid_runner": {
"name": "Raid Runner",
"repeatPolicy": "DAILY",
"repeatable": true,
"objectives": [
{ "type": "raid_win", "count": 3 }
],
"rewards": { "pokedollars": 6000, "pco": 60, "commands": [] }
},
"tower_runner": {
"name": "Tower Runner",
"repeatPolicy": "DAILY",
"repeatable": true,
"objectives": [
{ "type": "tower_win", "count": 2 }
],
"rewards": { "pokedollars": 5000, "pco": 80, "commands": [] }
}
}
}
quest_npcs.json (Board/NPC Definitions){
"quest_npcs": {
"safari_guide": {
"displayName": "Safari Guide",
"skin": "shopkeeper",
"skinModel": "alex",
"maxActive": 2,
"visibleQuests": 6,
"sharedRotation": true,
"rotationMode": "MIDNIGHT",
"rotationHours": 24,
"questPool": [
"catch_shiny_gyarados",
"raid_runner",
"tower_runner"
]
}
}
}
Field behavior:
maxActive: max simultaneously active quests for that NPC board.visibleQuests: keep this at 6.6 are raised to 66 are not usefulsharedRotation:true = same selection for all players.false = per-player selection.rotationMode:MIDNIGHT = rotates at next local server midnight.HOURS = rotates every rotationHours block.rotationHours:rotationMode is HOURS1questPool: quest IDs from quests.json.dialogues:Board behavior notes:
questPool does not show more than 6 cards at once.Bind an NPC to a quest profile:
/eco questnpc list/eco questnpc get <id>Set in config.json:
{
"main_currency": "cobeco"
}
Values:
cobeco (default)cobbledollarsimpactorBehavior:
cobeco: CobEco DB is authoritative, with optional mirror/bridge support.cobbledollars: balance ops route to CobbleDollars.impactor: balance ops route to Impactor primary account.types (not type for filters)pokeball (not ball)species must be an arraycobblemon:gyarados, minecraft:the_netherobjectives must be an array ([]) even for one objective.count must be >= 1.repeatPolicy must be DAILY, ALWAYS, or ONCE.repeatPolicy: "HOURLY" is not a supported config value. Use board rotation (rotationMode: "HOURS") or cooldownMinutes instead.visibleQuests > 6 expecting extra board pages; the current board screen is fixed to 6 visible cards.requiresCompleted to chain quests between different board IDs.pokeball filters to work on fossil_revive objectives.battle_win, raid_win, or tower_win to filter by species/type/label; they are count-only objectives.%player%./eco reload or restart.raid_win quest progression.tower_win detection via battle metadata/tags (use Tower Tagger for custom setups).Discord support: https://discord.gg/zxZXcaTHwe