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 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()) {