Перейти к содержимому
Mineforgian

PokeBuilder - Cobblemon

Customize your Pokémon however you want!

Загрузки
2K
Подписчики
8
Обновлён
3 июня 2026 г.
Лицензия
All-Rights-Reserved

Опубликован 23 декабря 2025 г.

PokeBuilder is a comprehensive Cobblemon (Fabric 1.21.1) server-side mod that empowers players to customize and perfect their Pokémon using a built-in token economy system.

Key Features

The mod introduces an interactive GUI menu (/pokebuilder) where players can select a Pokémon from their party or PC to modify.

Builder Modules

The main editor menu (BuilderMenu) offers the following modules, each of which can be toggled on/off in the configuration:

Level: Modify the Pokémon's level.

  • IVs (Individual Values): Edit the genetic base stats.
  • EVs (Effort Values): Edit the training stats points.
  • Nature: Change the Pokémon's nature (e.g., Adamant, Modest).
  • Ability: Switch abilities (supports Hidden Abilities).
  • Shiny: Toggle the Shiny status of a Pokémon for a fee.
  • Gender: Switch the Pokémon's gender.
  • Appearance: (WIP) Planned module for cosmetic changes.
  • Evolution: Force evolve or "devolve" a Pokémon.
  • Friendship: Instantly maximize friendship/happiness.
  • PokéBall: Change the type of Poké Ball the Pokémon was caught in.

Economy System

Operates on a custom internal currency called Tokens. Each modification action has a configurable cost in config/pokebuilder/config.json. Player balances are displayed directly within the GUI.

⚙️ Configuration

Module Control: Enable/Disable features via config/pokebuilder/modules.json. Pricing: Fully customizable prices for every action. Restrictions: Option to restrict ability changes to only "legally" available ones for the species.

🎮 Commands

/pokebuilder: Opens the main selection menu.

/pb tokens[give/take]: Admin commands to manage player token balances.

This mod is the ultimate tool for servers looking to offer "Pokemon Editor" services or "Perfect Pokemon" creation as a gameplay feature or reward.

Ченджлог

V1Релиз1.21.1 · 3 июня 2026 г.

POKEBUILDER — COMPLETE GUIDE Server mod for Cobblemon · Fabric 1.21.1

PokeBuilder is a server mod that allows modifying Pokémon using a graphical menu system and tokens (internal currency). Everything is designed to be configured from JSON files without needing to restart the server (except for the first boot).

All configuration files are saved in: [Server]/config/pokebuilder/

INDEX

  1. Commands

  2. Permissions (LuckPerms / OP)

  3. economy.json — General configuration and economy

  4. modules.json — Enable/disable modules

  5. prices.json — Prices and price overrides per species

  6. blacklist.json — Blocked Pokémon

  7. limits.json — Daily usage limits

  8. discounts.json — Schedule-based discounts

  9. events.json — Tokens from events (catch / defeat)

  10. ui.json — Interface: positions, items, and texts

  11. Transaction History

  12. Backup System

  13. Data files (read-only)

  14. COMMANDS

Available aliases: /pb and /pokebuilder (both do the same thing)

USER COMMANDS (permission: pokebuilder.user)

  • /pb : Opens the main menu
  • /pb history : Opens your transaction history
  • /pb tokens balance : Shows your token balance
  • /pb tokens send [player] [amount] : Sends tokens to another player
  • /pb tokens buy [amount] : Buys tokens with server currency

ADMIN COMMANDS (permission: pokebuilder.admin)

  • /pb reload : Reloads all JSON files (automatically creates a backup first)
  • /pb history [player] : Views another player's history
  • /pb tokens balance [player] : Checks another player's balance
  • /pb tokens give [player] [amount] : Gives tokens to a player
  • /pb tokens take [player] [amount] : Takes tokens from a player
  • /pb tokens set [player] [amount] : Sets an exact balance
  • /pb admin maintenance on : Enables maintenance mode
  • /pb admin maintenance off : Disables maintenance mode

NOTES ON COMMANDS:

  • /pb reload applies changes from ALL JSONs instantly, without a restart.
  • The history saves the last 50 operations per player (see section 11).
  • /pb tokens buy requires an economy plugin to be configured (see economy.json).
  • While maintenance is active, users cannot open the menu.
  1. PERMISSIONS

The mod uses the standard Fabric permission node. Compatible with LuckPerms. If no permission plugin is installed, OP levels are used as a fallback.

  • Permission node: pokebuilder.user Description: Normal access: open GUI, buy, send tokens Fallback: all players (OP level 0)

  • Permission node: pokebuilder.admin Description: Full access: admin commands, give/take tokens, view others' history, maintenance, reload Fallback: OP level 2

Example with LuckPerms: /lp group default permission set pokebuilder.user true /lp group admin permission set pokebuilder.admin true

  1. economy.json — General configuration and economy

Path: config/pokebuilder/economy.json (If config.json from a previous version exists, it will be automatically migrated.)

{ "messages": { "prefix": "§8[§bPokeBuilder§8] §7", "insufficient_funds": "You do not have enough tokens!", "success": "Successfully updated your Pokemon!" }, "exchange": { "impactor": { "enabled": false, "rate": 1.0, "currencyName": "impactor" }, "ultraeconomy": { "enabled": false, "rate": 1.0, "currencyName": "Coins" }, "beconomy": { "enabled": false, "rate": 1.0, "currencyName": "beconomy" } }, "maintenanceMode": false, "maintenanceMessage": "§c[PokeBuilder] The shop is currently under maintenance." }

FIELDS:

messages.prefix Prefix that appears before the mod's messages in chat.

messages.insufficient_funds Message displayed when the player lacks tokens (plays a sound as well).

messages.success Confirmation message after a successful operation.

exchange.[plugin] Integration with external economies to buy tokens using /pb tokens buy.

  • enabled: true / false — enables that economy plugin.
  • rate: tokens given per 1 unit of currency. E.g.: rate: 2.0 -> $100 Coins buy 200 tokens.
  • currencyName: name of the currency displayed in messages. Compatible plugins: Impactor, UltraEconomy, BEconomy.

maintenanceMode If true, players without pokebuilder.admin cannot open the menu. Can be toggled live with /pb admin maintenance on/off.

maintenanceMessage Message sent to blocked players during maintenance.

  1. modules.json — Enable / disable modules

Path: config/pokebuilder/modules.json

{ "level": true, "ivs": true, "evs": true, "nature": true, "ability": true, "shiny": true, "gender": true, "appearance": true, "friendship": true, "evolution": true, "pokeball": true, "restrictAbilitiesToPokemon": false }

Each field set to true/false completely enables or disables that module for ALL players. If set to false, the button appears locked in the menu.

