Add player chat

This commit is contained in:
Drew DeVault 2014-12-28 19:04:42 -07:00
parent f230ab3345
commit 152c268fbd
5 changed files with 52 additions and 0 deletions

View File

@ -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";
}
}

View File

@ -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);
}
}

View File

@ -71,6 +71,7 @@
<Compile Include="Windows\WindowChangeEventArgs.cs" />
<Compile Include="Logic\IBlockProvider.cs" />
<Compile Include="Logic\IItemProvider.cs" />
<Compile Include="ChatColor.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>

View File

@ -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));
}
}
}
}

View File

@ -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)