Описание
# CobbleTracker
**Tells you _where_ the good spawns are — and shows you, in the world itself.**
Rare spawns in Cobblemon are easy to miss. CobbleTracker watches every spawn on the server, announces the ones that matter, raises a beacon-style column of light over them, drops a waypoint on your minimap, and keeps a browsable history of everything that has appeared — so a Legendary that turned up while you were down a cave is still findable.
And because Cobblemon spawns no legendaries at all on its own, CobbleTracker takes that job too — thoughtfully, or not at all if you'd rather a datapack did it.
Minecraft **1.21.1** · **Fabric** and **NeoForge** · Cobblemon **1.7.3** · Java 21
***
## ⭐ Legendary spawns, decided properly
**Vanilla Cobblemon never spawns a legendary.** Out of the box they only ever come from shrines.
* A **context-aware director** places them by where the spawn would actually land: biome, time of day, weather, height. Rayquaza on a mountain peak in daylight, Regieleki in a thunderstorm, Regice on a glacier at night. If nothing fits, nothing spawns — no Regice in a desert.
* Interval and chance are yours: one attempt every 30 minutes at 30% by default.
* **`mode: auto` respects your datapack.** Install a legendary spawn datapack and the director stands down rather than doubling the rate and overriding its careful biome rules. Remove it and the director picks the job back up.
* The whole table lives in `legendaries.yml`, in the _same_ vocabulary Cobblemon's own spawn files use — `#cobblemon:is_mountain`, `timeRange`, `isRaining` — so there's no second dialect to learn.
## 🔍 `/checklegendary` — what can spawn right here
Reads Cobblemon's **live** spawn pool, so it shows real data, whatever datapack you have installed.
```
Legendary spawns - overworld, plains, night, thunderstorm
✔ Zapdos ultra-rare · ~0.02% per attempt
✔ Regieleki ultra-rare · ~0.02% per attempt
6 other legendaries need a different biome, time or weather.
Next attempt: 12m 30s · chance 30%
```
* Only what **can** appear where you're standing, with an approximate per-attempt chance.
* The countdown to the next attempt, and your own anchor cooldown.
* Also the fastest way to find out a legendary datapack didn't load: it says so in one line.
* Plain chat, so it **works without the client mod**.
`/spawnlegendary` spends one attempt immediately, by the same rules — it will politely refuse if nothing fits where you are.
## 💡 In-world spawn beam
A beacon-style column of light stands over a tracked Pokémon for as long as it is in your loaded chunks — the in-world "it's right here" marker instead of a wall of coordinates in chat.
* **Presence-based.** It appears whenever you're near, and comes back if you fly off and return.
* **Survives a reconnect** — relog and the beams over anything still out there come straight back.
* **Removed the instant it's over** — caught, defeated or despawned. No ghost beams.
* **Tier-coloured**, so you can tell a Legendary from a Shiny at a glance.
* Configurable radius (`0` = auto, matches your render distance), grace period and column height.
## 🗺 Minimap integration — Xaero's, VoxelMap, JourneyMap
Every announcement can carry a clickable **Create Waypoint** link. Click it and the spawn lands on your minimap.
* Your client tells the server which minimap mods you actually have, and the server only ever emits those formats. **No minimap mod is required** — clients without one just get the beam.
* Waypoints can inherit the beam's tier colour.
* Any format can be switched off server-wide.
* Clicking a card in the history GUI drops **a past spawn** on your minimap too.
## 📣 Spawn announcements
Per-category announcements, fully rewritable.
* **MiniMessage formatting** — ``, ``, ``, ``. Legacy `&`\-codes still work.
* Placeholders: `%species%`, `%biome%`, `%world%`, `%x%`, `%y%`, `%z%`, and `%waypoint%` for the clickable link.
* Channels: **chat**, on-screen **title/subtitle**, an **action bar** line, and a configurable **sound** with volume and pitch.
* **Discord webhook** per category — posted off the server thread with a bounded queue, so a slow or unreachable Discord never costs you tick time.
* Broadcast to the whole server, or only to players within N blocks — per category.
* `hide-exact-position` rounds the beam, the waypoint, the history GUI _and_ the Discord post to the chunk centre, so nothing hands out pinpoint coordinates. Operators still see exact positions.
* A category limited to N blocks stays limited: its past spawns only appear in the history of players who are near them.
## 🔔 Notifications players control
A category used to be on or off for the whole server, so the only answer to "the shiny announcements are spamming me" was an operator switching them off for everyone.
* A **NOTIFY tab** in the GUI, and `/ct notify` in chat for players without the client mod.
* Per category: turn it off for yourself, keep the message but drop the sound, or narrow it to your own radius.
* Silencing a category silences **everything** for it — chat, sound, title and the beam.
* A personal radius only ever narrows, never widens: it can't be used to see a deliberately local announcement from further away.
* Settings persist, and default to everything on.
## 📖 Browsable spawn history
`/cobbletracker` (or `/ct`, `/last`, `/ll`) opens a code-drawn GUI listing everything that has spawned.
* A sidebar tab for **ALL**, one per tracker category, plus **STATS** and **NOTIFY**.
* Scrollable **sprite cards** showing species, biome, coordinates and time.
* **What it actually is**, on every card: level, gender, nature, ability and its IVs, with the count of perfect ones called out — EVs too, on anything that has them. That's the difference between "a Rayquaza spawned" and "a Rayquaza worth dropping everything for".
* Cycle the sort: **Newest · Distance · Species · Tier · Caught**.
* Caught spawns are marked with who caught them.
* History **survives restarts**, with a per-category cap that evicts the oldest first.
* `/lastlegend` opens straight onto the Legends tab — or prints a plain-chat rundown if you haven't got the client mod.
## 🏆 Top Hunters leaderboard
The STATS tab ranks players by captures, drawn as a bar chart. Bragging rights, built in.
## 🎯 Personal hunt mode — press `\`
Your own tracker, entirely client-side, no server support needed.
* Press `\` to open **Track a Pokémon** and search the full Cobblemon species list.
* Click any species to toggle hunting it — hunt as many as you like.
* **Your list survives logging out.** Shift-click a card in the history GUI to hunt that species too.
* Matching Pokémon near you get an **amber beam**, plus **directional arrows in the corner of your HUD** with live distances to the nearest ones.
* Servers can switch the whole feature off with `hunt.enabled` — a player's list is kept, and comes back on a server that allows it.
## 🧩 Tracker categories you define
CobbleTracker ships with **Legends, Shinies, Bosses and Ultra Beasts** — but they're just config. Add or remove a block and every subsystem (announcements, history, stats, the spawner, the GUI sidebar) picks it up on the next `/ct reload`.
Each category has a **matcher spec**, combined with spaces for AND:
```
isLegendary isShiny isMythical isUltraBeast isBoss
species: label: aspect: form:alolan
gender:female nature:adamant ability:levitate level:>50
perfectIvs:>=4 ivs:>=150 scale:>1.15
biome:jungle dimension: time:night weather:thunder y: