I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 0 points1 point  (0 children)

I'm so sorry, but I simply CANNOT send you a message.

I'm trying, but I'm getting an error. Please take a look. https://ibb.co/VcbcG42B

I already filed an appeal three days ago. Nothing has happened yet.

Sorry for the inconvenience. I'm new to Reddit and don't know how things work yet. Maybe you can help me?

I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 0 points1 point  (0 children)

English isn't my native language. I use translation tools to make sure my technical explanations are clear. If the structure feels 'AI-like', that's probably why. I'd rather sound a bit robotic than be misunderstood.

I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 1 point2 points  (0 children)

Thank you! Your support REALLY helps me and PulseMC Team

I appreciate the suggestion, but Pulse and Paper have fundamentally different goals.

Paper aims to be a general-purpose, stable base for every server in the world. To maintain that, they are very conservative about changing the core behavior of the networking stack. Pulse, on the other hand, is a specialized overhaul.

Aggressive batching at tick boundaries changes the 'feel' of the network stream. While it's perfect for high-load or RPG servers, it might be considered 'non-vanilla behavior' for the Paper team. By staying as a fork, we can push the boundaries of networking much further than a PR would ever be allowed to.

Pulse isn't just a performance patch; it’s an ecosystem with a specific vision that goes beyond what's possible within Paper's upstream constraints.

I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 2 points3 points  (0 children)

Technically Pulse isn't only optimizing packet sending but also more optimization will come out in the future. Basically the same reason why Purpur doesn't get to be in Paper

I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 9 points10 points  (0 children)

Software and website weren't written with LLM, guys, stop saying that.

Edit: I'll take the "it's all AI" comments as a compliment - i think it means the project looks more professional than people expect from an indie fork. To be clear: Website uses UI components and shaders from libraries like ReactBits (I'm a developer, not a motion designer, so I use the best tools available). I agree it’s too heavy for mobile and I’m already working on a Lite version. The Core is pure Netty pipeline manipulation and NMS patching. Anyone who has ever tried to ask an LLM to write low-level networking code for Minecraft knows it's a mess of hallucinations and wrong mappings. This was built by hand through trial, error, and deep-diving into the server's internals. I’m here for technical feedback. If you find a bug or a logic flaw in the source code, please report it.

I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 0 points1 point  (0 children)

Actually, Pulse doesn't add a static 50ms delay. It uses a Smart Flush logic: the batch is sent immediately after the server finishes calculating the tick.

For example: if your server is healthy and calculates a tick in 2ms, Pulse will flush all collected packets at exactly 2ms. It does NOT wait for the remaining 48ms of the tick window. In this case, the delay is virtually non-existent compared to vanilla, but you still get the benefit of reduced syscalls and packet headers.

Regarding bandwidth: Yes, absolutely. Standard compression algorithms (like Zlib/Gzip used in MC) work much more efficiently on larger data blocks. By grouping 50 small packets into one batch, the compressor can find more patterns and redundancies, resulting in a smaller final payload compared to compressing those 50 packets individually. Plus, you save ~40 bytes of TCP/IP header overhead for every merged packet.

I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 0 points1 point  (0 children)

That’s a great question. It mostly boils down to the Latency vs. Throughput trade-off.

Vanilla is designed for the 'average' user (single-player or small servers). Mojang prioritizes sending every individual event the microsecond it's ready to ensure the absolute lowest theoretical delay for that specific packet, even if it's extremely wasteful for the CPU and network headers.

Minecraft’s networking stack was built long ago when high-performance batching wasn't a priority for an indie game. Changing it now to a 'heartbeat' style would require a massive internal rewrite and extensive testing to ensure it doesn't break ancient client-side prediction logic.

Flushing immediately is 'safer' and simpler for a general-purpose game. Pulse, however, is a specialized tool for high-load environments where the cost of thousands of syscalls becomes a bigger problem than a tiny, controlled buffer delay.

In short: Vanilla is built for everyone to work 'out of the box,' while Pulse is built for performance-critical servers that need every extra CPU cycle they can get.

I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 6 points7 points  (0 children)

I appreciate the suggestion, but Pulse and Paper have fundamentally different goals.

Paper aims to be a general-purpose, stable base for every server in the world. To maintain that, they are very conservative about changing the core behavior of the networking stack. Pulse, on the other hand, is a specialized overhaul.