AVAILABLE MODULES:

  • level : Submenu to level up with Exp. Candy or reset to 1
  • ivs : IV editor stat by stat. Left Click: +1 | Right Click: -1 | Shift+Left: +10 | Shift+Right: -10
  • evs : EV editor stat by stat (same controls as IVs)
  • nature : Nature selector (visual grid of the 25 natures)
  • ability : Ability selector (includes hidden ability)
  • shiny : Shiny/non-shiny toggle (can be enabled and disabled)
  • gender : Male/female toggle
  • appearance : Editor for visual aspects and alternative forms
  • friendship : Instantly maximizes friendship (255). Charges nothing if already at max — displays the current value in the lore.
  • evolution : Evolve or devolve to a previous form
  • pokeball : Change the Poké Ball it was caught with

restrictAbilitiesToPokemon If true, it only shows abilities that the Pokémon can naturally have (including the hidden one). If false, it shows all abilities in the game.

  1. prices.json — Prices and price overrides per species

Path: config/pokebuilder/prices.json

{ "shiny": { "toggle": 5000 }, "nature": { "change": 500 }, "ability": { "change": 1000 }, "gender": { "toggle": 500 }, "friendship": { "maximize": 300 }, "pokeball": { "change": 300 }, "ivs": { "costPerPoint": 100 }, "evs": { "costPerPoint": 50 }, "level": { "candyXS": 10, "candyS": 100, "candyM": 250, "candyL": 500, "candyXL": 1000, "reset": 500 }, "evolution": { "evolve": 1000, "devolve": 1000 }, "aspect": { "change": 500 },

"overrides": { "mewtwo": { "shiny": { "toggle": 15000 }, "evolution": { "evolve": 5000 } }, "ditto": { "nature": { "change": 200 } } } }

BASE SECTION — prices for all Pokémon:

shiny.toggle Cost to enable OR disable shiny status (same price in both directions).

nature.change Cost to change nature (flat price regardless of the nature selected).

ability.change Cost to change ability.

gender.toggle Cost to change from male to female or vice versa.

friendship.maximize Cost to instantly maximize friendship to 255. NOTE: if the Pokémon already has 255 friendship, the action won't execute and no tokens will be charged.

pokeball.change Cost to change the Poké Ball (applies to ANY ball, does not vary by type). The price is displayed in the tooltip of each ball within the menu.

ivs.costPerPoint Cost per individual IV point added or removed from any stat. E.g.: costPerPoint=100, raising HP from 20 to 31 -> 11 points x 100 = 1,100 tokens. Works with single clicks (+-1) and Shift+clicks (+-10).

evs.costPerPoint Same as ivs but for EVs (maximum 252 per stat).

level.candyXS / candyS / candyM / candyL / candyXL Cost to use each type of candy (raises level by 1, 10, 25, 50, 100).

level.reset Cost to reset the level back to 1.

evolution.evolve / devolve Cost to evolve or devolve to a previous form.

aspect.change Cost to change the visual aspect / alternative form.

"overrides" SECTION — custom prices per species: Allows defining different prices for specific Pokémon. The species name must be in lowercase just as it appears in Cobblemon.

Structure: "overrides": { "[lowercase_species]": { "[module]": { "[field]": [price] } } }

Valid modules and fields in overrides:

  • shiny -> toggle
  • nature -> change
  • ability -> change
  • gender -> toggle
  • friendship -> maximize
  • pokeball -> change
  • ivs -> costPerPoint
  • evs -> costPerPoint
  • level -> candyXS, candyS, candyM, candyL, candyXL, reset
  • evolution -> evolve, devolve
  • aspect -> change

If a species does not have an override for a specific field, the base price is used. Discounts from discounts.json are applied AFTER resolving the override.

Operations costing >= 500 tokens require confirmation before executing (a confirmation dialog to prevent misclicks).

  1. BLACKLIST.JSON — Blocked Pokémon

Path: config/pokebuilder/blacklist.json

{ "enabled": true, "message": "§cThis Pokémon cannot be modified with PokeBuilder!", "blockedPokemon": [ "ditto", "mewtwo" ], "blockedByModule": { "dragonite": ["shiny", "evolution"], "pikachu": ["ivs"] } }

enabled If false, disables the entire block system.

message Text displayed when trying to modify a blocked Pokémon. Supports color codes using §.

blockedPokemon List of species that CANNOT be modified at all. The species name must be in lowercase (same as in Cobblemon). E.g.: "ditto" blocks all Dittos on the server.

blockedByModule Allows blocking only specific modules for a species instead of blocking the entire Pokémon. Format: { "species": ["module1", "module2", ...] }

Valid modules: shiny, nature, ability, gender, friendship, pokeball, ivs, evs, level, evolution, aspect

E.g.: "dragonite": ["shiny", "evolution"] -> The Dragonite can modify its IVs or nature, but NOT shiny or evolution.

NOTES:

  • If a species is in blockedPokemon, it ignores blockedByModule for that species.
  • Blocked modules appear with their button disabled in the editor menu.
  1. LIMITS.JSON — Daily usage limits

Path: config/pokebuilder/limits.json

{ "enabled": false, "daily": { "shiny": -1, "nature": -1, "ability": -1, "gender": -1, "friendship": -1, "pokeball": -1, "ivs": -1, "evs": -1, "level": -1, "evolution": -1, "aspect": -1 } }

enabled Enables or disables the daily limit system. If false, no limits apply even if values are defined.

daily.[module] Maximum number of times a player can use that module per day. -1 = no limit (unlimited). E.g.: "shiny": 1 -> each player can only toggle shiny ONE time per day. E.g.: "ivs": 3 -> can only modify IVs 3 times per day.

The counter resets automatically at midnight (server time). Remaining usage is shown in the lore of each button in the editor menu. When the limit is reached, the button appears locked with an explanatory message.

Daily usage data is saved in: config/pokebuilder/daily_usage.json (This file is automatically managed, do not edit by hand.)

  1. DISCOUNTS.JSON — Schedule-based discounts

Path: config/pokebuilder/discounts.json

{ "enabled": false, "schedules": [ { "name": "Weekend Sale", "daysOfWeek": ["SATURDAY", "SUNDAY"], "startHour": 0, "endHour": 24, "discountPercent": 20, "modules": ["shiny", "nature", "ability"] }, { "name": "Happy Hour", "daysOfWeek": [], "startHour": 20, "endHour": 22, "discountPercent": 10, "modules": [] } } }

enabled Enables or disables the discount system.

schedules List of active discounts. You can define as many as you want. If multiple discounts overlap for a module, the HIGHEST is applied.

Fields for each schedule:

name Internal name of the discount (informative only, appears in the button lore).

daysOfWeek Days when it applies. Values: MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY (in English and uppercase). An empty list [] = applies every day.

startHour / endHour Server hour range when the discount applies (24h format). E.g.: startHour: 20, endHour: 22 -> from 20:00 to 22:00. startHour: 0, endHour: 24 -> all day long.

discountPercent Discount percentage. E.g.: 20 = 20% off. A price of 5000 with a 20% discount becomes 4000.

modules List of modules to which the discount applies. An empty list [] = applies to ALL modules.

