From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath 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 d6b261f8d3fbeee771208528b3e0bd5fcd94878b..1a9601aee097b6c10cf2ae1c52fddf45da85f60f 100644 --- a/net/minecraft/server/level/ServerEntity.java +++ b/net/minecraft/server/level/ServerEntity.java @@ -221,6 +221,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 @@ -304,6 +306,21 @@ public class ServerEntity { ); } + // Purpur start + 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 + private void handleMinecartPosRot(NewMinecartBehavior behavior, byte yRot, byte xRot, boolean dirty) { this.sendDirtyEntityData(); if (behavior.lerpSteps.isEmpty()) {