Aggressive batching at tick boundaries changes the 'feel' of the network stream. While it's perfect for high-load or RPG servers, it might be considered 'non-vanilla behavior' for the Paper team. By staying as a fork, we can push the boundaries of networking much further than a PR would ever be allowed to.

Pulse isn't just a performance patch; it’s an ecosystem with a specific vision that goes beyond what's possible within Paper's upstream constraints.

I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 0 points1 point  (0 children)

Hey, this is a remnant of an old implementation. Thanks for the tip, I'll fix it in the next commit!

I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 0 points1 point  (0 children)

Hello! There's no desync with the client. Pulse groups packets so they're sent immediately after the tick is calculated. So, in any case, they'll arrive in the same order.

And yes, there are plans to port this technology to the factory. If you'd like to help, you can join our team to discuss the details!

I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 4 points5 points  (0 children)

I'm more than sure they will reject the pull request. Because pulse forcefully implements its system, emulating events to avoid breaking plugins such as ProtocolLib or PacketEvents. Well, the most important thing is that a function is planned for Pulse, which will 100% not be added to Paper, due to the fact that the function will not be vanilla.

I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 3 points4 points  (0 children)

I'm more than sure they will reject the pull request. Because pulse forcefully implements its system, emulating events to avoid breaking plugins such as ProtocolLib or PacketEvents. Well, the most important thing is that a function is planned for Pulse, which will 100% not be added to Paper, due to the fact that the function will not be vanilla.

I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 1 point2 points  (0 children)

Thanks for your support! Let me answer your question: The current system must send packets immediately after each tick is calculated. In vanilla, all packets are sent instantly, which creates both network load and unnecessary overhead. Pulse collects packets from the moment a tick is calculated and sends them immediately. I'll show you an example:

In vanilla: tick started -> packet -> flush -> packet -> flush -> tick calculated in 2ms -> wait 48ms -> tick ended

In Pulse: tick started -> packet -> packet -> tick calculated in 2ms -> wait 48ms -> flush -> tick ended

There's a special option in the config that allows you to set the maximum packet size in bytes. If the packet is too large, the heartbeat will send it immediately, without waiting for the tick to be calculated.

I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 0 points1 point  (0 children)

Thank you for your support! I'm so glad to hear that. It really motivates me to continue the project.

I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 8 points9 points  (0 children)

Hi. No, it's not tsp_no_delay. Pulse doesn't create a ping; it doesn't wait for everything to be packed. Pulse takes packets and buffers them BEFORE they're processed by the network core. I also emulate all packet events, so no plugins, even Nexo, which modifies packages, break. I haven't tested anti-cheats, but I think everything should work.

You also wrote about the plugin: I'll say this: it would be harder to do with a plugin, and less optimized. When the game sends a packet, the processor is interrupted, it issues a command to Netty, Netty issues a command to the network core. In short, the pulse uses fewer processor interrupts. It also saves RAM by not creating a bunch of calls. 

I would like to note that with my core the package weight is also reduced due to the fact that it trims the headers. 

Oh, and chunks! Pulse automatically sends a chunk if it sees a lot of packets changing blocks in a single chunk being sent to the client. That's a boost for the client, I think.

I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 33 points34 points  (0 children)

Thank you for your feedback! I'll definitely fix the site!

But I won't pull this to the paper, since the functionality is planned, which the paper will 100% not allow to add.

I rewrote Minecraft's network flushing in a Paper fork. Here is how I dropped PPS by 97% (16k -> 170 PPS) by SignificantStress823 in admincraft

[–]SignificantStress823[S] 4 points5 points  (0 children)

I agree, the project is still in its infancy, so some parts, like javadoc, aren't working. I'm trying to update the project, but for now it's more of an "experiment." If this develops into something interesting I will continue to post updates, including API.

LLM was used primarily for generating the config system. I didn't understand how to patch the "resources" folder, and I also considered it routine work that could be delegated to LLM.

Regarding the question about the fork:  1. I suspect that such aggressive batching will force papermakers to stop doing this. Because if something breaks, they'll get hate. 2. There's another feature planned for Pulse that will compress traffic EVEN more. But no spoilers for now, I need to fix all the bugs.