The discount appears in the lore of each button with the text: "Weekend Sale: 20% off!"

  1. EVENTS.JSON — Tokens from in-game events

Path: config/pokebuilder/events.json

{ "enabled": false, "onCatch": { "legendary": 50, "mythical": 30, "shiny": 100, "any": 0 }, "onDefeat": { "legendary": 20, "mythical": 15, "shiny": 50, "trainer": 10, "any": 1 }, "catchMessages": { "legendary": "§6Legendary caught! §b+{amount} Tokens", "mythical": "§dMythical caught! §b+{amount} Tokens", "shiny": "§dShiny caught! §b+{amount} Tokens", "any": "" }, "defeatMessages": { "legendary": "§6Legendary defeated! §b+{amount} Tokens", "mythical": "§5Mythical defeated! §b+{amount} Tokens", "shiny": "§dShiny defeated! §b+{amount} Tokens", "trainer": "§eTrainer defeated! §b+{amount} Tokens", "any": "" } }

enabled Enables or disables the ENTIRE event reward system. If false, no tokens are given for any event.

"onCatch" SECTION — Rewards upon CATCHING: Triggered when a player catches (throws a Poké Ball and captures) a Pokémon. Types stack: catching a Shiny+Legendary gives legendary + shiny tokens.

  • legendary: Tokens for catching a Legendary Pokémon.
  • mythical: Tokens for catching a Mythical Pokémon.
  • shiny: Tokens for catching a Shiny Pokémon.
  • any: Tokens for any catch. 0 = disabled.

"onDefeat" SECTION — Rewards upon DEFEATING in battle: Triggered when a player wins a battle (wild or trainer). Types stack just like in onCatch.

  • legendary: Tokens for defeating a Legendary Pokémon in battle.
  • mythical: Tokens for defeating a Mythical Pokémon.
  • shiny: Tokens for defeating a Shiny Pokémon.
  • trainer: Tokens for winning a battle against a trainer/NPC. Applied ONLY ONCE per battle (not for each individual Pokémon).
  • any: Tokens for each wild Pokémon defeated. 0 = disabled.

"catchMessages" / "defeatMessages" SECTIONS: Messages sent to the player when they receive tokens. Uses {amount} as a placeholder for the number of tokens received. Supports color codes (§6, §a, §b, etc.). An empty message "" = nothing is displayed for that type.

NOTE: Legendary/Mythical classification uses Cobblemon's internal tags. If a Pokémon lacks a tag, the mod uses an integrated fallback list featuring the most well-known species across all generations.

  1. UI.JSON — Interface: positions, items, and texts

Path: config/pokebuilder/ui.json

This file controls practically everything visual about the mod: window titles, the position of each button, items representing each function, and the texts that appear in the GUI.

IMPORTANT ABOUT SLOTS: Slots are positions in the inventory grid (6-row chest = 54 slots). They are numbered from left to right, top to bottom:

  • Row 1: slots 0 – 8
  • Row 2: slots 9 – 17
  • Row 3: slots 18 – 26
  • Row 4: slots 27 – 35
  • Row 5: slots 36 – 44
  • Row 6: slots 45 – 53

IMPORTANT ABOUT ITEMS: Items are specified as "namespace:id", e.g., "minecraft:diamond" or "cobblemon:rare_candy". The mod resolves this automatically in real time.

10.1 selectionMenu (party Pokémon selection menu)

  • title: Window title. Supports §codes. Default value: "§l§fᴘᴏᴋᴇʙᴜɪʟᴅᴇʀ"
  • backgroundItem: Filler item for empty slots. Default value: "minecraft:gray_stained_glass_pane"
  • slots.partyStart: Slot where the first Pokémon of the party starts displaying. Default value: 10
  • slots.pcButton: Slot where the button to access the PC appears. Default value: 8
  • slots.tokenBalance: Slot where the item displaying the token balance appears. Default value: 26
  • texts.emptySlot: Text that appears in party slots that are empty. Default value: "§8Empty Slot"
  • texts.pcButton: Text for the button to access the PC. Default value: "§bSelect from PC"

10.2 builderMenu (editor menu for a specific Pokémon)

  • title: Title. Uses {pokemon} as a placeholder for the Pokémon's name. Default value: "§l§fEDITOR §7» §l{pokemon}"

  • slots.* (Position of each button in the grid):

    • pokemonPreview: Slot 31 (3D model of the Pokémon, decorative)
    • tokenBalance: Slot 8 (Item with your token balance)
    • level: Slot 19 (Button to edit level)
    • ivs: Slot 20 (Button to edit IVs)
    • nature: Slot 28 (Button to edit nature)
    • evs: Slot 29 (Button to edit EVs)
    • ability: Slot 37 (Button to edit ability)
    • shiny: Slot 24 (Button to toggle shiny status)
    • appearance: Slot 25 (Button to edit appearance)
    • gender: Slot 33 (Button to change gender)
    • evolution: Slot 34 (Button to evolve/devolve)
    • friendship: Slot 42 (Button to maximize friendship)
    • pokeball: Slot 43 (Button to change Poké Ball)
    • back: Slot 49 (Go back button)
  • items.* (Item representing each button. Fallback is a barrier):

    • level: cobblemon:rare_candy
    • ivs: cobblemon:potion
    • evs: cobblemon:protein
    • nature: cobblemon:serious_mint
    • ability: cobblemon:ability_capsule
    • shiny: cobblemon:star_sweet
    • appearance: cobblemon:heavy_duty_boots
    • evolution: cobblemon:upgrade
    • friendship: cobblemon:soothe_bell
    • pokeball: cobblemon:poke_ball
    • back: minecraft:barrier
    • disabledModule: minecraft:red_stained_glass_pane
    • tokenBalance: cobblemon:relic_coin
    • genderMale: cobblemon:muscle_mochi
    • genderMaleFallback: minecraft:blue_wool
    • genderFemale: cobblemon:resist_mochi
    • genderFemaleFallback: minecraft:pink_wool
  • texts.*: Labels for each button. You can use §codes for colors and {variable} for placeholders where applicable. The gender field accepts {gender} as a placeholder (Male / Female).

10.3 levelMenu (level submenu)

  • title: Accepts {pokemon} and {level} as placeholders. Default value: "{pokemon} > §l§fLevel §f{level}"
  • slots: candyXS(10), candyS(11), candyM(12), candyL(13), candyXL(14), reset(15), back(26)
  • items: exp candies from Cobblemon and Sinister Tea for the reset.

