-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCyrillicCommandTranslator.cs
110 lines (94 loc) · 3.17 KB
/
CyrillicCommandTranslator.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
using System;
using System.Collections.Generic;
using System.Linq;
using TShockAPI;
using Terraria;
using TerrariaApi.Server;
using Microsoft.Xna.Framework;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Newtonsoft.Json;
namespace CyrillicCommandTranslator
{
[ApiVersion(2, 1)]
public class CyrillicCommandTranslator : TerrariaPlugin
{
private Dictionary<string, string> _keyMapping;
public override string Name => "Cyrillic command translator";
public override string Author => "Elly";
public override string Description => "A plugin that translates commands that were input with cyrillic layout into latin layout";
public override Version Version => new Version(1, 0);
public CyrillicCommandTranslator(Main game) : base(game)
//dontgiveashit.png
{
LoadKeyMapping();
}
private void LoadKeyMapping()
{
_keyMapping = new Dictionary<string, string>
{
{ "Й", "Q" },
{ "Ц", "W" },
{ "У", "E" },
{ "К", "R" },
{ "Е", "T" },
{ "Н", "Y" },
{ "Г", "U" },
{ "Ш", "I" },
{ "Щ", "O" },
{ "З", "P" },
{ "Ф", "A" },
{ "Ы", "S" },
{ "В", "D" },
{ "А", "F" },
{ "П", "G" },
{ "Р", "H" },
{ "О", "J" },
{ "Л", "K" },
{ "Д", "L" },
{ "Я", "Z" },
{ "Ч", "X" },
{ "С", "C" },
{ "М", "V" },
{ "И", "B" },
{ "Т", "N" },
{ "Ь", "M" },
};
}
public override void Initialize()
{
ServerApi.Hooks.ServerChat.Register(this, OnChat);
}
private void OnChat(ServerChatEventArgs args)
{
if (args.Text.StartsWith("/") | args.Text.StartsWith("."))
{
var translatedCommand = TranslateCommand(args.Text);
if (translatedCommand != args.Text)
{
// debug // TShock.Players[args.Who].SendMessage($"Translated command: {translatedCommand}", Color.Yellow);
args.Handled = true;
TShockAPI.Commands.HandleCommand(TShock.Players[args.Who], translatedCommand);
}
}
}
private string TranslateCommand(string command)
{
var translated = string.Empty;
foreach (var character in command)
{
if (_keyMapping.ContainsKey(character.ToString().ToUpper()))
{
translated += _keyMapping[character.ToString().ToUpper()];
}
else
{
translated += character;
}
}
return translated;
}
}
}