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 ddf2a5e2cfeaa666a081dd857d6a6003d65d0e00..d8298c7925e3bcea07ead4d438478cc51abcfa16 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,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()) {