public void Write(Client client, Message message, params object[] arguments) { message.WriteVarInt(0x00); ServerListping serverlistping = new ServerListping() { Version = new ServerpingVersion() { Name = "MinecartSharp 1.13.2", Protocol = 404 }, Players = new ServerpingPlayers() { Max = MinecartSharp.GetConfig().MaxPlayers, Online = MinecartSharp.GetServer().GetPlayers().Count, // TODO: fix corrupt packet if one or more players connected //Players = MinecartSharp.GetServer().GetPlayers().Select(x => new ServerpingPlayer(){ Name = x.Client.Username }).ToList() }, Description = new ServerpingDescription() { Motd = MinecartSharp.GetConfig().Motd }, // TODO: make favicon work Favicon = ""//MinecartSharp.GetConfig().Favicon }; message.WriteString(JsonConvert.SerializeObject(serverlistping)); message.FlushData(); }
private void HandleClient(TcpClient tcpClient, NetworkStream stream) { Client client = new Client(tcpClient); MinecartSharp.GetServer().AddClient(client); // Main client connection loop while (client.TcpClient.Connected) { var message = new Message(stream); var receivedData = stream.Read(message.Data, 0, message.Data.Length); if (receivedData > 0) { // Length | Int | Length of packet data + length of the packet ID // Packet Id | Int | Id of the packet send // Data | Byte Array | Data of the packet var length = message.ReadVarInt(); var packetId = message.ReadVarInt(); Logger.Log(LogType.Debug, "Received packet 0x" + packetId.ToString("X2")); if (PacketHandler.Exists(packetId, client.State)) { PacketHandler.GetPacket(packetId, client.State).Read(client, message); } message.Dispose(); } else { // client disconnected break; } } // Close connection with client client.StopKeepAlive(); MinecartSharp.GetServer().RemoveClient(client); if (client.State == ConnectionState.Play) { MinecartSharp.GetServer().BroadcastMessage(client.Username + " left the game"); Logger.Log(LogType.Info, client.Username + " left the game"); } tcpClient.Close(); tcpClient.Dispose(); }
public void Read(Client client, Message message) { var msg = message.ReadString(); if (msg.StartsWith("/")) { // handle command return; } // if not command broadcast message MinecartSharp.GetServer().BroadcastMessage($"{client.Username}: {msg}"); Logger.Log(LogType.Info, $"{client.Username}: {msg}"); }
public void Write(Client client, Message message, params object[] arguments) { message.WriteVarInt(0x02); message.WriteString(Guid.NewGuid().ToString("").ToUpper()); message.WriteString(client.Username); message.FlushData(); // set state to play client.State = ConnectionState.Play; client.StartKeepAlive(); MinecartSharp.GetServer().BroadcastMessage(client.Username + " joined the game"); // also write join game packet PacketHandler.GetPacket(0x25, client.State).Write(client, message); // write mc:brand plugin packet new PluginMessage().Write(client, message, "minecraft:brand", "MinecartSharp"); }