mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-26 18:39:23 +00:00
Originally vanilla logic is to use stream, and Mojang switched it to Guava's Collections2 since 1.21.4. It is much faster than using stream or manually adding to a new ArrayList. Manually adding to a new ArrayList requires allocating a new object array. However, the Collections2 lazy handles filter condition on iteration, so much better.
46 lines
2.5 KiB
Diff
46 lines
2.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
|
Date: Sat, 6 Jul 2019 17:00:04 -0500
|
|
Subject: [PATCH] Dont send useless entity packets
|
|
|
|
TODO: Add more reducers
|
|
|
|
Original license: MIT
|
|
Original project: https://github.com/PurpurMC/Purpur
|
|
|
|
diff --git a/net/minecraft/server/level/ServerEntity.java b/net/minecraft/server/level/ServerEntity.java
|
|
index d605c4da4475fdc47a6d0c90fbca2713fc9d8fef..0dee18df07c979da6125a4e7a955343e44d67ac2 100644
|
|
--- a/net/minecraft/server/level/ServerEntity.java
|
|
+++ b/net/minecraft/server/level/ServerEntity.java
|
|
@@ -225,6 +225,8 @@ public class ServerEntity {
|
|
}
|
|
// Gale end - Airplane - better checking for useless move packets
|
|
|
|
+ if (org.dreeam.leaf.config.modules.opt.ReduceUselessPackets.reduceUselessEntityMovePackets && isUselessMoveEntityPacket(packet)) packet = null; // Purpur - Dont send useless entity packets
|
|
+
|
|
if (this.entity.hasImpulse || this.trackDelta || this.entity instanceof LivingEntity && ((LivingEntity)this.entity).isFallFlying()) {
|
|
Vec3 deltaMovement = this.entity.getDeltaMovement();
|
|
if (deltaMovement != this.lastSentMovement) { // SparklyPaper start - skip distanceToSqr call in ServerEntity#sendChanges if the delta movement hasn't changed
|
|
@@ -308,6 +310,21 @@ public class ServerEntity {
|
|
);
|
|
}
|
|
|
|
+ // Purpur start - Dont send useless entity packets
|
|
+ private boolean isUselessMoveEntityPacket(@Nullable Packet<?> packet) {
|
|
+ if (!(packet instanceof ClientboundMoveEntityPacket moveEntityPacket)) return false;
|
|
+ return switch (packet) {
|
|
+ case ClientboundMoveEntityPacket.Pos ignored ->
|
|
+ moveEntityPacket.getXa() == 0 && moveEntityPacket.getYa() == 0 && moveEntityPacket.getZa() == 0;
|
|
+ case ClientboundMoveEntityPacket.PosRot ignored ->
|
|
+ moveEntityPacket.getXa() == 0 && moveEntityPacket.getYa() == 0 && moveEntityPacket.getZa() == 0 && moveEntityPacket.getYRot() == 0 && moveEntityPacket.getXRot() == 0;
|
|
+ case ClientboundMoveEntityPacket.Rot ignored ->
|
|
+ moveEntityPacket.getYRot() == 0 && moveEntityPacket.getXRot() == 0;
|
|
+ default -> false;
|
|
+ };
|
|
+ }
|
|
+ // Purpur end - Dont send useless entity packets
|
|
+
|
|
private void handleMinecartPosRot(NewMinecartBehavior behavior, byte yRot, byte xRot, boolean dirty) {
|
|
this.sendDirtyEntityData();
|
|
if (behavior.lerpSteps.isEmpty()) {
|