public void SendInitialPosition() { // TODO: Save player location, etc. SpawnPositionPacket spawnPacket = new SpawnPositionPacket(0, 75, 0); Stream.WritePacket(spawnPacket); spawnPacket = null; PlayerPositionLookPacket positionPacket = new PlayerPositionLookPacket(); positionPacket.X = 0d; positionPacket.Y = 75d; positionPacket.Z = 0d; positionPacket.Stance = positionPacket.Y + 1.60; positionPacket.Yaw = 0f; positionPacket.Pitch = 0f; positionPacket.OnGround = false; Stream.WritePacket(positionPacket); positionPacket = null; }
private static async Task LoginStart(Client client, byte[] data) { String username = Utils.ReadString(new MemoryStream(data), 16); Console.WriteLine("Client attempting to authenticate as " + username); Guid guid = new Guid(); LoginSuccessPacket loginSuccessPacket = new LoginSuccessPacket(client, guid, username); await loginSuccessPacket.SendToClient(); client.State = ClientState.Play; client.Player = new Player(client, username, guid); JoinGamePacket joinGamePacket = new JoinGamePacket(client, client.Player.EntityId, (byte)client.Player.Gamemode, 0, 0x0000000000000000); await joinGamePacket.SendToClient(); Console.WriteLine("Client authenticated as " + username); HeldItemChangePacket heldItemChangePacket = new HeldItemChangePacket(client, 0); await heldItemChangePacket.SendToClient(); client.Player.Y = 68; PlayerPositionLookPacket playerPositionLookPacket = new PlayerPositionLookPacket(client, client.Player); await playerPositionLookPacket.SendToClient(); PlayerInfoPacket playerInfoPacket = new PlayerInfoPacket(client, PlayerInfoAction.AddPlayer); playerInfoPacket.AddPlayer(client.Player); await playerInfoPacket.SendToClient(); playerInfoPacket = new PlayerInfoPacket(client, PlayerInfoAction.UpdateLatency); playerInfoPacket.AddPlayer(client.Player); await playerInfoPacket.SendToClient(); Region region = new Region(0, 0); ChunkColumn column = new ChunkColumn(0, 0); column.FillTest(); ChunkDataPacket chunkDataPacket = new ChunkDataPacket(client, column); await chunkDataPacket.SendToClient(); column = new ChunkColumn(1, 0); column.FillTest(); chunkDataPacket = new ChunkDataPacket(client, column); await chunkDataPacket.SendToClient(); column = new ChunkColumn(1, 1); column.FillTest(); chunkDataPacket = new ChunkDataPacket(client, column); await chunkDataPacket.SendToClient(); column = new ChunkColumn(0, 1); column.FillTest(); chunkDataPacket = new ChunkDataPacket(client, column); await chunkDataPacket.SendToClient(); column = new ChunkColumn(-1, 1); column.FillTest(); chunkDataPacket = new ChunkDataPacket(client, column); await chunkDataPacket.SendToClient(); column = new ChunkColumn(-1, -1); column.FillTest(); chunkDataPacket = new ChunkDataPacket(client, column); await chunkDataPacket.SendToClient(); column = new ChunkColumn(1, -1); column.FillTest(); chunkDataPacket = new ChunkDataPacket(client, column); await chunkDataPacket.SendToClient(); column = new ChunkColumn(0, -1); column.FillTest(); chunkDataPacket = new ChunkDataPacket(client, column); await chunkDataPacket.SendToClient(); column = new ChunkColumn(-1, -0); column.FillTest(); chunkDataPacket = new ChunkDataPacket(client, column); await chunkDataPacket.SendToClient(); Console.WriteLine("Sent"); }
private void HandlePlayerPositionLook(Client client, PlayerPositionLookPacket packet) { // TODO: See above // Update player position & look Location newLoc = new Location(packet.X, packet.Y, packet.Z); // if (Location.Distance(client.Player.Location, newLoc) > 15 && client.Spawned) // client.Dispose(); byte xOff, yOff, zOff; xOff = (byte)(-1 * Math.Min((int)(client.Player.Location.X - newLoc.X) * 32, 128)); yOff = (byte)(-1 * Math.Min((int)(client.Player.Location.Y - newLoc.Y) * 32, 128)); zOff = (byte)(-1 * Math.Min((int)(client.Player.Location.Z - newLoc.Z) * 32, 128)); // TODO: Pitch & Yaw Server.BroadcastPacket(new EntityLookRelativeMovePacket(client.Player.EntityID, xOff, yOff, zOff, 0, 0), client); client.Player.Location = newLoc; client.Player.Yaw = packet.Yaw; client.Player.Pitch = packet.Pitch; if (!client.Spawned) { client.Spawned = true; Server.BroadcastPacket(new NamedEntitySpawnPacket(client.Player.EntityID, client.Player.Username, (int)client.Player.Location.X, (int)client.Player.Location.Y, (int)client.Player.Location.Z, 0, 0, 0), client); } }