9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2025-12-19 15:09:25 +00:00
Files
Leaf/Leaf-Server/minecraft-patches/features/0082-Dont-send-useless-entity-packets.patch
2025-01-18 10:28:38 -05:00

52 lines
2.6 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 ddf2a5e2cfeaa666a081dd857d6a6003d65d0e00..1b9e34574fb5b8955fa37795baebf588fdaeca2a 100644
--- a/net/minecraft/server/level/ServerEntity.java
+++ b/net/minecraft/server/level/ServerEntity.java
@@ -199,6 +199,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
+
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
@@ -275,6 +277,27 @@ public class ServerEntity {
}
}
+ // Purpur start
+ private boolean isUselessMoveEntityPacket(@Nullable Packet<?> packet) {
+ if (packet instanceof ClientboundMoveEntityPacket moveEntityPacket) {
+ switch (packet) {
+ case ClientboundMoveEntityPacket.Pos ignored -> {
+ return moveEntityPacket.getXa() == 0 && moveEntityPacket.getYa() == 0 && moveEntityPacket.getZa() == 0;
+ }
+ case ClientboundMoveEntityPacket.PosRot ignored -> {
+ return moveEntityPacket.getXa() == 0 && moveEntityPacket.getYa() == 0 && moveEntityPacket.getZa() == 0 && moveEntityPacket.getyRot() == 0 && moveEntityPacket.getxRot() == 0;
+ }
+ case ClientboundMoveEntityPacket.Rot ignored -> {
+ return moveEntityPacket.getyRot() == 0 && moveEntityPacket.getxRot() == 0;
+ }
+ default -> {
+ }
+ }
+ }
+ return false;
+ }
+ // Purpur end
+
private void handleMinecartPosRot(NewMinecartBehavior behavior, byte yRot, byte xRot, boolean dirty) {
this.sendDirtyEntityData();
if (behavior.lerpSteps.isEmpty()) {