Pokebuilder for Cobblemon

This project is a custom plugin for cobblemon that let the players use a special pokebuilder using the Impactor plugin currency.

113

Pokebuilder for Cobblemon

PokeBuilder

Server-side Cobblemon companion that turns Pokémon stat editing into a paid in-game feature — your players spend Impactor currency through a fully clickable GUI to polish IVs, lock in natures, swap abilities, change Tera types, raise Dynamax levels, rename their Pokémon, top up friendship, cure status conditions, and even edit Pokémon stored in their PC. No commands to memorize, no `/op` to hand out, no half-finished editing tools.

> Impactor 5.3+ — for Impactor 5.3+. Requires Impactor 5.3+ and Impactor 5.3+. Mega Showdown is recommended for the Dynamax / G-Max / Tera display overlay.

---

What it does

Run `/pb` (or `/pokebuilder`, `/pokebuild`) to open the party screen — every slot renders the actual Cobblemon model of your Pokémon, not a generic icon. Click one to enter the editor and pay your way to the build you want:

Caught Ball - Caught Ball — set any individual stat to 31 or 0, or max all six at once - Caught Ball — set any stat to 252 or 0, or wipe the spread entirely - Caught Ball — pick any of the 25 natures (priced flat per change) - Caught Ball — switch normal abilities or unlock the hidden ability *(separate price + permission)* - Caught Ball — toggle the shiny flag on or off - Caught Ball — swap to the opposite gender when the species allows it - Caught Ball — change which Poké Ball your Pokémon was captured in

Tera Type - Tera Type — raise the level from 0 up to the server's Cobblemon-configured cap *(price per level)* - Tera Type — grant or remove Gigantamax access - Tera Type — re-type your Pokémon to any of the 19 types (18 elemental + Stellar)

**Quality-of-life *(new in 1.3.0)*: — stepper GUI (+10 / +50 / max / reset) for evolution gates and Return/Frustration - Nickname — stepper GUI (+10 / +50 / max / reset) for evolution gates and Return/Frustration - Friendship — stepper GUI (+10 / +50 / max / reset) for evolution gates and Return/Frustration - Status Cure** — one-click heal of poison / burn / paralysis / freeze / sleep

Every modification is a real Impactor `withdraw()` — there is no shadow wallet. Big purchases pop a confirmation screen above a configurable threshold so nobody one-clicks away their savings.

PC storage access *(new in 1.3.0, opt-in)*

Edit Pokémon stored in your PC without taking them out of the box. A new "Switch to PC" button on the party screen opens a paginated browser of your boxes — click any Pokémon to send it through the same editor flow. Defaults off; admins enable it with `features.pc-access = true` in config and the per-player `pokebuilder.use.pc` permission (defaults true once the feature is on, denyable per-group via LuckPerms for VIP-only access).

The same per-transaction safety net protects PC editing: if a Pokémon gets traded or moved between "click to edit" and "click to buy", the transaction aborts with an automatic refund.

Themed mod-item icons everywhere

PokeBuilder uses the actual items from Cobblemon and Mega Showdown for every menu — not vanilla placeholders. Some highlights:

- The party screen renders caught ball via Cobblemon's `PokemonItem` - The IV editor uses caught ball for each of the six stats - The EV editor uses caught ball (HP Up, Protein, Iron, Calcium, Zinc, Carbos) - The nature picker shows the matching caught ball for every entry - The ability picker uses caught ball / caught ball - The ball picker shows the actual Cobblemon caught ball - The Dynamax level picker is a caught ball stack scaled to the level - The G-Max toggle is a caught ball + caught ball - The Tera type picker is the matching caught ball - The Nickname icon is a caught ball, Friendship is a caught ball, Status Cure is a caught ball - The current-Pokémon header shows the caught ball for the species

Customization

**Permission-based price tiers *(new in 1.3.0)*** — multiplier per tier in `config.conf`: ``` tiers { default = 1.0 vip = 0.80 # 20 % discount mvp = 0.60 } ``` A player gets the first tier they hold `pokebuilder.tier.<id>` for, in declaration order. Tier resolution is per-transaction — LuckPerms grants/revokes take effect on the very next purchase. Audit log records both the sticker and the resolved price so VIP receipts aren't confusing.

**i18n / language files *(new in 1.3.0)*** — every UI string lives in `assets/pokebuilder/lang/<locale>.json` and can be overridden by dropping `config/pokebuilder/lang/<locale>.json` into the server's config dir. The `message-locale` config key picks the language (`"auto"` = JVM default with English fallback). Admin GUI message edits stack on top of the locale base and only the actual deltas get persisted to disk — your `config.conf` stays small.

