Description
# Cobblemon Characters
Run `/character` and a full-screen picker opens — a row of characters, each shown as a **posed 3D model of its own skin** that turns to follow your cursor. Pick one, hit **SELECT**, and the server takes it from there: teleports you, sets your gamemode, hands you buffs — whatever that character is wired to do. Choose once, and that's who you are.
**Not just a menu — the server acts on your choice.** The client draws the screen and renders the 3D skins; the server runs the commands and keeps the buffs applied. It's one jar, `environment: "*"` — the *same file* on both sides.
---
## Features
- **Command-opened character select** — `/character` *(or `/choose character`)* opens an enclosed panel, one bordered card per character: name banner, live 3D skin, a `SLIM` / `CLASSIC` model toggle, and a **SELECT** button.
- **Real 3D skin previews** — each card renders the character's actual **64×64 Minecraft skin** as a standing player model *(head tracks the mouse)*. Skins live on the server and are streamed to the client on open — players don't need the files.
- **Selection runs commands** — every character carries its own command list, run from the server console *(op-level 4, so `/tp`, `/gamemode`, `/give`, `/lp…` just work)* with placeholders `{player}` · `{uuid}` · `{character}` · `{display_name}`. Commands fire **once**, the moment you pick.
- **Persistent buffs** — potion effects re-applied every second, beacon-style, for as long as you're that character. They survive relog *(and re-apply themselves on join)*. Strategy is the config — pick the kit that fits the character.
- **One-time by default** — reopen the menu as much as you like *until* you commit; **selecting locks you in**, server-authoritative and saved to the world. A modified client can't bypass it. Grant `goodcharacters.reselect` to let someone choose again.
- **Drop-in characters** — a new character is just a folder with a `character.json` and a skin `texture.png`; switch it on and order it in `menu.json`. **No code.**
- **Admin tools** — `/character reload` *(hot-reload config)* and `/character select <id> <player>` *(force-apply)*. Per-character `permission` gates optional VIP characters.
## Config *(config/cobblemon-characters/)*
- **`menu.json`** — `title`, `subtitle`, and `active` *(the ordered list of character ids that show in the picker)*.
- **`characters/<id>/character.json`** — `display_name`, `texture`, `slim` *(Alex 3px vs Steve 4px arms)*, `description`, `permission`, `commands[]`, and `buffs[]` *(each `effect` + `amplifier`)*.
- **`characters/<id>/texture.png`** — the character's **64×64** Minecraft skin.
- Selections persist per world in `data/cobblemon_characters_selections.json` — delete an entry to free a player's one-time choice.
---
## Requirements
**Minecraft 1.21.1 — Fabric** · Fabric API · needed on **server & client**
| | Fabric |
|---|---|
| Required | Fabric API |
*No Kotlin, no hard Cobblemon dependency — it runs on any Fabric 1.21.1 server, and drops straight into a Cobblemon pack (Fabric API is already there).*
---
All Rights Reserved · Dev: **igorbescobar**
