Pewpew is a Paper fork focused on main-thread performance and safe, deterministic parallelism. It aims for per-world tick parallelism and snapshot-backed async AI/sensor/pathfinding work where safe. The default behavior stays vanilla-compatible: plugins and datapacks run on the main thread, and any behavior-changing optimizations are opt-in and documented.
- Project notes, plans, and findings live in
docs/pewpew/. - The current roadmap and invariants are in
docs/pewpew/plans/.
- Do not edit
pewpew-server/paper-patchesorpewpew-server/minecraft-patchesdirectly. - Upstream tracking: each version branch pins
paperRefingradle.propertiesto a specific Papermaincommit. - Stable approach (work in this repo using paperweight, like Paper/SparklyPaper):
- Run
./gradlew applyAllPatches(or./gradlew applyPaperApiPatches+./gradlew :pewpew-server:applyAllServerPatches) to regeneratepaper-api/andpaper-server/. - Make changes in
paper-api/orpaper-server/(Minecraft changes live underpaper-server/src/minecraft). - Regenerate patches via the paperweight tasks (fixup or rebuild); do not hand-edit patch files.
- Verify with
./gradlew :pewpew-server:applyAllServerPatchesand./gradlew :pewpew-server:compileJava.
- Run
- Pewpew patches must apply after all Paper patches (
./gradlew :pewpew-server:applyAllServerPatches). - New files become file patches (
pewpew-server/paper-patches/filesorpewpew-server/minecraft-patches/sources). rebuildPaperServerFilePatchesmay log a missingsrc/main/resources/logo.png; it is safe to ignore.
./gradlew build./gradlew :pewpew-server:runDevServer- Production jar (mojmap paperclip):
./gradlew :pewpew-server:createMojmapPaperclipJar- Output:
pewpew-server/build/libs/pewpew-paperclip-*-mojmap.jar
- Output:
- The bench plugin lives in
NyaaCat/PewpewBench(standalone repo). - Build it there with
./gradlew jar(publishpaper-apito Maven local first if needed). - Run the harness with
bash scripts/bench/run_benchmark.sh. - Reports are written to
docs/pewpew/findings/and run directories are cleaned after completion.
- Plugins and datapacks execute on the main thread by default.
- Any async compute must be snapshot-backed and committed on the main thread in world order.
Special thanks to Paper and SparklyPaper for the baseline work and inspiration behind this fork.