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 936429fd17d8649329e6258a4e10c9e6bf62f6de..94fa37653598014d8187c4ecfd486709e4fb9f91 100644 --- a/net/minecraft/server/level/ServerEntity.java +++ b/net/minecraft/server/level/ServerEntity.java @@ -204,6 +204,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 @@ -287,6 +289,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()) {