diff --git a/src/Impostor.Api/Net/IClient.cs b/src/Impostor.Api/Net/IClient.cs
index 66ab9c5e..02cdee8c 100644
--- a/src/Impostor.Api/Net/IClient.cs
+++ b/src/Impostor.Api/Net/IClient.cs
@@ -27,6 +27,16 @@ namespace Impostor.Api.Net
///
string Name { get; }
+ ///
+ /// Gets the language.
+ ///
+ Language Language { get; }
+
+ ///
+ /// Gets the quick chat mode.
+ ///
+ QuickChatModes ChatMode { get; }
+
///
/// Gets the connection of the client.
///
diff --git a/src/Impostor.Plugins.Example/ExamplePluginStartup.cs b/src/Impostor.Plugins.Example/ExamplePluginStartup.cs
index 673026da..fbb282d2 100644
--- a/src/Impostor.Plugins.Example/ExamplePluginStartup.cs
+++ b/src/Impostor.Plugins.Example/ExamplePluginStartup.cs
@@ -15,6 +15,7 @@ namespace Impostor.Plugins.Example
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton();
+ services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
diff --git a/src/Impostor.Plugins.Example/Handlers/ClientEventListener.cs b/src/Impostor.Plugins.Example/Handlers/ClientEventListener.cs
new file mode 100644
index 00000000..062e2665
--- /dev/null
+++ b/src/Impostor.Plugins.Example/Handlers/ClientEventListener.cs
@@ -0,0 +1,22 @@
+using Impostor.Api.Events;
+using Impostor.Api.Events.Client;
+using Microsoft.Extensions.Logging;
+
+namespace Impostor.Plugins.Example.Handlers
+{
+ public class ClientEventListener : IEventListener
+ {
+ private readonly ILogger _logger;
+
+ public ClientEventListener(ILogger logger)
+ {
+ _logger = logger;
+ }
+
+ [EventListener]
+ public void OnClientConnected(IClientConnectedEvent e)
+ {
+ _logger.LogInformation("Client {name} > connected (language: {language}, chat mode: {chatMode})", e.Client.Name, e.Client.Language, e.Client.ChatMode);
+ }
+ }
+}
diff --git a/src/Impostor.Server/Net/Client.cs b/src/Impostor.Server/Net/Client.cs
index 75790346..e755a1cc 100644
--- a/src/Impostor.Server/Net/Client.cs
+++ b/src/Impostor.Server/Net/Client.cs
@@ -24,8 +24,8 @@ namespace Impostor.Server.Net
private readonly GameManager _gameManager;
private readonly ICustomMessageManager _customMessageManager;
- public Client(ILogger logger, IOptions antiCheatOptions, ClientManager clientManager, GameManager gameManager, ICustomMessageManager customMessageManager, string name, int gameVersion, IHazelConnection connection)
- : base(name, gameVersion, connection)
+ public Client(ILogger logger, IOptions antiCheatOptions, ClientManager clientManager, GameManager gameManager, ICustomMessageManager customMessageManager, string name, int gameVersion, Language language, QuickChatModes chatMode, IHazelConnection connection)
+ : base(name, gameVersion, language, chatMode, connection)
{
_logger = logger;
_antiCheatConfig = antiCheatOptions.Value;
diff --git a/src/Impostor.Server/Net/ClientBase.cs b/src/Impostor.Server/Net/ClientBase.cs
index 909c0e9b..c1a63825 100644
--- a/src/Impostor.Server/Net/ClientBase.cs
+++ b/src/Impostor.Server/Net/ClientBase.cs
@@ -13,10 +13,12 @@ namespace Impostor.Server.Net
{
internal abstract class ClientBase : IClient
{
- protected ClientBase(string name, int gameVersion, IHazelConnection connection)
+ protected ClientBase(string name, int gameVersion, Language language, QuickChatModes chatMode, IHazelConnection connection)
{
Name = name;
GameVersion = gameVersion;
+ Language = language;
+ ChatMode = chatMode;
Connection = connection;
Items = new ConcurrentDictionary