
Roam
Advanced asynchronous random teleport (RTP) plugin for Paper, Purpur and Folia. Features a modern GUI, biome targeting, favorites, history, stats, claim protection bypass, Vault economy integration, and full customization.
Список изменений
Roam 1.4.0 — one jar, 1.20.1 → 26.2
If you run anything newer than 1.21.4, update now. Roam crashed with
IncompatibleClassChangeError on those servers. This release fixes it, extends
support down to 1.20.1, and adds a build gate that verifies the whole range
instead of just claiming it.
Supported: 1.20.1 → 1.21.11 → 26.1.x → 26.2 — 19 releases, one jar,
each one verified against its real API.
🔴 Fixed — crash on every server above 1.21.4
Paper turned Biome and Sound from enums into interfaces in 1.21.5. Four
Roam call sites were compiled against the enum form, so the JVM refused to link
them and threw IncompatibleClassChangeError — an Error, not an Exception,
so the defensive catch blocks around the search didn't contain it: commands
broke outright instead of degrading.
Affected: the biome label on every teleport, the smart-shoreline check, the
/rtp biome roster + tab-complete + GUI, and the biome-unlock sound.
All four now resolve through the registries, which are interfaces on both sides
of the split. No config, message or API change — biomes.yml entries,
placeholders and /rtp biome arguments keep working exactly as before.
🟢 Added —
- Bytecode now targets Java 17, so Roam never raises your Java floor (1.20.1–1.20.4 on 17, 1.20.5–1.21.11 on 21, 26.x on 25).
- Fixed the same enum/interface trap on
InventoryView, which flipped in 1.21 and would have broken three GUI handlers. - Action bar moved to Adventure (
sendActionBar), dropping the deprecated BungeeCord chat bridge. - Registry lookups survive an uninitialised
Registryon 1.20.x; an unreachable registry degrades instead of aborting config loading. api-versiondrops to1.20.
🟢 Added — Paper 26.2 support, and proof
tools/ApiCompatCheck.java walks every API reference the shipped jar makes and
resolves it against a target server API, failing on removed members and on
class/interface flips. It runs in CI on every push, and --all sweeps all 19
published releases in the range — which matters: InventoryView breaks in the
middle while both endpoints look clean.
- Unlock-sound warning spammed the console — an unresolvable
biome-finder.unlock.soundwarned on every unlock. Now once per bad value. It also accepts both spellings (ENTITY_PLAYER_LEVELUPandentity.player.levelup) and validates against the server's real sound registry, so resource-pack and datapack sounds resolve. /roamadmin editaccepted worlds that don't exist — a typo'd world name was written intoconfig.ymlas a newworlds.<typo>block and reported as "Applied immediately" when nothing was applied. Now rejected unless the world is loaded or already configured (pre-configuring a world that loads later still works), with the configured world list echoed back. Disabled worlds get their own message.- Doubled
[Roam]prefix in console — 33 of 64 logger calls hard-coded the prefix Bukkit already adds. Console output is consistent again.
🔧 Dependencies & build
sqlite-jdbc3.46.1.0 → 3.53.2.1,mariadb-java-client3.4.1 → 3.5.10 — both now run under the Java 25 runtime Paper 26.x requires. Both backends were verified against live servers, schema built from scratch.- Shading merges
META-INF/servicesinstead of letting one jar win, so both JDBC drivers are properly declared. maven-compiler-pluginuses<release>so building on a newer JDK can't silently link against methods your server doesn't have.- JUnit 5.10.2 → 6.1.3, surefire 3.2.5 → 3.5.6, shade 3.6.0 → 3.6.2, compiler 3.13.0 → 3.15.0.
Upgrading: drop in the new jar and restart. No config migration, no breaking API change.