10.4 statEditorMenu (IV and EV editor)

  • titleIV / titleEV: Separate titles for the IV and EV menus. Accept {pokemon} as a placeholder.
  • slots.pokemonPreview: Model slot (4)
  • slots.statStart: Slot where the stats row begins (19)
  • slots.back: Go back button slot (26)
  • texts.statNames: List of 6 names for the stats: ["HP","Attack","Defence","Sp. Atk","Sp. Def","Speed"]
  • texts.clickLeft/Right/shiftLeft/shiftRight: Instructions that appear in the tooltip of each stat. Default: Left Click +1, Right Click -1, Shift+Left +10, Shift+Right -10. NOTE: Shift+click is fully implemented for both directions.
  • items.ivItems / evItems: List of 6 items (one per stat) for IVs and EVs respectively. The header of each stat also displays its maximum value: "HP: 25 / 31"

10.5 natureMenu (nature selector)

  • slots.pokemonPreview: Model position (13)
  • slots.gridStartRow: Row where the nature grid begins (1)
  • slots.gridStartCol: Column where the grid begins (1)
  • slots.gridCols: Grid columns (7)
  • slots.back: Go back button (49)

10.6 abilityMenu (ability selector)

  • title: Accepts {page} and {pokemon}. Default value: "§l§fAbilities §7(Pg. {page}) » §l{pokemon}"
  • slots: pokemonPreview(13), gridStartRow(1), gridStartCol(1), gridCols(7), previousPage(48), nextPage(50), back(49)

10.7 aspectMenu (aspect / form editor)

  • slots: gridStart(0), gridSize(36), previousPage(45), nextPage(53), back(49)
  • texts.activeLabel: Text on currently active aspects.
  • texts.resetOption: Text for the option to revert back to default form.

10.8 evolutionMenu (evolution machine)

  • slots.familySlots: List of slots where members of the evolutionary chain are shown. Default: [10,11,12,13,14,15,16,19,20,21,22,23,24,25]
  • texts.currentForm: Text on the Pokémon that is already the current form.
  • texts.evolveAction: Tooltip text for evolving.
  • texts.devolveAction: Tooltip text for devolving.

10.9 pokeBallMenu (Poké Ball selector)

  • title: Accepts {currentBall} and {pokemon} as placeholders. Default value: "§l§fPokeBalls §7(§f{currentBall}§7) » §l{pokemon}"
  • slots.back: Go back button slot (49)

10.10 pcMenu (PC menu with pagination)

  • title: Accepts {page}, {totalPages}, and {total} as placeholders. Default value: "§l§fPC Storage §7(Pg. {page}/{totalPages} · {total} Pokémon)"
  • slots: previousPage(45), nextPage(53), back(48) Each page shows up to 45 Pokémon (slots 0–44). Slot 49 always shows a book displaying "Page X / Y" (not configurable). The Box and Slot where it is stored appear in the tooltip of each Pokémon.
  1. TRANSACTION HISTORY

Every module within the mod logs purchases into the history system. It is saved in: config/pokebuilder/history.json

Commands:

  • /pb history -> View your own history (last 50 ops)
  • /pb history [player] -> View another player's history (admin only)

The history GUI displays up to 45 transactions per page with full pagination. Each entry includes:

  • Action performed (SHINY, NATURE, IVS, LEVEL, etc.)
  • Name of the modified Pokémon
  • Tokens spent
  • Date and time of the operation
  • Additional detail (e.g.: "HP 20->31", "+25 levels -> 85", "Timid")

MODULES THAT LOG TRANSACTIONS:

  • Shiny: (no extra details)
  • Gender: (no extra details)
  • Friendship: (no extra details)
  • Nature: Name of the new nature (e.g.: "Timid")
  • Ability: Name of the new ability (e.g.: "Intimidate")
  • IVs: Stat and change (e.g.: "HP 20->31")
  • EVs: Stat and change (e.g.: "Attack 0->252")
  • Level: Change (e.g.: "+25 levels -> 85" or "Reset to 1")
  • Evolution / Devolve: Name of the target species
  • PokeBall: Name of the chosen ball
  • Appearance: Name of the applied aspect

The history retains the last 50 entries per player. Older entries are automatically deleted once this threshold is crossed. There is no way to wipe history from within the game (only by editing the JSON).

  1. BACKUP SYSTEM

Backup folder: config/pokebuilder/backups/

Every time /pb reload is executed, the mod automatically saves timestamped copies of ALL configuration files:

  • tokens_2026-05-29_22-00-00.json
  • economy_2026-05-29_22-00-00.json
  • prices_2026-05-29_22-00-00.json
  • ui_2026-05-29_22-00-00.json
  • limits_2026-05-29_22-00-00.json
  • discounts_2026-05-29_22-00-00.json
  • events_2026-05-29_22-00-00.json
  • modules_2026-05-29_22-00-00.json

The last 10 backups per file are kept. Older ones are automatically deleted when this limit is exceeded.

To restore a backup:

  1. Stop the server.

  2. Copy the desired file from /backups/ to /pokebuilder/ using the original name.

  3. Start the server (or use /pb reload if you only changed config JSONs).

  4. DATA FILES (automatically managed)

These files are created and managed by the mod. They should not be edited by hand except for emergency corrections.

tokens.json Token balance of all players, indexed by UUID. If there are old entries with username (previous mod versions), they are automatically migrated to the player's UUID upon their next connection.

history.json Last 50 transactions for each player. Can be viewed with /pb history. Format: UUID -> list of { action, pokemon, cost, timestamp, details }

daily_usage.json Usage counter for the current day per player and module. Resets automatically when the day changes (server midnight).

COMPLETE FILE STRUCTURE

config/pokebuilder/

  • economy.json -> General configuration and economy
  • modules.json -> Enable/disable modules
  • prices.json -> Base prices and overrides per species
  • blacklist.json -> Fully or partially blocked Pokémon
  • limits.json -> Daily usage limits per module
  • discounts.json -> Discounts per day/hour
  • events.json -> Token rewards from events
  • ui.json -> Interface: slots, items, and texts
  • tokens.json [data] Token balances (UUID -> amount)
  • history.json [data] Transaction history
  • daily_usage.json [data] Current daily usages
  • backups/
    • tokens_YYYY-MM-DD_HH-mm-ss.json
    • economy_YYYY-MM-DD_HH-mm-ss.json
    • ...

QUICK TIPS

  • Edit any JSON and use /pb reload to apply changes without restarting.
  • Changes in prices.json, limits.json, and discounts.json are visible instantly in the menu without the player having to close and open it.
  • To raise IVs 10 points at a time, use Shift+Left Click. To lower them, use Shift+Right Click. This layout functions identically in the EV menu.
  • The Friendship button displays your current value (e.g.: "247 / 255") and will not charge tokens if the Pokémon is already at 255.
  • To make shiny status very expensive only for Legendaries, use the "overrides" section in prices.json combined with blacklist.json if you want to block them entirely.
  • To enable catch events, set "enabled": true in events.json. The "any" field under onDefeat is set to 1 by default; switch it to 0 if you don't want to give out tokens for every regular wild battle.
  • The history log (/pb history) is highly practical for auditing what changes a player made and when. Admins can view anyone's log with /pb history [name].
  • To translate the mod, edit the "texts" fields in ui.json and the messages in events.json and economy.json. Everything is in plain text.
