From 41d15f3ec3d2b43d5c832bd08d38a0a730a9864b Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Tue, 20 Jul 2021 18:41:09 -0400 Subject: [PATCH] Optimize squid packet sending Don't send a full MoveEntityAbsolutePacket when we can send a smaller MoveEntityDeltaPacket that only has rotation information. --- .../connector/entity/living/SquidEntity.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/connector/src/main/java/org/geysermc/connector/entity/living/SquidEntity.java b/connector/src/main/java/org/geysermc/connector/entity/living/SquidEntity.java index baef24bb6..bf18b97a0 100644 --- a/connector/src/main/java/org/geysermc/connector/entity/living/SquidEntity.java +++ b/connector/src/main/java/org/geysermc/connector/entity/living/SquidEntity.java @@ -27,6 +27,7 @@ package org.geysermc.connector.entity.living; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; +import com.nukkitx.protocol.bedrock.packet.MoveEntityDeltaPacket; import org.geysermc.connector.entity.Tickable; import org.geysermc.connector.entity.type.EntityType; import org.geysermc.connector.network.session.GeyserSession; @@ -49,13 +50,35 @@ public class SquidEntity extends WaterEntity implements Tickable { @Override public void tick(GeyserSession session) { + boolean pitchChanged; + boolean yawChanged; + float oldPitch = pitch; if (inWater) { + float oldYaw = yaw; pitch += (targetPitch - pitch) * 0.1f; yaw += (targetYaw - yaw) * 0.1f; + yawChanged = oldYaw != yaw; } else { pitch += (-90 - pitch) * 0.02f; + yawChanged = false; + } + pitchChanged = oldPitch != pitch; + + if (pitchChanged || yawChanged) { + MoveEntityDeltaPacket packet = new MoveEntityDeltaPacket(); + packet.setRuntimeEntityId(geyserId); + + if (pitchChanged) { + packet.getFlags().add(MoveEntityDeltaPacket.Flag.HAS_PITCH); + packet.setPitch(pitch); + } + if (yawChanged) { + packet.getFlags().add(MoveEntityDeltaPacket.Flag.HAS_YAW); + packet.setYaw(yaw); + } + + session.sendUpstreamPacket(packet); } - super.moveAbsolute(session, position, Vector3f.from(yaw, 0, yaw), onGround, false); } @Override