In-game admin panel — every setting is clickable

Run `/pokebuilder admin` (default OP 4 or `pokebuilder.admin.gui`) to open the control panel. Every section is a clickable GUI, no chat-spam config:

- live-rebinds the Impactor economy — +/- steppers for every cost, shift-click for ×10 jumps - live-rebinds the Impactor economy — toggle individual purchases on or off; disabled features are hidden from `/pb` and refused server-side. 17 toggles after 1.3.0 (every editor + every shortcut + 4 new ones for Nickname / Friendship / Status Cure / PC Access) - live-rebinds the Impactor economy — click cooldown, max modifications per minute, creative-mode toggle, fainted-Pokémon toggle - live-rebinds the Impactor economy — block legendaries / mythicals / ultra beasts / paradox; chat-input managed blocked-species list - live-rebinds the Impactor economy — master toggle, volume, pitch - live-rebinds the Impactor economy — left-click any message to rewrite it in chat with `&` color codes; right-click to reset - live-rebinds the Impactor economy — atomic `tmp + rename` write, glows when there are unsaved edits - live-rebinds the Impactor economy — discards unsaved in-memory edits, re-reads the file; live-rebinds the Impactor economy so currency changes take effect without a restart

Edits go live immediately for all players but are only persisted when you click SAVE TO DISK (or run `/pokebuilder save`).

Built defensively

Because this mod lets players pay currency for irreversible game-state changes, the transaction layer is paranoid by design:

- — every transaction (player, Pokémon UUID, species, action, cost, balance before/after, success/failure, tier and sticker price if discounted) is appended to `logs/pokebuilder-transactions.log`. Every admin GUI change records its old and new value - — every modification runs inside a synchronized block keyed by player UUID, so two simultaneous clicks can't double-spend - — every transaction (player, Pokémon UUID, species, action, cost, balance before/after, success/failure, tier and sticker price if discounted) is appended to `logs/pokebuilder-transactions.log`. Every admin GUI change records its old and new value - — order is *balance check → withdraw → mutate → audit*. If the Cobblemon mutation throws, the currency is automatically refunded - — every transaction (player, Pokémon UUID, species, action, cost, balance before/after, success/failure, tier and sticker price if discounted) is appended to `logs/pokebuilder-transactions.log`. Every admin GUI change records its old and new value - — every `withdraw` / `deposit` checks the player's balance before and after, and logs a WARN if Impactor reports SUCCESS but the balance didn't actually change (another mod cancelling the event, a virtual account, a cached account, etc.). Catches the "everything looks like it works but currency isn't deducted" class of bug that's otherwise invisible. - — every transaction (player, Pokémon UUID, species, action, cost, balance before/after, success/failure, tier and sticker price if discounted) is appended to `logs/pokebuilder-transactions.log`. Every admin GUI change records its old and new value - — if your target gets traded, released, or boxed mid-edit (whether in party or PC), the transaction aborts with a refund instead of editing a stale reference - — every transaction (player, Pokémon UUID, species, action, cost, balance before/after, success/failure, tier and sticker price if discounted) is appended to `logs/pokebuilder-transactions.log`. Every admin GUI change records its old and new value - — block rapid-click and macro exploits - — every transaction (player, Pokémon UUID, species, action, cost, balance before/after, success/failure, tier and sticker price if discounted) is appended to `logs/pokebuilder-transactions.log`. Every admin GUI change records its old and new value - — items shown in menus cannot be dragged, swapped, dropped, cloned, or extracted into your inventory - — every transaction (player, Pokémon UUID, species, action, cost, balance before/after, success/failure, tier and sticker price if discounted) is appended to `logs/pokebuilder-transactions.log`. Every admin GUI change records its old and new value - — demoting a player mid-session locks them out immediately - **Transaction receipts *(new in 1.3.0)* — every transaction (player, Pokémon UUID, species, action, cost, balance before/after, success/failure, tier and sticker price if discounted) is appended to `logs/pokebuilder-transactions.log`. Every admin GUI change records its old and new value - Atomic config writes — every transaction (player, Pokémon UUID, species, action, cost, balance before/after, success/failure, tier and sticker price if discounted) is appended to `logs/pokebuilder-transactions.log`. Every admin GUI change records its old and new value - Audit log — every transaction (player, Pokémon UUID, species, action, cost, balance before/after, success/failure, tier and sticker price if discounted) is appended to `logs/pokebuilder-transactions.log`. Every admin GUI change records its old and new value - Feature gating** — disabled features are checked at the GUI layer, the submenu layer, AND the transaction layer — defense in depth, no single bypass

Permissions (Fabric Permissions API / LuckPerms)

