[{"data":1,"prerenderedAt":617},["ShallowReactive",2],{"blog-\u002F2026-10-23-patchbukkit-nms-and-headless-paper":3},{"id":4,"title":5,"author":6,"body":9,"date":607,"description":608,"extension":609,"image":610,"meta":611,"navigation":612,"path":613,"seo":614,"stem":615,"__hash__":616},"blog\u002F2026-10-23-patchbukkit-nms-and-headless-paper.md","PatchBukkit Update: Headless Paper, Real NMS, and Running Major Plugins on Pumpkin",{"name":7,"url":8},"Alexander Medvedev","https:\u002F\u002Fgithub.com\u002FSnowiiii",{"type":10,"value":11,"toc":595},"minimark",[12,16,22,25,32,44,62,65,68,73,76,79,82,89,124,127,130,133,135,139,142,149,156,161,164,167,182,185,189,192,220,227,231,238,241,243,247,250,253,256,288,292,295,298,300,304,315,318,325,339,341,345,352,356,359,389,395,399,402,439,444,448,451,459,465,469,472,477,481,485,516,518,522,528,531,545,548,550,554,557,560,580],[13,14,15],"p",{},"When we set out to build Pumpkin, the vision was clear: build a blazingly fast, multithreaded Minecraft server from scratch in Rust. But anyone who has ever managed a production Minecraft network knows there is an 800-pound gorilla in the room:",[13,17,18],{},[19,20,21],"strong",{},"The 15-year-old Java plugin ecosystem.",[13,23,24],{},"Server administrators don't just want raw ticks-per-second and memory safety, they want their permissions, their region protection, their economy setups, their building brushes, and their protocol tools. They rely on plugins like EssentialsX, WorldEdit, LuckPerms, and PacketEvents. Telling server owners to abandon that entire ecosystem and start from scratch with custom plugins was never going to fly.",[13,26,27,28,31],{},"That is why we created ",[19,29,30],{},"PatchBukkit",": a native Pumpkin plugin that bridges Pumpkin's high-performance Rust core with Java's Bukkit, Spigot, and Paper plugin APIs.",[13,33,34,35,38,39,43],{},"Today, we are announcing PatchBukkit's most significant update yet. We have completely discarded our old approach and rewritten the system to boot a ",[19,36,37],{},"real, headless Paper server"," with full ",[40,41,42],"code",{},"net.minecraft.server"," (NMS) support, high-speed memory bridges, and an emulated network pipeline.",[13,45,46,47,50,51,50,54,57,58,61],{},"Even better: we are already successfully running 17 major plugins, including ",[19,48,49],{},"EssentialsX",", ",[19,52,53],{},"WorldEdit",[19,55,56],{},"GrimAC \u002F PacketEvents",", and ",[19,59,60],{},"VeinMiner",", simultaneously on a live Pumpkin server.",[13,63,64],{},"Here is the story of why our initial approach hit a wall, how running Paper headlessly changed everything, and how we got some of the most complex Java plugins in existence running smoothly on top of Rust.",[66,67],"hr",{},[69,70,72],"h3",{"id":71},"why-mocking-failed","Why Mocking Failed",[13,74,75],{},"In the early days of PatchBukkit, our strategy seemed straightforward: implement the Bukkit and Paper API interfaces from scratch in Java, package them into a library, and route calls down to Pumpkin over native bridges.",[13,77,78],{},"It was a classic clean-room implementation. For simple plugins that only listened to player join events or sent basic chat messages, it worked fine.",[13,80,81],{},"Then we tried loading real, production plugins.",[13,83,84,85,88],{},"The harsh reality of the Minecraft server ecosystem is that ",[19,86,87],{},"the Bukkit API is only the tip of the iceberg",". Almost no advanced plugin strictly adheres to clean API boundaries:",[90,91,92,98,110,121],"ul",{},[93,94,95,97],"li",{},[19,96,53],{}," doesn't casually call high-level block methods. It reaches straight down into raw Minecraft server internals (NMS) and manipulates block states directly.",[93,99,100,50,103,57,106,109],{},[19,101,102],{},"GrimAC",[19,104,105],{},"PacketEvents",[19,107,108],{},"ProtocolLib"," don't wait for Bukkit events. They look up player network connections, tap directly into the low-level communication pipeline, and intercept raw network packets.",[93,111,112,50,115,57,118,120],{},[19,113,114],{},"LuckPerms",[19,116,117],{},"Vault",[19,119,49],{}," inspect server metadata, datapack registries, and internal scheduler state.",[93,122,123],{},"Nearly every plugin expects authentic registries for biomes, enchantments, damage types, and sound events.",[13,125,126],{},"Attempting to hand-mock all of this became an impossible nightmare. Our mock server code ballooned to thousands of lines of stubbed methods. We were constantly writing dummy classes, fake data wrappers, and mock registry accessors.",[13,128,129],{},"Every time we tested a new plugin, it would crash because it touched some obscure internal field or method that we hadn't mocked yet. We were playing an endless game of whack-a-mole.",[13,131,132],{},"We realized we needed to stop trying to fake Paper and instead embrace it.",[66,134],{},[69,136,138],{"id":137},"the-new-architecture-running-a-headless-paper-server","The New Architecture: Running a Headless Paper Server",[13,140,141],{},"If plugins require authentic Paper and authentic Minecraft internals to function, why not just give them the real thing?",[13,143,144,145,148],{},"In our latest update, we completely removed thousands of lines of mock server code. Instead, PatchBukkit now ",[19,146,147],{},"boots a real Paper server headlessly inside the JVM",".",[13,150,151],{},[152,153],"img",{"alt":154,"src":155},"PatchBukkit Architecture","\u002Fimages\u002Fpatchbukkit\u002Fpatchbukkit-architecture.png",[157,158,160],"h4",{"id":159},"automatic-and-legal-setup-via-paperclip","Automatic and Legal Setup via Paperclip",[13,162,163],{},"Pumpkin and PatchBukkit are open-source and do not redistribute Mojang's proprietary code. To solve this legally and automatically, PatchBukkit handles Paper setup right at runtime.",[13,165,166],{},"On first boot:",[168,169,170,173,176,179],"ol",{},[93,171,172],{},"PatchBukkit queries PaperMC's official API for the configured Minecraft version and build.",[93,174,175],{},"It downloads the official Paperclip installer and verifies its integrity with a SHA-256 checksum.",[93,177,178],{},"It runs the patch process locally in a cache directory, applying Paper's patches to generate the authentic server jar and libraries.",[93,180,181],{},"PatchBukkit automatically loads those jars onto the classpath before starting the Java worker.",[13,183,184],{},"No manual downloads or complicated setups required.",[157,186,188],{"id":187},"headless-bootstrapping","Headless Bootstrapping",[13,190,191],{},"Once the dependencies are loaded, PatchBukkit boots Paper headlessly:",[90,193,194,197,200],{},[93,195,196],{},"It runs the complete bootstrap sequence, initializing all vanilla registries, including biomes, enchantments, damage types, and datapack tags.",[93,198,199],{},"It provides authentic server and world instances that plugins expect.",[93,201,202,203,50,206,50,209,50,212,215,216,219],{},"It isolates all Paper configuration files (",[40,204,205],{},"bukkit.yml",[40,207,208],{},"spigot.yml",[40,210,211],{},"paper.yml",[40,213,214],{},"server.properties",") inside a dedicated ",[40,217,218],{},"patchbukkit\u002F"," folder, keeping Pumpkin's own root directory clean.",[13,221,222,223,226],{},"Crucially: ",[19,224,225],{},"Paper's network listeners and game ticking loops are never started",". Paper runs purely as an in-memory backend that provides authentic Minecraft internals, registries, and plugin loaders.",[157,228,230],{"id":229},"first-class-java-dependency-support","First-Class Java Dependency Support",[13,232,233,234,237],{},"Another major benefit of running authentic Paper is that ",[19,235,236],{},"all Java dependencies just work",", exactly like they do on standard Bukkit or Paper.",[13,239,240],{},"Modern plugins frequently rely on external libraries, runtime Maven dependencies, and packaged database drivers. In PatchBukkit, all of these dependencies load onto the classpath naturally. For instance, GeyserMC was able to use its packaged MySQL connector to handle database operations out of the box without requiring custom workarounds, shading hacks, or manual library juggling.",[66,242],{},[69,244,246],{"id":245},"bridging-the-worlds-dynamic-synchronization","Bridging the Worlds: Dynamic Synchronization",[13,248,249],{},"Running a headless server solves the compatibility problem: when a plugin asks for Minecraft internals, it gets real ones.",[13,251,252],{},"However, the actual world simulation and physics live in Pumpkin (Rust), not in Paper. If a plugin places a block, damages an entity, or inspects the world, that action has to happen in Pumpkin.",[13,254,255],{},"To synchronize state seamlessly, PatchBukkit dynamically hooks into Paper's internals at runtime:",[90,257,258,264,270,276,282],{},[93,259,260,263],{},[19,261,262],{},"World & Blocks",": Intercepts block placements, chunk queries, particles, and sound broadcasts, forwarding them directly to Pumpkin.",[93,265,266,269],{},[19,267,268],{},"Entities & Players",": Synchronizes player movements, health, velocities, teleports, and equipment between Rust and Java.",[93,271,272,275],{},[19,273,274],{},"Inventories",": Bridges player inventory clicks, container views, and item changes.",[93,277,278,281],{},[19,279,280],{},"Commands",": Automatically registers commands from Bukkit plugins into Pumpkin's native command system.",[93,283,284,287],{},[19,285,286],{},"Events",": Translates Pumpkin game events into authentic Paper events so plugin listeners trigger normally.",[157,289,291],{"id":290},"smooth-threading-low-latency","Smooth Threading & Low Latency",[13,293,294],{},"Paper includes strict internal checks ensuring game operations run on its expected main thread. Because PatchBukkit manages Java operations on its own dedicated worker thread, we dynamically adapt these checks so plugins can run smoothly without triggering unexpected crashes.",[13,296,297],{},"For communication between Rust and Java, we use direct, low-latency memory bridges. High-frequency operations, like checking block types, placing blocks, or updating player positions, bypass heavy serialization entirely, allowing Pumpkin and Java plugins to communicate at near-native speed.",[66,299],{},[69,301,303],{"id":302},"supporting-packetsprotocol-the-virtual-network-pipeline","Supporting Packets\u002FProtocol: The Virtual Network Pipeline",[13,305,306,307,50,309,311,312,314],{},"One of the biggest hurdles in plugin compatibility is supporting packet-level and protocol libraries. Many advanced plugins, such as ",[19,308,105],{},[19,310,108],{},", and packet-based tools like ",[19,313,102],{},", don't rely on standard Bukkit events. Instead, they look for raw network channels to intercept, listen to, and inject packets directly into the connection stream.",[13,316,317],{},"Because our Paper server is headless, no physical network sockets exist on the Java side, Pumpkin handles all networking in Rust.",[13,319,320,321,324],{},"To make packet-level plugins and protocol libraries work out of the box, PatchBukkit creates an ",[19,322,323],{},"emulated network pipeline"," for each player:",[168,326,327,330,333,336],{},[93,328,329],{},"When a player connects to Pumpkin, PatchBukkit creates an authentic player handle with an emulated network channel containing the full Minecraft packet pipeline.",[93,331,332],{},"When Pumpkin receives network packets from a client, it forwards the raw packet data into this virtual channel.",[93,334,335],{},"Plugins using PacketEvents, ProtocolLib, or custom packet listeners intercept and analyze the packet stream exactly as if they were running on a standard Paper server.",[93,337,338],{},"When a plugin sends a packet back to the player, PatchBukkit catches it and routes it back through Pumpkin to be sent over the wire.",[66,340],{},[69,342,344],{"id":343},"in-practice-17-major-plugins-running-concurrently","In Practice: 17 Major Plugins Running Concurrently",[13,346,347,348,351],{},"Architectures sound good on paper, but the real test is whether popular plugins actually work. In our automated integration test suite, we load ",[19,349,350],{},"17 plugins simultaneously"," on a single live Pumpkin server:",[157,353,355],{"id":354},"_1-essentialsx","1. EssentialsX",[13,357,358],{},"EssentialsX is the backbone of thousands of servers, handling everything from economy to teleportation and player management.",[90,360,361,386],{},[93,362,363,364,50,367,50,370,50,373,50,376,50,379,50,382,385],{},"Console and player commands (",[40,365,366],{},"\u002Feco",[40,368,369],{},"\u002Fbalance",[40,371,372],{},"\u002Fbaltop",[40,374,375],{},"\u002Fwarps",[40,377,378],{},"\u002Fafk",[40,380,381],{},"\u002Fseen",[40,383,384],{},"\u002Fkit",") execute seamlessly.",[93,387,388],{},"We also resolved player list ping handling, allowing EssentialsX to properly hide vanished players from server ping samples without warnings.",[13,390,391],{},[152,392],{"alt":393,"src":394},"EssentialsX running on Pumpkin","\u002Fimages\u002Fpatchbukkit\u002Fessentialsx-on-pumpkin.png",[157,396,398],{"id":397},"_2-worldedit","2. WorldEdit",[13,400,401],{},"WorldEdit is known for touching low-level world structures for fast editing.",[90,403,404,417,436],{},[93,405,406,407,50,410,50,413,416],{},"Selection tools (",[40,408,409],{},"\u002F\u002Fwand",[40,411,412],{},"\u002F\u002Fpos1",[40,414,415],{},"\u002F\u002Fpos2",") respond cleanly to player clicks.",[93,418,419,420,50,423,50,426,50,429,50,432,435],{},"Region analysis commands (",[40,421,422],{},"\u002Fcount",[40,424,425],{},"\u002Fdistr",[40,427,428],{},"\u002Fsize",[40,430,431],{},"\u002Fexpand",[40,433,434],{},"\u002Fcontract",") work accurately.",[93,437,438],{},"Block modifications write directly into Pumpkin's world simulation.",[440,441],"video-player",{"src":442,"caption":443},"\u002Fvideos\u002Fpatchbukkit\u002Fworldedit-on-pumpkin.mp4","WorldEdit running on Pumpkin",[157,445,447],{"id":446},"_3-packetevents-protocol-grimac","3. PacketEvents, Protocol & GrimAC",[13,449,450],{},"Packet and protocol plugins require tight timing and deep access to the raw network stream.",[90,452,453,456],{},[93,454,455],{},"PacketEvents and ProtocolLib inject directly into our virtual network pipeline without connection errors.",[93,457,458],{},"GrimAC runs its predictive physics simulations, tracking sprinting states, movement trajectories, and combat packets directly against our virtual stream without false flagging or crashing.",[13,460,461],{},[152,462],{"alt":463,"src":464},"GrimAC running on Pumpkin","\u002Fimages\u002Fpatchbukkit\u002Fgrim-on-pumpkin.png",[157,466,468],{"id":467},"_4-veinminer","4. VeinMiner",[13,470,471],{},"VeinMiner detects block-breaking chains when a player sneaks and mines an ore vein.",[90,473,474],{},[93,475,476],{},"When a player holding a pickaxe sneaks and breaks a block in a connected ore vein, VeinMiner triggers, identifies adjacent blocks, and clears the vein directly in Pumpkin's world.",[440,478],{"src":479,"caption":480},"\u002Fvideos\u002Fpatchbukkit\u002Fveinminer-on-pumpkin.mp4","VeinMiner running on Pumpkin",[157,482,484],{"id":483},"_5-permissions-world-guard-and-utilities","5. Permissions, World Guard, and Utilities",[90,486,487,492,498,504,510],{},[93,488,489,491],{},[19,490,114],{},": Complex permission inheritance, meta calculations, and command trees function smoothly.",[93,493,494,497],{},[19,495,496],{},"WorldGuard",": Region flags, boundary checks, and build protections integrate cleanly.",[93,499,500,503],{},[19,501,502],{},"AuraSkills",": Skill leveling, custom experience dispatch, and stat calculations.",[93,505,506,509],{},[19,507,508],{},"Chunky & Multiverse-Core",": World pre-generation and multi-world coordination.",[93,511,512,515],{},[19,513,514],{},"PlaceholderAPI, TAB, GSit, Vault Unlocked, and ViaVersion",": All load, register their services, and interact without conflicts.",[66,517],{},[69,519,521],{"id":520},"the-reality-check-what-still-needs-work","The Reality Check: What Still Needs Work",[13,523,524,525,148],{},"While loading 17 major plugins together and watching them run on Pumpkin is an incredible milestone, we want to be completely transparent: ",[19,526,527],{},"many things are still broken and do not fully work yet",[13,529,530],{},"PatchBukkit is still an active, rapidly evolving work in progress. You will inevitably run into:",[90,532,533,536,539,542],{},[93,534,535],{},"Unimplemented or partially firing Bukkit events.",[93,537,538],{},"Edge cases in entity AI, mob pathfinding, and combat mechanics that haven't been fully synchronized between Rust and Java yet.",[93,540,541],{},"Complex custom inventory menus and drag-and-drop actions that behave unexpectedly.",[93,543,544],{},"Plugins that load up and register commands fine, but encounter errors when touching unsupported world features.",[13,546,547],{},"Replicating 15 years of server platform quirks on top of a completely new Rust engine is a massive undertaking. We are testing and fixing edge cases every day, but please keep expectations realistic: this is an active effort, not yet a drop-in replacement for production servers.",[66,549],{},[69,551,553],{"id":552},"whats-next","What's Next?",[13,555,556],{},"Adopting a headless Paper architecture has completely transformed PatchBukkit. Instead of spending months reverse-engineering and stubbing thousands of internal Minecraft classes, we can focus our efforts where they matter most: refining state synchronization, expanding game event coverage, and optimizing bridge performance.",[13,558,559],{},"Our roadmap for upcoming updates includes:",[90,561,562,568,574],{},[93,563,564,567],{},[19,565,566],{},"Expanded Entity AI Synchronization",": Deeper bridging of custom entity goals and pathfinding.",[93,569,570,573],{},[19,571,572],{},"Advanced Menu & GUI Support",": Further hardening custom inventory click events and container interactions.",[93,575,576,579],{},[19,577,578],{},"Dynamic Resource & Datapack Refinements",": Streamlining how custom plugin datapacks register into Pumpkin.",[13,581,582,583,590,591,594],{},"If you want to try PatchBukkit or follow development, check out the ",[584,585,589],"a",{"href":586,"rel":587},"https:\u002F\u002Fgithub.com\u002FPumpkin-MC\u002FPatchBukkit",[588],"nofollow","PatchBukkit GitHub repository",". You can drop the PatchBukkit plugin into your Pumpkin setup, add your favorite ",[40,592,593],{},".jar"," plugins, and experience your existing plugin stack running on top of Rust.",{"title":596,"searchDepth":597,"depth":597,"links":598},"",2,[599,601,602,603,604,605,606],{"id":71,"depth":600,"text":72},3,{"id":137,"depth":600,"text":138},{"id":245,"depth":600,"text":246},{"id":302,"depth":600,"text":303},{"id":343,"depth":600,"text":344},{"id":520,"depth":600,"text":521},{"id":552,"depth":600,"text":553},"2026-10-23","A deep dive into PatchBukkit's new architecture: moving away from mocking the Bukkit API to running a headless Paper server, unlocking real NMS support, and running WorldEdit, EssentialsX, GrimAC, and VeinMiner on top of Rust.","md",null,{},true,"\u002F2026-10-23-patchbukkit-nms-and-headless-paper",{"title":5,"description":608},"2026-10-23-patchbukkit-nms-and-headless-paper","VIWKyIJhMRGacGyD8WqwlWOpDZvOsFtL74Fczu5UFmw",1793042180461]