V1.0Альфа1.21.1 · 31 мая 2026 г.

╔══════════════════════════════════════════════════════════════════════════════════╗ ║ P O K E B U I L D E R — COMPLETE GUIDE ║ ║ Server mod for Cobblemon · Fabric 1.21.1 ║ ╚══════════════════════════════════════════════════════════════════════════════════╝

PokeBuilder is a server mod that allows modifying Pokémon using a graphical menu system and tokens (internal currency). Everything is designed to be configured from JSON files without needing to restart the server (except for the first boot).

All configuration files are saved in: [Server]/config/pokebuilder/

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ INDEX ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  1. Commands
  2. Permissions (LuckPerms / OP)
  3. economy.json — General configuration and economy
  4. modules.json — Enable/disable modules
  5. prices.json — Prices and price overrides per species
  6. blacklist.json — Blocked Pokémon
  7. limits.json — Daily usage limits
  8. discounts.json — Schedule-based discounts
  9. events.json — Tokens from events (catch / defeat)
  10. ui.json — Interface: positions, items, and texts
  11. Transaction History
  12. Backup System
  13. Data files (read-only)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  1. COMMANDS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Available aliases: /pb and /pokebuilder (both do the same thing)

┌─────────────────────────────────────────────────────────────────────────────┐ │ USER COMMANDS (permission: pokebuilder.user) │ ├─────────────────────────────────────────────────────────────────────────────┤ │ /pb Opens the main menu │ │ /pb history Opens your transaction history │ │ /pb tokens balance Shows your token balance │ │ /pb tokens send Sends tokens to another player │ │ /pb tokens buy Buys tokens with server currency │ └─────────────────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────────────────┐ │ ADMIN COMMANDS (permission: pokebuilder.admin) │ ├─────────────────────────────────────────────────────────────────────────────┤ │ /pb reload Reloads all JSON files │ │ (automatically creates a backup first) │ │ /pb history Views another player's history │ │ /pb tokens balance Checks another player's balance │ │ /pb tokens give Gives tokens to a player │ │ /pb tokens take Takes tokens from a player │ │ /pb tokens set Sets an exact balance │ │ /pb admin maintenance on Enables maintenance mode │ │ /pb admin maintenance off Disables maintenance mode │ └─────────────────────────────────────────────────────────────────────────────┘

NOTES ON COMMANDS: • /pb reload applies changes from ALL JSONs instantly, without a restart. • The history saves the last 50 operations per player (see section 11). • /pb tokens buy requires an economy plugin to be configured (see economy.json). • While maintenance is active, users cannot open the menu.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2. PERMISSIONS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

The mod uses the standard Fabric permission node. Compatible with LuckPerms. If no permission plugin is installed, OP levels are used as a fallback.

┌──────────────────────────┬───────────────────────────────────────────────────┐ │ Permission node │ Description │ ├──────────────────────────┼───────────────────────────────────────────────────┤ │ pokebuilder.user │ Normal access: open GUI, buy, send tokens │ │ │ Fallback: all players (OP level 0) │ ├──────────────────────────┼───────────────────────────────────────────────────┤ │ pokebuilder.admin │ Full access: admin commands, give/take tokens, │ │ │ view others' history, maintenance, reload │ │ │ Fallback: OP level 2 │ └──────────────────────────┴───────────────────────────────────────────────────┘

Example with LuckPerms: /lp group default permission set pokebuilder.user true /lp group admin permission set pokebuilder.admin true

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3. economy.json — General configuration and economy ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Path: config/pokebuilder/economy.json (If config.json from a previous version exists, it will be automatically migrated.)

{ "messages": { "prefix": "§8[§bPokeBuilder§8] §7", "insufficient_funds": "You do not have enough tokens!", "success": "Successfully updated your Pokemon!" }, "exchange": { "impactor": { "enabled": false, "rate": 1.0, "currencyName": "impactor" }, "ultraeconomy": { "enabled": false, "rate": 1.0, "currencyName": "Coins" }, "beconomy": { "enabled": false, "rate": 1.0, "currencyName": "beconomy" } }, "maintenanceMode": false, "maintenanceMessage": "§c[PokeBuilder] The shop is currently under maintenance." }

FIELDS:

messages.prefix Prefix that appears before the mod's messages in chat.

messages.insufficient_funds Message displayed when the player lacks tokens (plays a sound as well).

messages.success Confirmation message after a successful operation.

exchange. Integration with external economies to buy tokens using /pb tokens buy. ├─ enabled: true / false — enables that economy plugin. ├─ rate: tokens given per 1 unit of currency. │ E.g.: rate: 2.0 → $100 Coins buy 200 tokens. └─ currencyName: name of the currency displayed in messages. Compatible plugins: Impactor, UltraEconomy, BEconomy.

maintenanceMode If true, players without pokebuilder.admin cannot open the menu. Can be toggled live with /pb admin maintenance on/off.

maintenanceMessage Message sent to blocked players during maintenance.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4. modules.json — Enable / disable modules ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Path: config/pokebuilder/modules.json

{ "level": true, "ivs": true, "evs": true, "nature": true, "ability": true, "shiny": true, "gender": true, "appearance": true, "friendship": true, "evolution": true, "pokeball": true, "restrictAbilitiesToPokemon": false }

Each field set to true/false completely enables or disables that module for ALL players. If set to false, the button appears locked in the menu.

AVAILABLE MODULES: ┌──────────────┬────────────────────────────────────────────────────────────┐ │ level │ Submenu to level up with Exp. Candy or reset to 1 │ │ ivs │ IV editor stat by stat │ │ │ Left Click: +1 │ Right Click: -1 │ │ │ Shift+Left: +10 │ Shift+Right: -10 │ │ evs │ EV editor stat by stat (same controls as IVs) │ │ nature │ Nature selector (visual grid of the 25 natures) │ │ ability │ Ability selector (includes hidden ability) │ │ shiny │ Shiny/non-shiny toggle (can be enabled and disabled) │ │ gender │ Male/female toggle │ │ appearance │ Editor for visual aspects and alternative forms │ │ friendship │ Instantly maximizes friendship (255). Charges nothing if │ │ │ already at max — displays the current value in the lore. │ │ evolution │ Evolve or devolve to a previous form │ │ pokeball │ Change the Poké Ball it was caught with │ └──────────────┴────────────────────────────────────────────────────────────┘

restrictAbilitiesToPokemon If true, it only shows abilities that the Pokémon can naturally have (including the hidden one). If false, it shows all abilities in the game.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5. prices.json — Prices and price overrides per species ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Path: config/pokebuilder/prices.json

