// EntityPositionAndOrientation void NotifyPlayerPositions(Server server, int clientid, float dt) { ClientOnServer c = server.clients[clientid]; c.notifyPlayerPositionsAccum += dt; if (c.notifyPlayerPositionsAccum < (one / PlayerPositionUpdatesPerSecond)) { return; } c.notifyPlayerPositionsAccum = 0; foreach (var k in server.clients) { if (k.Value.state != ClientStateOnServer.Playing) { continue; } if (!c.IsSpectator && k.Value.IsSpectator) { // Do not send position updates for spectating players if player is not spectator himself continue; } if (k.Key == clientid) { if (k.Value.positionOverride == null) { continue; } else { k.Value.entity.position = k.Value.positionOverride; k.Value.positionOverride = null; } } else { if (server.DistanceSquared(server.PlayerBlockPosition(server.clients[k.Key]), server.PlayerBlockPosition(server.clients[clientid])) > server.config.PlayerDrawDistance * server.config.PlayerDrawDistance) { continue; } } Packet_PositionAndOrientation position = ToNetworkEntityPosition(server.serverPlatform, server.clients[k.Key].entity.position); server.SendPacket(clientid, ServerPackets.EntityPositionAndOrientation(k.Key, position)); } }