Operator Runbook¶
This document provides step-by-step diagnosis and resolution procedures for common operational problems. Each section follows the pattern: Symptom → Diagnosis → Resolution.
For the full list of failure modes and their defined system responses, and the hazard
register, see HAZARDS.md.
Server TPS Drops After RTP Activity¶
Symptom: Server tick-rate (TPS) noticeably degrades shortly after players use /rtp, or
during scheduled scan operations.
Diagnosis:
1. Check the active chunk count with a monitoring tool (e.g. /paper chunklist or a TPS plugin).
A high number of force-loaded chunks suggests a chunk leak (see H-004 in HAZARDS.md).
2. Check the server console for SEVERE-level messages from MemoryTracker in the form
[RTP] Memory leak detected for object: <label>. Alive <ms>ms past its expected lifespan.,
as these indicate pipeline tasks that were force-cancelled by the watchdog.
3. Check performance.yml: if queueSize or scanTaskCount are set very high relative to
server hardware, the scan task may be loading too many chunks per cycle.
Resolution:
- If chunk leak is confirmed: run /rtp scan cancel for all active regions to stop new
reservations, then restart the server to clear any residual force-loaded chunks. After restart,
lower scanTaskCount in performance.yml and run /rtp scan resume again.
- If spatial memory isn't populating: reduce scanTaskCount and/or increase scanTaskDelay in
performance.yml, then run /rtp reload.
- If the problem recurs after adjustment, file an issue with the SEVERE log lines from
MemoryTracker attached.
Players Report Landing in Dangerous Locations¶
Symptom: Players report teleporting into lava, inside a solid block, underwater with no air, or into a claimed region they cannot build in.
Diagnosis:
1. Confirm which region the player was teleported from (/rtp info <player> or server log).
2. Check safety.yml for that region: verify that the relevant unsafe block types are listed
under unsafeBlocks and that the safety check is enabled (safetyCheck: true).
3. If the issue is claimed-land: confirm the relevant protection plugin
(GriefPrevention, WorldGuard, etc.) is installed and loaded. Claim-plugin support is bundled
directly into the RTP jar — there is no separate integration jar to install.
4. Check if the region has been recently reconfigured or if safety.yml was edited manually,
as a syntax error can silently disable safety checks.
Resolution:
- Add the offending block type to unsafeBlocks in the region's safety.yml.
- If the protection-plugin check is not firing: ensure the protection plugin is installed.
RTP declares the supported claim plugins as softdepends, so load order is handled
automatically when the plugin is present.
- After any safety.yml change, run /rtp scan reset <region> to discard spatial memory
that was validated under the old rules, then /rtp scan start <region> to rebuild the map
with the corrected safety checks. Note that this affects spatial memory (the map), not the
pre-generation queue directly.
Plugin Fails to Enable on Startup¶
Symptom: The server console shows [RTP] Disabling plugin or a stack trace during startup.
/rtp is not available.
Diagnosis:
1. Find the first exception in the console output after [RTP] Enabling. The most common
causes are:
- ClassNotFoundException or NoSuchMethodError, usually the wrong adapter jar for this server
version (see FM-008 in HAZARDS.md).
- IllegalStateException: [RTP API] Cannot access hooks: Core implementation is not loaded, which
happens when an addon touches an rtp-api contract entry point before RTP core finishes loading
(see FM-009).
- YAML parse error, meaning a config file (config.yml, performance.yml, or a region file) has a
syntax error.
Resolution:
Wrong adapter version:
| Server software | Supported version | Required jar suffix |
|---|---|---|
| Spigot | 1.20.x | rtp-bukkit-v1_20_R1 |
| Spigot | 1.21.x | rtp-bukkit-v1_21_R1 |
| Paper / Spigot | 26.1 | rtp-bukkit-v26_1_R1 |
| Paper | 1.20.x | rtp-paper-v1_20_R1 |
| Paper | 1.21.x | rtp-paper-v1_21_R1 |
| Paper | 26.1 | rtp-paper-v26_1_R1 |
| Folia | 1.20.x | rtp-folia-v1_20_R1 |
| Folia | 1.21.x | rtp-folia-v1_21_R1 |
| Folia | 26.1 | rtp-folia-v26_1_R1 |
Replace the installed jar with the correct version and restart.
Addon load order: Move the offending addon to load after RTP by adding depend: [RTP] to
the addon's plugin.yml, or ensure RTP is listed before the addon alphabetically if relying
on default load order.
YAML syntax error: Run the config file through a YAML validator (e.g. https://yaml-online-parser.appspot.com/), fix the reported line, and restart.
Spatial Memory / Mapping Issues¶
Symptom: /rtp info <region> shows the scan task is making slow progress or "sector skipped" messages appear in console.
Diagnosis:
1. Check the server console for WARN or ERROR messages from the scan task. A high rate of
"sector skipped" messages indicates the region geometry has very few valid land areas. This is
expected behavior for spatial memory—it's learning that those sectors are bad.
2. Check if MemoryTracker is logging repeated SEVERE messages of the form
[RTP] Memory leak detected for object: <label>. Alive <ms>ms past its expected lifespan.,
where repeated entries for the same task label point to a chunk that consistently times out
during loading (FM-005).
3. Check performance.yml for scanTaskCount and scanTaskDelay. If scanTaskDelay is
very large, the mapping process may be making progress but slowly.
4. Run /rtp info <region> and verify that minRadius / maxRadius define a reachable land
area in the target world.
Resolution:
- If most sectors are bad (e.g. ocean-heavy world): widen the region geometry or run
/rtp scan reset <region> and reconfigure before re-mapping.
- If chunk load timeouts are the cause: reduce scanTaskCount to lower concurrency, allowing
the server more time per chunk. Increase scanTaskDelay slightly to give the server
recovery periods between scan cycles.
- If the mapping process has genuinely stalled (no log activity for > 5 minutes): run
/rtp scan cancel <region> then /rtp scan start <region> to restart it.
Database File Grows Unboundedly¶
Symptom: The H2 or SQLite database file in the plugin data folder grows continuously across restarts, consuming significant disk space.
Diagnosis:
1. Locate the database file: plugins/RTP/database/ (check config.yml for the configured
path).
2. A growing database typically means the spatial memory is accumulating entries for a region
whose geometry keeps changing, or that old region entries are never pruned after a region
is removed.
3. Query the database with an H2 or SQLite client to count rows per region table and identify
which region is growing.
Resolution:
- For a removed region: manually delete its table from the database, or delete the database
file entirely and rebuild via /rtp scan start for all active regions.
- For an active region with excessive entries: run /rtp scan reset <region> to clear its
spatial memory, then /rtp scan start <region> to rebuild from scratch with the current
geometry.
- After pruning, restart the server so the plugin re-opens the database cleanly.
Addon Reports IllegalStateException on Load¶
Symptom: An addon jar logs [RTP API] Cannot access hooks: Core implementation is not loaded
(or a similar Core implementation is not loaded message) and fails to enable.
Diagnosis: The addon is calling an rtp-api contract entry point (e.g. RTPAPI.hooks()) -- or an
rtp-core extension entry point such as RTP.addShape() / RTP.addVerticalAdjustor() -- before
rtp-core has finished its onEnable. This is a load-order problem (FM-009).
Resolution:
1. Open the addon's plugin.yml.
2. Add or update the depend list to include RTP:
depend: [RTP]
If the addon is a third-party jar you cannot modify, contact its author and request the
depend entry be added, or use a load-order plugin to enforce the correct sequence.
/rtp reload Does Not Apply Config Changes¶
Symptom: After editing a config file and running /rtp reload, the new values do not
appear to take effect.
Diagnosis:
1. Some configuration keys require a full server restart rather than a reload. Check
CONFIGURATION.md for the reload vs. restart annotation on the
changed key.
2. Verify there are no YAML syntax errors in the edited file, as a parse failure causes the
reload to silently retain the last valid config. Check the console for ERROR messages
immediately after /rtp reload.
Resolution:
- If the key requires a restart: restart the server.
- If a syntax error is present: fix the file (validate with a YAML linter), then re-run
/rtp reload.