Skip to content

v3 foundations

Pre-release
Pre-release

Choose a tag to compare

@DailyStruggle DailyStruggle released this 03 May 04:28

RTP v3 — Foundations (beta.1)

The first beta of the v3 line. This release is the foundation the rest of v3 builds on: a stable public rtp-api, versioned platform submodules, SQL-backed persistence, lock-free pre-generation, and a hardened safety pipeline. Bukkit, Paper, and Folia are production-ready on Java 21+ for Minecraft 1.20.x / 1.21.x / 26.1.

⚠️ Major release — breaking rtp-api changes. See MIGRATION.md before upgrading from 2.x.


Highlights

  1. Versioned platform submodules — compile-time NMS separation via a common module plus per-version submodules for Spigot, Paper, and Folia (ADR-010).
  2. Stable public rtp-api — broadened addon surface; no more reflection into internals (ADR-011).
  3. Multi-backend persistence — flat-file sector cache replaced by SQL-backed storage: H2 (default), SQLite, MySQL, PostgreSQL, plus Redis caching and YAML fallback (ADR-002).
  4. Per-platform scheduling pipelines — Folia regional-thread scheduling, Paper native async chunk loading (PaperLib removed), Spigot Bukkit scheduler (ADR-004–006).
  5. Lock-free location buffer + state-based tasks — LockFreeLocationBuffer decouples pre-generation from dispatch; explicit task states enable pause/resume/cancel and concurrent region fills.
  6. ChunkReservation lifecycle — AutoCloseable abstraction eliminates the 2.x ticket leak (ADR-012).
  7. Anvil read-only pre-filter — off-tick safety probing of unloaded chunks on Spigot via direct .mca reads (ADR-016). Measured 16–20× speedup vs. full chunk load.
  8. Claim integrations folded into the plugin — Factions, GriefDefender, GriefPrevention, HuskTowns, Lands, RedProtect, TownyAdvanced, WorldGuard now ship in-box (ADR-019).
  9. Brigadier bridge for Paper/Folia tab-completion (ADR-014).
  10. Documentation & governance overhaul — full REQ-ID requirements, traceability matrix, ADRs, admin runbook, hazard catalog, migration guide.

Supported scope (beta)

In scope and supported:

  • Spigot, Paper, Folia on MC 1.20.x / 1.21.x / 26.1, Java 21+
  • H2 (default) and SQLite persistence
  • Public rtp-api types
  • Claim integrations (8 plugins)
  • Anvil pre-filter (Spigot)
  • Brigadier bridge (Paper/Folia)

Out of scope — do not file as bugs:

  • Fabric — present in source, not functional yet. Do not deploy on Fabric. Targeted for 3.0.0 final.
  • Forge / NeoForge — no native adapter. Use Arclight/Mohist with the Spigot/Paper build.
  • Multi-server / proxy mode (Velocity, BungeeCord) — design only.
  • MySQL / PostgreSQL / Redis / YAML accessors — experimental; use H2 or SQLite in production.
  • RTPEconomy API and /rtp config command — experimental; signatures may change before final.
  • Legacy MC < 1.20 / Java < 21 — unsupported (ADR-021).

Known issues

  • Fabric adapter is non-functional (see above).
  • safety.yml and biome-filter edits do not invalidate the persisted shape cache. Workaround: /rtp scan reset <region> after changing safety predicates.
  • Tag-grammar tokens in safety.yml (e.g. #minecraft:flowers) are accepted but inert — use explicit material names for now.
  • Pre-release cache invalidation: legacy 2.x .bin files and any pre-3.0.0-beta.1 rtp_cached_locations rows are abandoned by the new hash-keyed naming scheme. Expect a one-time re-scan on first launch.
  • Default change: safety.yml now ships platformRadius: -1 (emergency platform disabled). Set platformRadius: 0 or higher to restore legacy 2.x behaviour.

Upgrading from 2.x

  1. Back up your world and plugins/RTP/ folder.
  2. Read MIGRATION.md.
  3. Ensure Java 21+ and a supported platform version.
  4. Drop in the new jar; expect a one-time region re-scan.
  5. Note renamed command: /rtp fill → /rtp scan (permission rtp.fill → rtp.scan).
  6. Addon authors: CachedLocation is now an immutable record. RTPCoords is a record. See the new addons/RTP_ExampleAddon template.

Roadmap toward 3.0.0 final

  • Fabric platform to first-class
  • Multi-server / proxy mode (Velocity, BungeeCord)
  • Runtime metrics (TPS / MSPT / heap / queue depth)
  • External hook API surface (ADR-026)
  • Promote MySQL / PostgreSQL / Redis / YAML out of experimental
  • Stabilize RTPEconomy and /rtp config
  • Lite assembly variant published as the free RTP jar alongside the full RTP-Pro jar

Full changelog

See CHANGELOG.md for the complete Added / Changed / Fixed lists. Diff: v2.0.18...v3.0.0-beta.1.

Rationale for each architectural decision lives in docs/adr/.


Thanks to everyone who tested pre-release builds, filed issues, and contributed to the v3 design discussions. Please report v3 bugs against this tag with your platform, MC version, Java version, and DB backend.