|
|
@@ -3,6 +3,8 @@ using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
+using MineCase.Formats;
|
|
|
+using MineCase.Protocol.Play;
|
|
|
using MineCase.Server.Network.Play;
|
|
|
using MineCase.Server.User;
|
|
|
using MineCase.Server.World;
|
|
|
@@ -53,6 +55,35 @@ namespace MineCase.Server.Game
|
|
|
return Task.CompletedTask;
|
|
|
}
|
|
|
|
|
|
+ public async Task SendChatMessage(IUser sender, string message)
|
|
|
+ {
|
|
|
+ var senderName = await sender.GetName();
|
|
|
+
|
|
|
+ // TODO command parser
|
|
|
+ // construct name
|
|
|
+ Chat jsonData = await CreateStandardChatMessage(senderName, message);
|
|
|
+ byte position = 0; // It represents user message in chat box
|
|
|
+ foreach (var item in _users.Keys)
|
|
|
+ {
|
|
|
+ await item.SendChatMessage(jsonData, position);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public async Task SendChatMessage(IUser sender, IUser receiver, string message)
|
|
|
+ {
|
|
|
+ var senderName = await sender.GetName();
|
|
|
+ var receiverName = await receiver.GetName();
|
|
|
+
|
|
|
+ Chat jsonData = await CreateStandardChatMessage(senderName, message);
|
|
|
+ byte position = 0; // It represents user message in chat box
|
|
|
+ foreach (var item in _users.Keys)
|
|
|
+ {
|
|
|
+ if (await item.GetName() == receiverName ||
|
|
|
+ await item.GetName() == senderName)
|
|
|
+ await item.SendChatMessage(jsonData, position);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private async Task OnGameTick(object state)
|
|
|
{
|
|
|
var now = DateTime.UtcNow;
|
|
|
@@ -62,6 +93,25 @@ namespace MineCase.Server.Game
|
|
|
await Task.WhenAll(_users.Keys.Select(o => o.OnGameTick(deltaTime)));
|
|
|
}
|
|
|
|
|
|
+ private Task<Chat> CreateStandardChatMessage(string name, string message)
|
|
|
+ {
|
|
|
+ StringComponent nameComponent = new StringComponent(name);
|
|
|
+ nameComponent.ClickEvent = new ChatClickEvent(ClickEventType.SuggestCommand, "/msg " + name);
|
|
|
+ nameComponent.HoverEvent = new ChatHoverEvent(HoverEventType.ShowEntity, name);
|
|
|
+ nameComponent.Insertion = name;
|
|
|
+
|
|
|
+ // construct message
|
|
|
+ StringComponent messageComponent = new StringComponent(message);
|
|
|
+
|
|
|
+ // list
|
|
|
+ List<ChatComponent> list = new List<ChatComponent>();
|
|
|
+ list.Add(nameComponent);
|
|
|
+ list.Add(messageComponent);
|
|
|
+
|
|
|
+ Chat jsonData = new Chat(new TranslationComponent("chat.type.text", list));
|
|
|
+ return Task.FromResult(jsonData);
|
|
|
+ }
|
|
|
+
|
|
|
private class UserContext
|
|
|
{
|
|
|
public ClientPlayPacketGenerator Generator { get; set; }
|