{ "shiny": { "toggle": 5000 }, "nature": { "change": 500 }, "ability": { "change": 1000 }, "gender": { "toggle": 500 }, "friendship": { "maximize": 300 }, "pokeball": { "change": 300 }, "ivs": { "costPerPoint": 100 }, "evs": { "costPerPoint": 50 }, "level": { "candyXS": 10, "candyS": 100, "candyM": 250, "candyL": 500, "candyXL": 1000, "reset": 500 }, "evolution": { "evolve": 1000, "devolve": 1000 }, "aspect": { "change": 500 },

"overrides": {
  "mewtwo": {
    "shiny":     { "toggle": 15000 },
    "evolution": { "evolve": 5000 }
  },
  "ditto": {
    "nature": { "change": 200 }
  }
}

}

BASE SECTION — prices for all Pokémon:

shiny.toggle Cost to enable OR disable shiny status (same price in both directions).

nature.change Cost to change nature (flat price regardless of the nature selected).

ability.change Cost to change ability.

gender.toggle Cost to change from male to female or vice versa.

friendship.maximize Cost to instantly maximize friendship to 255. NOTE: if the Pokémon already has 255 friendship, the action won't execute and no tokens will be charged.

pokeball.change Cost to change the Poké Ball (applies to ANY ball, does not vary by type). The price is displayed in the tooltip of each ball within the menu.

ivs.costPerPoint Cost per individual IV point added or removed from any stat. E.g.: costPerPoint=100, raising HP from 20 to 31 → 11 points × 100 = 1,100 tokens. Works with single clicks (±1) and Shift+clicks (±10).

evs.costPerPoint Same as ivs but for EVs (maximum 252 per stat).

level.candyXS / candyS / candyM / candyL / candyXL Cost to use each type of candy (raises level by 1, 10, 25, 50, 100).

level.reset Cost to reset the level back to 1.

evolution.evolve / devolve Cost to evolve or devolve to a previous form.

aspect.change Cost to change the visual aspect / alternative form.

───────────────────────────────────────────────────── "overrides" SECTION — custom prices per species: ───────────────────────────────────────────────────── Allows defining different prices for specific Pokémon. The species name must be in lowercase just as it appears in Cobblemon.

Structure: "overrides": { "": { "": { "": } } }

Valid modules and fields in overrides: shiny → toggle nature → change ability → change gender → toggle friendship → maximize pokeball → change ivs → costPerPoint evs → costPerPoint level → candyXS, candyS, candyM, candyL, candyXL, reset evolution → evolve, devolve aspect → change

If a species does not have an override for a specific field, the base price is used. Discounts from discounts.json are applied AFTER resolving the override.

Operations costing ≥ 500 tokens require confirmation before executing (a confirmation dialog to prevent misclicks).

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6. BLACKLIST.JSON — Blocked Pokémon ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Path: config/pokebuilder/blacklist.json

{ "enabled": true, "message": "§cThis Pokémon cannot be modified with PokeBuilder!", "blockedPokemon": [ "ditto", "mewtwo" ], "blockedByModule": { "dragonite": ["shiny", "evolution"], "pikachu": ["ivs"] } }

enabled If false, disables the entire block system.

message Text displayed when trying to modify a blocked Pokémon. Supports color codes using §.

blockedPokemon List of species that CANNOT be modified at all. The species name must be in lowercase (same as in Cobblemon). E.g.: "ditto" blocks all Dittos on the server.

blockedByModule Allows blocking only specific modules for a species instead of blocking the entire Pokémon. Format: { "species": ["module1", "module2", ...] }

Valid modules:
  shiny, nature, ability, gender, friendship, pokeball,
  ivs, evs, level, evolution, aspect

E.g.: "dragonite": ["shiny", "evolution"]
  → The Dragonite can modify its IVs or nature, but NOT shiny or evolution.

NOTES: • If a species is in blockedPokemon, it ignores blockedByModule for that species. • Blocked modules appear with their button disabled in the editor menu.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7. LIMITS.JSON — Daily usage limits ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Path: config/pokebuilder/limits.json

{ "enabled": false, "daily": { "shiny": -1, "nature": -1, "ability": -1, "gender": -1, "friendship": -1, "pokeball": -1, "ivs": -1, "evs": -1, "level": -1, "evolution": -1, "aspect": -1 } }

enabled Enables or disables the daily limit system. If false, no limits apply even if values are defined.

daily. Maximum number of times a player can use that module per day. -1 = no limit (unlimited).

E.g.: "shiny": 1  → each player can only toggle shiny ONE time per day.
E.g.: "ivs": 3    → can only modify IVs 3 times per day.

The counter resets automatically at midnight (server time). Remaining usage is shown in the lore of each button in the editor menu. When the limit is reached, the button appears locked with an explanatory message.

Daily usage data is saved in: config/pokebuilder/daily_usage.json (This file is automatically managed, do not edit by hand.)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8. DISCOUNTS.JSON — Schedule-based discounts ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Path: config/pokebuilder/discounts.json

{ "enabled": false, "schedules": [ { "name": "Weekend Sale", "daysOfWeek": ["SATURDAY", "SUNDAY"], "startHour": 0, "endHour": 24, "discountPercent": 20, "modules": ["shiny", "nature", "ability"] }, { "name": "Happy Hour", "daysOfWeek": [], "startHour": 20, "endHour": 22, "discountPercent": 10, "modules": [] } ] }

enabled Enables or disables the discount system.

schedules List of active discounts. You can define as many as you want. If multiple discounts overlap for a module, the HIGHEST is applied.

Fields for each schedule:

name Internal name of the discount (informative only, appears in the button lore).

daysOfWeek Days when it applies. Values: MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY (in English and uppercase). An empty list [] = applies every day.

startHour / endHour Server hour range when the discount applies (24h format). E.g.: startHour: 20, endHour: 22 → from 20:00 to 22:00. startHour: 0, endHour: 24 → all day long.

discountPercent Discount percentage. E.g.: 20 = 20% off. A price of 5000 with a 20% discount becomes 4000.

modules List of modules to which the discount applies. An empty list [] = applies to ALL modules.

The discount appears in the lore of each button with the text: "🏷 Weekend Sale: 20% off!"

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9. EVENTS.JSON — Tokens from in-game events ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Path: config/pokebuilder/events.json

{ "enabled": false, "onCatch": { "legendary": 50, "mythical": 30, "shiny": 100, "any": 0 }, "onDefeat": { "legendary": 20, "mythical": 15, "shiny": 50, "trainer": 10, "any": 1 }, "catchMessages": { "legendary": "§6Legendary caught! §b+{amount} Tokens", "mythical": "§dMythical caught! §b+{amount} Tokens", "shiny": "§dShiny caught! §b+{amount} Tokens", "any": "" }, "defeatMessages": { "legendary": "§6Legendary defeated! §b+{amount} Tokens", "mythical": "§5Mythical defeated! §b+{amount} Tokens", "shiny": "§dShiny defeated! §b+{amount} Tokens", "trainer": "§eTrainer defeated! §b+{amount} Tokens", "any": "" } }

enabled Enables or disables the ENTIRE event reward system. If false, no tokens are given for any event.