| Node | Default | What it does | |---|---|---| | `pokebuilder.use` | true | Open the GUI | | `pokebuilder.modify.iv` / `.ev` / `.nature` / `.ability` / `.shiny` / `.gender` / `.ball` | true | Per-feature edit access | | `pokebuilder.modify.ability.hidden` | true | Switch to a hidden ability | | `pokebuilder.modify.dynamax` / `.gmax` / `.tera` | true | Dynamax / G-Max / Tera modifications | | `pokebuilder.modify.nickname` / `.friendship` / `.status_cure` | true | New 1.3.0 features | | `pokebuilder.use.pc` | true *(once `features.pc-access` is on)* | Browse own PC via /pb | | `pokebuilder.tier.<id>` | — | Price-tier membership (e.g. `.vip`, `.mvp`) | | `pokebuilder.bypass.cooldown` | false | Ignore click cooldown | | `pokebuilder.bypass.cost` | false | Free modifications (admins testing) | | `pokebuilder.admin.gui` | OP 4 | Open the admin panel | | `pokebuilder.admin.save` | OP 4 | Save config to disk | | `pokebuilder.admin.reload` | OP 3 | Reload config from disk | | `pokebuilder.admin.debug` | OP 4 | Run `/pokebuilder debug` | | `pokebuilder.admin.history` | OP 3 | View any player's `/pokebuilder history` |

Bypass nodes default to nobody. Granting OP does not auto-grant bypass — use a permission plugin if you need it.

Commands

``` /pokebuilder Open the party selector /pokebuild /pb Aliases /pb history [page] Player's own purchase history with tx ids /pokebuilder version Show installed version /pokebuilder admin Open the admin panel (requires permission) /pokebuilder save Persist live edits to disk (requires permission) /pokebuilder reload Re-read config.conf + re-hook economy (requires permission) /pokebuilder debug Dump live economy state for diagnostics (requires permission) /pokebuilder history player <name> Any player's purchase history (requires permission) ```

Configuration

`config/pokebuilder/config.conf` is a HOCON file. Edit it by hand and run `/pokebuilder reload`, or use the admin GUI and click SAVE TO DISK. The file is generated on first launch with sensible defaults.

Notable subsections: - `economy` — currency-id (blank = server primary), display-name override, format - `prices` — every per-action cost - `features` — 17 on/off toggles - `tiers` — permission-based price multipliers - `restrictions` — block legendaries / mythicals / ultra beasts / paradox + per-species block list - `security` — cooldown, rate limit, creative / fainted toggles - `message-locale` — `"auto"` or a specific locale like `"en_us"` / `"fr_fr"`

Audit log lives at `logs/pokebuilder-transactions.log`.

Requirements

Hard dependencies: - Impactor (Fabric) 5.3+ - Impactor (Fabric) 5.3+ - Impactor (Fabric) 5.3+ - Impactor (Fabric) 5.3+ - Impactor (Fabric) 5.3+ — provides the economy backend

Recommended (needed only if you want the Dynamax / G-Max / Tera display overlay on Pokémon summary screens; PokeBuilder's buy flows work without it because the underlying fields are native Cobblemon): - owo-lib 0.12.15+ - owo-lib 0.12.15+ *(hard dep of Mega Showdown)* - owo-lib 0.12.15+ *(hard dep of Mega Showdown)* - owo-lib 0.12.15+ *(hard dep of Accessories)*

PokeBuilder is they do NOT need PokeBuilder, Impactor, Mega Showdown, accessories, owo-lib, or architectury installed. Players need Cobblemon and Fabric API on their client; they do NOT need PokeBuilder, Impactor, Mega Showdown, accessories, owo-lib, or architectury installed to use any of its features. Everything is delivered through standard inventory packets.

What it intentionally is *not*

- Not a PokéEditor replacement — runs server-side only, no client install required - Not a PokéEditor replacement — does not sell Pokémon, items, or Poké Balls; only modifies Pokémon you already own - Not a PokéEditor replacement — Impactor is the only source of truth for balances; PokeBuilder mints nothing - Not a PokéEditor replacement — exposes a curated subset of safe edits. Species / level / moves / held items / EXP / etc. are deliberately out of scope so players can't trivialize unearned content

Target audience

Cobblemon server owners who already run an Impactor economy and want to give their players a paid, self-service way to finalize competitively-viable Pokémon — without writing custom commands, without handing out `/op`, and without trusting moderators to manually honor "50k for a 6IV" requests in chat. With 1.3.0's PC access and the new bio-edit features (nickname / friendship / status cure), the mod now covers the full self-service "polish my collection" workflow without ever taking a Pokémon out of storage.

---

Author: MIT Author: souljagger

ADS