Skip to content

BungeeCord re-implementation and Paper 1.8.8 → 26.3 support - #2

Merged
Macaron27 merged 1 commit into
mainfrom
bungee-paper
Sep 28, 2026
Merged

Macaron27 merged 1 commit into
mainfrom
bungee-paper

Conversation

@Macaron27

Copy link
Copy Markdown
Owner

What

  • BungeeCord plugin on the shared core:
    • logins wait for friends data (via PostLoginEvent intents);
    • commands run off BungeeCord's network threads;
    • multi-proxy through Redis, including mixed BungeeCord + Velocity networks.
  • Paper plugin, one jar for Paper 1.8.8 → 26.3, built against the 1.8.8 API.
  • Velocity now uses the same shared Settings / FriendsRuntime as the other two.

How the version range works

  • Chat: goes out as BungeeCord components, the one chat API every Paper version has. Adventure is converted with only the 1.8 API, plus hex colours when the runtime supports them.
  • Paper jar layout:
    • a Java 8 bootstrap loads the Java 25 plugin from an embedded jar;
    • CraftBukkit's class rewriter (1.13+) otherwise logs "Fatal error trying to convert" for every Java 25 class on servers older than about 1.21.
  • SQLite: Bukkit loads the server's own SQLite driver first (3.7.2 on 1.8.8), so the SQLite SQL is now portable to SQLite 3.7.2. Tests re-run on 3.7.2 and 3.21.0.1.

Optimizations

  • Paper jar size: 3.4 MB. It leaves out SQLite (every Paper bundles it) and Redis.
  • No remapping: tells Paper 1.20.5+ not to remap the jar.
  • Faster startup on 1.13–1.20: the rewriter no longer processes our ~1.7k bundled classes.
  • Threads: commands never run on the main thread (virtual threads on Paper) or on network threads.
  • Messages: join/leave notices built without MiniMessage parsing (~4 µs → ~20 ns per recipient); fixed messages cached.
  • Build: Gradle configuration cache, parallel builds and build cache.

Tests

  • Unit: 101 tests in the core suite, 30 re-run on sqlite-jdbc 3.7.2, 4 chat tests on the 1.8 API. MySQL and Redis suites pass locally.
  • Real servers (tools/e2e), with bot players on protocols 1.8 → 26.3. 11/11 scenarios passed locally:
    • Paper 1.8.8, 1.12.2, 1.16.5, 1.20.6, 1.21.11 and 26.3, with the full friend flow;
    • BungeeCord and Velocity, each with 1.8.8 and 26.3 backends;
    • BungeeCord + Velocity sharing MySQL and Redis.

Notes:

  • Paper 1.16.5 needs -DPaper.IgnoreJavaVersion=true to start on Java 25.
  • Paper 1.12.2's bundled SQLite has no Apple Silicon build (Linux is fine); use MySQL there.
  • The e2e runs are not in CI, because they need the server jars and EULA acceptance.

🤖 Generated with Claude Code

… core

Platforms
- bungee: BungeeCord plugin on the common core (login waits for friends data via
  PostLoginEvent intents, commands off the network threads, Redis multi-proxy,
  can share a network with Velocity proxies).
- paper: one jar for Paper 1.8.8 to 26.x, built against the 1.8.8 API. A Java 8
  bootstrap loads the Java 25 plugin from an embedded jar so CraftBukkit's class
  rewriter (1.13+) never sees Java 25 classes. Commands on virtual threads.
- common: Settings/FriendsRuntime shared by all three plugins (Velocity now uses
  them too), Adventure -> BungeeCord chat conversion (1.8-safe, hex on 1.16+),
  ChatSessions registry, LuckPerms prefixes.

Compatibility / optimization
- SQLite SQL portable to 3.7.2 (Paper 1.8.8's bundled driver): no UPSERT or
  TRUE/FALSE, connectionTestQuery, WAL via init SQL, synchronous=NORMAL.
- Paper jar leaves out SQLite (every Paper bundles it) and Redis: 3.4 MB; tells
  Paper 1.20.5+ not to remap it.
- Join/leave notices built without MiniMessage parsing (~4 us -> ~20 ns);
  fixed messages cached.
- Gradle configuration cache, parallel builds, build cache; shared shading setup.

Tests
- New unit tests: chat conversion (run on the newest and the 1.8 chat API),
  sessions, settings, message equivalence; SQLite suites re-run on
  sqlite-jdbc 3.7.2 / 3.21.0.1.
- tools/e2e: real servers + bot players (1.8 to 26.3 protocols). Passing locally:
  Paper 1.8.8, 1.12.2, 1.16.5, 1.20.6, 1.21.11, 26.3; BungeeCord and Velocity
  with 1.8.8 and 26.3 backends; BungeeCord + Velocity sharing MySQL and Redis.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Macaron27
Macaron27 merged commit 10dc487 into main Sep 28, 2026
1 check passed
@Macaron27
Macaron27 deleted the bungee-paper branch September 28, 2026 17:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant