Paper fork that enables a server admin to run a single world across multiple servers. Multiple MultiPaper servers sit behind a BungeeCord proxy and use a MultiPaper-Master to coordinate with eachother and store server data. While the MultiPaper-Master can be run as a standalone server, it is usually run as a BungeeCord plugin, which has some benefits including being able to send players to the least busiest server when they first join.
MultiPaper syncs between servers:
- OP-list, whitelist, and banlist
- Playerdata, statistics, and advancements
- Chunks, POIs, entities, level.dat, and maps
MultiPaper requires:
- A BungeeCord proxy (forks such as Waterfall also work)
- A MultiPaper-Master (found in
MultiPaper-Master/build/libs)- Runs as either a standalone server
- Or as a BungeeCord plugin
- MultiPaper (a fork of Paper)
How it works:
- Swaps players between servers to ensure chunks are only loaded on one server at a time
- Place your worlds inside the directory being used for MultiPaper-Master
- Start the MultiPaper-Master by either:
- Standalone:
java -jar multipaper-master.jar <port> - BungeeCord plugin: Set the port in
plugins/MultiPaperProxy/config.yml
- Standalone:
- In each MultiPaper server:
- Put the name of the server used in BungeeCord's config.yml into
bungeecordname.txt- eg.
survival1
- eg.
- Put the address and port of the MultiPaper-Master into
multipaperserver.txt- eg.
localhost:35353
- eg.
- Put the name of the server used in BungeeCord's config.yml into
For a plugin to work with MultiPaper, it needs to support multiple servers. A good indication of this, but not a guarantee, is if a plugin uses a MySQL database.
To make a plugin compatible with MultiPaper, no data must be stored on the server itself and must instead be stored on an external server such as a MySQL database.
Some other things to look out for:
- Caches can prevent the plugin from getting the most up to date data.
- Due to the nature of BungeeCord, when a player swaps servers,
PlayerJoinEventwill usually be called on the arriving server beforePlayerQuitEventis called on the departing server. Bukkit.broadcastMessagewill send the message to all players on all MultiPaper servers, whileBukkit.getOnlinePlayerswill only return the players on your singular MultiPaper server.
MultiPaper uses the same paperclip jar system that Paper uses.
You can also build it yourself
Requirements:
- You need
gitinstalled, with a configured user name and email. On windows you need to run from git bash. - You need
maveninstalled - You need
jdk16+ installed to compile (andjre16+ to run)
Build instructions:
- Patch paper with:
./gradlew applyPatches - Build the multipaper jar with:
./gradlew paperclipJar - Get the multipaper jar from
build/libs - Build the multipaper-master jar with:
cd MultiPaper-Master && mvn package - Get the multipaper-master jar from
MultiPaper-Master/target
Publish to your local maven repository with: ./gradlew publishToMavenLocal
Paperweight tasks
-----------------
./gradlew applyPatches
./gradlew cleanCache - Delete the project setup cache and task outputs.
./gradlew patchPaperApi
./gradlew patchPaperServer
./gradlew rebuildPaperApi
./gradlew rebuildPaperServer
./gradlew rebuildPatches
./gradlew runDev - Spin up a non-shaded non-remapped test server
./gradlew runShadow - Spin up a test server from the shadowJar archiveFile
The fork uses PaperMC's paperweight framework found here