# Troubleshooting

## Troubleshooting & FAQ

Common issues, in roughly the order they tend to come up.

### Plugin doesn't load

#### "TrialChamberPro not loaded — cannot activate TCP-WildSpawners."

You're missing the free TCP plugin. [Get it on Modrinth](https://modrinth.com/plugin/trialchamberpro). Min version: v1.4.0.

#### "License verification FAILED."

Your JAR's embedded license key isn't valid. Look at the `reason` string in the failure log — it disambiguates the cause:

* **`fingerprint_revoked`** — *you (or an admin)* revoked this specific server from your dashboard at `https://esmp.fun/plugins/dashboard.php`. The licence is still valid on your other servers; if this revocation was a mistake, email `support@esmp.fun` to have the fingerprint restored.
* **`revoked`** — the entire licence was revoked (refund, chargeback, or redistribution detection). Contact `support@esmp.fun`.
* **`on_hold`** — the licence has been placed on hold pending resolution of an issue (typically: we contacted you about the same key being seen on multiple servers and didn't hear back). Reply to the email we sent you and we'll release the hold.
* **`unknown_key`** — the licence key embedded in your JAR is not recognised by our database. The JAR was probably downloaded by someone else and copied to your server. License keys are tied to your buyer account on Voxel/esmp — re-download under your own account.
* No `reason` / network error — the marketplace API is genuinely down. The plugin's 3-day offline grace cache should kick in for legitimate buyers; if it doesn't, wait a few minutes and restart.

#### "License key sourced from config.yml fallback."

You're running a JAR whose embedded license placeholder (`%%__LICENSE__%%`) wasn't substituted by the marketplace's CDN. This means either:

* You built the JAR yourself locally (legitimate dev build).
* You acquired the JAR from somewhere other than Voxel/esmp — re-download from the marketplace.

The plugin runs in either case (using the config.yml fallback), but the warning surfaces silently-modified JARs.

#### `ClassNotFoundException` at startup

Almost always means your Paper version is too old. Update to a recent Paper 1.21.x build.

### Spawner placement issues

#### `/tcpws give` succeeded but the placed block is a regular trial spawner

The PDC tag wasn't written when the item was placed. Two common causes:

1. **Some other plugin intercepted the place event.** Anti-grief or protection plugins sometimes cancel the place silently and let vanilla place the block. Check `/tcpws list`/`/tcpws info` to see if the spawner registered.
2. **The item lost its PDC tag.** Less likely — usually means the item was put through a hopper / chest with a plugin that strips custom NBT. Re-issue with `/tcpws give` and watch the chain.

#### Hologram doesn't appear above the placed spawner

* Confirm `holograms.enabled: true` in `config.yml`.
* Confirm the spawner is registered: hold the placed item and check `/tcpws list`.
* TextDisplay holograms are non-persistent — they vanish on chunk unload. Walk away and back; the plugin should respawn the hologram on chunk load.
* If the hologram is below the floor, raise `holograms.y-offset` in `config.yml`.

#### Spawner doesn't activate when I walk near it

* Confirm the preset is `enabled: true` in `wild-presets.yml`.
* Confirm at least one mob list (normal-mobs or ominous-mobs) has entries.
* Vanilla activation range is 14 blocks; you need to be within that range AND have line-of-sight (vanilla checks for non-solid blocks between you and the spawner).
* If the spawner is on cooldown (just placed from a mined-up item with cooldown remaining), the hologram shows `Cooldown: MM:SS`. Wait for it to expire.

### Mining issues

#### I can't mine my spawner

* Check `mining.enabled: true` in `config.yml`.
* Check you have the `tcpws.mine` permission (default true for everyone).
* If `mining.owner-only: true`, you must be the original placer (or have `tcpws.mine.bypass-owner`).
* If the preset has `griefing-protection: true`, same as above.
* Mining takes `mining.hardness-seconds` seconds (default 10) of continuous left-click. Stop early and the counter resets.

#### Mining works but the dropped item is a regular trial spawner

The plugin failed to serialise the spawner's state into the item. Almost always a `BlockState` race condition — the block was modified by another plugin between the start of the mining timer and its completion. Check the console for warnings around the moment the mining finished.

#### Re-placed spawner doesn't respect the cooldown

The forced-cooldown gate uses `tcpws:forced_cooldown_until` PDC on the placed block. Verify with `/data get block ~ ~ ~ Block.tag` while standing on the spawner — the tag should be present, value in epoch milliseconds.

If the tag is missing, the item didn't carry cooldown info — it was placed mid-mining (rare race) or the item was crafted/given without going through `/tcpws give`.

### Custom mob issues

#### "Provider 'mythicmobs' not loaded" errors

MythicMobs (or whichever provider) isn't installed. Install the provider plugin or change the preset's `provider:` to `vanilla`.

#### Mobs spawn as zombies instead of my custom mob

The provider returned no valid mob for the configured id. Most common causes:

* The mob id is wrong — check the provider's config for the exact spelling.
* The provider plugin is in a startup state (just enabled, hasn't finished loading mobs). Wait a few seconds and try again.
* The mob id refers to a boss / unsupported entity type. Check the provider's documentation for what's spawnable from external triggers.

#### MythicMobs mob doesn't level up properly

MythicMobs leveling depends on context (kill XP, regional config, faction multipliers). Wild spawners don't pass any extra context to MythicMobs — the mob is spawned with default config. If you need scaling, configure it in the MythicMobs mob's own config.

### Hologram issues

#### Hologram lines render literally as `<gold>...`

Your `messages.yml` (or preset's `display-name`) has a typo — unclosed `<gold>` tag, mismatched bracket, etc. Open the file and look for the obvious culprit.

#### Hologram updates feel laggy / jittery

`holograms.update-interval-seconds` controls the refresh cadence. Default 1 second. Lower values (e.g. 0.5) feel snappier but cost more — server-side text updates.

The cooldown-countdown line also re-renders every interval, so if you have many spawners with cooldowns active, that's where the cost concentrates.

### YAML errors

#### "could not be parsed correctly: expected ''"

Almost always a tab character somewhere in the file. YAML requires spaces, not tabs, for indentation. Open the file in an editor that shows whitespace and convert all tabs to spaces.

#### "no presets loaded"

The whole file failed to parse. Check the console error message for the line number, and look for:

* Tabs (see above).
* Unbalanced quotes.
* Indentation jumps.

Restore from `wild-presets.yml.bak` if you have one, or delete the file entirely to regenerate the bundled defaults.

### VaultCrates integration issues

#### "Preset X configures key-drops but TCP-VaultCrates isn't installed"

VaultCrates is a soft-depend. Install it from [voxel.shop/product/9755](https://voxel.shop/product/9755) (or esmp.fun) and restart, or remove the `key-drops:` section from the preset.

#### Mobs die but no keys drop

* Confirm the chance values are correct (`chance: 0.25` = 25%, not 25). The plugin clamps to `[0.0, 1.0]` at parse time but won't catch obvious 25 → 25,000% confusion.
* Confirm the `crate` id matches a real crate in VaultCrates' `crates.yml`.
* Confirm the `tier` matches a configured tier on the target crate.
* The mob must be spawned by THIS preset's spawner, not some other source. If the mob is summoned via `/summon`, it lacks the `mob_preset_id` PDC stamp and the listener doesn't fire.

### When to ask for help

If none of the above applies, hop into the Discord linked from the marketplace product page. Include:

* Plugin version (`/tcpws version` shows it).
* Server software + version (`Paper 1.21.4`, `Folia 1.21.5`, etc.).
* The full console log around the moment the issue happened, or a pastebin link to it.
* The relevant config block from `config.yml` / `wild-presets.yml` / `messages.yml`.
* Which custom mob plugins (if any) you have installed and their versions.

Tickets with that triple get answered fastest.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://darkstarworks.gitbook.io/plugins/mc/tcp-documentation/tcp-wildspawners/troubleshooting.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