───────────────────────────────────── "onCatch" SECTION — Rewards upon CATCHING: ───────────────────────────────────── Triggered when a player catches (throws a Poké Ball and captures) a Pokémon. Types stack: catching a Shiny+Legendary gives legendary + shiny tokens.

legendary Tokens for catching a Legendary Pokémon. mythical Tokens for catching a Mythical Pokémon. shiny Tokens for catching a Shiny Pokémon. any Tokens for any catch. 0 = disabled.

───────────────────────────────────── "onDefeat" SECTION — Rewards upon DEFEATING in battle: ───────────────────────────────────── Triggered when a player wins a battle (wild or trainer). Types stack just like in onCatch.

legendary Tokens for defeating a Legendary Pokémon in battle. mythical Tokens for defeating a Mythical Pokémon. shiny Tokens for defeating a Shiny Pokémon. trainer Tokens for winning a battle against a trainer/NPC. Applied ONLY ONCE per battle (not for each individual Pokémon). any Tokens for each wild Pokémon defeated. 0 = disabled.

───────────────────────────────────── "catchMessages" / "defeatMessages" SECTIONS: ───────────────────────────────────── Messages sent to the player when they receive tokens. Uses {amount} as a placeholder for the number of tokens received. Supports color codes (§6, §a, §b, etc.). An empty message "" = nothing is displayed for that type.

NOTE: Legendary/Mythical classification uses Cobblemon's internal tags. If a Pokémon lacks a tag, the mod uses an integrated fallback list featuring the most well-known species across all generations.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10. UI.JSON — Interface: positions, items, and texts ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Path: config/pokebuilder/ui.json

This file controls practically everything visual about the mod: window titles, the position of each button, items representing each function, and the texts that appear in the GUI.

IMPORTANT ABOUT SLOTS: Slots are positions in the inventory grid (6-row chest = 54 slots). They are numbered from left to right, top to bottom: Row 1: slots 0 – 8 Row 2: slots 9 – 17 Row 3: slots 18 – 26 Row 4: slots 27 – 35 Row 5: slots 36 – 44 Row 6: slots 45 – 53

IMPORTANT ABOUT ITEMS: Items are specified as "namespace:id", e.g., "minecraft:diamond" or "cobblemon:rare_candy". The mod resolves this automatically in real time.

══════════════════════════════════════════════ 10.1 selectionMenu (party Pokémon selection menu) ══════════════════════════════════════════════

title Window title. Supports §codes. Default value: "§l§fᴘᴏᴋᴇʙᴜɪʟᴅᴇʀ"

backgroundItem Filler item for empty slots. Default value: "minecraft:gray_stained_glass_pane"

slots.partyStart Slot where the first Pokémon of the party starts displaying. Default value: 10

slots.pcButton Slot where the button to access the PC appears. Default value: 8

slots.tokenBalance Slot where the item displaying the token balance appears. Default value: 26

texts.emptySlot Text that appears in party slots that are empty. Default value: "§8Empty Slot"

texts.pcButton Text for the button to access the PC. Default value: "§bSelect from PC"

══════════════════════════════════════════════ 10.2 builderMenu (editor menu for a specific Pokémon) ══════════════════════════════════════════════

title Title. Uses {pokemon} as a placeholder for the Pokémon's name. Default value: "§l§fEDITOR §7» §l{pokemon}"

slots.* Position of each button in the grid: ┌──────────────┬───────┬───────────────────────────────────────┐ │ Field │ Slot │ Description │ ├──────────────┼───────┼───────────────────────────────────────┤ │ pokemonPreview│ 31 │ 3D model of the Pokémon (decorative) │ │ tokenBalance │ 8 │ Item with your token balance │ │ level │ 19 │ Button to edit level │ │ ivs │ 20 │ Button to edit IVs │ │ nature │ 28 │ Button to edit nature │ │ evs │ 29 │ Button to edit EVs │ │ ability │ 37 │ Button to edit ability │ │ shiny │ 24 │ Button to toggle shiny status │ │ appearance │ 25 │ Button to edit appearance │ │ gender │ 33 │ Button to change gender │ │ evolution │ 34 │ Button to evolve/devolve │ │ friendship │ 42 │ Button to maximize friendship │ │ pokeball │ 43 │ Button to change Poké Ball │ │ back │ 49 │ Go back button │ └──────────────┴───────┴───────────────────────────────────────┘

items.* Item representing each button. You can put any item from Minecraft or Cobblemon. If the item does not exist, a barrier is used as a fallback. ┌──────────────────┬───────────────────────────────────────────┐ │ Field │ Default value │ ├──────────────────┼───────────────────────────────────────────┤ │ level │ cobblemon:rare_candy │ │ ivs │ cobblemon:potion │ │ evs │ cobblemon:protein │ │ nature │ cobblemon:serious_mint │ │ ability │ cobblemon:ability_capsule │ │ shiny │ cobblemon:star_sweet │ │ appearance │ cobblemon:heavy_duty_boots │ │ evolution │ cobblemon:upgrade │ │ friendship │ cobblemon:soothe_bell │ │ pokeball │ cobblemon:poke_ball │ │ back │ minecraft:barrier │ │ disabledModule │ minecraft:red_stained_glass_pane │ │ tokenBalance │ cobblemon:relic_coin │ │ genderMale │ cobblemon:muscle_mochi │ │ genderMaleFallback │ minecraft:blue_wool │ │ genderFemale │ cobblemon:resist_mochi │ │ genderFemaleFallback │ minecraft:pink_wool │ └──────────────────┴───────────────────────────────────────────┘

texts.* Labels for each button. You can use §codes for colors and {variable} for placeholders where applicable. The gender field accepts {gender} as a placeholder (Male / Female).

══════════════════════════════════════════════ 10.3 levelMenu (level submenu) ══════════════════════════════════════════════

title Accepts {pokemon} and {level} as placeholders. Default value: "{pokemon} > §l§fLevel §f{level}"

slots: candyXS(10), candyS(11), candyM(12), candyL(13), candyXL(14), reset(15), back(26)

items: exp candies from Cobblemon and Sinister Tea for the reset.

══════════════════════════════════════════════ 10.4 statEditorMenu (IV and EV editor) ══════════════════════════════════════════════

titleIV / titleEV Separate titles for the IV and EV menus. Accept {pokemon} as a placeholder.

slots.pokemonPreview Model slot (4) slots.statStart Slot where the stats row begins (19) slots.back Go back button slot (26)

texts.statNames List of 6 names for the stats: ["HP","Attack","Defence","Sp. Atk","Sp. Def","Speed"]

texts.clickLeft/Right/shiftLeft/shiftRight Instructions that appear in the tooltip of each stat. Default: Left Click +1, Right Click -1, Shift+Left +10, Shift+Right -10. NOTE: Shift+click is fully implemented for both directions.

items.ivItems / evItems List of 6 items (one per stat) for IVs and EVs respectively.

The header of each stat also displays its maximum value: "HP: 25 / 31"

══════════════════════════════════════════════ 10.5 natureMenu (nature selector) ══════════════════════════════════════════════

slots.pokemonPreview Model position (13) slots.gridStartRow Row where the nature grid begins (1) slots.gridStartCol Column where the grid begins (1) slots.gridCols Grid columns (7) slots.back Go back button (49)

══════════════════════════════════════════════ 10.6 abilityMenu (ability selector) ══════════════════════════════════════════════

title Accepts {page} and {pokemon}. Default value: "§l§fAbilities §7(Pg. {page}) » §l{pokemon}"

slots: pokemonPreview(13), gridStartRow(1), gridStartCol(1), gridCols(7), previousPage(48), nextPage(50), back(49)

══════════════════════════════════════════════ 10.7 aspectMenu (aspect / form editor) ══════════════════════════════════════════════

slots: gridStart(0), gridSize(36), previousPage(45), nextPage(53), back(49)

texts.activeLabel Text on currently active aspects. texts.resetOption Text for the option to revert back to default form.

══════════════════════════════════════════════ 10.8 evolutionMenu (evolution machine) ══════════════════════════════════════════════

slots.familySlots List of slots where members of the evolutionary chain are shown. Default: [10,11,12,13,14,15,16,19,20,21,22,23,24,25]

texts.currentForm Text on the Pokémon that is already the current form. texts.evolveAction Tooltip text for evolving. texts.devolveAction Tooltip text for devolving.

══════════════════════════════════════════════ 10.9 pokeBallMenu (Poké Ball selector) ══════════════════════════════════════════════

title Accepts {currentBall} and {pokemon} as placeholders. Default value: "§l§fPokeBalls §7(§f{currentBall}§7) » §l{pokemon}"

slots.back Go back button slot (49)

══════════════════════════════════════════════ 10.10 pcMenu (PC menu with pagination) ══════════════════════════════════════════════

title Accepts {page}, {totalPages}, and {total} as placeholders. Default value: "§l§fPC Storage §7(Pg. {page}/{totalPages} · {total} Pokémon)"

slots: previousPage(45), nextPage(53), back(48)

Each page shows up to 45 Pokémon (slots 0–44). Slot 49 always shows a book displaying "Page X / Y" (not configurable). The Box and Slot where it is stored appear in the tooltip of each Pokémon.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11. TRANSACTION HISTORY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Every module within the mod logs purchases into the history system. It is saved in: config/pokebuilder/history.json

Commands: /pb history → View your own history (last 50 ops) /pb history → View another player's history (admin only)

The history GUI displays up to 45 transactions per page with full pagination. Each entry includes: • Action performed (SHINY, NATURE, IVS, LEVEL, etc.) • Name of the modified Pokémon • Tokens spent • Date and time of the operation • Additional detail (e.g.: "HP 20→31", "+25 levels → 85", "Timid")

MODULES THAT LOG TRANSACTIONS: ┌──────────────────────┬──────────────────────────────────────────────────┐ │ Module │ Logged Detail │ ├──────────────────────┼──────────────────────────────────────────────────┤ │ Shiny │ (no extra details) │ │ Gender │ (no extra details) │ │ Friendship │ (no extra details) │ │ Nature │ Name of the new nature (e.g.: "Timid") │ │ Ability │ Name of the new ability (e.g.: "Intimidate") │ │ IVs │ Stat and change (e.g.: "HP 20→31") │ │ EVs │ Stat and change (e.g.: "Attack 0→252") │ │ Level │ Change (e.g.: "+25 levels → 85" or "Reset to 1")│ │ Evolution / Devolve │ Name of the target species │ │ PokeBall │ Name of the chosen ball │ │ Appearance │ Name of the applied aspect │ └──────────────────────┴──────────────────────────────────────────────────┘

The history retains the last 50 entries per player. Older entries are automatically deleted once this threshold is crossed. There is no way to wipe history from within the game (only by editing the JSON).

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12. BACKUP SYSTEM ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Backup folder: config/pokebuilder/backups/

Every time /pb reload is executed, the mod automatically saves timestamped copies of ALL configuration files:

tokens_2026-05-29_22-00-00.json
economy_2026-05-29_22-00-00.json
prices_2026-05-29_22-00-00.json
ui_2026-05-29_22-00-00.json
limits_2026-05-29_22-00-00.json
discounts_2026-05-29_22-00-00.json
events_2026-05-29_22-00-00.json
modules_2026-05-29_22-00-00.json

The last 10 backups per file are kept. Older ones are automatically deleted when this limit is exceeded.

To restore a backup: 1. Stop the server. 2. Copy the desired file from /backups/ to /pokebuilder/ using the original name. 3. Start the server (or use /pb reload if you only changed config JSONs).

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13. DATA FILES (automatically managed) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

These files are created and managed by the mod. They should not be edited by hand except for emergency corrections.

tokens.json Token balance of all players, indexed by UUID. If there are old entries with username (previous mod versions), they are automatically migrated to the player's UUID upon their next connection.

history.json Last 50 transactions for each player. Can be viewed with /pb history. Format: UUID → list of { action, pokemon, cost, timestamp, details }

daily_usage.json Usage counter for the current day per player and module. Resets automatically when the day changes (server midnight).

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ COMPLETE FILE STRUCTURE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

config/pokebuilder/ ├── economy.json → General configuration and economy ├── modules.json → Enable/disable modules ├── prices.json → Base prices and overrides per species ├── blacklist.json → Fully or partially blocked Pokémon ├── limits.json → Daily usage limits per module ├── discounts.json → Discounts per day/hour ├── events.json → Token rewards from events ├── ui.json → Interface: slots, items, and texts ├── tokens.json [data] Token balances (UUID → amount) ├── history.json [data] Transaction history ├── daily_usage.json [data] Current daily usages └── backups/ ├── tokens_YYYY-MM-DD_HH-mm-ss.json ├── economy_YYYY-MM-DD_HH-mm-ss.json └── ...

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ QUICK TIPS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

• Edit any JSON and use /pb reload to apply changes without restarting. • Changes in prices.json, limits.json, and discounts.json are visible instantly in the menu without the player having to close and open it. • To raise IVs 10 points at a time, use Shift+Left Click. To lower them, use Shift+Right Click. This layout functions identically in the EV menu. • The Friendship button displays your current value (e.g.: "247 / 255") and will not charge tokens if the Pokémon is already at 255. • To make shiny status very expensive only for Legendaries, use the "overrides" section in prices.json combined with blacklist.json if you want to block them entirely. • To enable catch events, set "enabled": true in events.json. The "any" field under onDefeat is set to 1 by default; switch it to 0 if you don't want to give out tokens for every regular wild battle. • The history log (/pb history) is highly practical for auditing what changes a player made and when. Admins can view anyone's log with /pb history . • To translate the mod, edit the "texts" fields in ui.json and the messages in events.json and economy.json. Everything is in plain text.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Комментарии

Загружаем…