diff --git a/TrueCraft.API/ChatColor.cs b/TrueCraft.API/ChatColor.cs new file mode 100644 index 0000000..5532631 --- /dev/null +++ b/TrueCraft.API/ChatColor.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace TrueCraft.API +{ + public static class ChatColor + { + public const string Black = "§0"; + public const string DarkBlue = "§1"; + public const string DarkGreen = "§2"; + public const string DarkCyan = "§3"; + public const string DarkRed = "§4"; + public const string Purple = "§5"; + public const string Orange = "§6"; + public const string Gray = "§7"; + public const string DarkGray = "§8"; + public const string Blue = "§9"; + public const string BrightGreen = "§a"; + public const string Cyan = "§b"; + public const string Red = "§c"; + public const string Pink = "§d"; + public const string Yellow = "§e"; + public const string White = "§f"; + } +} diff --git a/TrueCraft.API/Networking/IRemoteClient.cs b/TrueCraft.API/Networking/IRemoteClient.cs index c228fef..8ffee69 100644 --- a/TrueCraft.API/Networking/IRemoteClient.cs +++ b/TrueCraft.API/Networking/IRemoteClient.cs @@ -12,7 +12,9 @@ namespace TrueCraft.API.Networking IWorld World { get; } IEntity Entity { get; } IWindow Inventory { get; } + string Username { get; } void QueuePacket(IPacket packet); + void SendMessage(string message); } } \ No newline at end of file diff --git a/TrueCraft.API/TrueCraft.API.csproj b/TrueCraft.API/TrueCraft.API.csproj index 0612094..94f0f35 100644 --- a/TrueCraft.API/TrueCraft.API.csproj +++ b/TrueCraft.API/TrueCraft.API.csproj @@ -71,6 +71,7 @@ + diff --git a/TrueCraft/Handlers/PacketHandlers.cs b/TrueCraft/Handlers/PacketHandlers.cs index ff85947..497ed7e 100644 --- a/TrueCraft/Handlers/PacketHandlers.cs +++ b/TrueCraft/Handlers/PacketHandlers.cs @@ -1,4 +1,5 @@ using System; +using TrueCraft.API; using TrueCraft.API.Server; using TrueCraft.Core.Networking.Packets; using TrueCraft.API.Networking; @@ -9,9 +10,14 @@ namespace TrueCraft.Handlers { public static void RegisterHandlers(IMultiplayerServer server) { + server.RegisterPacketHandler(new KeepAlivePacket().ID, HandleKeepAlive); + server.RegisterPacketHandler(new ChatMessagePacket().ID, HandleChatMessage); + server.RegisterPacketHandler(new HandshakePacket().ID, LoginHandlers.HandleHandshakePacket); server.RegisterPacketHandler(new LoginRequestPacket().ID, LoginHandlers.HandleLoginRequestPacket); + server.RegisterPacketHandler(new PlayerPositionPacket().ID, EntityHandlers.HandlePlayerPositionPacket); + server.RegisterPacketHandler(new PlayerDiggingPacket().ID, InteractionHandlers.HandlePlayerDiggingPacket); server.RegisterPacketHandler(new PlayerBlockPlacementPacket().ID, InteractionHandlers.HandlePlayerBlockPlacementPacket); } @@ -20,5 +26,16 @@ namespace TrueCraft.Handlers { // TODO } + + internal static void HandleChatMessage(IPacket _packet, IRemoteClient _client, IMultiplayerServer server) + { + // TODO: Abstract this to support things like commands + // TODO: Sanitize messages + var packet = (ChatMessagePacket)_packet; + foreach (var client in server.Clients) + { + client.SendMessage(ChatColor.Yellow + string.Format("<{0}> {1}", _client.Username, packet.Message)); + } + } } } \ No newline at end of file diff --git a/TrueCraft/RemoteClient.cs b/TrueCraft/RemoteClient.cs index 917feed..9729f29 100644 --- a/TrueCraft/RemoteClient.cs +++ b/TrueCraft/RemoteClient.cs @@ -64,6 +64,11 @@ namespace TrueCraft PacketQueue.Enqueue(packet); } + public void SendMessage(string message) + { + QueuePacket(new ChatMessagePacket(message)); + } + internal void ExpandChunkRadius(IMultiplayerServer server) { if (ChunkRadius < 5)