From d222d5f68308dc4470052ad28b0faeeaec0b7367 Mon Sep 17 00:00:00 2001 From: BruceChen Date: Wed, 12 Oct 2022 13:03:57 +0800 Subject: [PATCH 1/8] Fix AutoRelog --- MinecraftClient/ChatBots/AutoRelog.cs | 6 +++--- MinecraftClient/ChatBots/FollowPlayer.cs | 2 +- MinecraftClient/ChatBots/ReplayCapture.cs | 6 +++--- MinecraftClient/Resources/lang/de.ini | 2 +- MinecraftClient/Resources/lang/en.ini | 2 +- MinecraftClient/Resources/lang/fr.ini | 2 +- MinecraftClient/Resources/lang/ru.ini | 2 +- MinecraftClient/Resources/lang/vi.ini | 2 +- MinecraftClient/Resources/lang/zh-Hans.ini | 4 ++-- MinecraftClient/Resources/lang/zh-Hant.ini | 4 ++-- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/MinecraftClient/ChatBots/AutoRelog.cs b/MinecraftClient/ChatBots/AutoRelog.cs index ba16264a..a62dbd8a 100644 --- a/MinecraftClient/ChatBots/AutoRelog.cs +++ b/MinecraftClient/ChatBots/AutoRelog.cs @@ -129,10 +129,10 @@ namespace MinecraftClient.ChatBots private void LaunchDelayedReconnection(string? msg) { - int delay = random.Next(Settings.DoubleToTick(Config.Delay.min), Settings.DoubleToTick(Config.Delay.max)); - LogDebugToConsoleTranslated(String.IsNullOrEmpty(msg) ? "bot.autoRelog.reconnect_always" : "bot.autoRelog.reconnect", msg); + double delay = random.NextDouble() * (Config.Delay.max - Config.Delay.min) + Config.Delay.min; + LogDebugToConsoleTranslated(string.IsNullOrEmpty(msg) ? "bot.autoRelog.reconnect_always" : "bot.autoRelog.reconnect", msg); LogToConsoleTranslated("bot.autoRelog.wait", delay); - System.Threading.Thread.Sleep(delay * 1000); + System.Threading.Thread.Sleep((int)Math.Floor(delay * 1000)); ReconnectToTheServer(); } diff --git a/MinecraftClient/ChatBots/FollowPlayer.cs b/MinecraftClient/ChatBots/FollowPlayer.cs index 5d202ab1..d5616aab 100644 --- a/MinecraftClient/ChatBots/FollowPlayer.cs +++ b/MinecraftClient/ChatBots/FollowPlayer.cs @@ -18,7 +18,7 @@ namespace MinecraftClient.ChatBots public bool Enabled = false; [TomlInlineComment("$config.ChatBot.FollowPlayer.Update_Limit$")] - public double Update_Limit = 1; + public double Update_Limit = 1.5; [TomlInlineComment("$config.ChatBot.FollowPlayer.Stop_At_Distance$")] public double Stop_At_Distance = 3.0; diff --git a/MinecraftClient/ChatBots/ReplayCapture.cs b/MinecraftClient/ChatBots/ReplayCapture.cs index 4232e8a0..ea34e5cb 100644 --- a/MinecraftClient/ChatBots/ReplayCapture.cs +++ b/MinecraftClient/ChatBots/ReplayCapture.cs @@ -21,7 +21,7 @@ namespace MinecraftClient.ChatBots public bool Enabled = false; [TomlInlineComment("$config.ChatBot.ReplayCapture.Backup_Interval$")] - public int Backup_Interval = 3000; + public double Backup_Interval = 300.0; public void OnSettingUpdate() { @@ -38,7 +38,7 @@ namespace MinecraftClient.ChatBots SetNetworkPacketEventEnabled(true); replay = new ReplayHandler(GetProtocolVersion()); replay.MetaData.serverName = GetServerHost() + GetServerPort(); - backupCounter = Config.Backup_Interval * 10; + backupCounter = Settings.DoubleToTick(Config.Backup_Interval); RegisterChatBotCommand("replay", Translations.Get("bot.replayCapture.cmd"), "replay ", Command); } @@ -55,7 +55,7 @@ namespace MinecraftClient.ChatBots if (backupCounter <= 0) { replay.CreateBackupReplay(@"recording_cache\REPLAY_BACKUP.mcpr"); - backupCounter = Config.Backup_Interval * 10; + backupCounter = Settings.DoubleToTick(Config.Backup_Interval); } else backupCounter--; } diff --git a/MinecraftClient/Resources/lang/de.ini b/MinecraftClient/Resources/lang/de.ini index 32792f5d..9c5e0da5 100644 --- a/MinecraftClient/Resources/lang/de.ini +++ b/MinecraftClient/Resources/lang/de.ini @@ -528,7 +528,7 @@ bot.autoRelog.disconnect_msg=Verbindung wurde mit folgender Nachricht unterbroch bot.autoRelog.reconnect_always=Ignoriere Kick Nachricht und verbinde erneut. bot.autoRelog.reconnect=Nachricht enhält '{0}'. Verbinde erneut. bot.autoRelog.reconnect_ignore=Kick Nachricht enthält keine Schlüsselwörter. Wird ignoriert! -bot.autoRelog.wait=Warte {0} Sekunden vor erneuter Verbindung... +bot.autoRelog.wait=Warte {0:0.000} Sekunden vor erneuter Verbindung... # AutoRespond bot.autoRespond.loading=Loading matches from '{0}' diff --git a/MinecraftClient/Resources/lang/en.ini b/MinecraftClient/Resources/lang/en.ini index 8bb1e67d..97fece71 100644 --- a/MinecraftClient/Resources/lang/en.ini +++ b/MinecraftClient/Resources/lang/en.ini @@ -548,7 +548,7 @@ bot.autoRelog.disconnect_msg=Got disconnected with message: {0} bot.autoRelog.reconnect_always=Ignoring kick message, reconnecting anyway. bot.autoRelog.reconnect=Message contains '{0}'. Reconnecting. bot.autoRelog.reconnect_ignore=Message not containing any defined keywords. Ignoring. -bot.autoRelog.wait=Waiting {0} seconds before reconnecting... +bot.autoRelog.wait=Waiting {0:0.000} seconds before reconnecting... # AutoRespond bot.autoRespond.loading=Loading matches from '{0}' diff --git a/MinecraftClient/Resources/lang/fr.ini b/MinecraftClient/Resources/lang/fr.ini index 8f29db97..43197457 100644 --- a/MinecraftClient/Resources/lang/fr.ini +++ b/MinecraftClient/Resources/lang/fr.ini @@ -528,7 +528,7 @@ bot.autoRelog.disconnect_msg=Déconnection détectée avec le message : {0} bot.autoRelog.reconnect_always=Reconnexion quel que soit le contenu du message de kick. bot.autoRelog.reconnect=Le message contient '{0}'. Reconnexion. bot.autoRelog.reconnect_ignore=Le message ne contient aucun des mots clés définis. Pas de reconnexion automatique. -bot.autoRelog.wait=Attente de {0} secondes avant de se reconnecter... +bot.autoRelog.wait=Attente de {0:0.000} secondes avant de se reconnecter... # AutoRespond bot.autoRespond.loading=Chargement des règles depuis '{0}' diff --git a/MinecraftClient/Resources/lang/ru.ini b/MinecraftClient/Resources/lang/ru.ini index 3352c035..cbc0ea5f 100644 --- a/MinecraftClient/Resources/lang/ru.ini +++ b/MinecraftClient/Resources/lang/ru.ini @@ -528,7 +528,7 @@ bot.autoRelog.disconnect_msg=Произошло отключение с сооб bot.autoRelog.reconnect_always=Игнорирует сообщение о пинке, все равно переподключается. bot.autoRelog.reconnect=Сообщение содержит '{0}'. Переподключаемся. bot.autoRelog.reconnect_ignore=Сообщение не содержит определенных ключевых слов. Игнорирование. -bot.autoRelog.wait=Ожидание {0} секунд перед переподключением... +bot.autoRelog.wait=Ожидание {0:0.000} секунд перед переподключением... # AutoRespond bot.autoRespond.loading=Загрузка совпадений из '{0}' diff --git a/MinecraftClient/Resources/lang/vi.ini b/MinecraftClient/Resources/lang/vi.ini index c84b9047..8c1748e4 100644 --- a/MinecraftClient/Resources/lang/vi.ini +++ b/MinecraftClient/Resources/lang/vi.ini @@ -528,7 +528,7 @@ bot.autoRelog.disconnect_msg=Got disconnected with message: {0} bot.autoRelog.reconnect_always=Ignoring kick message, reconnecting anyway. bot.autoRelog.reconnect=Message contains '{0}'. Reconnecting. bot.autoRelog.reconnect_ignore=Message not containing any defined keywords. Ignoring. -bot.autoRelog.wait=Waiting {0} seconds before reconnecting... +bot.autoRelog.wait=Waiting {0:0.000} seconds before reconnecting... # AutoRespond bot.autoRespond.loading=Loading matches from '{0}' diff --git a/MinecraftClient/Resources/lang/zh-Hans.ini b/MinecraftClient/Resources/lang/zh-Hans.ini index 2ecc2f1c..804da7d7 100644 --- a/MinecraftClient/Resources/lang/zh-Hans.ini +++ b/MinecraftClient/Resources/lang/zh-Hans.ini @@ -325,7 +325,7 @@ cmd.inventory.damage=武器伤害值 cmd.inventory.left=左 cmd.inventory.right=右 cmd.inventory.middle=中间 -cmd.inventory.clicking={0}正在点击容器#{2}中的栏位{1} +cmd.inventory.clicking={0}键点击容器#{2}中的栏位{1} cmd.inventory.shiftclick=按住Shift键点击容器#{1}中的栏位{0} cmd.inventory.shiftclick_fail=执行Shift点击失败,这可能是因为该容器类型目前不被支持。 cmd.inventory.no_item=栏位#{0}中没有物品 @@ -548,7 +548,7 @@ bot.autoRelog.disconnect_msg=连接断开,收到消息:{0} bot.autoRelog.reconnect_always=忽略kick消息,仍要重新连接。 bot.autoRelog.reconnect=信息包含 '{0}'。重新连接。 bot.autoRelog.reconnect_ignore=不包含任何已定义关键字的消息,忽略。 -bot.autoRelog.wait=等待{0}秒后重新连接... +bot.autoRelog.wait=等待{0:0.000}秒后重新连接... # AutoRespond bot.autoRespond.loading=正在从'{0}'加载匹配项 diff --git a/MinecraftClient/Resources/lang/zh-Hant.ini b/MinecraftClient/Resources/lang/zh-Hant.ini index 4fcc4163..650711f5 100644 --- a/MinecraftClient/Resources/lang/zh-Hant.ini +++ b/MinecraftClient/Resources/lang/zh-Hant.ini @@ -325,7 +325,7 @@ cmd.inventory.damage=武器傷害值 cmd.inventory.left=左 cmd.inventory.right=右 cmd.inventory.middle=中間 -cmd.inventory.clicking={0}正在點選容器#{2}中的欄位{1} +cmd.inventory.clicking={0}鍵點選容器#{2}中的欄位{1} cmd.inventory.shiftclick=按住Shift鍵點選容器#{1}中的欄位{0} cmd.inventory.shiftclick_fail=執行Shift點選失敗,這可能是因為該容器型別目前不被支援。 cmd.inventory.no_item=欄位#{0}中沒有物品 @@ -548,7 +548,7 @@ bot.autoRelog.disconnect_msg=連線斷開,收到訊息:{0} bot.autoRelog.reconnect_always=忽略kick訊息,仍要重新連線。 bot.autoRelog.reconnect=資訊包含 '{0}'。重新連線。 bot.autoRelog.reconnect_ignore=不包含任何已定義關鍵字的訊息,忽略。 -bot.autoRelog.wait=等待{0}秒後重新連線... +bot.autoRelog.wait=等待{0:0.000}秒後重新連線... # AutoRespond bot.autoRespond.loading=正在從'{0}'載入匹配項 From fcaea59a7aa499b24f98c8de383722ac8381b963 Mon Sep 17 00:00:00 2001 From: breadbyte Date: Thu, 13 Oct 2022 00:02:08 +0800 Subject: [PATCH 2/8] Update builds to skip doc updates (#2258) --- .github/workflows/build-and-release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index f9c97a90..87be70f2 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -12,6 +12,7 @@ env: jobs: build: runs-on: ubuntu-latest + if: ${{ !contains(github.event.head_commit.message, 'README') }} steps: - name: Setup Project Path From aadede5ae2e76c2b1a46da8cce507b931f77ddc4 Mon Sep 17 00:00:00 2001 From: breadbyte Date: Thu, 13 Oct 2022 00:04:13 +0800 Subject: [PATCH 3/8] Update builds to be self-contained (#2221) --- .github/workflows/build-and-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index 87be70f2..a900097b 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -7,7 +7,7 @@ on: env: PROJECT: "MinecraftClient" target-version: "net6.0" - compile-flags: "--no-self-contained -c Release -p:UseAppHost=true -p:IncludeNativeLibrariesForSelfExtract=true -p:DebugType=None" + compile-flags: "--self-contained=true -c Release -p:UseAppHost=true -p:IncludeNativeLibrariesForSelfExtract=true -p:DebugType=None" jobs: build: From 89b7110839033a9bab3e30a3b46f001929b17810 Mon Sep 17 00:00:00 2001 From: BruceChen Date: Thu, 13 Oct 2022 19:34:49 +0800 Subject: [PATCH 4/8] Update Map Bot --- MinecraftClient/ChatBots/Map.cs | 223 ++-- MinecraftClient/Commands/Chunk.cs | 4 +- MinecraftClient/ConsoleColor.cs | 184 +++ MinecraftClient/Program.cs | 31 +- MinecraftClient/Resources/lang/de.ini | 42 +- MinecraftClient/Resources/lang/en.ini | 11 +- MinecraftClient/Resources/lang/fr.ini | 42 +- MinecraftClient/Resources/lang/ru.ini | 42 +- MinecraftClient/Resources/lang/vi.ini | 42 +- MinecraftClient/Resources/lang/zh-Hans.ini | 1333 ++++++++++---------- MinecraftClient/Resources/lang/zh-Hant.ini | 1333 ++++++++++---------- MinecraftClient/Settings.cs | 31 +- README.md | 8 +- 13 files changed, 1882 insertions(+), 1444 deletions(-) create mode 100644 MinecraftClient/ConsoleColor.cs diff --git a/MinecraftClient/ChatBots/Map.cs b/MinecraftClient/ChatBots/Map.cs index c589b6b6..2b994c16 100644 --- a/MinecraftClient/ChatBots/Map.cs +++ b/MinecraftClient/ChatBots/Map.cs @@ -1,11 +1,9 @@ using System; using System.Collections.Generic; -using System.Drawing; using System.Globalization; using System.IO; -using System.Runtime.Versioning; +using System.Text; using MinecraftClient.Mapping; -using MinecraftClient.Protocol.Handlers; using Tomlet.Attributes; namespace MinecraftClient.ChatBots @@ -22,11 +20,11 @@ namespace MinecraftClient.ChatBots public bool Enabled = false; - [TomlInlineComment("$config.ChatBot.Map.Should_Resize$")] - public bool Should_Resize = false; + [TomlInlineComment("$config.ChatBot.Map.Render_In_Console$")] + public bool Render_In_Console = true; - [TomlInlineComment("$config.ChatBot.Map.Resize_To$")] - public int Resize_To = 256; + [TomlInlineComment("$config.ChatBot.Map.Save_To_File$")] + public bool Save_To_File = false; [TomlInlineComment("$config.ChatBot.Map.Auto_Render_On_Update$")] public bool Auto_Render_On_Update = false; @@ -37,11 +35,7 @@ namespace MinecraftClient.ChatBots [TomlInlineComment("$config.ChatBot.Map.Notify_On_First_Update$")] public bool Notify_On_First_Update = true; - public void OnSettingUpdate() - { - if (Resize_To < 128) - Resize_To = 128; - } + public void OnSettingUpdate() { } } private readonly string baseDirectory = @"Rendered_Maps"; @@ -95,31 +89,26 @@ namespace MinecraftClient.ChatBots if (!cachedMaps.ContainsKey(mapId)) return Translations.TryGet("bot.map.cmd.not_found", mapId); - if (OperatingSystem.IsWindows()) + try { - try - { - McMap map = cachedMaps[mapId]; - GenerateMapImage(map); - } - catch (Exception e) - { - LogDebugToConsole(e.StackTrace!); - return Translations.TryGet("bot.map.failed_to_render", mapId); - } - } - else - { - LogToConsoleTranslated("bot.map.windows_only"); - } + McMap map = cachedMaps[mapId]; + if (Config.Save_To_File) + SaveToFile(map); - return ""; + if (Config.Render_In_Console) + RenderInConsole(map); + + return ""; + } + catch (Exception e) + { + LogDebugToConsole(e.StackTrace!); + return Translations.TryGet("bot.map.failed_to_render", mapId); + } } - return Translations.TryGet("bot.map.cmd.invalid_id"); } } - return ""; } @@ -138,8 +127,8 @@ namespace MinecraftClient.ChatBots TrackingPosition = trackingPosition, Locked = locked, MapIcons = icons, - Width = rowsUpdated, - Height = columnsUpdated, + Width = columnsUpdated, + Height = rowsUpdated, X = mapCoulmnX, Z = mapRowZ, Colors = colors, @@ -155,64 +144,132 @@ namespace MinecraftClient.ChatBots } else { - cachedMaps.Remove(mapid); - cachedMaps.Add(mapid, map); + McMap old_map = cachedMaps[mapid]; + lock (old_map) + { + for (int x = 0; x < map.Width; ++x) + for (int y = 0; y < map.Height; ++y) + old_map.Colors![(map.X + x) + (map.Z + y) * old_map.Width] = map.Colors![x + y * map.Width]; + } + map = old_map; } if (Config.Auto_Render_On_Update) { - if (OperatingSystem.IsWindows()) - GenerateMapImage(map); - else - LogToConsoleTranslated("bot.map.windows_only"); + if (Config.Save_To_File) + SaveToFile(map); + + if (Config.Render_In_Console) + RenderInConsole(map); } } - [SupportedOSPlatform("windows")] - private void GenerateMapImage(McMap map) + private void SaveToFile(McMap map) { - string fileName = baseDirectory + "/Map_" + map.MapId + ".jpg"; + string fileName = baseDirectory + Path.DirectorySeparatorChar + "Map_" + map.MapId.ToString().PadLeft(5, '0') + ".bmp"; if (File.Exists(fileName)) File.Delete(fileName); - /** Warning CA1416: Bitmap is only support Windows **/ - /* https://learn.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only */ - Bitmap image = new(map.Width, map.Height); - - for (int x = 0; x < map.Width; ++x) + using FileStream file = File.OpenWrite(fileName); + file.Write(BitConverter.GetBytes((ushort)0x4d42)); // WORD File Header bfType: "BM" + file.Write(BitConverter.GetBytes((uint)(14 + 40 + 3 * map.Width * map.Height))); // DWORD File Header bfSize + file.Write(BitConverter.GetBytes((ushort)0)); // WORD File Header bfReserved1 + file.Write(BitConverter.GetBytes((ushort)0)); // WORD File Header bfReserved2 + file.Write(BitConverter.GetBytes((uint)54)); // DWORD File Header bfOffBits + file.Write(BitConverter.GetBytes((uint)40)); // DWORD Info Header biSize + file.Write(BitConverter.GetBytes((uint)map.Width)); // LONG Info Header biWidth + file.Write(BitConverter.GetBytes((uint)map.Height)); // LONG Info Header biHeight + file.Write(BitConverter.GetBytes((ushort)1)); // WORD Info Header biPlanes + file.Write(BitConverter.GetBytes((ushort)24)); // WORD Info Header biBitCount + file.Write(BitConverter.GetBytes((uint)0x00)); // DWORD Info Header biCompression: BI_RGB + file.Write(BitConverter.GetBytes((uint)0)); // DWORD Info Header biSizeImage + file.Write(BitConverter.GetBytes((uint)0)); // LONG Info Header biXPelsPerMeter + file.Write(BitConverter.GetBytes((uint)0)); // LONG Info Header biYPelsPerMeter + file.Write(BitConverter.GetBytes((uint)0)); // DWORD Info Header biClrUsed + file.Write(BitConverter.GetBytes((uint)0)); // DWORD Info Header biClrImportant + Span pixel = stackalloc byte[3]; + for (int y = map.Height - 1; y >= 0; --y) { - for (int y = 0; y < map.Height; ++y) + for (int x = 0; x < map.Width; ++x) { - byte inputColor = map.Colors![x + y * map.Width]; - ColorRGBA color = MapColors.ColorByteToRGBA(inputColor); - - if (color.Unknown) - { - string hexCode = new DataTypes(GetProtocolVersion()).ByteArrayToString(new byte[] { inputColor }); - LogDebugToConsole("Unknown color encountered: " + inputColor + " (Hex: " + hexCode + "), using: RGB(248, 0, 248)"); - } - - image.SetPixel(x, y, Color.FromArgb(color.A, color.R, color.G, color.B)); + ColorRGBA color = MapColors.ColorByteToRGBA(map.Colors![x + y * map.Width]); + pixel[0] = color.B; pixel[1] = color.G; pixel[2] = color.R; + file.Write(pixel); } } - - // Resize, double the image - - if (Config.Should_Resize) - image = ResizeBitmap(image, Config.Resize_To, Config.Resize_To); - - image.Save(fileName); + file.Close(); LogToConsole(Translations.TryGet("bot.map.rendered", map.MapId, fileName)); } - [SupportedOSPlatform("windows")] - private Bitmap ResizeBitmap(Bitmap sourceBMP, int width, int height) + private void RenderInConsole(McMap map) { - Bitmap result = new(width, height); - using (Graphics g = Graphics.FromImage(result)) - g.DrawImage(sourceBMP, 0, 0, width, height); - return result; + StringBuilder sb = new(); + + int consoleWidth = Math.Max(Console.BufferWidth, Settings.Config.Main.Advanced.MinTerminalWidth) / 2; + int consoleHeight = Math.Max(Console.BufferHeight, Settings.Config.Main.Advanced.MinTerminalHeight) - 1; + + int scaleX = (map.Width + consoleWidth - 1) / consoleWidth; + int scaleY = (map.Height + consoleHeight - 1) / consoleHeight; + int scale = Math.Max(scaleX, scaleY); + if (scale > 1) + sb.AppendLine(Translations.Get("bot.map.scale", map.Width, map.Height, map.Width / scale, map.Height / scale)); + + for (int base_y = 0; base_y < map.Height; base_y += scale) + { + int last_R = -1, last_G = -1, last_B = -1; + for (int base_x = 0; base_x < map.Width; base_x += scale) + { + int RL = 0, GL = 0, BL = 0, RR = 0, GR = 0, BR = 0; + double mid_dx = (double)(scale - 1) / 2; + for (int dy = 0; dy < scale; ++dy) + { + for (int dx = 0; dx < scale; ++dx) + { + int x = Math.Min(base_x + dx, map.Width - 1); + int y = Math.Min(base_y + dy, map.Height - 1); + ColorRGBA color = MapColors.ColorByteToRGBA(map.Colors![x + y * map.Width]); + if (dx <= mid_dx) + { + RL += color.R; GL += color.G; BL += color.B; + } + if (dx >= mid_dx) + { + RR += color.R; GR += color.G; BR += color.B; + } + } + } + + int pixel_cnt = ((scale + 1) / 2) * scale; + RL = (int)Math.Round((double)RL / pixel_cnt); + GL = (int)Math.Round((double)GL / pixel_cnt); + BL = (int)Math.Round((double)BL / pixel_cnt); + RR = (int)Math.Round((double)RR / pixel_cnt); + GR = (int)Math.Round((double)GR / pixel_cnt); + BR = (int)Math.Round((double)BR / pixel_cnt); + + if (RL == last_R && GL == last_G && BL == last_B) + sb.Append(' '); + else + { + sb.Append(ColorHelper.GetColorEscapeCode((byte)RL, (byte)GL, (byte)BL, false)).Append(' '); + last_R = RL; last_G = GL; last_B = BL; + } + + if (RR == last_R && GR == last_G && BR == last_B) + sb.Append(' '); + else + { + sb.Append(ColorHelper.GetColorEscapeCode((byte)RR, (byte)GR, (byte)BR, false)).Append(' '); + last_R = RR; last_G = GR; last_B = BR; + } + } + if (base_y >= map.Height - scale) + sb.Append(ColorHelper.GetResetEscapeCode()); + else + sb.AppendLine(ColorHelper.GetResetEscapeCode()); + } + ConsoleIO.WriteLine(sb.ToString()); } } @@ -231,15 +288,6 @@ namespace MinecraftClient.ChatBots public DateTime LastUpdated { get; set; } } - class ColorRGBA - { - public byte R { get; set; } - public byte G { get; set; } - public byte B { get; set; } - public byte A { get; set; } - public bool Unknown { get; set; } = false; - } - class MapColors { // When colors are updated in a new update, you can get them using the game code: net\minecraft\world\level\material\MaterialColor.java @@ -318,7 +366,7 @@ namespace MinecraftClient.ChatBots // Any new colors that we haven't added will be purple like in the missing CS: Source Texture if (!Colors.ContainsKey(baseColorId)) - return new ColorRGBA { R = 248, G = 0, B = 248, A = 255, Unknown = true }; + return new(248, 0, 248, 255, true); byte shadeId = (byte)(receivedColorId % 4); byte shadeMultiplier = 255; @@ -339,13 +387,12 @@ namespace MinecraftClient.ChatBots break; } - return new ColorRGBA - { - R = (byte)((Colors[baseColorId][0] * shadeMultiplier) / 255), - G = (byte)((Colors[baseColorId][1] * shadeMultiplier) / 255), - B = (byte)((Colors[baseColorId][2] * shadeMultiplier) / 255), - A = 255 - }; + return new( + r: (byte)((Colors[baseColorId][0] * shadeMultiplier) / 255), + g: (byte)((Colors[baseColorId][1] * shadeMultiplier) / 255), + b: (byte)((Colors[baseColorId][2] * shadeMultiplier) / 255), + a: 255 + ); } } } diff --git a/MinecraftClient/Commands/Chunk.cs b/MinecraftClient/Commands/Chunk.cs index 8d606e25..4007d4e2 100644 --- a/MinecraftClient/Commands/Chunk.cs +++ b/MinecraftClient/Commands/Chunk.cs @@ -44,11 +44,11 @@ namespace MinecraftClient.Commands sb.AppendLine(Translations.Get("cmd.chunk.chunk_pos", markChunkX, markChunkZ));; } - int consoleHeight = Math.Max(Console.BufferHeight - 2, 25); + int consoleHeight = Math.Max(Math.Max(Console.BufferHeight, Settings.Config.Main.Advanced.MinTerminalHeight) - 2, 25); if (consoleHeight % 2 == 0) --consoleHeight; - int consoleWidth = Math.Max(Console.BufferWidth / 2, 17); + int consoleWidth = Math.Max(Math.Max(Console.BufferWidth, Settings.Config.Main.Advanced.MinTerminalWidth) / 2, 17); if (consoleWidth % 2 == 0) --consoleWidth; diff --git a/MinecraftClient/ConsoleColor.cs b/MinecraftClient/ConsoleColor.cs new file mode 100644 index 00000000..3f35b304 --- /dev/null +++ b/MinecraftClient/ConsoleColor.cs @@ -0,0 +1,184 @@ +using System; +using static MinecraftClient.Settings.MainConfigHealper.MainConfig.AdvancedConfig; + +namespace MinecraftClient +{ + public static class ColorHelper + { + // ANSI escape code - Colors: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors + + private static readonly Tuple[] ColorMap4 = new Tuple[] + { + new(new(0, 0, 0), 40), + new(new(128, 0, 0), 41), + new(new(0, 128, 0), 42), + new(new(151, 109, 77), 43), + new(new(45, 45, 180), 44), + new(new(128, 0, 128), 45), + new(new(138, 138, 220), 46), + new(new(174, 164, 115), 47), + new(new(96, 96, 96), 100), + new(new(255, 0, 0), 101), + new(new(127, 178, 56), 102), + new(new(213, 201, 140), 103), + new(new(64, 64, 255), 104), + new(new(255, 0, 255), 105), + new(new(0, 255, 255), 106), + new(new(255, 255, 255), 107), + }; + + private static readonly Tuple[] ColorMap8 = new Tuple[] + { + new(new(0, 0, 0), 0), + new(new(128, 0, 0), 1), + new(new(0, 128, 0), 2), + new(new(128, 128, 0), 3), + new(new(0, 0, 128), 4), + new(new(128, 0, 128), 5), + new(new(0, 128, 128), 6), + new(new(192, 192, 192), 7), + new(new(128, 128, 128), 8), + new(new(255, 0, 0), 9), + new(new(0, 255, 0), 10), + new(new(255, 255, 0), 11), + new(new(0, 0, 255), 12), + new(new(255, 0, 255), 13), + new(new(0, 255, 255), 14), + new(new(255, 255, 255), 15), + new(new(8, 8, 8), 232), + new(new(18, 18, 18), 233), + new(new(28, 28, 28), 234), + new(new(38, 38, 38), 235), + new(new(48, 48, 48), 236), + new(new(58, 58, 58), 237), + new(new(68, 68, 68), 238), + new(new(78, 78, 78), 239), + new(new(88, 88, 88), 240), + new(new(98, 98, 98), 241), + new(new(108, 108, 108), 242), + new(new(118, 118, 118), 243), + new(new(128, 128, 128), 244), + new(new(138, 138, 138), 245), + new(new(148, 148, 148), 246), + new(new(158, 158, 158), 247), + new(new(168, 168, 168), 248), + new(new(178, 178, 178), 249), + new(new(188, 188, 188), 250), + new(new(198, 198, 198), 251), + new(new(208, 208, 208), 252), + new(new(218, 218, 218), 253), + new(new(228, 228, 228), 254), + new(new(238, 238, 238), 255), + }; + + private static readonly byte[] ColorMap8_Step = new byte[] { 0, 95, 135, 175, 215, 255 }; + + public static string GetColorEscapeCode(byte R, byte G, byte B, bool foreground) + { + return GetColorEscapeCode(R, G, B, foreground, Settings.Config.Main.Advanced.TerminalColorDepth); + } + + public static string GetColorEscapeCode(byte R, byte G, byte B, bool foreground, TerminalColorDepthType colorDepth) + { + switch (colorDepth) + { + case TerminalColorDepthType.bit_4: + { + ColorRGBA color = new(R, G, B); + int best_idx = 0; + double min_distance = ColorMap4[0].Item1.Distance(color); + for (int i = 1; i < ColorMap4.Length; ++i) + { + double distance = ColorMap4[i].Item1.Distance(color); + if (distance < min_distance) + { + min_distance = distance; + best_idx = i; + } + } + return string.Format("\u001b[{0}m", ColorMap4[best_idx].Item2 - (foreground ? 10 : 0)); + } + + case TerminalColorDepthType.bit_8: + { + ColorRGBA color = new(R, G, B); + int R_idx = (int)(R <= 95 ? Math.Round(R / 95.0) : 1 + Math.Round((R - 95.0) / 40.0)); + int G_idx = (int)(G <= 95 ? Math.Round(G / 95.0) : 1 + Math.Round((G - 95.0) / 40.0)); + int B_idx = (int)(B <= 95 ? Math.Round(B / 95.0) : 1 + Math.Round((B - 95.0) / 40.0)); + + int best_idx = -1; + double min_distance = color.Distance(new ColorRGBA(ColorMap8_Step[R_idx], + ColorMap8_Step[G_idx], + ColorMap8_Step[B_idx])); + for (int i = 0; i < ColorMap8.Length; ++i) + { + double distance = ColorMap8[i].Item1.Distance(color); + if (distance < min_distance) + { + min_distance = distance; + best_idx = i; + } + } + + if (best_idx == -1) + return string.Format("\u001B[{0};5;{1}m", (foreground ? 38 : 48), 16 + (36 * R_idx) + (6 * G_idx) + B_idx); + else + return string.Format("\u001B[{0};5;{1}m", (foreground ? 38 : 48), ColorMap8[best_idx].Item2); + } + + case TerminalColorDepthType.bit_24: + return string.Format("\u001B[{0};2;{1};{2};{3}m", (foreground ? 38 : 48), R, G, B); + + default: + return string.Empty; + } + } + + public static string GetResetEscapeCode() + { + return "\u001b[0m"; + } + } + + public class ColorRGBA + { + public byte R { get; set; } + public byte G { get; set; } + public byte B { get; set; } + public byte A { get; set; } + public bool Unknown { get; set; } = false; + + public double Distance(ColorRGBA color) + { + double r_mean = (double)(this.R + color.R) / 2.0; + double R = this.R - color.R; + double G = this.G - color.G; + double B = this.B - color.B; + return Math.Sqrt((2.0 + r_mean / 256.0) * (R * R) + 4.0 * (G * G) + (2.0 + (255 - r_mean) / 256.0) * (B * B)); + } + public ColorRGBA(byte r, byte g, byte b, byte a, bool unknown) + { + R = r; + G = g; + B = b; + A = a; + Unknown = unknown; + } + + public ColorRGBA(byte r, byte g, byte b, byte a) + { + R = r; + G = g; + B = b; + A = a; + } + + public ColorRGBA(byte r, byte g, byte b) + { + R = r; + G = g; + B = b; + A = 255; + } + } +} diff --git a/MinecraftClient/Program.cs b/MinecraftClient/Program.cs index c0ad8e90..42033a58 100644 --- a/MinecraftClient/Program.cs +++ b/MinecraftClient/Program.cs @@ -352,7 +352,36 @@ namespace MinecraftClient //Test line to troubleshoot invisible colors if (Config.Logging.DebugMessages) { - ConsoleIO.WriteLineFormatted(Translations.Get("debug.color_test", "[0123456789ABCDEF]: [§00§11§22§33§44§55§66§77§88§99§aA§bB§cC§dD§eE§fF§r]")); + ConsoleIO.WriteLineFormatted(Translations.Get("debug.color_test", "[0123456789ABCDEF]: (4bit)[§00§11§22§33§44§55§66§77§88§99§aA§bB§cC§dD§eE§fF§r]")); + Random random = new(); + { // Test 8 bit color + StringBuilder sb = new(); + sb.Append("[0123456789]: (8bit)["); + for (int i = 0; i < 10; ++i) + { + sb.Append(ColorHelper.GetColorEscapeCode((byte)random.Next(255), + (byte)random.Next(255), + (byte)random.Next(255), + true, + TerminalColorDepthType.bit_8)).Append(i); + } + sb.Append(ColorHelper.GetResetEscapeCode()).Append(']'); + ConsoleIO.WriteLine(Translations.Get("debug.color_test", sb.ToString())); + } + { // Test 24 bit color + StringBuilder sb = new(); + sb.Append("[0123456789]: (24bit)["); + for (int i = 0; i < 10; ++i) + { + sb.Append(ColorHelper.GetColorEscapeCode((byte)random.Next(255), + (byte)random.Next(255), + (byte)random.Next(255), + true, + TerminalColorDepthType.bit_24)).Append(i); + } + sb.Append(ColorHelper.GetResetEscapeCode()).Append(']'); + ConsoleIO.WriteLine(Translations.Get("debug.color_test", sb.ToString())); + } } //Load cached sessions from disk if necessary diff --git a/MinecraftClient/Resources/lang/de.ini b/MinecraftClient/Resources/lang/de.ini index 9c5e0da5..c4ee32cc 100644 --- a/MinecraftClient/Resources/lang/de.ini +++ b/MinecraftClient/Resources/lang/de.ini @@ -50,6 +50,8 @@ mcc.realms_available=Du hast Zugang zu den folgenden Realms-Welten mcc.realms_join=Nutze realms:index als Server-IP, um der Realms-Welt beizutreten mcc.generator.generating= mcc.generator.done= +mcc.invaild_config= +mcc.gen_new_config= [debug] # Messages from MCC Debug Mode @@ -237,6 +239,12 @@ cmd.changeSlot.fail=Konnte Slot nicht ändern. # Chunk cmd.chunk.desc= +cmd.chunk.current= +cmd.chunk.marked= +cmd.chunk.chunk_pos= +cmd.chunk.outside= +cmd.chunk.icon= +cmd.chunk.for_debug= # Connect cmd.connect.desc=Verbinde zum angegebenen Server. @@ -487,6 +495,18 @@ bot.autoCraft.debug.no_config=Keine Config-Datei gefunden. Schreibe eine neue... bot.autocraft.invaild_slots= bot.autocraft.invaild_invaild_result= +# AutoDig +bot.autodig.start_delay= +bot.autodig.dig_timeout= +bot.autodig.not_allow= +bot.autodig.cmd= +bot.autodig.available_cmd= +bot.autodig.start= +bot.autodig.stop= +bot.autodig.help.start= +bot.autodig.help.stop= +bot.autodig.help.help= + # AutoDrop bot.autoDrop.cmd=AutoDrop ChatBot Befehl bot.autoDrop.alias=AutoDrop ChatBot Befehl alias @@ -584,6 +604,7 @@ bot.map.received_map= bot.map.rendered= bot.map.failed_to_render= bot.map.list_item= +bot.map.scale= # ReplayCapture bot.replayCapture.cmd=replay Befehl @@ -682,6 +703,9 @@ config.Main.Advanced.timeout= config.Main.Advanced.enable_emoji= config.Main.Advanced.movement_speed= config.Main.Advanced.language.invaild= +config.Main.Advanced.TerminalColorDepth= +config.Main.Advanced.MinTerminalWidth= +config.Main.Advanced.MinTerminalHeight= # Signature config.Signature= @@ -755,6 +779,7 @@ config.ChatBot.Alerts.Log_File= config.ChatBot.AntiAfk= config.ChatBot.AntiAfk.Delay= config.ChatBot.AntiAfk.Command= +config.ChatBot.AntiAfk.Use_Sneak= config.ChatBot.AntiAfk.Use_Terrain_Handling= config.ChatBot.AntiAfk.Walk_Range= config.ChatBot.AntiAfk.Walk_Retries= @@ -776,6 +801,19 @@ config.ChatBot.AutoCraft.CraftingTable= config.ChatBot.AutoCraft.OnFailure= config.ChatBot.AutoCraft.Recipes= +# AutoDig +config.ChatBot.AutoDig= +config.ChatBot.AutoDig.Auto_Tool_Switch= +config.ChatBot.AutoDig.Durability_Limit= +config.ChatBot.AutoDig.Drop_Low_Durability_Tools= +config.ChatBot.AutoDig.Mode= +config.ChatBot.AutoDig.Locations= +config.ChatBot.AutoDig.Location_Order= +config.ChatBot.AutoDig.Auto_Start_Delay= +config.ChatBot.AutoDig.Dig_Timeout= +config.ChatBot.AutoDig.Log_Block_Dig= +config.ChatBot.AutoDig.List_Type= + # ChatBot.AutoDrop config.ChatBot.AutoDrop= config.ChatBot.AutoDrop.Mode= @@ -826,11 +864,11 @@ config.ChatBot.Mailer= # ChatBot.Map config.ChatBot.Map= -config.ChatBot.Map.Should_Resize= -config.ChatBot.Map.Resize_To= config.ChatBot.Map.Auto_Render_On_Update= config.ChatBot.Map.Delete_All_On_Unload= config.ChatBot.Map.Notify_On_First_Update= +config.ChatBot.Map.Render_In_Console= +config.ChatBot.Map.Save_To_File= # ChatBot.PlayerListLogger config.ChatBot.PlayerListLogger= diff --git a/MinecraftClient/Resources/lang/en.ini b/MinecraftClient/Resources/lang/en.ini index 97fece71..8347d5a8 100644 --- a/MinecraftClient/Resources/lang/en.ini +++ b/MinecraftClient/Resources/lang/en.ini @@ -604,7 +604,7 @@ bot.map.received_map=Received a new Map, with Id: {0} bot.map.rendered=Succesfully rendered a map with id '{0}' to: '{1}' bot.map.failed_to_render=Failed to render the map with id: '{0}' bot.map.list_item=- Map id: {0} (Last Updated: {1}) -bot.map.windows_only=Save to file is currently only available for the windows platform. +bot.map.scale=The size of the map is reduced from ({0}x{1}) to ({2}x{3}) due to the size limitation of the current terminal. # ReplayCapture bot.replayCapture.cmd=replay command @@ -703,6 +703,9 @@ config.Main.Advanced.timeout=Customize the TCP connection timeout with the serve config.Main.Advanced.enable_emoji=If turned off, the emoji will be replaced with a simpler character (for /chunk status). config.Main.Advanced.movement_speed=A movement speed higher than 2 may be considered cheating. config.Main.Advanced.language.invaild=The language code is invalid! +config.Main.Advanced.TerminalColorDepth=Use "none", "bit_4", "bit_8" or "bit_24". This can be checked by opening the debug log. +config.Main.Advanced.MinTerminalWidth=The minimum width used when calculating the image size from the width of the terminal. +config.Main.Advanced.MinTerminalHeight=The minimum height to use when calculating the image size from the height of the terminal. # Signature config.Signature=Chat signature related settings (affects minecraft 1.19+) @@ -799,7 +802,7 @@ config.ChatBot.AutoCraft.OnFailure=What to do on crafting failure, "abort" or "w config.ChatBot.AutoCraft.Recipes=Recipes.Name: The name can be whatever you like and it is used to represent the recipe.\n# Recipes.Type: crafting table type: "player" or "table"\n# Recipes.Result: the resulting item\n# Recipes.Slots: All slots, counting from left to right, top to bottom. Please fill in "Null" for empty slots.\n# For the naming of the items, please see:\n# https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Inventory/ItemType.cs # AutoDig -config.ChatBot.AutoDig=Auto-digging blocks.\n# You can use "/digbot start" and "/digbot stop" to control the start and stop of AutoDig.\n# Since MCC does not yet support accurate calculation of the collision volume of blocks, all blocks are considered as complete cubes when obtaining the position of the lookahead.\n# For the naming of the block, please see https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Mapping/Material.cs +config.ChatBot.AutoDig=Auto-digging blocks.\n# You need to enable Terrain Handling to use this bot\n# You can use "/digbot start" and "/digbot stop" to control the start and stop of AutoDig.\n# Since MCC does not yet support accurate calculation of the collision volume of blocks, all blocks are considered as complete cubes when obtaining the position of the lookahead.\n# For the naming of the block, please see https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Mapping/Material.cs config.ChatBot.AutoDig.Auto_Tool_Switch=Automatically switch to the appropriate tool. config.ChatBot.AutoDig.Durability_Limit=Will not use tools with less durability than this. Set to zero to disable this feature. config.ChatBot.AutoDig.Drop_Low_Durability_Tools=Whether to drop the current tool when its durability is too low. @@ -861,8 +864,8 @@ config.ChatBot.Mailer=Relay messages between players and servers, like a mail pl # ChatBot.Map config.ChatBot.Map=Allows you to render maps into .jpg images\n# This is useful for solving captchas which use maps\n# The maps are rendered into Rendered_Maps folder.\n# NOTE:\n# This feature is currently only useful for solving captchas which use maps.\n# If some servers have a very short time for solving captchas, enabe Auto_Render_On_Update and prepare to open the file quickly.\n# On linux you can use FTP to access generated files.\n# In the future it might will be possible to display maps directly in the console with a separate command.\n# /!\ Make sure server rules allow bots to be used on the server, or you risk being punished. -config.ChatBot.Map.Should_Resize=Should the map be resized? (Default one is small 128x128) -config.ChatBot.Map.Resize_To=The size to resize the map to (Note: the bigger it is, the lower the quallity is) +config.ChatBot.Map.Render_In_Console=Whether to render the map in the console. +config.ChatBot.Map.Save_To_File=Whether to store the rendered map as a file. config.ChatBot.Map.Auto_Render_On_Update=Automatically render the map once it is received or updated from/by the server config.ChatBot.Map.Delete_All_On_Unload=Delete all rendered maps on unload/reload (Does not delete the images if you exit the client) config.ChatBot.Map.Notify_On_First_Update=Get a notification when you have gotten a map from the server for the first time diff --git a/MinecraftClient/Resources/lang/fr.ini b/MinecraftClient/Resources/lang/fr.ini index 43197457..a7514037 100644 --- a/MinecraftClient/Resources/lang/fr.ini +++ b/MinecraftClient/Resources/lang/fr.ini @@ -50,6 +50,8 @@ mcc.realms_available=Vous avez accès aux mondes Realms suivants mcc.realms_join=Utilisez realms: comme ip de serveur pour rejoindre un monde Realms mcc.generator.generating= mcc.generator.done= +mcc.invaild_config= +mcc.gen_new_config= [debug] # Messages from MCC Debug Mode @@ -237,6 +239,12 @@ cmd.changeSlot.fail=Le slot n'a pas pu être sélectionné # Chunk cmd.chunk.desc= +cmd.chunk.current= +cmd.chunk.marked= +cmd.chunk.chunk_pos= +cmd.chunk.outside= +cmd.chunk.icon= +cmd.chunk.for_debug= # Connect cmd.connect.desc=Se connecter au serveur spécifié @@ -487,6 +495,18 @@ bot.autoCraft.debug.no_config=Fichier de configuration introuvable. Création d' bot.autocraft.invaild_slots= bot.autocraft.invaild_invaild_result= +# AutoDig +bot.autodig.start_delay= +bot.autodig.dig_timeout= +bot.autodig.not_allow= +bot.autodig.cmd= +bot.autodig.available_cmd= +bot.autodig.start= +bot.autodig.stop= +bot.autodig.help.start= +bot.autodig.help.stop= +bot.autodig.help.help= + # AutoDrop bot.autoDrop.cmd=Commande du ChatBot AutoDrop bot.autoDrop.alias=Alias des commandes du ChatBot AutoDrop @@ -584,6 +604,7 @@ bot.map.received_map= bot.map.rendered= bot.map.failed_to_render= bot.map.list_item= +bot.map.scale= # ReplayCapture bot.replayCapture.cmd=Commande de Replay @@ -682,6 +703,9 @@ config.Main.Advanced.timeout= config.Main.Advanced.enable_emoji= config.Main.Advanced.movement_speed= config.Main.Advanced.language.invaild= +config.Main.Advanced.TerminalColorDepth= +config.Main.Advanced.MinTerminalWidth= +config.Main.Advanced.MinTerminalHeight= # Signature config.Signature= @@ -755,6 +779,7 @@ config.ChatBot.Alerts.Log_File= config.ChatBot.AntiAfk= config.ChatBot.AntiAfk.Delay= config.ChatBot.AntiAfk.Command= +config.ChatBot.AntiAfk.Use_Sneak= config.ChatBot.AntiAfk.Use_Terrain_Handling= config.ChatBot.AntiAfk.Walk_Range= config.ChatBot.AntiAfk.Walk_Retries= @@ -776,6 +801,19 @@ config.ChatBot.AutoCraft.CraftingTable= config.ChatBot.AutoCraft.OnFailure= config.ChatBot.AutoCraft.Recipes= +# AutoDig +config.ChatBot.AutoDig= +config.ChatBot.AutoDig.Auto_Tool_Switch= +config.ChatBot.AutoDig.Durability_Limit= +config.ChatBot.AutoDig.Drop_Low_Durability_Tools= +config.ChatBot.AutoDig.Mode= +config.ChatBot.AutoDig.Locations= +config.ChatBot.AutoDig.Location_Order= +config.ChatBot.AutoDig.Auto_Start_Delay= +config.ChatBot.AutoDig.Dig_Timeout= +config.ChatBot.AutoDig.Log_Block_Dig= +config.ChatBot.AutoDig.List_Type= + # ChatBot.AutoDrop config.ChatBot.AutoDrop= config.ChatBot.AutoDrop.Mode= @@ -826,11 +864,11 @@ config.ChatBot.Mailer= # ChatBot.Map config.ChatBot.Map= -config.ChatBot.Map.Should_Resize= -config.ChatBot.Map.Resize_To= config.ChatBot.Map.Auto_Render_On_Update= config.ChatBot.Map.Delete_All_On_Unload= config.ChatBot.Map.Notify_On_First_Update= +config.ChatBot.Map.Render_In_Console= +config.ChatBot.Map.Save_To_File= # ChatBot.PlayerListLogger config.ChatBot.PlayerListLogger= diff --git a/MinecraftClient/Resources/lang/ru.ini b/MinecraftClient/Resources/lang/ru.ini index cbc0ea5f..818441ec 100644 --- a/MinecraftClient/Resources/lang/ru.ini +++ b/MinecraftClient/Resources/lang/ru.ini @@ -50,6 +50,8 @@ mcc.realms_available=У вас есть доступ к следующим ми mcc.realms_join=Используйте realms:index как IP сервера, чтобы присоединиться к миру Realms mcc.generator.generating= mcc.generator.done= +mcc.invaild_config= +mcc.gen_new_config= [debug] # Messages from MCC Debug Mode @@ -237,6 +239,12 @@ cmd.changeSlot.fail=Не удалось изменить слот # Chunk cmd.chunk.desc= +cmd.chunk.current= +cmd.chunk.marked= +cmd.chunk.chunk_pos= +cmd.chunk.outside= +cmd.chunk.icon= +cmd.chunk.for_debug= # Connect cmd.connect.desc=подключиться к указанному серверу. @@ -487,6 +495,18 @@ bot.autoCraft.debug.no_config=Конфигурация не найдена. За bot.autocraft.invaild_slots= bot.autocraft.invaild_invaild_result= +# AutoDig +bot.autodig.start_delay= +bot.autodig.dig_timeout= +bot.autodig.not_allow= +bot.autodig.cmd= +bot.autodig.available_cmd= +bot.autodig.start= +bot.autodig.stop= +bot.autodig.help.start= +bot.autodig.help.stop= +bot.autodig.help.help= + # AutoDrop bot.autoDrop.cmd=Команда автоудаления ЧатБота bot.autoDrop.alias=Псевдоним команды автоудаления ЧатБота @@ -584,6 +604,7 @@ bot.map.received_map= bot.map.rendered= bot.map.failed_to_render= bot.map.list_item= +bot.map.scale= # ReplayCapture bot.replayCapture.cmd=команда воспроизведения @@ -682,6 +703,9 @@ config.Main.Advanced.timeout= config.Main.Advanced.enable_emoji= config.Main.Advanced.movement_speed= config.Main.Advanced.language.invaild= +config.Main.Advanced.TerminalColorDepth= +config.Main.Advanced.MinTerminalWidth= +config.Main.Advanced.MinTerminalHeight= # Signature config.Signature= @@ -755,6 +779,7 @@ config.ChatBot.Alerts.Log_File= config.ChatBot.AntiAfk= config.ChatBot.AntiAfk.Delay= config.ChatBot.AntiAfk.Command= +config.ChatBot.AntiAfk.Use_Sneak= config.ChatBot.AntiAfk.Use_Terrain_Handling= config.ChatBot.AntiAfk.Walk_Range= config.ChatBot.AntiAfk.Walk_Retries= @@ -776,6 +801,19 @@ config.ChatBot.AutoCraft.CraftingTable= config.ChatBot.AutoCraft.OnFailure= config.ChatBot.AutoCraft.Recipes= +# AutoDig +config.ChatBot.AutoDig= +config.ChatBot.AutoDig.Auto_Tool_Switch= +config.ChatBot.AutoDig.Durability_Limit= +config.ChatBot.AutoDig.Drop_Low_Durability_Tools= +config.ChatBot.AutoDig.Mode= +config.ChatBot.AutoDig.Locations= +config.ChatBot.AutoDig.Location_Order= +config.ChatBot.AutoDig.Auto_Start_Delay= +config.ChatBot.AutoDig.Dig_Timeout= +config.ChatBot.AutoDig.Log_Block_Dig= +config.ChatBot.AutoDig.List_Type= + # ChatBot.AutoDrop config.ChatBot.AutoDrop= config.ChatBot.AutoDrop.Mode= @@ -826,11 +864,11 @@ config.ChatBot.Mailer= # ChatBot.Map config.ChatBot.Map= -config.ChatBot.Map.Should_Resize= -config.ChatBot.Map.Resize_To= config.ChatBot.Map.Auto_Render_On_Update= config.ChatBot.Map.Delete_All_On_Unload= config.ChatBot.Map.Notify_On_First_Update= +config.ChatBot.Map.Render_In_Console= +config.ChatBot.Map.Save_To_File= # ChatBot.PlayerListLogger config.ChatBot.PlayerListLogger= diff --git a/MinecraftClient/Resources/lang/vi.ini b/MinecraftClient/Resources/lang/vi.ini index 8c1748e4..b1da5b23 100644 --- a/MinecraftClient/Resources/lang/vi.ini +++ b/MinecraftClient/Resources/lang/vi.ini @@ -50,6 +50,8 @@ mcc.realms_available=Bạn có quyền tham gia vào những máy chủ Realm n mcc.realms_join=Dùng realm:[thứ tự] để tham gia máy chủ Realm mcc.generator.generating= mcc.generator.done= +mcc.invaild_config= +mcc.gen_new_config= [debug] # Messages from MCC Debug Mode @@ -237,6 +239,12 @@ cmd.changeSlot.fail=Could not change slot # Chunk cmd.chunk.desc= +cmd.chunk.current= +cmd.chunk.marked= +cmd.chunk.chunk_pos= +cmd.chunk.outside= +cmd.chunk.icon= +cmd.chunk.for_debug= # Connect cmd.connect.desc=connect to the specified server. @@ -487,6 +495,18 @@ bot.autoCraft.debug.no_config=No config found. Writing a new one. bot.autocraft.invaild_slots= bot.autocraft.invaild_invaild_result= +# AutoDig +bot.autodig.start_delay= +bot.autodig.dig_timeout= +bot.autodig.not_allow= +bot.autodig.cmd= +bot.autodig.available_cmd= +bot.autodig.start= +bot.autodig.stop= +bot.autodig.help.start= +bot.autodig.help.stop= +bot.autodig.help.help= + # AutoDrop bot.autoDrop.cmd=AutoDrop ChatBot command bot.autoDrop.alias=AutoDrop ChatBot command alias @@ -584,6 +604,7 @@ bot.map.received_map= bot.map.rendered= bot.map.failed_to_render= bot.map.list_item= +bot.map.scale= # ReplayCapture bot.replayCapture.cmd=replay command @@ -682,6 +703,9 @@ config.Main.Advanced.timeout= config.Main.Advanced.enable_emoji= config.Main.Advanced.movement_speed= config.Main.Advanced.language.invaild= +config.Main.Advanced.TerminalColorDepth= +config.Main.Advanced.MinTerminalWidth= +config.Main.Advanced.MinTerminalHeight= # Signature config.Signature= @@ -755,6 +779,7 @@ config.ChatBot.Alerts.Log_File= config.ChatBot.AntiAfk= config.ChatBot.AntiAfk.Delay= config.ChatBot.AntiAfk.Command= +config.ChatBot.AntiAfk.Use_Sneak= config.ChatBot.AntiAfk.Use_Terrain_Handling= config.ChatBot.AntiAfk.Walk_Range= config.ChatBot.AntiAfk.Walk_Retries= @@ -776,6 +801,19 @@ config.ChatBot.AutoCraft.CraftingTable= config.ChatBot.AutoCraft.OnFailure= config.ChatBot.AutoCraft.Recipes= +# AutoDig +config.ChatBot.AutoDig= +config.ChatBot.AutoDig.Auto_Tool_Switch= +config.ChatBot.AutoDig.Durability_Limit= +config.ChatBot.AutoDig.Drop_Low_Durability_Tools= +config.ChatBot.AutoDig.Mode= +config.ChatBot.AutoDig.Locations= +config.ChatBot.AutoDig.Location_Order= +config.ChatBot.AutoDig.Auto_Start_Delay= +config.ChatBot.AutoDig.Dig_Timeout= +config.ChatBot.AutoDig.Log_Block_Dig= +config.ChatBot.AutoDig.List_Type= + # ChatBot.AutoDrop config.ChatBot.AutoDrop= config.ChatBot.AutoDrop.Mode= @@ -826,11 +864,11 @@ config.ChatBot.Mailer= # ChatBot.Map config.ChatBot.Map= -config.ChatBot.Map.Should_Resize= -config.ChatBot.Map.Resize_To= config.ChatBot.Map.Auto_Render_On_Update= config.ChatBot.Map.Delete_All_On_Unload= config.ChatBot.Map.Notify_On_First_Update= +config.ChatBot.Map.Render_In_Console= +config.ChatBot.Map.Save_To_File= # ChatBot.PlayerListLogger config.ChatBot.PlayerListLogger= diff --git a/MinecraftClient/Resources/lang/zh-Hans.ini b/MinecraftClient/Resources/lang/zh-Hans.ini index 804da7d7..5f787397 100644 --- a/MinecraftClient/Resources/lang/zh-Hans.ini +++ b/MinecraftClient/Resources/lang/zh-Hans.ini @@ -1,883 +1,886 @@ [mcc] # Messages from MCC itself -mcc.help_us_translate=帮助我们翻译MCC:{0} -mcc.run_with_default_settings=\nMCC正在使用默认配置运行。 -mcc.settings_generated=§c配置文件 MinecraftClient.ini 已经生成。 -mcc.has_update=§e新版本的MCC已经推出:{0} -mcc.login=账户名: -mcc.login_basic_io=请输入用户名或邮箱。 -mcc.password=密码: -mcc.password_basic_io=请输入用户 {0} 的密码。 -mcc.password_hidden=密码(不会显示):{0} -mcc.offline=§8您正在使用离线模式。 -mcc.session_invalid=§8会话缓存无效或已过期。 -mcc.session_valid=§8{0}的会话缓存仍然有效。 -mcc.profile_key_invalid=§8缓存的聊天签名密钥需要刷新。 -mcc.profile_key_valid=§8{0}的聊天签名密钥缓存仍然有效. -mcc.connecting=正在连接至{0}... -mcc.fetching_key=正在从微软获取聊天签名密钥。 -mcc.ip=服务器IP: -mcc.use_version=§8正在运行Minecraft版本{0} (v{1}协议) -mcc.unknown_version=§8未知或不受支持的Minecraft版本{0}。\n正在切换至自动检测模式。 -mcc.forge=检查服务器是否正在运行Forge... -mcc.forgeforce=正在强制启动Forge支持。 -mcc.resolve=正在解析{0}... -mcc.found=§8已找到服务器{0}:{1},域名:{2} -mcc.not_found=§8无法执行{0}的SRV解析\n{1}:{2} -mcc.retrieve=正在获取服务器信息... -mcc.restart=正在重启Minecraft Console Client... -mcc.restart_delay=等待 {0} 秒后重启... -mcc.server_version=服务器版本: -mcc.disconnected=未连接至任何服务器。输入 '{0}help' 获得帮助。 -mcc.press_exit=或者敲击回车退出Minecraft Console Client。 -mcc.version_supported=该版本受到支持\n正在登录... -mcc.single_cmd=§7已发送命令§8 {0} -mcc.joined=已成功加入服务器。\n输入 '{0}quit' 离开服务器。 -mcc.reconnect=等待5秒 (剩余{0}次尝试)... -mcc.disconnect.lost=失去连接。 -mcc.disconnect.server=从服务器断开连接: -mcc.disconnect.login=连接失败: -mcc.link=链接:{0} -mcc.player_dead_respawn=你死了!1秒后自动重生。 -mcc.player_dead=你死了!输入 '{0}respawn' 重生。 -mcc.server_offline=§8服务器正处于离线模式。 -mcc.session=检查会话... -mcc.session_fail=检查会话失败 -mcc.server_protocol=§8服务器的Minecraft版本:{0} (协议v{1}) -mcc.with_forge=, 带有Forge -mcc.handshake=§8握手成功。 (服务器ID:{0}) -mcc.realms_available==您可以访问以下Realms世界 -mcc.realms_join=请使用"realms:<序号>"作为服务器IP加入Realms世界 -mcc.generator.generating=正在从 {1} 生成 {0} 信息。 -mcc.generator.done=已完成从 {0} 信息生成,使用 {1} -mcc.invaild_config=解析配置文件失败,输入 "{0}new" 以生成一个新的配置。 -mcc.gen_new_config=已生成新的配置文件 "{0}" 。 +mcc.help_us_translate=ǷMCC{0} +mcc.run_with_default_settings=\nMCCʹĬС +mcc.settings_generated=cļ MinecraftClient.ini Ѿɡ +mcc.has_update=e°汾MCCѾƳ{0} +mcc.login=˻ +mcc.login_basic_io=û䡣 +mcc.password=룺 +mcc.password_basic_io=û {0} 롣 +mcc.password_hidden=(ʾ){0} +mcc.offline=8ʹģʽ +mcc.session_invalid=8ỰЧѹڡ +mcc.session_valid=8{0}ĻỰȻЧ +mcc.profile_key_invalid=8ǩԿҪˢ¡ +mcc.profile_key_valid=8{0}ǩԿȻЧ. +mcc.connecting={0}... +mcc.fetching_key=ڴ΢ȡǩԿ +mcc.ip=IP +mcc.use_version=8Minecraft汾{0} (v{1}Э) +mcc.unknown_version=8δֵ֪֧Minecraft汾{0}\nлԶģʽ +mcc.forge=ǷForge... +mcc.forgeforce=ǿForge֧֡ +mcc.resolve=ڽ{0}... +mcc.found=8ҵ{0}:{1}{2} +mcc.not_found=8޷ִ{0}SRV\n{1}{2} +mcc.retrieve=ڻȡϢ... +mcc.restart=Minecraft Console Client... +mcc.restart_delay=ȴ {0} ... +mcc.server_version=汾 +mcc.disconnected=δκη '{0}help' ð +mcc.press_exit=ûس˳Minecraft Console Client +mcc.version_supported=ð汾֧ܵ\nڵ¼... +mcc.single_cmd=7ѷ8 {0} +mcc.joined=ѳɹ\n '{0}quit' 뿪 +mcc.reconnect=ȴ5 (ʣ{0}γ)... +mcc.disconnect.lost=ʧȥӡ +mcc.disconnect.server=ӷϿӣ +mcc.disconnect.login=ʧܣ +mcc.link=ӣ{0} +mcc.player_dead_respawn=ˣ1Զ +mcc.player_dead=ˣ '{0}respawn' +mcc.server_offline=8ģʽ +mcc.session=Ự... +mcc.session_fail=Ựʧ +mcc.server_protocol=8Minecraft汾{0} (Эv{1}) +mcc.with_forge=, Forge +mcc.handshake=8ֳɹ (ID{0}) +mcc.realms_available==ԷRealms +mcc.realms_join=ʹ"realms:<>"ΪIPRealms +mcc.generator.generating=ڴ {1} {0} Ϣ +mcc.generator.done=ɴ {0} Ϣɣʹ {1} +mcc.invaild_config=ļʧܣ "{0}new" һµá +mcc.gen_new_config=µļ "{0}" [debug] # Messages from MCC Debug Mode -debug.color_test=颜色测试:终端应该显示:{0} -debug.session_cache_ok=§8已成功从磁盘中加载会话数据。 -debug.session_cache_fail=§8无法从磁盘加载缓存的会话数据。 -debug.keys_cache_ok=§8已成功从磁盘中加载聊天签名密钥。 -debug.keys_cache_fail=§8无法从磁盘中加载聊天签名密钥。 -debug.session_id=成功!(会话ID:{0}) -debug.crypto=§8密钥和哈希值已生成: -debug.request=§8正在请求{0} +debug.color_test=ɫԣնӦʾ{0} +debug.session_cache_ok=8ѳɹӴмػỰݡ +debug.session_cache_fail=8޷Ӵ̼ػĻỰݡ +debug.keys_cache_ok=8ѳɹӴмǩԿ +debug.keys_cache_fail=8޷ӴмǩԿ +debug.session_id=ɹ(ỰID{0}) +debug.crypto=8Կ͹ϣֵɣ +debug.request=8{0} [error] # Error messages from MCC -error.ping=ping此IP失败。 -error.unsupported=无法连接到服务器:不支持此版本! -error.determine=无法确定服务器版本。 -error.forgeforce=无法为此Minecraft版本强制启动Forge支持! -error.login=登录失败: -error.login.migrated=帐户已迁移,请使用电子邮件作为用户名。 -error.login.server=登录服务器不可用。请稍后再试。 -error.login.blocked=用户名/密码错误、IP被禁用或登录次数过多。 -error.login.response=服务器返回了无效的响应。 -error.login.premium=不是Premium用户。 -error.login.network=网络错误。 -error.login.ssl=SSL错误。 -error.login.unknown=未知错误。 -error.login.cancel=用户取消。 -error.login_failed=无法登录到此服务器。 -error.join=加入服务器时发生错误。 -error.connect=无法连接到此IP。 -error.timeout=连接超时 -error.unexpect_response=§8来自服务器的意外响应(这是Minecraft服务器吗?) -error.invalid_response=§8对握手包的响应无效 -error.invalid_encrypt=§8对StartEncryption数据包的响应无效 -error.version_different=§8服务器报告的版本与手动设置的版本不同。登录可能无法工作。 -error.no_version_report=§8服务器未报告其协议版本,自动检测将不起作用。 -error.connection_timeout=§8尝试连接到此IP时超时。 -error.forge=§8Forge登录握手未成功完成 -error.forge_encrypt=§8Forge StartEncryption握手未成功完成 -error.setting.argument_syntax={0}:无效语法,应为 --argname=value 或 --section.argname=value -error.http_code=§8接收到服务器错误:{0} -error.auth=§8在刷新身份验证时接收到服务器错误:{0} -error.realms.ip_error=无法获取您Realms世界的服务器IP -error.realms.access_denied=此Realms世界不存在或访问被拒绝 -error.realms.server_unavailable=Realms服务器可能需要一些时间来启动。请稍后再试。 -error.realms.server_id=Realms服务器ID无效或未知。 -error.realms.disabled=正在尝试加入Realms世界,但配置中禁用了Realms支持 -error.missing.argument=缺少参数 {0} -error.usage=使用方法: -error.generator.invalid=该生成器命令用法无效! -error.generator.path=提供的数据路径无效! (路径不存在或是输入错误) -error.generator.json=提供的路径必须指向一个.json格式的文件! +error.ping=pingIPʧܡ +error.unsupported=޷ӵִ֧˰汾 +error.determine=޷ȷ汾 +error.forgeforce=޷ΪMinecraft汾ǿForge֧֣ +error.login=¼ʧܣ +error.login.migrated=ʻǨƣʹõʼΪû +error.login.server=¼áԺԡ +error.login.blocked=û/IPû¼ࡣ +error.login.response=ЧӦ +error.login.premium=Premiumû +error.login.network= +error.login.ssl=SSL +error.login.unknown=δ֪ +error.login.cancel=ûȡ +error.login_failed=޷¼˷ +error.join=ʱ +error.connect=޷ӵIP +error.timeout=ӳʱ +error.unexpect_response=8ԷӦMinecraft𣿣 +error.invalid_response=8ְӦЧ +error.invalid_encrypt=8StartEncryptionݰӦЧ +error.version_different=8İ汾ֶõİ汾ͬ¼޷ +error.no_version_report=8δЭ汾Զ⽫á +error.connection_timeout=8ӵIPʱʱ +error.forge=8Forge¼δɹ +error.forge_encrypt=8Forge StartEncryptionδɹ +error.setting.argument_syntax={0}Ч﷨ӦΪ --argname=value --section.argname=value +error.http_code=8յ{0} +error.auth=8ˢ֤ʱյ{0} +error.realms.ip_error=޷ȡRealmsķIP +error.realms.access_denied=Realms粻ڻʱܾ +error.realms.server_unavailable=RealmsҪһЩʱԺԡ +error.realms.server_id=RealmsIDЧδ֪ +error.realms.disabled=ڳԼRealms磬нRealms֧ +error.missing.argument=ȱٲ {0} +error.usage=ʹ÷ +error.generator.invalid=÷Ч +error.generator.path=ṩ·Ч! (·ڻ +error.generator.json=ṩ·ָһ.jsonʽļ! [internal command] # MCC internal help command -icmd.help=help <命令名称> :显示有关命令的简要帮助。 -icmd.unknown=未知命令 '{0}'。请使用 'help' 命令来获取命令列表。 -icmd.list=help <命令名称>。可用命令:{0}。在服务器上获取帮助,请改用 '{1}send /help'。 -icmd.error=OnInternalCommand: 来自{0}的错误{1} +icmd.help=help <> ʾйļҪ +icmd.unknown=δ֪ '{0}'ʹ 'help' ȡб +icmd.list=help <>{0}ڷϻȡ '{1}send /help' +icmd.error=OnInternalCommand: {0}Ĵ{1} [exception] # Exception messages threw by MCC -exception.user_logout=用户发起的注销应该通过调用Disconnect()来完成 -exception.unknown_direction=未知方向 -exception.palette.block=请为此Minecraft版本更新方块类型处理。详细请参考 Material.cs -exception.palette.entity=请为此Minecraft版本更新实体类型处理。详细请参考 EntityType.cs -exception.palette.item=请为此Minecraft版本更新物品类型处理。详细请参考 ItemType.cs -exception.palette.packet=请为此Minecraft版本更新数据包类型调色板。详细请参考 PacketTypePalette.cs -exception.packet_process=无法处理传入的{0}类型的数据包。(数据包ID:{1},协议:{2},登陆阶段:{3},内部异常:{4})。 -exception.version_unsupport=版本{0}的协议未被支持。 -exception.chatbot.init=不应在构造函数中调用ChatBot的方法,因为作为API处理程序的模块尚未初始化。请重写 Initialize() 或 AfterGameJoined() 来执行初始化任务。 -exception.csrunner.invalid_head=提供的脚本没有有效的MCCScript头 +exception.user_logout=ûעӦͨDisconnect() +exception.unknown_direction=δ֪ +exception.palette.block=ΪMinecraft汾·ʹϸο Material.cs +exception.palette.entity=ΪMinecraft汾ʵʹϸο EntityType.cs +exception.palette.item=ΪMinecraft汾Ʒʹϸο ItemType.cs +exception.palette.packet=ΪMinecraft汾ݰ͵ɫ塣ϸο PacketTypePalette.cs +exception.packet_process=޷{0}͵ݰ(ݰID{1}Э飺{2}½׶Σ{3}ڲ쳣{4}) +exception.version_unsupport=汾{0}Эδ֧֡ +exception.chatbot.init=Ӧڹ캯еChatBotķΪΪAPIģδʼд Initialize() AfterGameJoined() ִгʼ +exception.csrunner.invalid_head=ṩĽűûЧMCCScriptͷ [chatbot] # ChatBot API -chatbot.reconnect=[{0}] 断开并重新连接到服务器 +chatbot.reconnect=[{0}] Ͽӵ [filemonitor] # FileMonitor -filemonitor.init=§8[{0}] 正在为文件{1}初始化FileSystemWatcher -filemonitor.fail=§8[{0}] 无法初始化FileSystemWatcher,正在使用轮询重试 +filemonitor.init=8[{0}] Ϊļ{1}ʼFileSystemWatcher +filemonitor.fail=8[{0}] ޷ʼFileSystemWatcherʹѯ [extra] # Inventory, Terrain & Movements, Entity related messages # Terrain & Movements -extra.terrainandmovement_enabled=地形和移动处理现在已启用。 -extra.terrainandmovement_disabled=§c该游戏版本目前还不支持地形和移动处理。 -extra.terrainandmovement_required=请先在配置文件中启用地形和移动处理。 +extra.terrainandmovement_enabled=κƶá +extra.terrainandmovement_disabled=cϷ汾Ŀǰֵ֧κƶ +extra.terrainandmovement_required=ļõκƶ # Inventory -extra.inventory_enabled=库存(物品)处理现在已启用。 -extra.inventory_disabled=§c该MC版本目前未支持处理库存(物品)。 -extra.inventory_required=请先在配置文件中启用"Main.Advanced.inventory_handling"。 -extra.inventory_interact=请使用 /inventory 来与其交互。 -extra.inventory_open=容器# {0}已开启:{1} -extra.inventory_close=容器# {0}已关闭。 +extra.inventory_enabled=(Ʒ)á +extra.inventory_disabled=cMC汾Ŀǰδִ֧(Ʒ) +extra.inventory_required=ļ"Main.Advanced.inventory_handling" +extra.inventory_interact=ʹ /inventory 佻 +extra.inventory_open=# {0}ѿ{1} +extra.inventory_close=# {0}ѹرա # Entity -extra.entity_disabled=§c该MC版本当前还不支持处理实体。 -extra.entity_required=请先在配置文件中启用"Main.Advanced.entity_handling"。 +extra.entity_disabled=cMC汾ǰִ֧ʵ塣 +extra.entity_required=ļ"Main.Advanced.entity_handling" [forge] # Messages from Forge handler -forge.version=§8Forge协议版本:{0} -forge.send_mod=§8向服务器发送伪造的forge模组列表... -forge.accept=§8接受来自的服务器模组列表... -forge.registry=§8已接收的注册表包含{0}个条目 -forge.registry_2=§8已接收注册表{0},包含{1}个条目 -forge.accept_registry=§8接受服务器注册表... -forge.complete=Forge服务器连接完成! -forge.with_mod=§8服务器正在运行Forge,有{0}个模组。 -forge.no_mod=§8正在运行的服务器没有Forge模组。 -forge.mod_list=§8模组列表: +forge.version=8ForgeЭ汾{0} +forge.send_mod=8αforgeģб... +forge.accept=8Եķģб... +forge.registry=8ѽյע{0}Ŀ +forge.registry_2=8ѽע{0}{1}Ŀ +forge.accept_registry=8ܷע... +forge.complete=Forge! +forge.with_mod=8Forge{0}ģ顣 +forge.no_mod=8еķûForgeģ顣 +forge.mod_list=8ģб: # FML2 -forge.fml2.mod=§8收到FM2服务器模组列表 -forge.fml2.mod_send=§8发回FML2客户端的模组列表 -forge.fml2.registry=§8确认FML2服务器注册表:{0} -forge.fml2.config=§8确认FML2服务器配置:{0} -forge.fml2.unknown=§8收到未知的FML2握手信息,编号:{0} -forge.fml2.unknown_channel=§8忽略未知的FML2登录消息通道:{0} +forge.fml2.mod=8յFM2ģб +forge.fml2.mod_send=8FML2ͻ˵ģб +forge.fml2.registry=8ȷFML2ע{0} +forge.fml2.config=8ȷFML2ã{0} +forge.fml2.unknown=8յδ֪FML2Ϣţ{0} +forge.fml2.unknown_channel=8δ֪FML2¼Ϣͨ{0} [cache] # Session Cache -cache.loading=§8加载Minecraft配置文件:{0} -cache.loaded=§8已加载会话:{0}:{1} -cache.converting=§8从磁盘转换会话缓存:{0} -cache.read_fail=§8无法从磁盘读取序列化会话缓存:{0} -cache.malformed=§8从磁盘读取序列化会话缓存时,获取到格式错误的数据:{0} -cache.loading_session=§8从磁盘加载会话缓存:{0} -cache.ignore_string=§8忽略会话令牌字符串'{0}':{1} -cache.ignore_line=§8忽略无效的会话令牌行:{0} -cache.read_fail_plain=§8无法从磁盘读取会话缓存:{0} -cache.saving=§8将会话缓存保存到磁盘 -cache.save_fail=§8无法将会话缓存写入磁盘:{0} +cache.loading=8Minecraftļ{0} +cache.loaded=8ѼػỰ{0}:{1} +cache.converting=8ӴתỰ棺{0} +cache.read_fail=8޷Ӵ̶ȡлỰ棺{0} +cache.malformed=8Ӵ̶ȡлỰʱȡʽݣ{0} +cache.loading_session=8Ӵ̼ػỰ棺{0} +cache.ignore_string=8ԻỰַ'{0}'{1} +cache.ignore_line=8ЧĻỰУ{0} +cache.read_fail_plain=8޷Ӵ̶ȡỰ棺{0} +cache.saving=8Ự汣浽 +cache.save_fail=8޷Ựд̣{0} # Profile Key Cache -cache.loading_keys=§8从磁盘加载聊天签名密钥缓存: {0} -cache.loaded_keys=§8已加载签名密钥,下次刷新于 {0} -cache.ignore_string_keys=§8忽略聊天签名密钥字符串 '{0}':{1} -cache.ignore_line_keys=§8忽略无效的聊天签名密钥行:{0} -cache.read_fail_plain_keys=§8无法从磁盘读取聊天签名密钥缓存:{0} -cache.saving_keys=§8将聊天签名密钥保存到磁盘 -cache.save_fail_keys=§8无法将聊天签名密钥写入磁盘:{0} +cache.loading_keys=8Ӵ̼ǩԿ: {0} +cache.loaded_keys=8ѼǩԿ´ˢ {0} +cache.ignore_string_keys=8ǩԿַ '{0}'{1} +cache.ignore_line_keys=8ЧǩԿУ{0} +cache.read_fail_plain_keys=8޷Ӵ̶ȡǩԿ棺{0} +cache.saving_keys=8ǩԿ浽 +cache.save_fail_keys=8޷ǩԿд̣{0} [proxy] -proxy.connected=§8已连接到代理{0}:{1} +proxy.connected=8ӵ{0}:{1} [chat] # Chat Parser -chat.download=§8正在从Mojang服务器下载语言文件 '{0}.lang'... -chat.request=§8正在请求{0}... -chat.done=§8下载完成。文件另存为 '{0}' -chat.fail=§8下载文件失败。 -chat.from_dir=§8默认为你的Minecraft目录中的en_GB.lang -chat.loaded=§8已加载翻译文件。 -chat.not_found=§8找不到翻译文件:'{0}'\n如果没有此文件,某些信息将无法正确打印。 -chat.message_chain_broken=玩家 {0} 的消息签名链已经被破坏。(签名不在可信) +chat.download=8ڴMojangļ '{0}.lang'... +chat.request=8{0}... +chat.done=8ɡļΪ '{0}' +chat.fail=8ļʧܡ +chat.from_dir=8ĬΪMinecraftĿ¼еen_GB.lang +chat.loaded=8Ѽطļ +chat.not_found=8Ҳļ'{0}'\nûдļijЩϢ޷ȷӡ +chat.message_chain_broken= {0} ϢǩѾƻǩڿţ [general] # General message/information (i.e. Done) -general.done=完成 -general.fail=失败 -general.bot_unload=将会卸载此bot。 -general.available_cmd=可用命令:{0} +general.done= +general.fail=ʧ +general.bot_unload=жشbot +general.available_cmd={0} [cmd] # Commands. Naming style: cmd.. # Animation -cmd.animation.desc=挥动你的手臂。 +cmd.animation.desc=Ӷֱۡ # Bots -cmd.bots.desc=列出全部 ChatBot ,加载或卸载一个 ChatBot。 -cmd.bots.list=已加载的 ChatBot -cmd.bots.notfound=该 ChatBot 并未加载,请检查输入。 -cmd.bots.noloaded=没有 ChatBot 被加载。 -cmd.bots.unloaded=成功卸载 ChatBot:{0} -cmd.bots.unloaded_all=成功卸载所有 ChatBot。 +cmd.bots.desc=гȫ ChatBot ػжһ ChatBot +cmd.bots.list=Ѽص ChatBot +cmd.bots.notfound= ChatBot δأ롣 +cmd.bots.noloaded=û ChatBot ء +cmd.bots.unloaded=ɹж ChatBot{0} +cmd.bots.unloaded_all=ɹж ChatBot # ChangeSlot -cmd.changeSlot.desc=变更快捷栏栏位 -cmd.changeSlot.nan=无法变更栏位:不是数字 -cmd.changeSlot.changed=已变更为栏位{0} -cmd.changeSlot.fail=无法变更栏位 +cmd.changeSlot.desc=λ +cmd.changeSlot.nan=޷λ +cmd.changeSlot.changed=ѱΪλ{0} +cmd.changeSlot.fail=޷λ # Chunk -cmd.chunk.desc=显示区块加载状态。\n如果显示错乱竟在设置中更改 EnableEmoji=false 。 -cmd.chunk.current=当前位置:{0},所在区块:({1}, {2})。 -cmd.chunk.marked=标记的位置: -cmd.chunk.chunk_pos=区块:({0}, {1})。 -cmd.chunk.outside=§x§0由于被标记的区块距离玩家太远,它不会被显示在图中§r -cmd.chunk.icon=玩家:{0},标记的区块:{1},未收到:{2},加载中:{3},已加载:{4} -cmd.chunk.for_debug=§x§0此命令仅用于调试使用,确保你已经了解执行该命令会造成的影响。§r +cmd.chunk.desc=ʾ״̬\nʾҾи EnableEmoji=false +cmd.chunk.current=ǰλã{0}飺({1}, {2}) +cmd.chunk.marked=ǵλã +cmd.chunk.chunk_pos=飺({0}, {1}) +cmd.chunk.outside=x0ڱǵ̫ԶᱻʾͼСr +cmd.chunk.icon=:{0}ǵ:{1}δյ:{2}:{3}Ѽ:{4} +cmd.chunk.for_debug=x0ڵʹãȷѾ˽ִиɵӰ졣r # Connect -cmd.connect.desc=连接到指定的服务器。 -cmd.connect.unknown=未知帐户 '{0}'。 -cmd.connect.invalid_ip=无效的服务器IP '{0}'。 +cmd.connect.desc=ӵָķ +cmd.connect.unknown=δ֪ʻ '{0}' +cmd.connect.invalid_ip=ЧķIP '{0}' # Debug -cmd.debug.desc=切换调试消息。 -cmd.debug.state_on=调试消息现在已打开 -cmd.debug.state_off=调试消息现在已关闭 +cmd.debug.desc=лϢ +cmd.debug.state_on=ϢѴ +cmd.debug.state_off=Ϣѹر # Dig -cmd.dig.desc=试图破坏一个方块 -cmd.dig.too_far=你离这个方块太远了。 -cmd.dig.no_block=这个地方没有方块 (空气) -cmd.dig.dig=尝试挖掘位于({0}, {1}, {2})的方块({3})。 -cmd.dig.fail=无法开始挖掘方块。 +cmd.dig.desc=ͼƻһ +cmd.dig.too_far=̫Զˡ +cmd.dig.no_block=طûз () +cmd.dig.dig=ھλ({0}, {1}, {2})ķ({3}) +cmd.dig.fail=޷ʼھ򷽿顣 # Entitycmd -cmd.entityCmd.attacked=已攻击实体 -cmd.entityCmd.used=已使用实体 -cmd.entityCmd.not_found=找不到实体 +cmd.entityCmd.attacked=ѹʵ +cmd.entityCmd.used=ʹʵ +cmd.entityCmd.not_found=Ҳʵ -cmd.entityCmd.entity=实体 -cmd.entityCmd.entities=实体集 -cmd.entityCmd.nickname=昵称 -cmd.entityCmd.customname=自定义名称 -cmd.entityCmd.latency=延迟 -cmd.entityCmd.item=物品 -cmd.entityCmd.equipment=装备 -cmd.entityCmd.mainhand=主手 -cmd.entityCmd.offhane=副手 -cmd.entityCmd.helmet=头盔 -cmd.entityCmd.chestplate=胸甲 -cmd.entityCmd.leggings=护腿 -cmd.entityCmd.boots=靴子 -cmd.entityCmd.pose=姿势 -cmd.entityCmd.health=生命值 -cmd.entityCmd.distance=距离 -cmd.entityCmd.location=位置 -cmd.entityCmd.type=类型 +cmd.entityCmd.entity=ʵ +cmd.entityCmd.entities=ʵ弯 +cmd.entityCmd.nickname=dz +cmd.entityCmd.customname=Զ +cmd.entityCmd.latency=ӳ +cmd.entityCmd.item=Ʒ +cmd.entityCmd.equipment=װ +cmd.entityCmd.mainhand= +cmd.entityCmd.offhane= +cmd.entityCmd.helmet=ͷ +cmd.entityCmd.chestplate=ؼ +cmd.entityCmd.leggings= +cmd.entityCmd.boots=ѥ +cmd.entityCmd.pose= +cmd.entityCmd.health=ֵ +cmd.entityCmd.distance= +cmd.entityCmd.location=λ +cmd.entityCmd.type= # Exec If -cmd.execif.desc=允许你在某个条件成立时执行一个命令。(你可以使用"MinecraftClient.ini"中的变量和使用"/set"命令定义的变量,以及CSharp表达式)。 -cmd.execif.executed=条件'{0}'满足,已执行命令'{1}',得到结果'{2}'。 -cmd.execif.executed_no_output=条件'{0}'满足,已执行命令'{1}',该命令没有返回任何结果。 -cmd.execif.error_occured=在执行命令 {0} 时出现错误。 -cmd.execif.error=错误:{0} +cmd.execif.desc=ijʱִһ(ʹ"MinecraftClient.ini"еıʹ"/set"ıԼCSharpʽ +cmd.execif.executed='{0}'㣬ִ'{1}'õ'{2}' +cmd.execif.executed_no_output='{0}'㣬ִ'{1}'ûзκν +cmd.execif.error_occured=ִ {0} ʱִ +cmd.execif.error={0} # Exec Multi -cmd.execmulti.desc=依次执行多个命令。 -cmd.execmulti.executed=执行了命令 '{0}' , -cmd.execmulti.result=结果为 '{0}'! -cmd.execmulti.no_result=没有返回结果! +cmd.execmulti.desc=ִж +cmd.execmulti.executed=ִ '{0}' +cmd.execmulti.result=Ϊ '{0}' +cmd.execmulti.no_result=ûзؽ # Exit -cmd.exit.desc=断开与服务器的连接。 +cmd.exit.desc=Ͽӡ # Health -cmd.health.desc=显示生命值和饱食度。 -cmd.health.response=生命值:{0},饱食度:{1},等级:{2},总经验值:{3} +cmd.health.desc=ʾֵͱʳȡ +cmd.health.response=ֵ{0}ʳȣ{1}ȼ{2}ֵܾ{3} # Inventory -cmd.inventory.desc=容器相关命令 -cmd.inventory.creative_done=向容器#{2}请求{0} x{1} -cmd.inventory.creative_delete=请求清除栏位 #{0} -cmd.inventory.creative_fail=请求创造模式操作失败 -cmd.inventory.need_creative=你必须在创造模式 -cmd.inventory.container_not_found=找不到容器,请使用显式ID重试 -cmd.inventory.close=关闭容器 #{0} -cmd.inventory.close_fail=关闭容器失败 #{0} -cmd.inventory.not_exist=容器#{0}不存在 -cmd.inventory.inventory=容器 -cmd.inventory.inventories=容器 -cmd.inventory.inventories_available=可用容器 -cmd.inventory.hotbar=您选择的快捷栏是{0} -cmd.inventory.damage=武器伤害值 -cmd.inventory.left=左 -cmd.inventory.right=右 -cmd.inventory.middle=中间 -cmd.inventory.clicking={0}键点击容器#{2}中的栏位{1} -cmd.inventory.shiftclick=按住Shift键点击容器#{1}中的栏位{0} -cmd.inventory.shiftclick_fail=执行Shift点击失败,这可能是因为该容器类型目前不被支持。 -cmd.inventory.no_item=栏位#{0}中没有物品 -cmd.inventory.drop=从栏位#{0}中丢弃了1个物品 -cmd.inventory.drop_stack=从栏位#{0}中丢弃了所有堆叠的物品 +cmd.inventory.desc= +cmd.inventory.creative_done=#{2}{0} x{1} +cmd.inventory.creative_delete=λ #{0} +cmd.inventory.creative_fail=ģʽʧ +cmd.inventory.need_creative=ڴģʽ +cmd.inventory.container_not_found=ҲʹʽID +cmd.inventory.close=ر #{0} +cmd.inventory.close_fail=رʧ #{0} +cmd.inventory.not_exist=#{0} +cmd.inventory.inventory= +cmd.inventory.inventories= +cmd.inventory.inventories_available= +cmd.inventory.hotbar=ѡĿ{0} +cmd.inventory.damage=˺ֵ +cmd.inventory.left= +cmd.inventory.right= +cmd.inventory.middle=м +cmd.inventory.clicking={0}#{2}еλ{1} +cmd.inventory.shiftclick=סShift#{1}еλ{0} +cmd.inventory.shiftclick_fail=ִShiftʧܣΪĿǰ֧֡ +cmd.inventory.no_item=λ#{0}ûƷ +cmd.inventory.drop=λ#{0}ж1Ʒ +cmd.inventory.drop_stack=λ#{0}жжѵƷ # Inventory Help -cmd.inventory.help.basic=基本用法 -cmd.inventory.help.available=可用操作 -cmd.inventory.help.help={0}\n使用 '/inventory help ' 获取帮助。\n'player' 和 'container' 可以简化为 'p' 和 'c'。\n请注意,'[]' 中的参数是可选的。 -cmd.inventory.help.usage=用法 -cmd.inventory.help.list=列出所有容器。 -cmd.inventory.help.close=关闭打开的容器。 -cmd.inventory.help.click=单击物品。 -cmd.inventory.help.shiftclick=按住Shift键点击一个物品。 -cmd.inventory.help.drop=从容器中丢弃物品。 -cmd.inventory.help.creativegive=在创造模式中给予物品。 -cmd.inventory.help.creativedelete=在创造性模式中清除栏位。 -cmd.inventory.help.inventories=列出所有可用的窗口。 -cmd.inventory.help.search=在打开的所有窗口中搜索物品。 -cmd.inventory.help.unknown=未知操作。 -cmd.inventory.found_items=找到物品 -cmd.inventory.no_found_items=在任何窗口中都没有找到该物品! +cmd.inventory.help.basic=÷ +cmd.inventory.help.available=ò +cmd.inventory.help.help={0}\nʹ '/inventory help ' ȡ\n'player' 'container' ԼΪ 'p' 'c'\nע⣬'[]' еIJǿѡġ +cmd.inventory.help.usage=÷ +cmd.inventory.help.list=г +cmd.inventory.help.close=رմ򿪵 +cmd.inventory.help.click=Ʒ +cmd.inventory.help.shiftclick=סShiftһƷ +cmd.inventory.help.drop=жƷ +cmd.inventory.help.creativegive=ڴģʽиƷ +cmd.inventory.help.creativedelete=ڴģʽλ +cmd.inventory.help.inventories=гпõĴڡ +cmd.inventory.help.search=ڴ򿪵дƷ +cmd.inventory.help.unknown=δ֪ +cmd.inventory.found_items=ҵƷ +cmd.inventory.no_found_items=κδжûҵƷ # Leave bed -cmd.bed.desc=用于右键床开始睡觉或离开正在睡觉的床。 -cmd.bed.leaving=已向服务器发送离开床的数据包。 -cmd.bed.trying_to_use=试图在位于 (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) 上的床上睡觉,结果:{3} -cmd.bed.in=成功地躺在了床上! -cmd.bed.not_in=上床睡觉失败了。(PS: 你必须使用床头对应的坐标) -cmd.bed.not_a_bed=位于 (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) 的方块不是一个床! -cmd.bed.searching=在半径为{0}的范围内寻找床... -cmd.bed.bed_not_found=没有找到床! -cmd.bed.found_a_bed_at=在 (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) 找到了一个床。 -cmd.bed.cant_reach_safely=无法安全地到达床边! -cmd.bed.moving=正在移动到床所在的位置: (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) -cmd.bed.failed_to_reach_in_time=无法在30秒内到达(X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}),放弃本次寻路。 +cmd.bed.desc=Ҽʼ˯뿪˯Ĵ +cmd.bed.leaving=뿪ݰ +cmd.bed.trying_to_use=ͼλ (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) ϵĴ˯{3} +cmd.bed.in=ɹ˴ϣ +cmd.bed.not_in=ϴ˯ʧˡPS: ʹôͷӦ꣩ +cmd.bed.not_a_bed=λ (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) ķ鲻һ +cmd.bed.searching=ڰ뾶Ϊ{0}ķΧѰҴ... +cmd.bed.bed_not_found=ûҵ +cmd.bed.found_a_bed_at= (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) ҵһ +cmd.bed.cant_reach_safely=޷ȫصﴲ! +cmd.bed.moving=ƶڵλã (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) +cmd.bed.failed_to_reach_in_time=޷30ڵ(X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0})Ѱ· # List -cmd.list.desc=获取玩家列表。 -cmd.list.players=玩家列表:{0} +cmd.list.desc=ȡб +cmd.list.players=б{0} # Log -cmd.log.desc=将文本记录到控制台。 +cmd.log.desc=ı¼̨ # Look -cmd.look.desc=查看方向或坐标。 -cmd.look.unknown=未知方向 '{0}'。 -cmd.look.at=当前视角 偏航角:{0} 俯仰角:{1}。 -cmd.look.block=正看向位于 {0} 的方块。 -cmd.look.inspection=与视线相交的第一个方块是 {0} ({1:0}, {2:0}, {3:0}),距离玩家 {4:0.0}({5:0.0})。 -cmd.look.noinspection=在 {0} 米内没有任何方块与视线相交。 +cmd.look.desc=鿴ꡣ +cmd.look.unknown=δ֪ '{0}' +cmd.look.at=ǰӽ ƫǣ{0} ǣ{1} +cmd.look.block=λ {0} ķ顣 +cmd.look.inspection=ཻĵһ {0} ({1:0}, {2:0}, {3:0}) {4:0.0}({5:0.0}) +cmd.look.noinspection= {0} ûκηཻ # Move -cmd.move.desc=移动或开始移动。 -cmd.move.enable=在下次服务器登录、重生或更换世界时启用地形和移动。 -cmd.move.disable=禁用地形和移动。 -cmd.move.moving=移动{0} -cmd.move.dir_fail=不能朝此方向移动。 -cmd.move.walk=移动到{0} -cmd.move.fail=无法计算到达{0}的路径。 -cmd.move.suggestforce=无法计算安全到达{0}的路径. 请使用 -f 参数允许不安全移动。 -cmd.move.gravity.enabled=重力已开启。 -cmd.move.gravity.disabled=重力已关闭。 -cmd.move.chunk_loading_status=区块加载进度:{0:P} - 共{2}个,加载完成了{1}个。 -cmd.move.chunk_not_loaded=目标位置所在的区块还没有被加载。你可以使用"/chunk status {0:0.0} {1:0.0} {2:0.0}"来查看区块的加载状态。 +cmd.move.desc=ƶʼƶ +cmd.move.enable=´η¼ʱõκƶ +cmd.move.disable=õκƶ +cmd.move.moving=ƶ{0} +cmd.move.dir_fail=ܳ˷ƶ +cmd.move.walk=ƶ{0} +cmd.move.fail=޷㵽{0}· +cmd.move.suggestforce=޷㰲ȫ{0}·. ʹ -f ȫƶ +cmd.move.gravity.enabled=ѿ +cmd.move.gravity.disabled=ѹرա +cmd.move.chunk_loading_status=ؽȣ{0:P} - {2}{1} +cmd.move.chunk_not_loaded=Ŀλڵ黹ûбءʹ"/chunk status {0:0.0} {1:0.0} {2:0.0}"鿴ļ״̬ # Reco -cmd.reco.desc=重新启动并重新连接到服务器。 +cmd.reco.desc=ӵ # Reload -cmd.reload.started=重新加载设置中... -cmd.reload.warning1=这条命令不会影响在连接到服务器之前的某些设置。 -cmd.reload.warning2=一些通过命令行参数传递的设置可能会被覆盖! -cmd.reload.warning3=你有可能需要重新连接(/reco)才能使某些设置生效。 -cmd.reload.warning4=由于技术限制,ReplayCapturer 将不会被强制重载! -cmd.reload.finished=重新加载设置完成! -cmd.reload.desc=重新加载MCC的设置。 +cmd.reload.started=¼... +cmd.reload.warning1=Ӱӵ֮ǰijЩá +cmd.reload.warning2=һЩͨвݵÿܻᱻǣ +cmd.reload.warning3=пҪ(/reco)ʹijЩЧ +cmd.reload.warning4=ڼƣReplayCapturer ᱻǿ! +cmd.reload.finished=¼ɣ +cmd.reload.desc=¼MCCá # Respawn -cmd.respawn.desc=如果你死亡了,请用这个来重生。 -cmd.respawn.done=你重生了。 +cmd.respawn.desc=ˣ +cmd.respawn.done=ˡ # Script -cmd.script.desc=运行脚本文件。 +cmd.script.desc=нűļ # Send -cmd.send.desc=发送聊天信息或命令。 +cmd.send.desc=Ϣ # Set -cmd.set.desc=设置自定义 %variable%。 -cmd.set.format=变量名范围必须为 A-Za-z0-9。 +cmd.set.desc=Զ %variable% +cmd.set.format=ΧΪ A-Za-z0-9 # SetRnd -cmd.setrnd.desc=随机为自定义 %变量名% 赋值。 -cmd.setrndnum.format=setrnd 变量名 -7to17 -cmd.setrndstr.format=setrnd 变量名 字符串1 "\"字符串2\" 字符串3" +cmd.setrnd.desc=ΪԶ %% ֵ +cmd.setrndnum.format=setrnd -7to17 +cmd.setrndstr.format=setrnd ַ1 "\"ַ2\" ַ3" # Sneak -cmd.sneak.desc=切换到潜行 -cmd.sneak.on=现在你在潜行状态。 -cmd.sneak.off=你不在潜行状态了。 +cmd.sneak.desc=лDZ +cmd.sneak.on=DZ״̬ +cmd.sneak.off=㲻DZ״̬ˡ # DropItem -cmd.dropItem.desc=丢弃玩家容器中的指定类型物品或打开的容器 -cmd.dropItem.dropped=已从容器#{1}中丢弃所有{0} -cmd.dropItem.unknown_item=未知物品:{0} +cmd.dropItem.desc=еָƷ򿪵 +cmd.dropItem.dropped=Ѵ#{1}ж{0} +cmd.dropItem.unknown_item=δ֪Ʒ{0} # Tps -cmd.tps.desc=显示服务器当前tps (tick per second)。(可能不精确) -cmd.tps.current=当前TPS +cmd.tps.desc=ʾǰtps (tick per second)ܲȷ +cmd.tps.current=ǰTPS # Useblock -cmd.useblock.desc=放置一个方块或打开箱子 -cmd.useblock.use=使用位于 ({0:0.0}, {1:0.0}, {2:0.0}) 的 {3}。 +cmd.useblock.desc=һ +cmd.useblock.use=ʹλ ({0:0.0}, {1:0.0}, {2:0.0}) {3} # Useitem -cmd.useitem.desc=使用(左键单击)手上的物品 -cmd.useitem.use=使用了一个物品。 +cmd.useitem.desc=ʹãϵƷ +cmd.useitem.use=ʹһƷ [bot] # ChatBots. Naming style: bot.. # Alerts -bot.alerts.start_rain=§c天气变化:开始下雨了。§r -bot.alerts.end_rain=§c天气变化:雨停了。§r -bot.alerts.start_thunderstorm=§c天气变化:现在是雷雨天。§r -bot.alerts.end_thunderstorm=§c天气变化:现在不再是雷雨天了。§r +bot.alerts.start_rain=c仯ʼˡr +bot.alerts.end_rain=c仯ͣˡr +bot.alerts.start_thunderstorm=c仯졣r +bot.alerts.end_thunderstorm=c仯ڲˡr # Anti AFK -bot.antiafk.not_using_terrain_handling=当前未启用地形处理,如果你想使用相关的特性,请在设置中启用它。当前将继续使用替代方法运行(定时发送命令)。 -bot.antiafk.swapping=最短时间大于最长时间,已将它们交换。 -bot.antiafk.invalid_walk_range=当前提供的行走范围无效,它必须是一个大于0的正整数,将使用默认值5! +bot.antiafk.not_using_terrain_handling=ǰδõδʹصԣǰʹУʱ +bot.antiafk.swapping=ʱʱ䣬ѽǽ +bot.antiafk.invalid_walk_range=ǰṩ߷ΧЧһ0ʹĬֵ5! # AutoAttack -bot.autoAttack.invalidcooldown=攻击冷却时间值不能小于0,已使用自动作为默认值 +bot.autoAttack.invalidcooldown=ȴʱֵС0ʹԶΪĬֵ # AutoCraft -bot.autoCraft.cmd=自动制作ChatBot命令 -bot.autoCraft.alias=自动制作ChatBot命令的别名 -bot.autoCraft.cmd.list=已加载{0}个配方:{1} -bot.autoCraft.cmd.resetcfg=将配置重置为默认值 -bot.autoCraft.recipe_not_exist=指定的配方名称不存在。请检查配置文件。 -bot.autoCraft.no_recipe_name=请指定要制作的配方名称。 -bot.autoCraft.stop=AutoCraft已停止 -bot.autoCraft.available_cmd=可用命令:{0}。可使用 /autocraft help <命令名> 了解更多信息。您可以使用 /ac 作为命令别名。 -bot.autoCraft.help.load=加载配置文件。 -bot.autoCraft.help.list=列出可用配方。 -bot.autoCraft.help.reload=重新加载配置文件。 -bot.autoCraft.help.resetcfg=将默认示例配置写入默认位置。 -bot.autoCraft.help.start=开始制作。用法:/autocraft start <配方名称> -bot.autoCraft.help.stop=停止当前正在进行的制作过程 -bot.autoCraft.help.help=获取命令描述。用法:/autocraft help <命令名> -bot.autoCraft.loaded=已成功加载 -bot.autoCraft.start=AutoCraft启动中:{0} -bot.autoCraft.start_fail=无法启动AutoCraft。请检查用于制作{0}的可用材料 -bot.autoCraft.table_not_found=找不到工作台 -bot.autoCraft.close_inventory=容器#{0}被AutoCraft关闭 -bot.autoCraft.missing_material=缺失材料:{0} -bot.autoCraft.aborted=制作被终止!请检查可用材料。 -bot.autoCraft.craft_fail=制作失败!等待更多材料 -bot.autoCraft.timeout=动作超时!原因:{0} -bot.autoCraft.error.config=分析配置时出错:{0} -bot.autoCraft.exception.name_miss=解析配方时缺少配方名称 -bot.autoCraft.exception.duplicate=指定了重复的配方名称:{0} -bot.autoCraft.debug.no_config=找不到配置。请新建一个。 -bot.autocraft.invaild_slots=配方的物品数量不匹配,已自动调整。 -bot.autocraft.invaild_invaild_result=无效的输出物品! +bot.autoCraft.cmd=ԶChatBot +bot.autoCraft.alias=ԶChatBotı +bot.autoCraft.cmd.list=Ѽ{0}䷽{1} +bot.autoCraft.cmd.resetcfg=ΪĬֵ +bot.autoCraft.recipe_not_exist=ָ䷽Ʋڡļ +bot.autoCraft.no_recipe_name=ָҪ䷽ơ +bot.autoCraft.stop=AutoCraftֹͣ +bot.autoCraft.available_cmd={0}ʹ /autocraft help <> ˽Ϣʹ /ac Ϊ +bot.autoCraft.help.load=ļ +bot.autoCraft.help.list=г䷽ +bot.autoCraft.help.reload=¼ļ +bot.autoCraft.help.resetcfg=ĬʾдĬλá +bot.autoCraft.help.start=ʼ÷/autocraft start <䷽> +bot.autoCraft.help.stop=ֹͣǰڽе +bot.autoCraft.help.help=ȡ÷/autocraft help <> +bot.autoCraft.loaded=ѳɹ +bot.autoCraft.start=AutoCraftУ{0} +bot.autoCraft.start_fail=޷AutoCraft{0}Ŀò +bot.autoCraft.table_not_found=Ҳ̨ +bot.autoCraft.close_inventory=#{0}AutoCraftر +bot.autoCraft.missing_material=ȱʧϣ{0} +bot.autoCraft.aborted=ֹòϡ +bot.autoCraft.craft_fail=ʧܣȴ +bot.autoCraft.timeout=ʱԭ{0} +bot.autoCraft.error.config=ʱ{0} +bot.autoCraft.exception.name_miss=䷽ʱȱ䷽ +bot.autoCraft.exception.duplicate=ָظ䷽ƣ{0} +bot.autoCraft.debug.no_config=Ҳá½һ +bot.autocraft.invaild_slots=䷽Ʒƥ䣬Զ +bot.autocraft.invaild_invaild_result=ЧƷ # AutoDig -bot.autodig.start_delay=将在 {0:0.0} 秒后开始自动挖掘。 -bot.autodig.dig_timeout=挖掘方块超时,重试。 -bot.autodig.not_allow=当前所看向的方块不在允许挖掘列表中。 -bot.autodig.cmd=自动挖掘 ChatBot 命令 -bot.autodig.available_cmd=可用命令:{0}。可使用 /digbot help <命令名> 了解更多信息。 -bot.autodig.start=开始自动挖掘。 -bot.autodig.stop=停止自动挖掘。 -bot.autodig.help.start=开始运行自动挖掘。 -bot.autodig.help.stop=停止运行自动挖掘。 -bot.autodig.help.help=获取命令描述。用法:/digbot help <命令名> +bot.autodig.start_delay= {0:0.0} ʼԶھ +bot.autodig.dig_timeout=ھ򷽿鳬ʱԡ +bot.autodig.not_allow=ǰķ鲻ھбС +bot.autodig.cmd=Զھ ChatBot +bot.autodig.available_cmd={0}ʹ /digbot help <> ˽Ϣ +bot.autodig.start=ʼԶھ +bot.autodig.stop=ֹͣԶھ +bot.autodig.help.start=ʼԶھ +bot.autodig.help.stop=ֹͣԶھ +bot.autodig.help.help=ȡ÷/digbot help <> # AutoDrop -bot.autoDrop.cmd=AutoDrop ChatBot命令 -bot.autoDrop.alias=AutoDrop ChatBot命令别名 -bot.autoDrop.on=已启用AutoDrop -bot.autoDrop.off=已禁用AutoDrop -bot.autoDrop.added=已添加物品{0} -bot.autoDrop.incorrect_name=物品名称不正确:{0}。请再试一次。 -bot.autoDrop.removed=已删除物品{0} -bot.autoDrop.not_in_list=物品不在列表中 -bot.autoDrop.no_item=列表中没有物品 -bot.autoDrop.list=列表中总计{0}个物品:\n {1} -bot.autoDrop.switched= 切换到{0}模式。 -bot.autoDrop.unknown_mode=未知模式。可用的模式:Include, Exclude, Everything -bot.autoDrop.no_mode=无法从配置中读取丢弃模式(drop mode)。使用Include模式。 -bot.autoDrop.no_inventory=找不到容器{0}! +bot.autoDrop.cmd=AutoDrop ChatBot +bot.autoDrop.alias=AutoDrop ChatBot +bot.autoDrop.on=AutoDrop +bot.autoDrop.off=ѽAutoDrop +bot.autoDrop.added=Ʒ{0} +bot.autoDrop.incorrect_name=ƷƲȷ{0}һΡ +bot.autoDrop.removed=ɾƷ{0} +bot.autoDrop.not_in_list=Ʒб +bot.autoDrop.no_item=бûƷ +bot.autoDrop.list=бܼ{0}Ʒ\n {1} +bot.autoDrop.switched= л{0}ģʽ +bot.autoDrop.unknown_mode=δ֪ģʽõģʽInclude, Exclude, Everything +bot.autoDrop.no_mode=޷жȡģʽdrop modeʹIncludeģʽ +bot.autoDrop.no_inventory=Ҳ{0}! # AutoFish -bot.autoFish.no_inv_handle=未启用库存(物品)处理。将不支持检查鱼竿耐久度都和自动切换鱼竿。 -bot.autoFish.start=将在 {0:0.0} 秒后自动开始钓鱼。 -bot.autoFish.throw=抛竿成功。 -bot.autoFish.caught=钓到了一条鱼!(总计 {0} 条) -bot.autoFish.caught_at=在 ({0:0.0},{1:0.0},{2:0.0}) 掉到了一条鱼!(总计 {0} 条) -bot.autoFish.no_rod=没有可使用的钓鱼竿了。也许是用坏了或耐久度过低? -bot.autoFish.despawn=鱼钩消失,将会重新抛竿。 -bot.autoFish.fishing_timeout=钓鱼超时,将于几秒钟后重新抛竿。 -bot.autoFish.cast_timeout=抛竿超时,将在等待一段时间后重试。(超时时间延长至 {0:0.0} 秒) -bot.autoFish.update_lookat=更新当前朝向 偏航角(yaw) = {0:0.00}, 俯仰角(pitch) = {1:0.00}。 -bot.autoFish.switch=切换到位于背包 {0} 位置的鱼竿,剩余耐用 {1}/64。 +bot.autoFish.no_inv_handle=δÿ(Ʒ)ּ֧;öȶԶл͡ +bot.autoFish.start= {0:0.0} Զʼ㡣 +bot.autoFish.throw=׸ͳɹ +bot.autoFish.caught=һ!ܼ {0} +bot.autoFish.caught_at= ({0:0.0},{1:0.0},{2:0.0}) һ㣡ܼ {0} +bot.autoFish.no_rod=ûпʹõĵˡҲû˻;öȹͣ +bot.autoFish.despawn=㹳ʧ׸͡ +bot.autoFish.fishing_timeout=㳬ʱڼӺ׸͡ +bot.autoFish.cast_timeout=׸ͳʱڵȴһʱԡʱʱӳ {0:0.0} 룩 +bot.autoFish.update_lookat=µǰ ƫ(yaw) = {0:0.00}, (pitch) = {1:0.00} +bot.autoFish.switch=лλڱ {0} λõͣʣ {1}/64 # AutoRelog -bot.autoRelog.launch=已启动,尝试了{0}次重新连接 -bot.autoRelog.no_kick_msg=在没有kick消息文件的情况下初始化 -bot.autoRelog.loading=从文件{0}加载消息 -bot.autoRelog.loaded=已加载消息:{0} -bot.autoRelog.not_found=找不到文件或目录:{0} -bot.autoRelog.curr_dir=当前目录为:{0} -bot.autoRelog.ignore_user_logout=由用户或MCC bot启动的断开连接。忽略。 -bot.autoRelog.disconnect_msg=连接断开,收到消息:{0} -bot.autoRelog.reconnect_always=忽略kick消息,仍要重新连接。 -bot.autoRelog.reconnect=信息包含 '{0}'。重新连接。 -bot.autoRelog.reconnect_ignore=不包含任何已定义关键字的消息,忽略。 -bot.autoRelog.wait=等待{0:0.000}秒后重新连接... +bot.autoRelog.launch={0} +bot.autoRelog.no_kick_msg=ûkickϢļ³ʼ +bot.autoRelog.loading=ļ{0}Ϣ +bot.autoRelog.loaded=ѼϢ{0} +bot.autoRelog.not_found=ҲļĿ¼{0} +bot.autoRelog.curr_dir=ǰĿ¼Ϊ{0} +bot.autoRelog.ignore_user_logout=ûMCC botĶϿӡԡ +bot.autoRelog.disconnect_msg=ӶϿյϢ{0} +bot.autoRelog.reconnect_always=kickϢҪӡ +bot.autoRelog.reconnect=Ϣ '{0}'ӡ +bot.autoRelog.reconnect_ignore=κѶؼֵϢԡ +bot.autoRelog.wait=ȴ{0:0.000}... # AutoRespond -bot.autoRespond.loading=正在从'{0}'加载匹配项 -bot.autoRespond.file_not_found=找不到文件或目录: '{0}' -bot.autoRespond.loaded_match=加载匹配项:\n{0} -bot.autoRespond.no_trigger=这个匹配永远不会触发:\n{0} -bot.autoRespond.no_action=匹配没有对应操作:\n{0} -bot.autoRespond.match_run=进行操作:{0} +bot.autoRespond.loading=ڴ'{0}'ƥ +bot.autoRespond.file_not_found=ҲļĿ¼ '{0}' +bot.autoRespond.loaded_match=ƥ\n{0} +bot.autoRespond.no_trigger=ƥԶᴥ\n{0} +bot.autoRespond.no_action=ƥûжӦ:\n{0} +bot.autoRespond.match_run=в{0} bot.autoRespond.match=match: {0}\nregex: {1}\naction: {2}\nactionPrivate: {3}\nactionOther: {4}\nownersOnly: {5}\ncooldown: {6} # ChatLog -bot.chatLog.invalid_file=路径'{0}'包含无效字符。 +bot.chatLog.invalid_file=·'{0}'Чַ # Mailer -bot.mailer.init=使用设置初始化Mailer: -bot.mailer.init.db= - 数据库文件:{0} -bot.mailer.init.ignore= - 忽略列表:{0} -bot.mailer.init.public= - 公开交互:{0} -bot.mailer.init.max_mails= - 每位玩家最多邮件数:{0} -bot.mailer.init.db_size= - 最大数据库大小:{0} -bot.mailer.init.mail_retention= - 邮件保留天数:{0} +bot.mailer.init=ʹóʼMailer +bot.mailer.init.db= - ݿļ{0} +bot.mailer.init.ignore= - б{0} +bot.mailer.init.public= - {0} +bot.mailer.init.max_mails= - ÿλʼ{0} +bot.mailer.init.db_size= - ݿС{0} +bot.mailer.init.mail_retention= - ʼ{0} -bot.mailer.init_fail.db_size=无法启用Mailer:最大数据库大小必须大于0。请检查设置。 -bot.mailer.init_fail.max_mails=无法启用Mailer:每个玩家的最大邮件数必须大于0。请检查设置。 -bot.mailer.init_fail.mail_retention=无法启用Mailer:邮件保留天数必须大于0。请检查设置。 +bot.mailer.init_fail.db_size=޷MailerݿС0á +bot.mailer.init_fail.max_mails=޷Mailerÿҵʼ0á +bot.mailer.init_fail.mail_retention=޷Mailerʼ0á -bot.mailer.create.db=创建新数据库文件:{0} -bot.mailer.create.ignore=创建新忽略列表:{0} -bot.mailer.load.db=加载数据库文件:{0} -bot.mailer.load.ignore=加载忽略列表: +bot.mailer.create.db=ݿļ{0} +bot.mailer.create.ignore=ºб{0} +bot.mailer.load.db=ݿļ{0} +bot.mailer.load.ignore=غб -bot.mailer.cmd=mailer 命令 +bot.mailer.cmd=mailer -bot.mailer.saving=正在保存邮件:{0} -bot.mailer.user_ignored={0}已被忽略! -bot.mailer.process_mails=正在查找要发送的邮件 @ {0} -bot.mailer.delivered=已发送:{0} +bot.mailer.saving=ڱʼ{0} +bot.mailer.user_ignored={0}ѱ! +bot.mailer.process_mails=ڲҪ͵ʼ @ {0} +bot.mailer.delivered=ѷͣ{0} -bot.mailer.cmd.getmails=--- 数据库中的邮件 ---\n{0} -bot.mailer.cmd.getignored=--- 忽略列表 ---\n{0} -bot.mailer.cmd.ignore.added=添加{0}到忽略列表! -bot.mailer.cmd.ignore.removed={0}已从忽略列表中删除! -bot.mailer.cmd.ignore.invalid=丢失或无效的名称。用法:{0}<用户名> -bot.mailer.cmd.help=查看用法 +bot.mailer.cmd.getmails=--- ݿеʼ ---\n{0} +bot.mailer.cmd.getignored=--- б ---\n{0} +bot.mailer.cmd.ignore.added={0}б +bot.mailer.cmd.ignore.removed={0}ѴӺбɾ +bot.mailer.cmd.ignore.invalid=ʧЧơ÷{0}<û> +bot.mailer.cmd.help=鿴÷ # Maps -bot.map.cmd.desc=渲染物品形式的地图 -bot.map.cmd.not_found=没有找到编号为 '{0}' 的地图! -bot.map.cmd.invalid_id=无效的地图编号,必须是一个数字。 -bot.map.received=从服务器接收到的地图有: -bot.map.no_maps=没有收到过地图! -bot.map.received_map=收到一个编号为 {0} 的新地图。 -bot.map.rendered=成功接收到地图 '{0}' ,保存为 '{1}' -bot.map.failed_to_render=无法渲染编号为 '{0}' 的地图。 -bot.map.list_item=- 地图编号:{0}(最近更新于:{1}) -bot.map.windows_only=保存地图到文件功能目前仅可用于Windows平台。 +bot.map.cmd.desc=ȾƷʽĵͼ +bot.map.cmd.not_found=ûҵΪ '{0}' ĵͼ +bot.map.cmd.invalid_id=Чĵͼţһ֡ +bot.map.received=ӷյĵͼУ +bot.map.no_maps=ûյͼ +bot.map.received_map=յһΪ {0} µͼ +bot.map.rendered=ɹյͼ '{0}' Ϊ '{1}' +bot.map.failed_to_render=޷ȾΪ '{0}' ĵͼ +bot.map.list_item=- ͼţ{0}ڣ{1} +bot.map.scale=ڵǰն˳ߴƣͼС ({0}x{1}) СΪ ({2}x{3}) # ReplayCapture -bot.replayCapture.cmd=replay 命令 -bot.replayCapture.created=已创建重播文件。 -bot.replayCapture.stopped=录制已停止。 -bot.replayCapture.restart=录制已停止。请重新启动程序以进行另一段录制。 +bot.replayCapture.cmd=replay +bot.replayCapture.created=Ѵزļ +bot.replayCapture.stopped=¼ֹͣ +bot.replayCapture.restart=¼ֹͣԽһ¼ơ # Follow player -cmd.follow.desc=让机器人跟随指定的玩家 -cmd.follow.usage=follow [-f] (使用 -f 允许机器人途径不安全的地方) -cmd.follow.already_stopped=已经停止过了 -cmd.follow.stopping=已停止! -cmd.follow.invalid_name=提供的玩家名无效! -cmd.follow.invalid_player=指定的玩家没有上线或距离太远! -cmd.follow.cant_reach_player=无法寻路到该玩家,有可能他在没有加载的区块中,或是距离太远,也有可能是间隙或水体等障碍使机器人无法到达。 -cmd.follow.already_following=已经在跟随 {0} 了! -cmd.follow.switched=切换为跟随 {0}! -cmd.follow.started=开始跟随 {0}! -cmd.follow.unsafe_enabled=启用了允许途径不安全位置(注意:机器人可能会受伤或死亡!) -cmd.follow.note=注意:此机器人的速度很慢,你需要慢慢地走,而且要保持很近的距离,这样它才能跟上,有点像拿着食物让动物跟着你。这是由于寻路算法的限制,我们正在努力改进它。 -cmd.follow.player_came_to_the_range=玩家 {0} 回到了可寻路范围之内! -cmd.follow.resuming=继续跟随! -cmd.follow.player_left_the_range=玩家 {0} 离开了可寻路范围! -cmd.follow.pausing=已暂停! -cmd.follow.player_left=玩家 {0} 离开了服务器! -cmd.follow.stopping=已停止! +cmd.follow.desc=û˸ָ +cmd.follow.usage=follow [-f] (ʹ -f ;ȫĵط) +cmd.follow.already_stopped=Ѿֹͣ +cmd.follow.stopping=ֹͣ +cmd.follow.invalid_name=ṩЧ +cmd.follow.invalid_player=ָû߻̫Զ +cmd.follow.cant_reach_player=޷Ѱ·ңпûмصУǾ̫ԶҲпǼ϶ˮϰʹ޷ +cmd.follow.already_following=Ѿڸ {0} ˣ +cmd.follow.switched=лΪ {0} +cmd.follow.started=ʼ {0} +cmd.follow.unsafe_enabled=;ȫλãע⣺˿ܻ˻ +cmd.follow.note=ע⣺˻˵ٶȺҪߣҪֺܽľ룬ܸϣеʳö㡣Ѱ·㷨ƣŬĽ +cmd.follow.player_came_to_the_range= {0} ص˿Ѱ·Χ֮ڣ +cmd.follow.resuming=棡 +cmd.follow.player_left_the_range= {0} 뿪˿Ѱ·Χ +cmd.follow.pausing=ͣ +cmd.follow.player_left= {0} 뿪˷ +cmd.follow.stopping=ֹͣ # Script -bot.script.not_found=§8[MCC] [{0}] 找不到脚本文件:{1} -bot.script.file_not_found=找不到文件:'{0}' -bot.script.fail=脚本'{0}'运行失败 ({1})。 -bot.script.pm.loaded=脚本'{0}'加载。 +bot.script.not_found=8[MCC] [{0}] Ҳűļ{1} +bot.script.file_not_found=Ҳļ'{0}' +bot.script.fail=ű'{0}'ʧ ({1}) +bot.script.pm.loaded=ű'{0}'ء # ScriptScheduler -bot.scriptScheduler.loaded_task=已加载任务:\n{0} -bot.scriptScheduler.no_trigger=这个任务永远不会触发:\n{0} -bot.scriptScheduler.no_action=任务没有对应操作:\n{0} -bot.scriptScheduler.running_time=时间 / 运行中的操作:{0} -bot.scriptScheduler.running_inverval=间隔 / 运行中的操作:{0} -bot.scriptScheduler.running_login=登录 / 运行中的操作:{0} +bot.scriptScheduler.loaded_task=Ѽ\n{0} +bot.scriptScheduler.no_trigger=Զᴥ\n{0} +bot.scriptScheduler.no_action=ûжӦ\n{0} +bot.scriptScheduler.running_time=ʱ / еIJ{0} +bot.scriptScheduler.running_inverval= / еIJ{0} +bot.scriptScheduler.running_login=¼ / еIJ{0} bot.scriptScheduler.task=triggeronfirstlogin: {0}\n triggeronlogin: {1}\n triggerontime: {2}\n triggeroninterval: {3}\n timevalue: {4}\n timeinterval: {5}\n action: {6} # TestBot -bot.testBot.told=Bot:{0}对我说:{1} -bot.testBot.said=Bot:{0}说:{1} +bot.testBot.told=Bot{0}˵{1} +bot.testBot.said=Bot{0}˵{1} [config] -config.load=已从 {0} 加载设置。 -config.load.fail=§c加载设置时出错:§r -config.write.fail=§保存备份文件({0})时出错:§r -config.backup.fail=§c写入设置文件({0})时出错:§r -config.saving=§a当前设置已保存至 {0} +config.load=Ѵ {0} á +config.load.fail=cʱr +config.write.fail=챣汸ļ{0}ʱr +config.backup.fail=cдļ{0}ʱr +config.saving=aǰѱ {0} # Head -config.Head=启动配置文件\n\n# 对 MCC(Minecraft 命令行客户端)不熟悉?请看这个文档:https://mccteam.github.io/guide/configuration.html\n\n# 想升级到较新的版本吗?请访问 https://github.com/MCCTeam/Minecraft-Console-Client/#download +config.Head=ļ\n\n# MCCMinecraft пͻˣϤ뿴ĵhttps://mccteam.github.io/guide/configuration.html\n\n# µİ汾 https://github.com/MCCTeam/Minecraft-Console-Client/#download # Main.General -config.Main.General.account=Login请填写邮箱或玩家名称。若要以离线模式登录请使用"-"作为密码。若留空则使用交互式登录。 -config.Main.General.login=游戏服务器的地址和端口,可填入域名或IP地址。(可删除端口字段,会自动解析SRV记录) -config.Main.General.server_info=帐户类型:mojang 或是 microsoft。此项设置也会影响交互式登录。 -config.Main.General.method=微软账户的登录方式:mcc 或是 browser(手动在网页上登录)。 +config.Main.General.account=LoginдơҪģʽ¼ʹ"-"Ϊ롣ʹýʽ¼ +config.Main.General.login=ϷĵַͶ˿ڣIPַɾ˿ֶΣԶSRV¼ +config.Main.General.server_info=ʻͣmojang microsoftҲӰ콻ʽ¼ +config.Main.General.method=΢˻ĵ¼ʽmcc browserֶҳϵ¼ # Main.Advanced -config.Main.Advanced=在更改这里的某项设置之前,请确保你理解了该选项的影响。 -config.Main.Advanced.language=请使用Minecraft的语言代码填写,详见 https://github.com/MCCTeam/Minecraft-Console-Client/discussions/2239 -config.Main.Advanced.internal_cmd_char=MCC内部命令的前缀,可使用 "none", "slash"(/) 或 "backslash"(\)。 -config.Main.Advanced.message_cooldown=控制向服务器发送消息的最小间隔时间(秒)。 -config.Main.Advanced.bot_owners=设置机器人的所有者。/!\服务器管理员可以伪装成任何玩家! -config.Main.Advanced.mc_version=游戏版本,可使用 "auto"(自动) 或类似 "1.X.X" 的值。设定具体版本将跳过从服务器解析的过程。 -config.Main.Advanced.mc_forge=可使用 "auto"(自动),"no"(禁用) 或是 "force"(强制启用,仅在 1.13 及更高的版本中可用)。 -config.Main.Advanced.brand_info=客户端标识,可用 "mcc","vanilla"(原版客户端) 或 "none"(空标识)。这用于改变MCC向服务器发送的客户端标识内容。 -config.Main.Advanced.chatbot_log_file=留空将禁用 ChatBot 写入日志文件。 -config.Main.Advanced.private_msgs_cmd_name=远程控制功能将会使用它。 -config.Main.Advanced.show_system_messages=显示游戏服务器的系统消息(来自管理员或命令方块等)。 -config.Main.Advanced.show_xpbar_messages=显示经验条上方的消息,如果被此类消息刷屏请禁用此选项。 -config.Main.Advanced.show_chat_links=解码聊天信息里的链接,并在控制台单独显示。 -config.Main.Advanced.show_inventory_layout=以字符画形式显示库存布局。 -config.Main.Advanced.terrain_and_movements=开启地形处理将消耗更多的内存、CPU和网络带宽,但这允许你进行移动以及和方块交互。 -config.Main.Advanced.inventory_handling=启用库存处理(可操作背包、箱子等容器)。 -config.Main.Advanced.entity_handling=启用实体处理。 -config.Main.Advanced.session_cache=如何缓存会话令牌。可使用 "none"(不缓存),"memory"(内存缓存) 或 "disk"(磁盘缓存)。 -config.Main.Advanced.profilekey_cache=如何缓存聊天签名密钥。可使用 "none"(不缓存),"memory"(内存缓存) 或 "disk"(磁盘缓存)。 -config.Main.Advanced.resolve_srv_records=可填写 "no","fast"(超时时间为五秒钟)或是 "yes"。加入某些服务器需要开启此项。 -config.Main.Advanced.account_list=AccountList:使你可以不用输入账号信息而快速在多个账号间切换\n# 可用命令示例:"/tell reco Player2","/connect Player1" -config.Main.Advanced.server_list=ServerList:可用使用服务器别名快速连接到该服务器\n# 别名不能包含空格和小数点",而且 "localhost" 不能作为别名使用。\n# 可用命令示例:"/tell connect Server1","/connect Server2" -config.Main.Advanced.player_head_icon=使用玩家皮肤头像作为窗口图标,这仅在部分旧版控制台中有效。 -config.Main.Advanced.exit_on_failure=发生错误时是否直接退出,用于在非交互式脚本中使用MCC。 -config.Main.Advanced.script_cache=缓存已编译的脚本,以便在低端设备上更快的加载。 -config.Main.Advanced.timestamps=在聊天信息头部添加时间戳。 -config.Main.Advanced.auto_respawn=死亡时自动重生(开启前请确保你的出生点是安全的) -config.Main.Advanced.minecraft_realms=启用对加入我的世界领域(Realms)服务器的支持。 -config.Main.Advanced.move_head_while_walking=在移动时转向头部。 -config.Main.Advanced.timeout=与服务器的TCP连接超时时间(秒)。 -config.Main.Advanced.enable_emoji=如果关闭,Emoji表情符号将被替换成更简单的字符(用于 "/chunk status" 命令) -config.Main.Advanced.movement_speed=高于 2 的移动速度可能会被检测为作弊。 -config.Main.Advanced.language.invaild=无效的语言代码! +config.Main.Advanced=ڸij֮ǰȷ˸ѡӰ졣 +config.Main.Advanced.language=ʹMinecraftԴд https://github.com/MCCTeam/Minecraft-Console-Client/discussions/2239 +config.Main.Advanced.internal_cmd_char=MCCڲǰ׺ʹ "none", "slash"(/) "backslash"(\) +config.Main.Advanced.message_cooldown=ϢСʱ䣨룩 +config.Main.Advanced.bot_owners=û˵ߡ/!\Աαװκ! +config.Main.Advanced.mc_version=Ϸ汾ʹ "auto"(Զ) "1.X.X" ֵ趨汾ӷĹ̡ +config.Main.Advanced.mc_forge=ʹ "auto"(Զ)"no"() "force"(ǿã 1.13 ߵİ汾п) +config.Main.Advanced.brand_info=ͻ˱ʶ "mcc""vanilla"(ԭͻ) "none"(ձʶ)ڸıMCC͵Ŀͻ˱ʶݡ +config.Main.Advanced.chatbot_log_file=ս ChatBot д־ļ +config.Main.Advanced.private_msgs_cmd_name=Զ̿ƹܽʹ +config.Main.Advanced.show_system_messages=ʾϷϵͳϢԹԱȣ +config.Main.Advanced.show_xpbar_messages=ʾϷϢϢˢôѡ +config.Main.Advanced.show_chat_links=Ϣӣڿ̨ʾ +config.Main.Advanced.show_inventory_layout=ַʽʾ沼֡ +config.Main.Advanced.terrain_and_movements=δĸڴ桢CPUƶԼͷ齻 +config.Main.Advanced.inventory_handling=ÿ洦ɲӵ +config.Main.Advanced.entity_handling=ʵ崦 +config.Main.Advanced.session_cache=λỰơʹ "none"()"memory"(ڴ滺) "disk"(̻) +config.Main.Advanced.profilekey_cache=λǩԿʹ "none"()"memory"(ڴ滺) "disk"(̻) +config.Main.Advanced.resolve_srv_records=д "no""fast"ʱʱΪӣ "yes"ijЩҪ +config.Main.Advanced.account_list=AccountListʹԲ˺Ϣڶ˺żл\n# ʾ"/tell reco Player2""/connect Player1" +config.Main.Advanced.server_list=ServerListʹ÷ӵ÷\n# ܰոС" "localhost" Ϊʹá\n# ʾ"/tell connect Server1""/connect Server2" +config.Main.Advanced.player_head_icon=ʹƤͷΪͼ꣬ڲ־ɰ̨Ч +config.Main.Advanced.exit_on_failure=ʱǷֱ˳ڷǽʽűʹMCC +config.Main.Advanced.script_cache=ѱĽűԱڵͶ豸ϸļء +config.Main.Advanced.timestamps=Ϣͷʱ +config.Main.Advanced.auto_respawn=ʱԶǰȷijǰȫģ +config.Main.Advanced.minecraft_realms=öԼҵ(Realms)֧֡ +config.Main.Advanced.move_head_while_walking=ƶʱתͷ +config.Main.Advanced.timeout=TCPӳʱʱ䣨룩 +config.Main.Advanced.enable_emoji=رգEmojiŽ滻ɸ򵥵ַ "/chunk status"  +config.Main.Advanced.movement_speed= 2 ƶٶȿܻᱻΪס +config.Main.Advanced.language.invaild=ЧԴ룡 +config.Main.Advanced.TerminalColorDepth=д "none""bit_4""bit_8" "bit_24"ͨģʽµ־ֵ֧ɫȡ +config.Main.Advanced.MinTerminalWidth=ʹն˿ʾͼСʱСȡ +config.Main.Advanced.MinTerminalHeight=ʹն˸߶ʾͼСʱС߶ȡ # Signature -config.Signature=聊天签名相关设置(影响1.19及以上版本) -config.Signature.LoginWithSecureProfile=仅微软账户可用。如禁用此项,将无法签名消息和进入某些的服务器。 -config.Signature.SignChat=是否签名发送的聊天消息。 -config.Signature.SignMessageInCommand=是否签名指令中的消息。例如"/msg"和"/me"中的消息。 -config.Signature.MarkLegallySignedMsg=是否使用绿色色块标识拥有合法签名的聊天。 -config.Signature.MarkModifiedMsg=是否使用黄色色块标识被服务器更改过的聊天。 -config.Signature.MarkIllegallySignedMsg=是否使用红色色块标识没有合法签名的聊天。 -config.Signature.MarkSystemMessage=是否使用灰色色块标识系统消息(它们总是不会被签名)。 -config.Signature.ShowModifiedChat=设置为 true,显示被服务器修改过的信息;设置为 false,显示经过签名的原始信息。 -config.Signature.ShowIllegalSignedChat=是否显示没有被正确签名的聊天消息。 +config.Signature=ǩãӰ1.19ϰ汾 +config.Signature.LoginWithSecureProfile=΢˻áô޷ǩϢͽijЩķ +config.Signature.SignChat=Ƿǩ͵Ϣ +config.Signature.SignMessageInCommand=ǷǩָеϢ"/msg""/me"еϢ +config.Signature.MarkLegallySignedMsg=ǷʹɫɫʶӵкϷǩ졣 +config.Signature.MarkModifiedMsg=ǷʹûɫɫʶĹ졣 +config.Signature.MarkIllegallySignedMsg=ǷʹúɫɫʶûкϷǩ졣 +config.Signature.MarkSystemMessage=ǷʹûɫɫʶϵͳϢDzᱻǩ +config.Signature.ShowModifiedChat=Ϊ trueʾ޸ĹϢΪ falseʾǩԭʼϢ +config.Signature.ShowIllegalSignedChat=ǷʾûбȷǩϢ # Logging -config.Logging=此项设置仅会影响到控制台中的信息(日志)。 -config.Logging.DebugMessages=请在提交错误报告之前先启用此项。谢谢! -config.Logging.ChatMessages=是否显示来自服务器的聊天消息。 -config.Logging.InfoMessages=信息性的消息。(大部分来自MCC内部) -config.Logging.WarningMessages=显示警告消息。 -config.Logging.ErrorMessages=显示错误消息。 -config.Logging.ChatFilter=过滤聊天消息所用的正则表达式。 -config.Logging.DebugFilter=过滤调试消息所用的正则表达式。 -config.Logging.FilterMode=过滤方式:"disable"(禁用),"blacklist"(隐藏匹配的消息) 或 "whitelist"(仅显示匹配的消息) -config.Logging.LogToFile=是否将日志信息写入到文件。 -config.Logging.LogFile=日志文件名称。 -config.Logging.PrependTimestamp=写入日志文件时是否添加时间戳。 -config.Logging.SaveColorCodes=是否保留消息中的颜色字符。(例如"§b") +config.Logging=ýӰ쵽̨еϢ־ +config.Logging.DebugMessages=ύ󱨸֮ǰôлл +config.Logging.ChatMessages=ǷʾԷϢ +config.Logging.InfoMessages=ϢԵϢ󲿷MCCڲ +config.Logging.WarningMessages=ʾϢ +config.Logging.ErrorMessages=ʾϢ +config.Logging.ChatFilter=Ϣõʽ +config.Logging.DebugFilter=˵Ϣõʽ +config.Logging.FilterMode=˷ʽ"disable"ã"blacklist"ƥϢ "whitelist"ʾƥϢ +config.Logging.LogToFile=Ƿ־Ϣд뵽ļ +config.Logging.LogFile=־ļơ +config.Logging.PrependTimestamp=д־ļʱǷʱ +config.Logging.SaveColorCodes=ǷϢеɫַ"b" # AppVars -config.AppVars.Variables=可以在某些字段中以"%yourvar%"的形式使用。\n# %username% 和 %serverip% 时保留的变量名。 +config.AppVars.Variables=ijЩֶ"%yourvar%"ʽʹá\n# %username% %serverip% ʱı # Proxy -config.Proxy=通过代理连接到服务器。\n# 如果Mojang/微软登录服务被防火墙阻断,设置Enabled_Login=true以使用代理进行登录。\n# 如果到Minecraft游戏服务器的连接被防火墙阻止,设置Enabled_Ingame=true以使用代理连接游戏服务器。\n# /!\ 在启用代理前,请确保你的服务器规则允许使用代理或VPN,否则你可能面临被封禁等风险! -config.Proxy.Enabled_Login=是否使用代理连接Mojang或微软的登录服务器。 -config.Proxy.Enabled_Ingame=是否通过代理连接Minecraft游戏服务器。 -config.Proxy.Server=代理服务器必须允许HTTPS登录。 -config.Proxy.Proxy_Type=支持的代理类型:"HTTP","SOCKS4","SOCKS4a","SOCKS5"。 -config.Proxy.Username=只有连接到受密码保护的代理才需要。 -config.Proxy.Password=只有连接到受密码保护的代理才需要。 +config.Proxy=ͨӵ\n# Mojang/΢¼񱻷ǽϣEnabled_Login=trueʹôе¼\n# MinecraftϷӱǽֹEnabled_Ingame=trueʹôϷ\n# /!\ ôǰȷķʹôVPNٱȷգ +config.Proxy.Enabled_Login=ǷʹôMojang΢ĵ¼ +config.Proxy.Enabled_Ingame=ǷͨMinecraftϷ +config.Proxy.Server=HTTPS¼ +config.Proxy.Proxy_Type=ֵ֧Ĵͣ"HTTP""SOCKS4""SOCKS4a""SOCKS5" +config.Proxy.Username=ֻӵ뱣ĴҪ +config.Proxy.Password=ֻӵ뱣ĴҪ # ChatFormat -config.ChatFormat=MCC会尽力检测聊天信息,但有些服务器有不寻常的聊天格式\n# 当这种情况发生时,你需要在下面自定义匹配聊天所用的正则表达式,详见 https://mccteam.github.io/guide/configuration.html#chat-format -config.ChatFormat.Builtins=是否启用MCC内置的聊天检测规则。设置为 false 以避免与自定义格式冲突。 -config.ChatFormat.UserDefined=是否启用下方的自定义正则表达式进行聊天检测。 +config.ChatFormat=MCCᾡϢЩвѰʽ\n# ʱҪԶƥõʽ https://mccteam.github.io/guide/configuration.html#chat-format +config.ChatFormat.Builtins=ǷMCCõΪ false ԱԶʽͻ +config.ChatFormat.UserDefined=Ƿ·Զʽ⡣ # MCSettings -config.MCSettings=下面的设置将会被发送到游戏服务器,只影响一些服务器端的东西,比如你的皮肤。 -config.MCSettings.Enabled=如果禁用,下面的设置就不会被发送到服务器上。 -config.MCSettings.Locale=请使用Minecraft的语言代码填写,详见[Main.Advanced.Language] -config.MCSettings.RenderDistance=渲染距离,取值范围[0 - 255]。 -config.MCSettings.Difficulty=Minecraft 1.7及更早版本难度。"peaceful","easy","normal","difficult"。 -config.MCSettings.ChatMode=使用 "enabled"(完全启用聊天)、"commands"(仅限命令)或 "disabled"(完全禁用聊天)。这允许你禁言自己... -config.MCSettings.ChatColors=这允许你在服务器端禁用聊天颜色。 -config.MCSettings.MainHand=在1.9及更高版本中的主手设置。"left"(左手) 或 "right"(右手)。 +config.MCSettings=ýᱻ͵ϷֻӰһЩ˵ĶƤ +config.MCSettings.Enabled=ãþͲᱻ͵ϡ +config.MCSettings.Locale=ʹMinecraftԴд[Main.Advanced.Language] +config.MCSettings.RenderDistance=Ⱦ룬ȡֵΧ[0 - 255] +config.MCSettings.Difficulty=Minecraft 1.7汾Ѷȡ"peaceful""easy""normal""difficult" +config.MCSettings.ChatMode=ʹ "enabled"ȫ죩"commands" "disabled"ȫ죩Լ... +config.MCSettings.ChatColors=ڷ˽ɫ +config.MCSettings.MainHand=1.9߰汾еá"left"֣ "right"֣ # ChatBot config.ChatBot================================ #\n# Minecraft Console Client Bots #\n# =============================== # # ChatBot.Alerts -config.ChatBot.Alerts=当检测到特定聊天消息或特定事件发生时提醒你\n # 对检测特定玩家的聊天消息很有用。 -config.ChatBot.Alerts.Beep_Enabled=除了高亮显示外,当检测到一个词时还会播放类似蜂鸣器的哔哔声。 -config.ChatBot.Alerts.Trigger_By_Words=在收到指定的关键词后触发提醒。 -config.ChatBot.Alerts.Trigger_By_Rain=在开始下雨和停止下雨时触发提醒。 -config.ChatBot.Alerts.Trigger_By_Thunderstorm=在雷暴天气的开始与结束触发提醒。 -config.ChatBot.Alerts.Matches=触发提醒的聊天关键词列表。 -config.ChatBot.Alerts.Excludes=出现这些关键词后该条消息一定不触发提醒。 -config.ChatBot.Alerts.Log_To_File=是否将提醒消息写入到日志文件。 -config.ChatBot.Alerts.Log_File=日志文件的路径。 +config.ChatBot.Alerts=⵽ضϢض¼ʱ\n # ԼضҵϢá +config.ChatBot.Alerts.Beep_Enabled=˸ʾ⣬⵽һʱᲥƷ +config.ChatBot.Alerts.Trigger_By_Words=յָĹؼʺ󴥷ѡ +config.ChatBot.Alerts.Trigger_By_Rain=ڿʼֹͣʱѡ +config.ChatBot.Alerts.Trigger_By_Thunderstorm=ױĿʼѡ +config.ChatBot.Alerts.Matches=ѵؼб +config.ChatBot.Alerts.Excludes=ЩؼʺϢһѡ +config.ChatBot.Alerts.Log_To_File=ǷϢд뵽־ļ +config.ChatBot.Alerts.Log_File=־ļ· # ChatBot.AntiAFK -config.ChatBot.AntiAfk=定期发送命令,或让机器人随机走动,以避免检测到挂机后被踢出服务器\n # /!\启用前请确保你的服务器规则不禁止反AFK机制!\n# /!\如果启用随机移动,请将机器人围在围栏里,以防走失!(建议尺寸5x5x5) -config.ChatBot.AntiAfk.Delay=执行操作的间隔时间。(秒) -config.ChatBot.AntiAfk.Command=发送给服务器的指令。 -config.ChatBot.AntiAfk.Use_Sneak=在发送命令时是否蹲下。 -config.ChatBot.AntiAfk.Use_Terrain_Handling=启用地形处理,以使机器人能够四处移动。 -config.ChatBot.AntiAfk.Walk_Range=机器人可以随机移动的范围(注意:范围越大,速度越慢) -config.ChatBot.AntiAfk.Walk_Retries=尝试移动失败几次后在改为发送命令模式。 +config.ChatBot.AntiAfk=ڷû߶Ա⵽һ߳\n # /!\ǰȷķ򲻽ֹAFKƣ\n# /!\ƶ뽫ΧΧԷʧߴ5x5x5 +config.ChatBot.AntiAfk.Delay=ִвļʱ䡣룩 +config.ChatBot.AntiAfk.Command=͸ָ +config.ChatBot.AntiAfk.Use_Sneak=ڷʱǷ¡ +config.ChatBot.AntiAfk.Use_Terrain_Handling=õδʹܹĴƶ +config.ChatBot.AntiAfk.Walk_Range=˿ƶķΧע⣺ΧԽٶԽ +config.ChatBot.AntiAfk.Walk_Retries=ƶʧܼκڸΪģʽ # ChatBot.AutoAttack -config.ChatBot.AutoAttack=自动攻击周围的生物\n# 使用此功能之前,你需要开启实体处理。\n# /!\确保你的服务器允许使用自动攻击。\n# /!\服务器插件可能会认为此功能时作弊,并可能会封禁你的账号,所以请自己检查服务器规则是否允许。 -config.ChatBot.AutoAttack.Mode="single"(单目标) 或 "multi"(多目标)。一次攻击一个生物还是范围内的所有生物。 -config.ChatBot.AutoAttack.Priority="health"(生命值)或 "distance"(距离)。当使用"single"模式时,以哪一个属性确定优先级。 -config.ChatBot.AutoAttack.Cooldown_Time=每次攻击间的冷却时间,设置 "Custom = false" 以让MCC自动计算攻击速度。 -config.ChatBot.AutoAttack.Interaction=可选项:"Interact"(交互),"Attack"(攻击) 或 "InteractAt"(交互并攻击) -config.ChatBot.AutoAttack.Attack_Hostile=是否攻击敌对生物。 -config.ChatBot.AutoAttack.Attack_Passive=是否攻击被动生物。 -config.ChatBot.AutoAttack.List_Mode=将实体列表作为 "whitelist"(白名单)还是 "blacklist"(黑名单)。 -config.ChatBot.AutoAttack.Entites_List=所有可用的实体类型可以在这里找到:https://bit.ly/3Rg68lp +config.ChatBot.AutoAttack=ԶΧ\n# ʹô˹֮ǰҪʵ崦\n# /!\ȷķʹԶ\n# /!\ܻΪ˹ʱףܻ˺ţԼǷ +config.ChatBot.AutoAttack.Mode="single"Ŀ꣩ "multi"Ŀ꣩һιһﻹǷΧڵ +config.ChatBot.AutoAttack.Priority="health"ֵ "distance"룩ʹ"single"ģʽʱһȷȼ +config.ChatBot.AutoAttack.Cooldown_Time=ÿιȴʱ䣬 "Custom = false" MCCԶ㹥ٶȡ +config.ChatBot.AutoAttack.Interaction=ѡ"Interact""Attack" "InteractAt" +config.ChatBot.AutoAttack.Attack_Hostile=Ƿ񹥻ж +config.ChatBot.AutoAttack.Attack_Passive=Ƿ񹥻 +config.ChatBot.AutoAttack.List_Mode=ʵбΪ "whitelist" "blacklist" +config.ChatBot.AutoAttack.Entites_List=пõʵͿҵhttps://bit.ly/3Rg68lp # ChatBot.AutoCraft -config.ChatBot.AutoCraft=自动使用背包中的物品进行合成。\n# 请看 https://mccteam.github.io/guide/chat-bots.html#auto-craft\n# 你需要启用库存处理来使用这个功能\n# 如果需要使用工作台,你还需要启用地形处理。 -config.ChatBot.AutoCraft.CraftingTable=如果你打算使用工作台,请填写它所在的位置。(需要启用地形处理) -config.ChatBot.AutoCraft.OnFailure=合成失败时应该怎么处理,"abort"(中止)或 "wait"(等待)。 -config.ChatBot.AutoCraft.Recipes=Recipes.Name:给该配方起一个独一无二的名字。(不能包含空白字符)Recipes.Type:合成类型,"player"(背包2x2)或 "table"(工作台3x3)\n# Recipes.Result:合成的目标物品\n# Recipes.Slots:合成的物品摆放方式,以从左到右、从上到下的格式填写。需留空请填写"Null"。\n# 最新的物品命名请看:https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Inventory/ItemType.cs +config.ChatBot.AutoCraft=ԶʹñеƷкϳɡ\n# 뿴 https://mccteam.github.io/guide/chat-bots.html#auto-craft\n# Ҫÿ洦ʹ\n# Ҫʹų̀㻹Ҫõδ +config.ChatBot.AutoCraft.CraftingTable=ʹų̀дڵλáҪõδ +config.ChatBot.AutoCraft.OnFailure=ϳʧʱӦô"abort"ֹ "wait"ȴ +config.ChatBot.AutoCraft.Recipes=Recipes.Name䷽һһ޶֡ܰհַRecipes.Typeϳͣ"player"2x2 "table"̨3x3\n# Recipes.ResultϳɵĿƷ\n# Recipes.SlotsϳɵƷڷŷʽԴҡϵµĸʽдд"Null"\n# µƷ뿴https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Inventory/ItemType.cs # AutoDig -config.ChatBot.AutoDig=自动挖掘方块。\n# 你可以使用 "/digbot start" 和 "/digbot stop" 指令来控制 AutoDig 的启停。\n# 由于MCC目前还不支持精确计算方块的碰撞体积,在获取看向的方块时,视线上所有的方块都被看作是完整的立方体。\n# 查询方块的名字,请访问 https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Mapping/Material.cs -config.ChatBot.AutoDig.Auto_Tool_Switch=自动切换到合适的工具。 -config.ChatBot.AutoDig.Durability_Limit=不会使用低于此耐久度的工具。(需要启用库存处理) -config.ChatBot.AutoDig.Drop_Low_Durability_Tools=在当前使用的工具耐久度过低后,是否丢掉它。 -config.ChatBot.AutoDig.Mode="lookat","fixedpos" 或 "both"。挖掘看向的方块还是固定位置的方块,或者是两个条件都满足的方块。 -config.ChatBot.AutoDig.Locations=使用 "fixedpos" 或 "both" 模式时,方块的坐标。 -config.ChatBot.AutoDig.Location_Order="distance" 或 "index",当使用 "fixedpos" 模式时,按照到玩家的距离,还是列表中的顺序确定挖掘的方块。 -config.ChatBot.AutoDig.Auto_Start_Delay=进入游戏后等待多少秒后开始自动挖掘,设置为-1禁用自动开始。 -config.ChatBot.AutoDig.Dig_Timeout=若挖掘一个方块用时超过这个值,将会重新获取目标进行挖掘。 -config.ChatBot.AutoDig.Log_Block_Dig=是否输出挖掘方块的相关信息。 -config.ChatBot.AutoDig.List_Type=将方块列表作为 "whitelist"(白名单)还是 "blacklist"(黑名单)。 +config.ChatBot.AutoDig=Զھ򷽿顣\n# Ҫõδʹܡ\n# ʹ "/digbot start" "/digbot stop" ָ AutoDig ͣ\n# MCCĿǰ֧־ȷ㷽ײڻȡķʱеķ鶼塣\n# ѯ֣ https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Mapping/Material.cs +config.ChatBot.AutoDig.Auto_Tool_Switch=ԶлʵĹߡ +config.ChatBot.AutoDig.Durability_Limit=ʹõڴ;öȵĹߡҪÿ洦 +config.ChatBot.AutoDig.Drop_Low_Durability_Tools=ڵǰʹõĹ;öȹͺǷ񶪵 +config.ChatBot.AutoDig.Mode="lookat""fixedpos" "both"ھķ黹ǹ̶λõķ飬ķ顣 +config.ChatBot.AutoDig.Locations=ʹ "fixedpos" "both" ģʽʱꡣ +config.ChatBot.AutoDig.Location_Order="distance" "index"ʹ "fixedpos" ģʽʱյҵľ룬бе˳ȷھķ顣 +config.ChatBot.AutoDig.Auto_Start_Delay=ϷȴʼԶھΪ-1Զʼ +config.ChatBot.AutoDig.Dig_Timeout=ھһʱֵ»ȡĿھ +config.ChatBot.AutoDig.Log_Block_Dig=Ƿھ򷽿Ϣ +config.ChatBot.AutoDig.List_Type=бΪ "whitelist" "blacklist" # ChatBot.AutoDrop -config.ChatBot.AutoDrop=自动从背包/库存中丢弃指定的物品\n# 你需要启用库存处理来使用这个功能。\n# 可用物品请看 https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Inventory/ItemType.cs -config.ChatBot.AutoDrop.Mode="include"(丢弃列表中的物品),"exclude"(丢弃列表外的所有物品) 或 "everything"(丢弃所有物品) +config.ChatBot.AutoDrop=Զӱ/жָƷ\n# Ҫÿ洦ʹܡ\n# Ʒ뿴 https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Inventory/ItemType.cs +config.ChatBot.AutoDrop.Mode="include"беƷ"exclude"бƷ "everything"Ʒ # ChatBot.AutoEat -config.ChatBot.AutoEat=在饱食度较低是自动在背包中寻找食物食用。\n# 你需要启用库存处理来使用这个功能。 +config.ChatBot.AutoEat=ڱʳȽϵԶڱѰʳʳá\n# Ҫÿ洦ʹܡ # ChatBot.AutoFishing -config.ChatBot.AutoFishing=使用鱼竿自动钓鱼。指南:https://mccteam.github.io/guide/chat-bots.html#auto-fishingn# /!\ 启用前请确保服务器允许自动钓鱼。 -config.ChatBot.AutoFishing.Antidespawn=如果你之前没有启用过这个选项,请保持它为 false 。 -config.ChatBot.AutoFishing.Mainhand=使用主手还是副手拿鱼竿。 -config.ChatBot.AutoFishing.Auto_Start=是否在进入服务器后自动开始钓鱼,禁用此功能后,你需要使用"/usehand"手动使用鱼竿一次。 -config.ChatBot.AutoFishing.Cast_Delay=钓到鱼后多久开始下一次钓鱼(抛竿)。 -config.ChatBot.AutoFishing.Fishing_Delay=进入服务器后多久后开始自动钓鱼。(秒) -config.ChatBot.AutoFishing.Fishing_Timeout=多少秒后没有钓到鱼视为超时。超时后会重新抛竿。 -config.ChatBot.AutoFishing.Durability_Limit=不会使用低于此耐久度的鱼竿(鱼竿耐久度最高为64)。(需要启用库存处理) -config.ChatBot.AutoFishing.Auto_Rod_Switch=在当前鱼竿不可用后自动切换到背包中的其他鱼竿。(需要启用库存处理) -config.ChatBot.AutoFishing.Stationary_Threshold=鱼钩在X轴和Z轴方向上的移动小于这个值将被认为是静止的,过高的阈值会在抛竿途中触发收竿。 -config.ChatBot.AutoFishing.Hook_Threshold=一个“静止”的鱼钩,在Y轴方向上的移动超过这个阈值将被认为钓到了鱼。 -config.ChatBot.AutoFishing.Log_Fish_Bobber=用于调整以上两个阈值,启用后会在收到鱼钩实体移动数据包后打印其坐标变化。 -config.ChatBot.AutoFishing.Enable_Move=这允许玩家在钓到鱼后改变其位置或朝向。(需要启用地形处理) -config.ChatBot.AutoFishing.Movements=会按照 "1->2->3->4->3->2->1->2->..." 的顺序执行。每次可用改变位置、朝向或是都改变。推荐只改变朝向。 +config.ChatBot.AutoFishing=ʹԶ㡣ָϣhttps://mccteam.github.io/guide/chat-bots.html#auto-fishingn# /!\ ǰȷԶ㡣 +config.ChatBot.AutoFishing.Antidespawn=֮ǰûùѡ뱣Ϊ false +config.ChatBot.AutoFishing.Mainhand=ʹֻǸ͡ +config.ChatBot.AutoFishing.Auto_Start=ǷڽԶʼ㣬ô˹ܺҪʹ"/usehand"ֶʹһΡ +config.ChatBot.AutoFishing.Cast_Delay=ÿʼһε㣨׸ͣ +config.ChatBot.AutoFishing.Fishing_Delay=úʼԶ㡣룩 +config.ChatBot.AutoFishing.Fishing_Timeout=ûеΪʱʱ׸͡ +config.ChatBot.AutoFishing.Durability_Limit=ʹõڴ;öȵͣ;öΪ64Ҫÿ洦 +config.ChatBot.AutoFishing.Auto_Rod_Switch=ڵǰͲúԶле͡Ҫÿ洦 +config.ChatBot.AutoFishing.Stationary_Threshold=㹳XZ᷽ϵƶСֵΪǾֹģߵֵ׸;дո͡ +config.ChatBot.AutoFishing.Hook_Threshold=һֹ㹳Y᷽ϵƶֵΪ㡣 +config.ChatBot.AutoFishing.Log_Fish_Bobber=ڵֵúյ㹳ʵƶݰӡ仯 +config.ChatBot.AutoFishing.Enable_Move=ڵıλû򡣣Ҫõδ +config.ChatBot.AutoFishing.Movements=ᰴ "1->2->3->4->3->2->1->2->..." ˳ִСÿοøıλáǶı䡣Ƽֻı䳯 # ChatBot.AutoRelog -config.ChatBot.AutoRelog=在被服务器断开连接时自动重连,例如服务器重启时。\n# /!\ 谨慎使用Ignore_Kick_Message=true,这会在服务器管理员将你踢出时依然连回! -config.ChatBot.AutoRelog.Delay=重新加入到服务器前的延迟时间。(单位:秒) -config.ChatBot.AutoRelog.Retries=重新登录服务器失败时的重试次数,使用-1表示无限重试。 -config.ChatBot.AutoRelog.Ignore_Kick_Message=当设置为 true 时,将不考虑踢出的信息直接重连。 -config.ChatBot.AutoRelog.Kick_Messages=如果踢出信息与这其中的任何一个字符串匹配,那么将触发自动重连。 +config.ChatBot.AutoRelog=ڱϿʱԶʱ\n# /!\ ʹIgnore_Kick_Message=trueڷԱ߳ʱȻأ +config.ChatBot.AutoRelog.Delay=¼뵽ǰӳʱ䡣(λ) +config.ChatBot.AutoRelog.Retries=µ¼ʧʱԴʹ-1ʾԡ +config.ChatBot.AutoRelog.Ignore_Kick_Message=Ϊ true ʱ߳Ϣֱ +config.ChatBot.AutoRelog.Kick_Messages=߳Ϣеκһַƥ䣬ôԶ # ChatBot.AutoRespond -config.ChatBot.AutoRespond=当聊天消息与文件中的规则匹配时,自动执行指定命令。\n# /!\ 服务器管理员可以以任意玩家的身份发送任意消息,记住这一点!\n# 此机器人如果设置的不得当可能会造成刷屏,建议设置一个冷却时间。 -config.ChatBot.AutoRespond.Match_Colors=不要删除文本中的颜色代码(使用§字符的代码)。注意:启用后你的匹配模板也必须包括颜色代码。 +config.ChatBot.AutoRespond=ϢļеĹƥʱԶִָ\n# /!\ ԱҵݷϢסһ㣡\n# ˻õIJõܻˢһȴʱ䡣 +config.ChatBot.AutoRespond.Match_Colors=Ҫɾıеɫ루ʹáַĴ룩ע⣺úƥģҲɫ롣 # ChatBot.ChatLog -config.ChatBot.ChatLog=将聊天信息写入到日志文件中。 +config.ChatBot.ChatLog=Ϣд뵽־ļС # ChatBot.FollowPlayer -config.ChatBot.FollowPlayer=让机器人跟随指定玩家\n# 注意这是一个实验性的功能,目前的寻路速度可能很慢,你可能需要时常等一会机器人来让它跟上你。\n# 你可以调整"Update_Limit",找到最适合你的速度。(注意不要设置的太低,这样可能导致反效果或使MCC卡顿)。\n# /!\ 在使用此功能之前,请先确保服务器规则允许你这样做。 -config.ChatBot.FollowPlayer.Update_Limit=机器人寻路的间隔时间(以秒为单位) -config.ChatBot.FollowPlayer.Stop_At_Distance=如果玩家在该范围内,则视为已经接近玩家了。(防止机器人将玩家推开而产生无限循环) +config.ChatBot.FollowPlayer=û˸ָ\n# עһʵԵĹܣĿǰѰ·ٶȿܺҪʱһ㡣\n# Ե"Update_Limit"ҵʺٶȡעⲻҪõ̫ͣܵ·ЧʹMCC٣\n# /!\ ʹô˹֮ǰȷ +config.ChatBot.FollowPlayer.Update_Limit=Ѱ·ļʱ䣨Ϊλ +config.ChatBot.FollowPlayer.Stop_At_Distance=ڸ÷ΧڣΪѾӽˡֹ˽ƿѭ # ChatBot.HangmanGame -config.ChatBot.HangmanGame=一个用于演示聊天互动的小游戏。玩家可以一次一个字母地猜出神秘的单词。\n# 你需要正确地使用 ChatFormat,并在 botowners 中添加自己,用/tell start\n# /!\ 这个机器人可能会造成刷屏,如果许多玩家与它互动。 +config.ChatBot.HangmanGame=һʾ컥СϷҿһһĸز³صĵʡ\n# Ҫȷʹ ChatFormat botowners Լ/tell start\n# /!\ ˿ܻˢ # ChatBot.Mailer -config.ChatBot.Mailer=在玩家和服务器之间中继消息,就像一个邮件插件一样。\n# 这个机器人可以在收件人离线时存储消息,并在他们加入服务器时发送消息。\n# /!\ 服务器管理员可以以任意玩家的身份发送任意消息,请记住这一点。 +config.ChatBot.Mailer=Һͷ֮мϢһʼһ\n# ˿ռʱ洢ϢǼʱϢ\n# /!\ ԱҵݷϢסһ㡣 # ChatBot.Map -config.ChatBot.Map=允许你将地图渲染成.jpg图片,该图片会被渲染到Rendered_Maps文件夹中。\n# 注意:这个功能目前只对解决使用地图的验证码有用。\n# 如果一些服务器解决验证码的时间很短,请启用Auto_Render_On_Update并准备快速打开该文件。\n# 在linux上,你可以使用FTP来访问生成的文件。 -config.ChatBot.Map.Should_Resize=是否需要调整地图的大小?(默认大小是128x128) -config.ChatBot.Map.Resize_To=将地图调整到什么大小?(注意:大小越大,质量越低) -config.ChatBot.Map.Auto_Render_On_Update=一旦接收到新的地图或已有地图被更新,自动渲染该地图。 -config.ChatBot.Map.Delete_All_On_Unload=在卸载/重新加载地图时删除所有已渲染的地图(退出MCC时不会删除图像) -config.ChatBot.Map.Notify_On_First_Update=当第一次从服务器上收到一张地图时,发送一个通知。 +config.ChatBot.Map=㽫ͼȾ.jpgͼƬͼƬᱻȾRendered_MapsļС\n# ע⣺ĿǰֻԽʹõͼ֤á\n# һЩ֤ʱ̣ܶAuto_Render_On_Update׼ٴ򿪸ļ\n# linuxϣʹFTPɵļ +config.ChatBot.Map.Render_In_Console=Ƿڿ̨Ⱦͼ +config.ChatBot.Map.Save_To_File=Ƿ񽫵ͼΪļ +config.ChatBot.Map.Auto_Render_On_Update=һյµĵͼеͼ£ԶȾõͼ +config.ChatBot.Map.Delete_All_On_Unload=ж/¼صͼʱɾȾĵͼ˳MCCʱɾͼ +config.ChatBot.Map.Notify_On_First_Update=һδӷյһŵͼʱһ֪ͨ # ChatBot.PlayerListLogger -config.ChatBot.PlayerListLogger=定期记录当前的玩家列表到文件中。 -config.ChatBot.PlayerListLogger.Delay=(单位:秒) +config.ChatBot.PlayerListLogger=ڼ¼ǰбļС +config.ChatBot.PlayerListLogger.Delay=λ룩 # ChatBot.RemoteControl -config.ChatBot.RemoteControl=通过游戏中的私聊向机器人发送MCC控制台命令\n# 你需要先配置好[ChatFormat]章节的设置,并在[Main.Advanced.bot_owners]中添加自己的账号。\n# /!\ 服务器管理员可以以任意玩家的身份发送任意消息,仅在信任他们时启用本功能。 +config.ChatBot.RemoteControl=ͨϷе˽˷MCC̨\n# Ҫú[ChatFormat]½ڵã[Main.Advanced.bot_owners]Լ˺š\n# /!\ ԱҵݷϢʱñܡ # ChatBot.ReplayCapture -config.ChatBot.ReplayCapture=使用"/replay start"开始记录游戏,并在之后使用 Replay Mod (https://www.replaymod.com/) 进行重放。\n# 请注意,由于技术限制,玩家自身不会显示在重放文件中。\n# /!\ 你应该使用"/replay stop"停止记录或者使用"/quit"退出程序,否则回放文件可能会损坏。 -config.ChatBot.ReplayCapture.Backup_Interval=每间隔多少秒自动保存一次回放文件,以秒为单位。使用-1禁用自动保存。 +config.ChatBot.ReplayCapture=ʹ"/replay start"ʼ¼Ϸ֮ʹ Replay Mod (https://www.replaymod.com/) طš\n# ע⣬ڼƣʾطļС\n# /!\ Ӧʹ"/replay stop"ֹͣ¼ʹ"/quit"˳򣬷طļܻ𻵡 +config.ChatBot.ReplayCapture.Backup_Interval=ÿԶһλطļΪλʹ-1Զ档 # ChatBot.ScriptScheduler -config.ChatBot.ScriptScheduler=在加入服务器时、到达特定时间时或以设定的时间间隔执行命令或脚本文件\n# 详细使用方法请查看 https://mccteam.github.io/guide/chat-bots.html#script-scheduler +config.ChatBot.ScriptScheduler=ڼʱضʱʱ趨ʱִűļ\n# ϸʹ÷鿴 https://mccteam.github.io/guide/chat-bots.html#script-scheduler diff --git a/MinecraftClient/Resources/lang/zh-Hant.ini b/MinecraftClient/Resources/lang/zh-Hant.ini index 650711f5..e2f38710 100644 --- a/MinecraftClient/Resources/lang/zh-Hant.ini +++ b/MinecraftClient/Resources/lang/zh-Hant.ini @@ -1,883 +1,886 @@ [mcc] # Messages from MCC itself -mcc.help_us_translate=幫助我們翻譯MCC:{0} -mcc.run_with_default_settings=\nMCC正在使用預設配置執行。 -mcc.settings_generated=§c配置檔案 MinecraftClient.ini 已經生成。 -mcc.has_update=§e新版本的MCC已經推出:{0} -mcc.login=賬戶名: -mcc.login_basic_io=請輸入使用者名稱或郵箱。 -mcc.password=密碼: -mcc.password_basic_io=請輸入使用者 {0} 的密碼。 -mcc.password_hidden=密碼(不會顯示):{0} -mcc.offline=§8您正在使用離線模式。 -mcc.session_invalid=§8會話快取無效或已過期。 -mcc.session_valid=§8{0}的會話快取仍然有效。 -mcc.profile_key_invalid=§8快取的聊天簽名金鑰需要重新整理。 -mcc.profile_key_valid=§8{0}的聊天簽名金鑰快取仍然有效. -mcc.connecting=正在連線至{0}... -mcc.fetching_key=正在從微軟獲取聊天簽名金鑰。 -mcc.ip=伺服器IP: -mcc.use_version=§8正在執行Minecraft版本{0} (v{1}協議) -mcc.unknown_version=§8未知或不受支援的Minecraft版本{0}。\n正在切換至自動檢測模式。 -mcc.forge=檢查伺服器是否正在執行Forge... -mcc.forgeforce=正在強制啟動Forge支援。 -mcc.resolve=正在解析{0}... -mcc.found=§8已找到伺服器{0}:{1},域名:{2} -mcc.not_found=§8無法執行{0}的SRV解析\n{1}:{2} -mcc.retrieve=正在獲取伺服器資訊... -mcc.restart=正在重啟Minecraft Console Client... -mcc.restart_delay=等待 {0} 秒後重啟... -mcc.server_version=伺服器版本: -mcc.disconnected=未連線至任何伺服器。輸入 '{0}help' 獲得幫助。 -mcc.press_exit=或者敲擊回車退出Minecraft Console Client。 -mcc.version_supported=該版本受到支援\n正在登入... -mcc.single_cmd=§7已傳送命令§8 {0} -mcc.joined=已成功加入伺服器。\n輸入 '{0}quit' 離開伺服器。 -mcc.reconnect=等待5秒 (剩餘{0}次嘗試)... -mcc.disconnect.lost=失去連線。 -mcc.disconnect.server=從伺服器斷開連線: -mcc.disconnect.login=連線失敗: -mcc.link=連結:{0} -mcc.player_dead_respawn=你死了!1秒後自動重生。 -mcc.player_dead=你死了!輸入 '{0}respawn' 重生。 -mcc.server_offline=§8伺服器正處於離線模式。 -mcc.session=檢查會話... -mcc.session_fail=檢查會話失敗 -mcc.server_protocol=§8伺服器的Minecraft版本:{0} (協議v{1}) -mcc.with_forge=, 帶有Forge -mcc.handshake=§8握手成功。 (伺服器ID:{0}) -mcc.realms_available==您可以訪問以下Realms世界 -mcc.realms_join=請使用"realms:<序號>"作為伺服器IP加入Realms世界 -mcc.generator.generating=正在從 {1} 生成 {0} 資訊。 -mcc.generator.done=已完成從 {0} 資訊生成,使用 {1} -mcc.invaild_config=解析配置檔案失敗,輸入 "{0}new" 以生成一個新的配置。 -mcc.gen_new_config=已生成新的配置檔案 "{0}" 。 +mcc.help_us_translate=҂gMCC{0} +mcc.run_with_default_settings=\nMCCʹAOÈС +mcc.settings_generated=cÙn MinecraftClient.ini ѽɡ +mcc.has_update=e°汾MCCѽƳ{0} +mcc.login=~ +mcc.login_basic_io=ՈݔʹQ]䡣 +mcc.password=ܴa +mcc.password_basic_io=Ոݔʹ {0} ܴa +mcc.password_hidden=ܴa(@ʾ){0} +mcc.offline=8ʹxģʽ +mcc.session_invalid=8ԒȡoЧ^ڡ +mcc.session_valid=8{0}ĕԒȡȻЧ +mcc.profile_key_invalid=8ȡ캞Ҫ +mcc.profile_key_valid=8{0}캞耿ȡȻЧ. +mcc.connecting=B{0}... +mcc.fetching_key=ڏ΢ܛ@ȡ캞耡 +mcc.ip=ŷIP +mcc.use_version=8ڈMinecraft汾{0} (v{1}fh) +mcc.unknown_version=8δ֪֧ԮMinecraft汾{0}\nГQԄәzyģʽ +mcc.forge=zŷǷڈForge... +mcc.forgeforce=ڏƆForge֧Ԯ +mcc.resolve=ڽ{0}... +mcc.found=8ҵŷ{0}:{1}{2} +mcc.not_found=8o{0}SRV\n{1}{2} +mcc.retrieve=ګ@ȡŷYӍ... +mcc.restart=؆Minecraft Console Client... +mcc.restart_delay=ȴ {0} ؆... +mcc.server_version=ŷ汾 +mcc.disconnected=δBκŷݔ '{0}help' @Î +mcc.press_exit=Ó܇˳Minecraft Console Client +mcc.version_supported=ԓ汾֧ܵԮ\nڵ... +mcc.single_cmd=7т8 {0} +mcc.joined=ѳɹŷ\nݔ '{0}quit' x_ŷ +mcc.reconnect=ȴ5 (ʣN{0}·Lԇ)... +mcc.disconnect.lost=ʧȥB +mcc.disconnect.server=ŷ_B +mcc.disconnect.login=Bʧ +mcc.link=BY{0} +mcc.player_dead_respawn=ˣ1Ԅ +mcc.player_dead=ˣݔ '{0}respawn' +mcc.server_offline=8ŷ̎xģʽ +mcc.session=zԒ... +mcc.session_fail=zԒʧ +mcc.server_protocol=8ŷMinecraft汾{0} (fhv{1}) +mcc.with_forge=, Forge +mcc.handshake=8ֳɹ (ŷID{0}) +mcc.realms_available==LRealms +mcc.realms_join=Ոʹ"realms:<̖>"ŷIPRealms +mcc.generator.generating=ڏ {1} {0} YӍ +mcc.generator.done=ɏ {0} YӍɣʹ {1} +mcc.invaild_config=Ùnʧݔ "{0}new" һµá +mcc.gen_new_config=µÙn "{0}" [debug] # Messages from MCC Debug Mode -debug.color_test=顏色測試:終端應該顯示:{0} -debug.session_cache_ok=§8已成功從磁碟中載入會話資料。 -debug.session_cache_fail=§8無法從磁碟載入快取的會話資料。 -debug.keys_cache_ok=§8已成功從磁碟中載入聊天簽名金鑰。 -debug.keys_cache_fail=§8無法從磁碟中載入聊天簽名金鑰。 -debug.session_id=成功!(會話ID:{0}) -debug.crypto=§8金鑰和雜湊值已生成: -debug.request=§8正在請求{0} +debug.color_test=ɫyԇKˑԓ@ʾ{0} +debug.session_cache_ok=8ѳɹĴŵdԒYϡ +debug.session_cache_fail=8oĴŵdȡĕԒYϡ +debug.keys_cache_ok=8ѳɹĴŵd캞耡 +debug.keys_cache_fail=8oĴŵd캞耡 +debug.session_id=ɹ(ԒID{0}) +debug.crypto=8耺sֵɣ +debug.request=8Ո{0} [error] # Error messages from MCC -error.ping=ping此IP失敗。 -error.unsupported=無法連線到伺服器:不支援此版本! -error.determine=無法確定伺服器版本。 -error.forgeforce=無法為此Minecraft版本強制啟動Forge支援! -error.login=登入失敗: -error.login.migrated=帳戶已遷移,請使用電子郵件作為使用者名稱。 -error.login.server=登入伺服器不可用。請稍後再試。 -error.login.blocked=使用者名稱/密碼錯誤、IP被禁用或登入次數過多。 -error.login.response=伺服器返回了無效的響應。 -error.login.premium=不是Premium使用者。 -error.login.network=網路錯誤。 -error.login.ssl=SSL錯誤。 -error.login.unknown=未知錯誤。 -error.login.cancel=使用者取消。 -error.login_failed=無法登入到此伺服器。 -error.join=加入伺服器時發生錯誤。 -error.connect=無法連線到此IP。 -error.timeout=連線超時 -error.unexpect_response=§8來自伺服器的意外響應(這是Minecraft伺服器嗎?) -error.invalid_response=§8對握手包的響應無效 -error.invalid_encrypt=§8對StartEncryption資料包的響應無效 -error.version_different=§8伺服器報告的版本與手動設定的版本不同。登入可能無法工作。 -error.no_version_report=§8伺服器未報告其協議版本,自動檢測將不起作用。 -error.connection_timeout=§8嘗試連線到此IP時超時。 -error.forge=§8Forge登入握手未成功完成 -error.forge_encrypt=§8Forge StartEncryption握手未成功完成 -error.setting.argument_syntax={0}:無效語法,應為 --argname=value 或 --section.argname=value -error.http_code=§8接收到伺服器錯誤:{0} -error.auth=§8在重新整理身份驗證時接收到伺服器錯誤:{0} -error.realms.ip_error=無法獲取您Realms世界的伺服器IP -error.realms.access_denied=此Realms世界不存在或訪問被拒絕 -error.realms.server_unavailable=Realms伺服器可能需要一些時間來啟動。請稍後再試。 -error.realms.server_id=Realms伺服器ID無效或未知。 -error.realms.disabled=正在嘗試加入Realms世界,但配置中禁用了Realms支援 -error.missing.argument=缺少引數 {0} -error.usage=使用方法: -error.generator.invalid=該生成器命令用法無效! -error.generator.path=提供的資料路徑無效! (路徑不存在或是輸入錯誤) -error.generator.json=提供的路徑必須指向一個.json格式的檔案! +error.ping=pingIPʧ +error.unsupported=oBŷ֧Ԯ˰汾 +error.determine=o_ŷ汾 +error.forgeforce=oMinecraft汾ƆForge֧Ԯ +error.login=ʧ +error.login.migrated=wƣՈʹ]ʹQ +error.login.server=ŷáՈԇ +error.login.blocked=ʹQ/ܴae`IPûΔ^ࡣ +error.login.response=ŷ˟oЧ푑 +error.login.premium=Premiumʹߡ +error.login.network=W·e` +error.login.ssl=SSLe` +error.login.unknown=δ֪e` +error.login.cancel=ʹȡ +error.login_failed=o뵽ŷ +error.join=ŷrle` +error.connect=oBIP +error.timeout=Br +error.unexpect_response=8ŷ푑@Minecraftŷ᣿ +error.invalid_response=8ְ푑oЧ +error.invalid_encrypt=8StartEncryptionYϰ푑oЧ +error.version_different=8ŷİ汾cքOİ汾ͬܟo +error.no_version_report=8ŷδfh汾Ԅәzyá +error.connection_timeout=8LԇBIPrr +error.forge=8Forgeδɹ +error.forge_encrypt=8Forge StartEncryptionδɹ +error.setting.argument_syntax={0}oЧZ --argname=value --section.argname=value +error.http_code=8յŷe`{0} +error.auth=8Crյŷe`{0} +error.realms.ip_error=o@ȡRealmsŷIP +error.realms.access_denied=Realms粻ڻLܽ^ +error.realms.server_unavailable=RealmsŷҪһЩrg톢ӡՈԇ +error.realms.server_id=RealmsŷIDoЧδ֪ +error.realms.disabled=ڇLԇRealms磬нRealms֧Ԯ +error.missing.argument=ȱ {0} +error.usage=ʹ÷ +error.generator.invalid=ԓ÷oЧ +error.generator.path=ṩY·oЧ! (·ڻݔe` +error.generator.json=ṩ·ָһ.jsonʽęn! [internal command] # MCC internal help command -icmd.help=help <命令名稱> :顯示有關命令的簡要幫助。 -icmd.unknown=未知命令 '{0}'。請使用 'help' 命令來獲取命令列表。 -icmd.list=help <命令名稱>。可用命令:{0}。在伺服器上獲取幫助,請改用 '{1}send /help'。 -icmd.error=OnInternalCommand: 來自{0}的錯誤{1} +icmd.help=help @ʾPĺҪ +icmd.unknown=δ֪ '{0}'Ոʹ 'help' @ȡб +icmd.list=help {0}ŷϫ@ȡՈ '{1}send /help' +icmd.error=OnInternalCommand: {0}e`{1} [exception] # Exception messages threw by MCC -exception.user_logout=使用者發起的登出應該通過呼叫Disconnect()來完成 -exception.unknown_direction=未知方向 -exception.palette.block=請為此Minecraft版本更新方塊型別處理。詳細請參考 Material.cs -exception.palette.entity=請為此Minecraft版本更新實體型別處理。詳細請參考 EntityType.cs -exception.palette.item=請為此Minecraft版本更新物品型別處理。詳細請參考 ItemType.cs -exception.palette.packet=請為此Minecraft版本更新資料包型別調色盤。詳細請參考 PacketTypePalette.cs -exception.packet_process=無法處理傳入的{0}型別的資料包。(資料包ID:{1},協議:{2},登陸階段:{3},內部異常:{4})。 -exception.version_unsupport=版本{0}的協議未被支援。 -exception.chatbot.init=不應在建構函式中呼叫ChatBot的方法,因為作為API處理程式的模組尚未初始化。請重寫 Initialize() 或 AfterGameJoined() 來執行初始化任務。 -exception.csrunner.invalid_head=提供的指令碼沒有有效的MCCScript頭 +exception.user_logout=ʹ߰lĵdzԓͨ^Disconnect() +exception.unknown_direction=δ֪ +exception.palette.block=ՈMinecraft汾·K̈́e̎ԔՈ Material.cs +exception.palette.entity=ՈMinecraft汾Œẅ́e̎ԔՈ EntityType.cs +exception.palette.item=ՈMinecraft汾Ʒ̈́e̎ԔՈ ItemType.cs +exception.palette.packet=ՈMinecraft汾Yϰ̈́e{ɫPԔՈ PacketTypePalette.cs +exception.packet_process=o̎{0}̈́eYϰ(YϰID{1}fh{2}AΣ{3}Ȳ{4}) +exception.version_unsupport=汾{0}ąfhδ֧Ԯ +exception.chatbot.init=ڽʽкChatBotķAPI̎ʽģMδʼՈ، Initialize() AfterGameJoined() гʼ΄ա +exception.csrunner.invalid_head=ṩָa]ЧMCCScript^ [chatbot] # ChatBot API -chatbot.reconnect=[{0}] 斷開並重新連線到伺服器 +chatbot.reconnect=[{0}] _KBŷ [filemonitor] # FileMonitor -filemonitor.init=§8[{0}] 正在為檔案{1}初始化FileSystemWatcher -filemonitor.fail=§8[{0}] 無法初始化FileSystemWatcher,正在使用輪詢重試 +filemonitor.init=8[{0}] ڞn{1}ʼFileSystemWatcher +filemonitor.fail=8[{0}] oʼFileSystemWatcherʹ݆ԃԇ [extra] # Inventory, Terrain & Movements, Entity related messages # Terrain & Movements -extra.terrainandmovement_enabled=地形和移動處理現在已啟用。 -extra.terrainandmovement_disabled=§c該遊戲版本目前還不支援地形和移動處理。 -extra.terrainandmovement_required=請先在配置檔案中啟用地形和移動處理。 +extra.terrainandmovement_enabled=κƄ̎Fцá +extra.terrainandmovement_disabled=cԓ[汾Ŀǰ߀֧ԮκƄ̎ +extra.terrainandmovement_required=ՈÙnІõκƄ̎ # Inventory -extra.inventory_enabled=庫存(物品)處理現在已啟用。 -extra.inventory_disabled=§c該MC版本目前未支援處理庫存(物品)。 -extra.inventory_required=請先在配置檔案中啟用"Main.Advanced.inventory_handling"。 -extra.inventory_interact=請使用 /inventory 來與其互動。 -extra.inventory_open=容器# {0}已開啟:{1} -extra.inventory_close=容器# {0}已關閉。 +extra.inventory_enabled=(Ʒ)̎Fцá +extra.inventory_disabled=cԓMC汾Ŀǰδ֧Ԯ̎(Ʒ) +extra.inventory_required=ՈÙnІ"Main.Advanced.inventory_handling" +extra.inventory_interact=Ոʹ /inventory c以ӡ +extra.inventory_open=# {0}_{1} +extra.inventory_close=# {0}P] # Entity -extra.entity_disabled=§c該MC版本當前還不支援處理實體。 -extra.entity_required=請先在配置檔案中啟用"Main.Advanced.entity_handling"。 +extra.entity_disabled=cԓMC汾ǰ߀֧Ԯ̎팍w +extra.entity_required=ՈÙnІ"Main.Advanced.entity_handling" [forge] # Messages from Forge handler -forge.version=§8Forge協議版本:{0} -forge.send_mod=§8向伺服器傳送偽造的forge模組列表... -forge.accept=§8接受來自的伺服器模組列表... -forge.registry=§8已接收的登錄檔包含{0}個條目 -forge.registry_2=§8已接收登錄檔{0},包含{1}個條目 -forge.accept_registry=§8接受伺服器登錄檔... -forge.complete=Forge伺服器連線完成! -forge.with_mod=§8伺服器正在執行Forge,有{0}個模組。 -forge.no_mod=§8正在執行的伺服器沒有Forge模組。 -forge.mod_list=§8模組列表: +forge.version=8Forgefh汾{0} +forge.send_mod=8ŷ͂forgeģMб... +forge.accept=8܁ԵŷģMб... +forge.registry=8ѽյĵ䛙n{0}lĿ +forge.registry_2=8ѽյ䛙n{0}{1}lĿ +forge.accept_registry=8ŷ䛙n... +forge.complete=ForgeŷB! +forge.with_mod=8ŷڈForge{0}ģM +forge.no_mod=8ڈеŷ]ForgeģM +forge.mod_list=8ģMб: # FML2 -forge.fml2.mod=§8收到FM2伺服器模組列表 -forge.fml2.mod_send=§8發回FML2客戶端的模組列表 -forge.fml2.registry=§8確認FML2伺服器登錄檔:{0} -forge.fml2.config=§8確認FML2伺服器配置:{0} -forge.fml2.unknown=§8收到未知的FML2握手資訊,編號:{0} -forge.fml2.unknown_channel=§8忽略未知的FML2登入訊息通道:{0} +forge.fml2.mod=8յFM2ŷģMб +forge.fml2.mod_send=8lFML2͑˵ģMб +forge.fml2.registry=8_JFML2ŷ䛙n{0} +forge.fml2.config=8_JFML2ŷã{0} +forge.fml2.unknown=8յδ֪FML2YӍ̖{0} +forge.fml2.unknown_channel=8δ֪FML2ӍϢͨ{0} [cache] # Session Cache -cache.loading=§8載入Minecraft配置檔案:{0} -cache.loaded=§8已載入會話:{0}:{1} -cache.converting=§8從磁碟轉換會話快取:{0} -cache.read_fail=§8無法從磁碟讀取序列化會話快取:{0} -cache.malformed=§8從磁碟讀取序列化會話快取時,獲取到格式錯誤的資料:{0} -cache.loading_session=§8從磁碟載入會話快取:{0} -cache.ignore_string=§8忽略會話令牌字串'{0}':{1} -cache.ignore_line=§8忽略無效的會話令牌行:{0} -cache.read_fail_plain=§8無法從磁碟讀取會話快取:{0} -cache.saving=§8將會話快取儲存到磁碟 -cache.save_fail=§8無法將會話快取寫入磁碟:{0} +cache.loading=8dMinecraftÙn{0} +cache.loaded=8dԒ{0}:{1} +cache.converting=8ĴŵDQԒȡ{0} +cache.read_fail=8oĴŵxȡлԒȡ{0} +cache.malformed=8ĴŵxȡлԒȡr@ȡʽe`Yϣ{0} +cache.loading_session=8ĴŵdԒȡ{0} +cache.ignore_string=8ԕԒִ'{0}'{1} +cache.ignore_line=8ԟoЧĕԒУ{0} +cache.read_fail_plain=8oĴŵxȡԒȡ{0} +cache.saving=8Ԓȡ浽ŵ +cache.save_fail=8oԒȡŵ{0} # Profile Key Cache -cache.loading_keys=§8從磁碟載入聊天簽名金鑰快取: {0} -cache.loaded_keys=§8已載入簽名金鑰,下次重新整理於 {0} -cache.ignore_string_keys=§8忽略聊天簽名金鑰字串 '{0}':{1} -cache.ignore_line_keys=§8忽略無效的聊天簽名金鑰行:{0} -cache.read_fail_plain_keys=§8無法從磁碟讀取聊天簽名金鑰快取:{0} -cache.saving_keys=§8將聊天簽名金鑰儲存到磁碟 -cache.save_fail_keys=§8無法將聊天簽名金鑰寫入磁碟:{0} +cache.loading_keys=8Ĵŵd캞耿ȡ: {0} +cache.loaded_keys=8d뺞耣´ {0} +cache.ignore_string_keys=8캞ִ '{0}'{1} +cache.ignore_line_keys=8ԟoЧ캞У{0} +cache.read_fail_plain_keys=8oĴŵxȡ캞耿ȡ{0} +cache.saving_keys=8캞考浽ŵ +cache.save_fail_keys=8o캞而ŵ{0} [proxy] -proxy.connected=§8已連線到代理{0}:{1} +proxy.connected=8B{0}:{1} [chat] # Chat Parser -chat.download=§8正在從Mojang伺服器下載語言檔案 '{0}.lang'... -chat.request=§8正在請求{0}... -chat.done=§8下載完成。檔案另存為 '{0}' -chat.fail=§8下載檔案失敗。 -chat.from_dir=§8預設為你的Minecraft目錄中的en_GB.lang -chat.loaded=§8已載入翻譯檔案。 -chat.not_found=§8找不到翻譯檔案:'{0}'\n如果沒有此檔案,某些資訊將無法正確列印。 -chat.message_chain_broken=玩家 {0} 的訊息簽名鏈已經被破壞。(簽名不在可信) +chat.download=8ڏMojangŷdZԙn '{0}.lang'... +chat.request=8Ո{0}... +chat.done=8dɡn '{0}' +chat.fail=8dnʧ +chat.from_dir=8AOMinecraftĿеen_GB.lang +chat.loaded=8d뷭gn +chat.not_found=8Ҳgn'{0}'\n]д˙nijЩYӍo_ӡ +chat.message_chain_broken= {0} ӍϢѽƉġڿţ [general] # General message/information (i.e. Done) -general.done=完成 -general.fail=失敗 -general.bot_unload=將會解除安裝此bot。 -general.available_cmd=可用命令:{0} +general.done= +general.fail=ʧ +general.bot_unload=bbot +general.available_cmd={0} [cmd] # Commands. Naming style: cmd.. # Animation -cmd.animation.desc=揮動你的手臂。 +cmd.animation.desc=]ֱۡ # Bots -cmd.bots.desc=列出全部 ChatBot ,載入或解除安裝一個 ChatBot。 -cmd.bots.list=已載入的 ChatBot -cmd.bots.notfound=該 ChatBot 並未載入,請檢查輸入。 -cmd.bots.noloaded=沒有 ChatBot 被載入。 -cmd.bots.unloaded=成功解除安裝 ChatBot:{0} -cmd.bots.unloaded_all=成功解除安裝所有 ChatBot。 +cmd.bots.desc=гȫ ChatBot dbһ ChatBot +cmd.bots.list=d ChatBot +cmd.bots.notfound=ԓ ChatBot Kδd룬Ոzݔ롣 +cmd.bots.noloaded=] ChatBot d롣 +cmd.bots.unloaded=ɹb ChatBot{0} +cmd.bots.unloaded_all=ɹb ChatBot # ChangeSlot -cmd.changeSlot.desc=變更快捷欄欄位 -cmd.changeSlot.nan=無法變更欄位:不是數字 -cmd.changeSlot.changed=已變更為欄位{0} -cmd.changeSlot.fail=無法變更欄位 +cmd.changeSlot.desc=׃ݙڙλ +cmd.changeSlot.nan=o׃λǔ +cmd.changeSlot.changed=׃λ{0} +cmd.changeSlot.fail=o׃λ # Chunk -cmd.chunk.desc=顯示區塊載入狀態。\n如果顯示錯亂竟在設定中更改 EnableEmoji=false 。 -cmd.chunk.current=當前位置:{0},所在區塊:({1}, {2})。 -cmd.chunk.marked=標記的位置: -cmd.chunk.chunk_pos=區塊:({0}, {1})。 -cmd.chunk.outside=§x§0由於被標記的區塊距離玩家太遠,它不會被顯示在圖中§r -cmd.chunk.icon=玩家:{0},標記的區塊:{1},未收到:{2},載入中:{3},已載入:{4} -cmd.chunk.for_debug=§x§0此命令僅用於除錯使用,確保你已經瞭解執行該命令會造成的影響。§r +cmd.chunk.desc=@ʾ^KdB\n@ʾeyOи EnableEmoji=false +cmd.chunk.current=ǰλã{0}څ^K({1}, {2}) +cmd.chunk.marked=ӛλã +cmd.chunk.chunk_pos=^K({0}, {1}) +cmd.chunk.outside=x0춱ӛą^Kx̫h@ʾڈDСr +cmd.chunk.icon=:{0}ӛą^K:{1}δյ:{2}d:{3}d:{4} +cmd.chunk.for_debug=x0H춳eʹã_ѽtԓɵӰ푡r # Connect -cmd.connect.desc=連線到指定的伺服器。 -cmd.connect.unknown=未知帳戶 '{0}'。 -cmd.connect.invalid_ip=無效的伺服器IP '{0}'。 +cmd.connect.desc=Bָŷ +cmd.connect.unknown=δ֪ '{0}' +cmd.connect.invalid_ip=oЧŷIP '{0}' # Debug -cmd.debug.desc=切換除錯訊息。 -cmd.debug.state_on=除錯訊息現在已開啟 -cmd.debug.state_off=除錯訊息現在已關閉 +cmd.debug.desc=ГQeӍϢ +cmd.debug.state_on=eӍϢF_ +cmd.debug.state_off=eӍϢFP] # Dig -cmd.dig.desc=試圖破壞一個方塊 -cmd.dig.too_far=你離這個方塊太遠了。 -cmd.dig.no_block=這個地方沒有方塊 (空氣) -cmd.dig.dig=嘗試挖掘位於({0}, {1}, {2})的方塊({3})。 -cmd.dig.fail=無法開始挖掘方塊。 +cmd.dig.desc=ԇDƉһK +cmd.dig.too_far=x@K̫hˡ +cmd.dig.no_block=@ط]зK (՚) +cmd.dig.dig=Lԇھλ({0}, {1}, {2})ķK({3}) +cmd.dig.fail=o_ʼھ򷽉K # Entitycmd -cmd.entityCmd.attacked=已攻擊實體 -cmd.entityCmd.used=已使用實體 -cmd.entityCmd.not_found=找不到實體 +cmd.entityCmd.attacked=ѹw +cmd.entityCmd.used=ʹÌw +cmd.entityCmd.not_found=Ҳw -cmd.entityCmd.entity=實體 -cmd.entityCmd.entities=實體集 -cmd.entityCmd.nickname=暱稱 -cmd.entityCmd.customname=自定義名稱 -cmd.entityCmd.latency=延遲 -cmd.entityCmd.item=物品 -cmd.entityCmd.equipment=裝備 -cmd.entityCmd.mainhand=主手 -cmd.entityCmd.offhane=副手 -cmd.entityCmd.helmet=頭盔 -cmd.entityCmd.chestplate=胸甲 -cmd.entityCmd.leggings=護腿 -cmd.entityCmd.boots=靴子 -cmd.entityCmd.pose=姿勢 -cmd.entityCmd.health=生命值 -cmd.entityCmd.distance=距離 -cmd.entityCmd.location=位置 -cmd.entityCmd.type=型別 +cmd.entityCmd.entity=w +cmd.entityCmd.entities=w +cmd.entityCmd.nickname=Q +cmd.entityCmd.customname=ԶxQ +cmd.entityCmd.latency=t +cmd.entityCmd.item=Ʒ +cmd.entityCmd.equipment=b +cmd.entityCmd.mainhand= +cmd.entityCmd.offhane= +cmd.entityCmd.helmet=^ +cmd.entityCmd.chestplate=ؼ +cmd.entityCmd.leggings=o +cmd.entityCmd.boots=ѥ +cmd.entityCmd.pose=˄ +cmd.entityCmd.health=ֵ +cmd.entityCmd.distance=x +cmd.entityCmd.location=λ +cmd.entityCmd.type=̈́e # Exec If -cmd.execif.desc=允許你在某個條件成立時執行一個命令。(你可以使用"MinecraftClient.ini"中的變數和使用"/set"命令定義的變數,以及CSharp表示式)。 -cmd.execif.executed=條件'{0}'滿足,已執行命令'{1}',得到結果'{2}'。 -cmd.execif.executed_no_output=條件'{0}'滿足,已執行命令'{1}',該命令沒有返回任何結果。 -cmd.execif.error_occured=在執行命令 {0} 時出現錯誤。 -cmd.execif.error=錯誤:{0} +cmd.execif.desc=Sijlrһ(ʹ"MinecraftClient.ini"е׃ʹ"/set"x׃ԼCSharpʾʽ +cmd.execif.executed=l'{0}'M㣬ш'{1}'õY'{2}' +cmd.execif.executed_no_output=l'{0}'M㣬ш'{1}'ԓ]зκνY +cmd.execif.error_occured=ڈ {0} rFe` +cmd.execif.error=e`{0} # Exec Multi -cmd.execmulti.desc=依次執行多個命令。 -cmd.execmulti.executed=執行了命令 '{0}' , -cmd.execmulti.result=結果為 '{0}'! -cmd.execmulti.no_result=沒有返回結果! +cmd.execmulti.desc=Έж +cmd.execmulti.executed= '{0}' +cmd.execmulti.result=Y '{0}' +cmd.execmulti.no_result=]зؽY # Exit -cmd.exit.desc=斷開與伺服器的連線。 +cmd.exit.desc=_cŷB # Health -cmd.health.desc=顯示生命值和飽食度。 -cmd.health.response=生命值:{0},飽食度:{1},等級:{2},總經驗值:{3} +cmd.health.desc=@ʾֵʳȡ +cmd.health.response=ֵ{0}ʳȣ{1}ȼ{2}ֵ{3} # Inventory -cmd.inventory.desc=容器相關命令 -cmd.inventory.creative_done=向容器#{2}請求{0} x{1} -cmd.inventory.creative_delete=請求清除欄位 #{0} -cmd.inventory.creative_fail=請求創造模式操作失敗 -cmd.inventory.need_creative=你必須在創造模式 -cmd.inventory.container_not_found=找不到容器,請使用顯式ID重試 -cmd.inventory.close=關閉容器 #{0} -cmd.inventory.close_fail=關閉容器失敗 #{0} -cmd.inventory.not_exist=容器#{0}不存在 -cmd.inventory.inventory=容器 -cmd.inventory.inventories=容器 -cmd.inventory.inventories_available=可用容器 -cmd.inventory.hotbar=您選擇的快捷欄是{0} -cmd.inventory.damage=武器傷害值 -cmd.inventory.left=左 -cmd.inventory.right=右 -cmd.inventory.middle=中間 -cmd.inventory.clicking={0}鍵點選容器#{2}中的欄位{1} -cmd.inventory.shiftclick=按住Shift鍵點選容器#{1}中的欄位{0} -cmd.inventory.shiftclick_fail=執行Shift點選失敗,這可能是因為該容器型別目前不被支援。 -cmd.inventory.no_item=欄位#{0}中沒有物品 -cmd.inventory.drop=從欄位#{0}中丟棄了1個物品 -cmd.inventory.drop_stack=從欄位#{0}中丟棄了所有堆疊的物品 +cmd.inventory.desc=P +cmd.inventory.creative_done=#{2}Ո{0} x{1} +cmd.inventory.creative_delete=Ոλ #{0} +cmd.inventory.creative_fail=Ոģʽʧ +cmd.inventory.need_creative=ڄģʽ +cmd.inventory.container_not_found=ҲՈʹ@ʽIDԇ +cmd.inventory.close=P] #{0} +cmd.inventory.close_fail=P]ʧ #{0} +cmd.inventory.not_exist=#{0} +cmd.inventory.inventory= +cmd.inventory.inventories= +cmd.inventory.inventories_available= +cmd.inventory.hotbar=xĿݙ{0} +cmd.inventory.damage=ֵ +cmd.inventory.left= +cmd.inventory.right= +cmd.inventory.middle=g +cmd.inventory.clicking={0}Icx#{2}еęλ{1} +cmd.inventory.shiftclick=סShiftIcx#{1}еęλ{0} +cmd.inventory.shiftclick_fail=Shiftcxʧ@ԓ̈́eĿǰ֧Ԯ +cmd.inventory.no_item=λ#{0}Л]Ʒ +cmd.inventory.drop=ęλ#{0}ЁG1Ʒ +cmd.inventory.drop_stack=ęλ#{0}ЁGжѯBƷ # Inventory Help -cmd.inventory.help.basic=基本用法 -cmd.inventory.help.available=可用操作 -cmd.inventory.help.help={0}\n使用 '/inventory help ' 獲取幫助。\n'player' 和 'container' 可以簡化為 'p' 和 'c'。\n請注意,'[]' 中的引數是可選的。 -cmd.inventory.help.usage=用法 -cmd.inventory.help.list=列出所有容器。 -cmd.inventory.help.close=關閉開啟的容器。 -cmd.inventory.help.click=單擊物品。 -cmd.inventory.help.shiftclick=按住Shift鍵點選一個物品。 -cmd.inventory.help.drop=從容器中丟棄物品。 -cmd.inventory.help.creativegive=在創造模式中給予物品。 -cmd.inventory.help.creativedelete=在創造性模式中清除欄位。 -cmd.inventory.help.inventories=列出所有可用的視窗。 -cmd.inventory.help.search=在開啟的所有視窗中搜索物品。 -cmd.inventory.help.unknown=未知操作。 -cmd.inventory.found_items=找到物品 -cmd.inventory.no_found_items=在任何視窗中都沒有找到該物品! +cmd.inventory.help.basic=÷ +cmd.inventory.help.available=ò +cmd.inventory.help.help={0}\nʹ '/inventory help ' @ȡ\n'player' 'container' Ժ 'p' 'c'\nՈע⣬'[]' еǿxġ +cmd.inventory.help.usage=÷ +cmd.inventory.help.list=г +cmd.inventory.help.close=P]_ +cmd.inventory.help.click=ΓƷ +cmd.inventory.help.shiftclick=סShiftIcxһƷ +cmd.inventory.help.drop=ЁGƷ +cmd.inventory.help.creativegive=ڄģʽнoƷ +cmd.inventory.help.creativedelete=ڄģʽλ +cmd.inventory.help.inventories=гпõҕ +cmd.inventory.help.search=_ҕƷ +cmd.inventory.help.unknown=δ֪ +cmd.inventory.found_items=ҵƷ +cmd.inventory.no_found_items=κҕж]ҵԓƷ # Leave bed -cmd.bed.desc=用於右鍵床開始睡覺或離開正在睡覺的床。 -cmd.bed.leaving=已向伺服器傳送離開床的資料包。 -cmd.bed.trying_to_use=試圖在位於 (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) 上的床上睡覺,結果:{3} -cmd.bed.in=成功地躺在了床上! -cmd.bed.not_in=上床睡覺失敗了。(PS: 你必須使用床頭對應的座標) -cmd.bed.not_a_bed=位於 (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) 的方塊不是一個床! -cmd.bed.searching=在半徑為{0}的範圍內尋找床... -cmd.bed.bed_not_found=沒有找到床! -cmd.bed.found_a_bed_at=在 (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) 找到了一個床。 -cmd.bed.cant_reach_safely=無法安全地到達床邊! -cmd.bed.moving=正在移動到床所在的位置: (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) -cmd.bed.failed_to_reach_in_time=無法在30秒內到達(X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}),放棄本次尋路。 +cmd.bed.desc=I_ʼ˯Xx_˯XĴ +cmd.bed.leaving=ŷx_Yϰ +cmd.bed.trying_to_use=ԇDλ (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) ϵĴ˯XY{3} +cmd.bed.in=ɹ˴ϣ +cmd.bed.not_in=ϴ˯XʧˡPS: ʹô^ˣ +cmd.bed.not_a_bed=λ (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) ķKһ +cmd.bed.searching=ڰ돽{0}ĹȌҴ... +cmd.bed.bed_not_found=]ҵ +cmd.bed.found_a_bed_at= (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) ҵһ +cmd.bed.cant_reach_safely=oȫص_߅! +cmd.bed.moving=Ƅӵڵλã (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) +cmd.bed.failed_to_reach_in_time=o30ȵ_(X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0})ŗΌ· # List -cmd.list.desc=獲取玩家列表。 -cmd.list.players=玩家列表:{0} +cmd.list.desc=@ȡб +cmd.list.players=б{0} # Log -cmd.log.desc=將文字記錄到控制檯。 +cmd.log.desc=ӛ䛵ƙ # Look -cmd.look.desc=檢視方向或座標。 -cmd.look.unknown=未知方向 '{0}'。 -cmd.look.at=當前視角 偏航角:{0} 俯仰角:{1}。 -cmd.look.block=正看向位於 {0} 的方塊。 -cmd.look.inspection=與視線相交的第一個方塊是 {0} ({1:0}, {2:0}, {3:0}),距離玩家 {4:0.0}({5:0.0})。 -cmd.look.noinspection=在 {0} 米內沒有任何方塊與視線相交。 +cmd.look.desc=zҕˡ +cmd.look.unknown=δ֪ '{0}' +cmd.look.at=ǰҕ ƫǣ{0} ǣ{1} +cmd.look.block=λ {0} ķK +cmd.look.inspection=cҕཻĵһK {0} ({1:0}, {2:0}, {3:0})x {4:0.0}({5:0.0}) +cmd.look.noinspection= {0} ׃ț]κηKcҕཻ # Move -cmd.move.desc=移動或開始移動。 -cmd.move.enable=在下次伺服器登入、重生或更換世界時啟用地形和移動。 -cmd.move.disable=禁用地形和移動。 -cmd.move.moving=移動{0} -cmd.move.dir_fail=不能朝此方向移動。 -cmd.move.walk=移動到{0} -cmd.move.fail=無法計算到達{0}的路徑。 -cmd.move.suggestforce=無法計算安全到達{0}的路徑. 請使用 -f 引數允許不安全移動。 -cmd.move.gravity.enabled=重力已開啟。 -cmd.move.gravity.disabled=重力已關閉。 -cmd.move.chunk_loading_status=區塊載入進度:{0:P} - 共{2}個,載入完成了{1}個。 -cmd.move.chunk_not_loaded=目標位置所在的區塊還沒有被載入。你可以使用"/chunk status {0:0.0} {1:0.0} {2:0.0}"來檢視區塊的載入狀態。 +cmd.move.desc=Ƅӻ_ʼƄӡ +cmd.move.enable=´ŷ롢QrõκƄӡ +cmd.move.disable=õκƄӡ +cmd.move.moving=Ƅ{0} +cmd.move.dir_fail=ܳ˷Ƅӡ +cmd.move.walk=Ƅӵ{0} +cmd.move.fail=oӋ㵽_{0}· +cmd.move.suggestforce=oӋ㰲ȫ_{0}·. Ոʹ -f SȫƄӡ +cmd.move.gravity.enabled=_ +cmd.move.gravity.disabled=P] +cmd.move.chunk_loading_status=^KdMȣ{0:P} - {2}d{1} +cmd.move.chunk_not_loaded=Ŀλڵą^K߀]бd롣ʹ"/chunk status {0:0.0} {1:0.0} {2:0.0}"zҕ^KdB # Reco -cmd.reco.desc=重新啟動並重新連線到伺服器。 +cmd.reco.desc=†ӁKBŷ # Reload -cmd.reload.started=重新載入設定中... -cmd.reload.warning1=這條命令不會影響在連線到伺服器之前的某些設定。 -cmd.reload.warning2=一些通過命令列引數傳遞的設定可能會被覆蓋! -cmd.reload.warning3=你有可能需要重新連線(/reco)才能使某些設定生效。 -cmd.reload.warning4=由於技術限制,ReplayCapturer 將不會被強制過載! -cmd.reload.finished=重新載入設定完成! -cmd.reload.desc=重新載入MCC的設定。 +cmd.reload.started=dO... +cmd.reload.warning1=@lӰBŷ֮ǰijЩO +cmd.reload.warning2=һЩͨ^fOܕw +cmd.reload.warning3=пҪB(/reco)ʹijЩOЧ +cmd.reload.warning4=춼gƣReplayCapturer ^d! +cmd.reload.finished=dOɣ +cmd.reload.desc=dMCCO # Respawn -cmd.respawn.desc=如果你死亡了,請用這個來重生。 -cmd.respawn.done=你重生了。 +cmd.respawn.desc=ˣՈ@ +cmd.respawn.done=ˡ # Script -cmd.script.desc=執行指令碼檔案。 +cmd.script.desc=ָan # Send -cmd.send.desc=傳送聊天資訊或命令。 +cmd.send.desc=YӍ # Set -cmd.set.desc=設定自定義 %variable%。 -cmd.set.format=變數名範圍必須為 A-Za-z0-9。 +cmd.set.desc=OԶx %variable% +cmd.set.format=׃횞 A-Za-z0-9 # SetRnd -cmd.setrnd.desc=隨機為自定義 %變數名% 賦值。 -cmd.setrndnum.format=setrnd 變數名 -7to17 -cmd.setrndstr.format=setrnd 變數名 字串1 "\"字串2\" 字串3" +cmd.setrnd.desc=SCԶx %׃% xֵ +cmd.setrndnum.format=setrnd ׃ -7to17 +cmd.setrndstr.format=setrnd ׃ ִ1 "\"ִ2\" ִ3" # Sneak -cmd.sneak.desc=切換到潛行 -cmd.sneak.on=現在你在潛行狀態。 -cmd.sneak.off=你不在潛行狀態了。 +cmd.sneak.desc=ГQ +cmd.sneak.on=FڝРB +cmd.sneak.off=㲻ڝРBˡ # DropItem -cmd.dropItem.desc=丟棄玩家容器中的指定型別物品或開啟的容器 -cmd.dropItem.dropped=已從容器#{1}中丟棄所有{0} -cmd.dropItem.unknown_item=未知物品:{0} +cmd.dropItem.desc=Gёָ́eƷ_ +cmd.dropItem.dropped=я#{1}ЁG{0} +cmd.dropItem.unknown_item=δ֪Ʒ{0} # Tps -cmd.tps.desc=顯示伺服器當前tps (tick per second)。(可能不精確) -cmd.tps.current=當前TPS +cmd.tps.desc=@ʾŷǰtps (tick per second)ܲ_ +cmd.tps.current=ǰTPS # Useblock -cmd.useblock.desc=放置一個方塊或開啟箱子 -cmd.useblock.use=使用位於 ({0:0.0}, {1:0.0}, {2:0.0}) 的 {3}。 +cmd.useblock.desc=һK_ +cmd.useblock.use=ʹλ ({0:0.0}, {1:0.0}, {2:0.0}) {3} # Useitem -cmd.useitem.desc=使用(左鍵單擊)手上的物品 -cmd.useitem.use=使用了一個物品。 +cmd.useitem.desc=ʹãIΓϵƷ +cmd.useitem.use=ʹһƷ [bot] # ChatBots. Naming style: bot.. # Alerts -bot.alerts.start_rain=§c天氣變化:開始下雨了。§r -bot.alerts.end_rain=§c天氣變化:雨停了。§r -bot.alerts.start_thunderstorm=§c天氣變化:現在是雷雨天。§r -bot.alerts.end_thunderstorm=§c天氣變化:現在不再是雷雨天了。§r +bot.alerts.start_rain=c׃_ʼˡr +bot.alerts.end_rain=c׃ͣˡr +bot.alerts.start_thunderstorm=c׃F졣r +bot.alerts.end_thunderstorm=c׃Fڲˡr # Anti AFK -bot.antiafk.not_using_terrain_handling=當前未啟用地形處理,如果你想使用相關的特性,請在設定中啟用它。當前將繼續使用替代方法執行(定時傳送命令)。 -bot.antiafk.swapping=最短時間大於最長時間,已將它們交換。 -bot.antiafk.invalid_walk_range=當前提供的行走範圍無效,它必須是一個大於0的正整數,將使用預設值5! +bot.antiafk.not_using_terrain_handling=ǰδõ̎ʹPԣՈOІǰ^mʹУr +bot.antiafk.swapping=̕rgLrgьQ +bot.antiafk.invalid_walk_range=ǰṩ߹oЧһ0ʹAOֵ5! # AutoAttack -bot.autoAttack.invalidcooldown=攻擊冷卻時間值不能小於0,已使用自動作為預設值 +bot.autoAttack.invalidcooldown=srgֵС0ʹԄAOֵ # AutoCraft -bot.autoCraft.cmd=自動製作ChatBot命令 -bot.autoCraft.alias=自動製作ChatBot命令的別名 -bot.autoCraft.cmd.list=已載入{0}個配方:{1} -bot.autoCraft.cmd.resetcfg=將配置重置為預設值 -bot.autoCraft.recipe_not_exist=指定的配方名稱不存在。請檢查配置檔案。 -bot.autoCraft.no_recipe_name=請指定要製作的配方名稱。 -bot.autoCraft.stop=AutoCraft已停止 -bot.autoCraft.available_cmd=可用命令:{0}。可使用 /autocraft help <命令名> 瞭解更多資訊。您可以使用 /ac 作為命令別名。 -bot.autoCraft.help.load=載入配置檔案。 -bot.autoCraft.help.list=列出可用配方。 -bot.autoCraft.help.reload=重新載入配置檔案。 -bot.autoCraft.help.resetcfg=將預設示例配置寫入預設位置。 -bot.autoCraft.help.start=開始製作。用法:/autocraft start <配方名稱> -bot.autoCraft.help.stop=停止當前正在進行的製作過程 -bot.autoCraft.help.help=獲取命令描述。用法: /autocraft help <命令名> -bot.autoCraft.loaded=已成功載入 -bot.autoCraft.start=AutoCraft啟動中:{0} -bot.autoCraft.start_fail=無法啟動AutoCraft。請檢查用於製作{0}的可用材料 -bot.autoCraft.table_not_found=找不到工作臺 -bot.autoCraft.close_inventory=容器#{0}被AutoCraft關閉 -bot.autoCraft.missing_material=缺失材料:{0} -bot.autoCraft.aborted=製作被終止!請檢查可用材料。 -bot.autoCraft.craft_fail=製作失敗!等待更多材料 -bot.autoCraft.timeout=動作超時!原因:{0} -bot.autoCraft.error.config=分析配置時出錯:{0} -bot.autoCraft.exception.name_miss=解析配方時缺少配方名稱 -bot.autoCraft.exception.duplicate=指定了重複的配方名稱:{0} -bot.autoCraft.debug.no_config=找不到配置。請新建一個。 -bot.autocraft.invaild_slots=配方的物品數量不匹配,已自動調整。 -bot.autocraft.invaild_invaild_result=無效的輸出物品! +bot.autoCraft.cmd=ԄuChatBot +bot.autoCraft.alias=ԄuChatBotĄe +bot.autoCraft.cmd.list=d{0}䷽{1} +bot.autoCraft.cmd.resetcfg=ÞAOֵ +bot.autoCraft.recipe_not_exist=ָ䷽QڡՈzÙn +bot.autoCraft.no_recipe_name=ՈָҪu䷽Q +bot.autoCraft.stop=AutoCraftֹͣ +bot.autoCraft.available_cmd={0}ʹ /autocraft help <> tYӍʹ /ac e +bot.autoCraft.help.load=dÙn +bot.autoCraft.help.list=г䷽ +bot.autoCraft.help.reload=dÙn +bot.autoCraft.help.resetcfg=AOʾÌAOλá +bot.autoCraft.help.start=_ʼu÷/autocraft start <䷽Q> +bot.autoCraft.help.stop=ֹͣǰMеu^ +bot.autoCraft.help.help=@ȡ÷ /autocraft help <> +bot.autoCraft.loaded=ѳɹd +bot.autoCraft.start=AutoCraftУ{0} +bot.autoCraft.start_fail=oAutoCraftՈzu{0}Ŀò +bot.autoCraft.table_not_found=Ҳ_ +bot.autoCraft.close_inventory=#{0}AutoCraftP] +bot.autoCraft.missing_material=ȱʧϣ{0} +bot.autoCraft.aborted=uKֹՈzòϡ +bot.autoCraft.craft_fail=uʧȴ +bot.autoCraft.timeout=rԭ{0} +bot.autoCraft.error.config=Õre{0} +bot.autoCraft.exception.name_miss=䷽rȱ䷽Q +bot.autoCraft.exception.duplicate=ָ}䷽Q{0} +bot.autoCraft.debug.no_config=ҲáՈ½һ +bot.autocraft.invaild_slots=䷽Ʒƥ䣬Ԅ{ +bot.autocraft.invaild_invaild_result=oЧݔƷ # AutoDig -bot.autodig.start_delay=將在 {0:0.0} 秒後開始自動挖掘。 -bot.autodig.dig_timeout=挖掘方塊超時,重試。 -bot.autodig.not_allow=當前所看向的方塊不在允許挖掘列表中。 -bot.autodig.cmd=自動挖掘 ChatBot 命令 -bot.autodig.available_cmd=可用命令:{0}。可使用 /digbot help <命令名> 瞭解更多資訊。 -bot.autodig.start=開始自動挖掘。 -bot.autodig.stop=停止自動挖掘。 -bot.autodig.help.start=開始執行自動挖掘。 -bot.autodig.help.stop=停止執行自動挖掘。 -bot.autodig.help.help=獲取命令描述。用法:/digbot help <命令名> +bot.autodig.start_delay= {0:0.0} _ʼԄھ +bot.autodig.dig_timeout=ھ򷽉Krԇ +bot.autodig.not_allow=ǰķKSھбС +bot.autodig.cmd=Ԅھ ChatBot +bot.autodig.available_cmd={0}ʹ /digbot help <> tYӍ +bot.autodig.start=_ʼԄھ +bot.autodig.stop=ֹͣԄھ +bot.autodig.help.start=_ʼԄھ +bot.autodig.help.stop=ֹͣԄھ +bot.autodig.help.help=@ȡ÷/digbot help <> # AutoDrop -bot.autoDrop.cmd=AutoDrop ChatBot命令 -bot.autoDrop.alias=AutoDrop ChatBot命令別名 -bot.autoDrop.on=已啟用AutoDrop -bot.autoDrop.off=已禁用AutoDrop -bot.autoDrop.added=已新增物品{0} -bot.autoDrop.incorrect_name=物品名稱不正確:{0}。請再試一次。 -bot.autoDrop.removed=已刪除物品{0} -bot.autoDrop.not_in_list=物品不在列表中 -bot.autoDrop.no_item=列表中沒有物品 -bot.autoDrop.list=列表中總計{0}個物品:\n {1} -bot.autoDrop.switched= 切換到{0}模式。 -bot.autoDrop.unknown_mode=未知模式。可用的模式:Include, Exclude, Everything -bot.autoDrop.no_mode=無法從配置中讀取丟棄模式(drop mode)。使用Include模式。 -bot.autoDrop.no_inventory=找不到容器{0}! +bot.autoDrop.cmd=AutoDrop ChatBot +bot.autoDrop.alias=AutoDrop ChatBote +bot.autoDrop.on=цAutoDrop +bot.autoDrop.off=ѽAutoDrop +bot.autoDrop.added=Ʒ{0} +bot.autoDrop.incorrect_name=ƷQ_{0}ՈԇһΡ +bot.autoDrop.removed=фhƷ{0} +bot.autoDrop.not_in_list=Ʒб +bot.autoDrop.no_item=бЛ]Ʒ +bot.autoDrop.list=бпӋ{0}Ʒ\n {1} +bot.autoDrop.switched= ГQ{0}ģʽ +bot.autoDrop.unknown_mode=δ֪ģʽõģʽInclude, Exclude, Everything +bot.autoDrop.no_mode=oxȡGģʽdrop modeʹIncludeģʽ +bot.autoDrop.no_inventory=Ҳ{0}! # AutoFish -bot.autoFish.no_inv_handle=未啟用庫存(物品)處理。將不支援檢查魚竿耐久度都和自動切換魚竿。 -bot.autoFish.start=將在 {0:0.0} 秒後自動開始釣魚。 -bot.autoFish.throw=拋竿成功。 -bot.autoFish.caught=釣到了一條魚!(總計 {0} 條) -bot.autoFish.caught_at=在 ({0:0.0},{1:0.0},{2:0.0}) 掉到了一條魚!(總計 {0} 條) -bot.autoFish.no_rod=沒有可使用的釣魚竿了。也許是用壞了或耐久度過低? -bot.autoFish.despawn=魚鉤消失,將會重新拋竿。 -bot.autoFish.fishing_timeout=釣魚超時,將於幾秒鐘後重新拋竿。 -bot.autoFish.cast_timeout=拋竿超時,將在等待一段時間後重試。(超時時間延長至 {0:0.0} 秒) -bot.autoFish.update_lookat=更新當前朝向 偏航角(yaw) = {0:0.00}, 俯仰角(pitch) = {1:0.00}。 -bot.autoFish.switch=切換到位於揹包 {0} 位置的魚竿,剩餘耐用 {1}/64。 +bot.autoFish.no_inv_handle=δÎ(Ʒ)֧̎Ԯz~;öȶԄГQ~͡ +bot.autoFish.start= {0:0.0} Ԅ_ʼ~ +bot.autoFish.throw=ͳɹ +bot.autoFish.caught=឵һl~!Ӌ {0} l +bot.autoFish.caught_at= ({0:0.0},{1:0.0},{2:0.0}) һl~Ӌ {0} l +bot.autoFish.no_rod=]пʹõ~ˡҲSÉ˻;ö^ͣ +bot.autoFish.despawn=~^ʧ’͡ +bot.autoFish.fishing_timeout=~r춎’͡ +bot.autoFish.cast_timeout=ͳrڵȴһΕrgԇrrgL {0:0.0} 룩 +bot.autoFish.update_lookat=®ǰ ƫ(yaw) = {0:0.00}, (pitch) = {1:0.00} +bot.autoFish.switch=ГQλ춓d {0} λõ~ͣʣN {1}/64 # AutoRelog -bot.autoRelog.launch=已啟動,嘗試了{0}次重新連線 -bot.autoRelog.no_kick_msg=在沒有kick訊息檔案的情況下初始化 -bot.autoRelog.loading=從檔案{0}載入訊息 -bot.autoRelog.loaded=已載入訊息:{0} -bot.autoRelog.not_found=找不到檔案或目錄:{0} -bot.autoRelog.curr_dir=當前目錄為:{0} -bot.autoRelog.ignore_user_logout=由使用者或MCC bot啟動的斷開連線。忽略。 -bot.autoRelog.disconnect_msg=連線斷開,收到訊息:{0} -bot.autoRelog.reconnect_always=忽略kick訊息,仍要重新連線。 -bot.autoRelog.reconnect=資訊包含 '{0}'。重新連線。 -bot.autoRelog.reconnect_ignore=不包含任何已定義關鍵字的訊息,忽略。 -bot.autoRelog.wait=等待{0:0.000}秒後重新連線... +bot.autoRelog.launch=цӣLԇ{0}B +bot.autoRelog.no_kick_msg=ڛ]kickӍϢnr³ʼ +bot.autoRelog.loading=ęn{0}dӍϢ +bot.autoRelog.loaded=dӍϢ{0} +bot.autoRelog.not_found=ҲnĿ䛣{0} +bot.autoRelog.curr_dir=ǰĿ䛞飺{0} +bot.autoRelog.ignore_user_logout=ʹ߻MCC botӵĔ_Bԡ +bot.autoRelog.disconnect_msg=B_յӍϢ{0} +bot.autoRelog.reconnect_always=kickӍϢҪB +bot.autoRelog.reconnect=YӍ '{0}'B +bot.autoRelog.reconnect_ignore=κѶxPIֵӍϢԡ +bot.autoRelog.wait=ȴ{0:0.000}B... # AutoRespond -bot.autoRespond.loading=正在從'{0}'載入匹配項 -bot.autoRespond.file_not_found=找不到檔案或目錄: '{0}' -bot.autoRespond.loaded_match=載入匹配項:\n{0} -bot.autoRespond.no_trigger=這個匹配永遠不會觸發:\n{0} -bot.autoRespond.no_action=匹配沒有對應操作:\n{0} -bot.autoRespond.match_run=進行操作:{0} +bot.autoRespond.loading=ڏ'{0}'dƥ +bot.autoRespond.file_not_found=ҲnĿ䛣 '{0}' +bot.autoRespond.loaded_match=dƥ헣\n{0} +bot.autoRespond.no_trigger=@ƥh|l\n{0} +bot.autoRespond.no_action=ƥ]Ќ:\n{0} +bot.autoRespond.match_run=Mв{0} bot.autoRespond.match=match: {0}\nregex: {1}\naction: {2}\nactionPrivate: {3}\nactionOther: {4}\nownersOnly: {5}\ncooldown: {6} # ChatLog -bot.chatLog.invalid_file=路徑'{0}'包含無效字元。 +bot.chatLog.invalid_file=·'{0}'oЧԪ # Mailer -bot.mailer.init=使用設定初始化Mailer: -bot.mailer.init.db= - 資料庫檔案:{0} -bot.mailer.init.ignore= - 忽略列表:{0} -bot.mailer.init.public= - 公開互動:{0} -bot.mailer.init.max_mails= - 每位玩家最多郵件數:{0} -bot.mailer.init.db_size= - 最大資料庫大小:{0} -bot.mailer.init.mail_retention= - 郵件保留天數:{0} +bot.mailer.init=ʹOʼMailer +bot.mailer.init.db= - Yώn{0} +bot.mailer.init.ignore= - б{0} +bot.mailer.init.public= - _ӣ{0} +bot.mailer.init.max_mails= - ÿλ]{0} +bot.mailer.init.db_size= - YώС{0} +bot.mailer.init.mail_retention= - ]씵{0} -bot.mailer.init_fail.db_size=無法啟用Mailer:最大資料庫大小必須大於0。請檢查設定。 -bot.mailer.init_fail.max_mails=無法啟用Mailer:每個玩家的最大郵件數必須大於0。請檢查設定。 -bot.mailer.init_fail.mail_retention=無法啟用Mailer:郵件保留天數必須大於0。請檢查設定。 +bot.mailer.init_fail.db_size=oMailerYώС횴0ՈzO +bot.mailer.init_fail.max_mails=oMailerÿҵ]횴0ՈzO +bot.mailer.init_fail.mail_retention=oMailer]씵횴0ՈzO -bot.mailer.create.db=建立新資料庫檔案:{0} -bot.mailer.create.ignore=建立新忽略列表:{0} -bot.mailer.load.db=載入資料庫檔案:{0} -bot.mailer.load.ignore=載入忽略列表: +bot.mailer.create.db=Yώn{0} +bot.mailer.create.ignore=ºб{0} +bot.mailer.load.db=dYώn{0} +bot.mailer.load.ignore=dб -bot.mailer.cmd=Mailer 命令 +bot.mailer.cmd=Mailer -bot.mailer.saving=正在儲存郵件:{0} -bot.mailer.user_ignored={0}已被忽略! -bot.mailer.process_mails=正在查詢要傳送的郵件 @ {0} -bot.mailer.delivered=已傳送:{0} +bot.mailer.saving=ڃ]{0} +bot.mailer.user_ignored={0}ѱ! +bot.mailer.process_mails=ڲԃҪ͵] @ {0} +bot.mailer.delivered=тͣ{0} -bot.mailer.cmd.getmails=--- 資料庫中的郵件 ---\n{0} -bot.mailer.cmd.getignored=--- 忽略列表 ---\n{0} -bot.mailer.cmd.ignore.added=新增{0}到忽略列表! -bot.mailer.cmd.ignore.removed={0}已從忽略列表中刪除! -bot.mailer.cmd.ignore.invalid=丟失或無效的名稱。用法:{0}<使用者名稱> -bot.mailer.cmd.help=檢視用法 +bot.mailer.cmd.getmails=--- Yώе] ---\n{0} +bot.mailer.cmd.getignored=--- б ---\n{0} +bot.mailer.cmd.ignore.added={0}б +bot.mailer.cmd.ignore.removed={0}яĺбЄh +bot.mailer.cmd.ignore.invalid=GʧoЧQ÷{0}<ʹQ> +bot.mailer.cmd.help=zҕ÷ # Maps -bot.map.cmd.desc=渲染物品形式的地圖 -bot.map.cmd.not_found=沒有找到編號為 '{0}' 的地圖! -bot.map.cmd.invalid_id=無效的地圖編號,必須是一個數字。 -bot.map.received=從伺服器接收到的地圖有: -bot.map.no_maps=沒有收到過地圖! -bot.map.received_map=收到一個編號為 {0} 的新地圖。 -bot.map.rendered=成功接收到地圖 '{0}' ,儲存為 '{1}' -bot.map.failed_to_render=無法渲染編號為 '{0}' 的地圖。 -bot.map.list_item=- 地圖編號:{0}(最近更新於:{1}) -bot.map.windows_only=儲存地圖到檔案功能目前僅可用於Windows平臺。 +bot.map.cmd.desc=ȾƷʽĵ؈D +bot.map.cmd.not_found=]ҵ̖ '{0}' ĵ؈D +bot.map.cmd.invalid_id=oЧĵ؈D̖һ֡ +bot.map.received=ŷյĵ؈DУ +bot.map.no_maps=]յ^؈D +bot.map.received_map=յһ̖ {0} µ؈D +bot.map.rendered=ɹյ؈D '{0}' '{1}' +bot.map.failed_to_render=oȾ̖ '{0}' ĵ؈D +bot.map.list_item=- ؈D̖{0}춣{1} +bot.map.scale=춮ǰK˳ߴƣ؈DС ({0}x{1}) sС ({2}x{3}) # ReplayCapture -bot.replayCapture.cmd=replay 命令 -bot.replayCapture.created=已建立重播檔案。 -bot.replayCapture.stopped=錄製已停止。 -bot.replayCapture.restart=錄製已停止。請重新啟動程式以進行另一段錄製。 +bot.replayCapture.cmd=replay +bot.replayCapture.created=ѽزn +bot.replayCapture.stopped=uֹͣ +bot.replayCapture.restart=uֹͣՈ†ӳʽMһu # Follow player -cmd.follow.desc=讓機器人跟隨指定的玩家 -cmd.follow.usage=follow [-f] (使用 -f 允許機器人途徑不安全的地方) -cmd.follow.already_stopped=已經停止過了 -cmd.follow.stopping=已停止! -cmd.follow.invalid_name=提供的玩家名無效! -cmd.follow.invalid_player=指定的玩家沒有上線或距離太遠! -cmd.follow.cant_reach_player=無法尋路到該玩家,有可能他在沒有載入的區塊中,或是距離太遠,也有可能是間隙或水體等障礙使機器人無法到達。 -cmd.follow.already_following=已經在跟隨 {0} 了! -cmd.follow.switched=切換為跟隨 {0}! -cmd.follow.started=開始跟隨 {0}! -cmd.follow.unsafe_enabled=啟用了允許途徑不安全位置(注意:機器人可能會受傷或死亡!) -cmd.follow.note=注意:此機器人的速度很慢,你需要慢慢地走,而且要保持很近的距離,這樣它才能跟上,有點像拿著食物讓動物跟著你。這是由於尋路演算法的限制,我們正在努力改進它。 -cmd.follow.player_came_to_the_range=玩家 {0} 回到了可尋路範圍之內! -cmd.follow.resuming=繼續跟隨! -cmd.follow.player_left_the_range=玩家 {0} 離開了可尋路範圍! -cmd.follow.pausing=已暫停! -cmd.follow.player_left=玩家 {0} 離開了伺服器! -cmd.follow.stopping=已停止! +cmd.follow.desc=׌C˸Sָ +cmd.follow.usage=follow [-f] (ʹ -f SC;ȫĵط) +cmd.follow.already_stopped=ѽֹͣ^ +cmd.follow.stopping=ֹͣ +cmd.follow.invalid_name=ṩoЧ +cmd.follow.invalid_player=ָқ]Ͼx̫h +cmd.follow.cant_reach_player=o·ԓңпڛ]dą^KУǾx̫hҲпg϶ˮwϵKʹC˟o_ +cmd.follow.already_following=ѽڸS {0} ˣ +cmd.follow.switched=ГQS {0} +cmd.follow.started=_ʼS {0} +cmd.follow.unsafe_enabled=S;ȫλãע⣺C˿ܕ܂ +cmd.follow.note=ע⣺˙C˵ٶȺҪߣҪֺܽľx@ܸϣcʳ׌㡣@춌·㷨ƣ҂ŬM +cmd.follow.player_came_to_the_range= {0} ص˿Ɍ·֮ȣ +cmd.follow.resuming=^mS +cmd.follow.player_left_the_range= {0} x_˿Ɍ· +cmd.follow.pausing=ѕͣ +cmd.follow.player_left= {0} x_ŷ +cmd.follow.stopping=ֹͣ # Script -bot.script.not_found=§8[MCC] [{0}] 找不到指令碼檔案:{1} -bot.script.file_not_found=找不到檔案:'{0}' -bot.script.fail=指令碼'{0}'執行失敗 ({1})。 -bot.script.pm.loaded=指令碼'{0}'載入。 +bot.script.not_found=8[MCC] [{0}] Ҳָan{1} +bot.script.file_not_found=Ҳn'{0}' +bot.script.fail=ָa'{0}'ʧ ({1}) +bot.script.pm.loaded=ָa'{0}'d롣 # ScriptScheduler -bot.scriptScheduler.loaded_task=已載入任務:\n{0} -bot.scriptScheduler.no_trigger=這個任務永遠不會觸發:\n{0} -bot.scriptScheduler.no_action=任務沒有對應操作:\n{0} -bot.scriptScheduler.running_time=時間 / 執行中的操作:{0} -bot.scriptScheduler.running_inverval=間隔 / 執行中的操作:{0} -bot.scriptScheduler.running_login=登入 / 執行中的操作:{0} +bot.scriptScheduler.loaded_task=d΄գ\n{0} +bot.scriptScheduler.no_trigger=@΄h|l\n{0} +bot.scriptScheduler.no_action=΄՛]Ќ\n{0} +bot.scriptScheduler.running_time=rg / еIJ{0} +bot.scriptScheduler.running_inverval=g / еIJ{0} +bot.scriptScheduler.running_login= / еIJ{0} bot.scriptScheduler.task=triggeronfirstlogin: {0}\n triggeronlogin: {1}\n triggerontime: {2}\n triggeroninterval: {3}\n timevalue: {4}\n timeinterval: {5}\n action: {6} # TestBot -bot.testBot.told=Bot:{0}對我說:{1} -bot.testBot.said=Bot:{0}說:{1} +bot.testBot.told=Bot{0}f{1} +bot.testBot.said=Bot{0}f{1} [config] -config.load=已從 {0} 載入設定。 -config.load.fail=§c載入設定時出錯:§r -config.write.fail=§儲存備份檔案({0})時出錯:§r -config.backup.fail=§c寫入設定檔案({0})時出錯:§r -config.saving=§a當前設定已儲存至 {0} +config.load=я {0} dO +config.load.fail=cdOrer +config.write.fail=샦ݙn{0}rer +config.backup.fail=cOn{0}rer +config.saving=aǰOу {0} # Head -config.Head=啟動配置檔案\n\n# 對 MCC(Minecraft 命令列客戶端)不熟悉?請看這個文件:https://mccteam.github.io/guide/configuration.html\n\n# 想升級到較新的版本嗎?請訪問 https://github.com/MCCTeam/Minecraft-Console-Client/#download +config.Head=Ùn\n\n# MCCMinecraft п͑ˣϤՈ@ļhttps://mccteam.github.io/guide/configuration.html\n\n# ^µİ汾᣿ՈL https://github.com/MCCTeam/Minecraft-Console-Client/#download # Main.General -config.Main.General.account=Login請填寫郵箱或玩家名稱。若要以離線模式登入請使用"-"作為密碼。若留空則使用互動式登入。 -config.Main.General.login=遊戲伺服器的地址和埠,可填入域名或IP地址。(可刪除埠欄位,會自動解析SRV記錄) -config.Main.General.server_info=帳戶型別:mojang 或是 microsoft。此項設定也會影響互動式登入。 -config.Main.General.method=微軟賬戶的登入方式:mcc 或是 browser(手動在網頁上登入)。 +config.Main.General.account=LoginՈ]QҪxģʽՈʹ"-"ܴaՄtʹûʽ롣 +config.Main.General.login=[ŷĵַͲIPַɄhλԄӽSRVӛ䛣 +config.Main.General.server_info=̈́emojang microsoftOҲӰ푻ʽ롣 +config.Main.General.method=΢ܛ~ĵ뷽ʽmcc browserքھWϵ룩 # Main.Advanced -config.Main.Advanced=在更改這裏的某項設定之前,請確保你理解了該選項的影響。 -config.Main.Advanced.language=請使用Minecraft的語言程式碼填寫,詳見 https://github.com/MCCTeam/Minecraft-Console-Client/discussions/2239 -config.Main.Advanced.internal_cmd_char=MCC內部命令的字首,可使用 "none", "slash"(/) 或 "backslash"(\)。 -config.Main.Advanced.message_cooldown=控制向伺服器傳送訊息的最小間隔時間(秒)。 -config.Main.Advanced.bot_owners=設定機器人的所有者。/!\伺服器管理員可以偽裝成任何玩家! -config.Main.Advanced.mc_version=遊戲版本,可使用 "auto"(自動) 或類似 "1.X.X" 的值。設定具體版本將跳過從伺服器解析的過程。 -config.Main.Advanced.mc_forge=可使用 "auto"(自動),"no"(禁用) 或是 "force"(強制啟用,僅在 1.13 及更高的版本中可用)。 -config.Main.Advanced.brand_info=客戶端標識,可用 "mcc","vanilla"(原版客戶端) 或 "none"(空標識)。這用於改變MCC向伺服器傳送的客戶端標識內容。 -config.Main.Advanced.chatbot_log_file=留空將禁用 ChatBot 寫入日誌檔案。 -config.Main.Advanced.private_msgs_cmd_name=遠端控制功能將會使用它。 -config.Main.Advanced.show_system_messages=顯示遊戲伺服器的系統訊息(來自管理員或命令方塊等)。 -config.Main.Advanced.show_xpbar_messages=顯示經驗條上方的訊息,如果被此類訊息刷屏請禁用此選項。 -config.Main.Advanced.show_chat_links=解碼聊天資訊裡的連結,並在控制檯單獨顯示。 -config.Main.Advanced.show_inventory_layout=以字元畫形式顯示庫存佈局。 -config.Main.Advanced.terrain_and_movements=開啟地形處理將消耗更多的記憶體、CPU和網路頻寬,但這允許你進行移動以及和方塊互動。 -config.Main.Advanced.inventory_handling=啟用庫存處理(可操作揹包、箱子等容器)。 -config.Main.Advanced.entity_handling=啟用實體處理。 -config.Main.Advanced.session_cache=如何快取會話令牌。可使用 "none"(不快取),"memory"(記憶體快取) 或 "disk"(磁碟快取)。 -config.Main.Advanced.profilekey_cache=如何快取聊天簽名金鑰。可使用 "none"(不快取),"memory"(記憶體快取) 或 "disk"(磁碟快取)。 -config.Main.Advanced.resolve_srv_records=可填寫 "no","fast"(超時時間為五秒鐘)或是 "yes"。加入某些伺服器需要開啟此項。 -config.Main.Advanced.account_list=AccountList:使你可以不用輸入賬號資訊而快速在多個賬號間切換\n# 可用命令示例:"/tell reco Player2","/connect Player1" -config.Main.Advanced.server_list=ServerList:可用使用伺服器別名快速連線到該伺服器\n# 別名不能包含空格和小數點",而且 "localhost" 不能作為別名使用。\n# 可用命令示例:"/tell connect Server1","/connect Server2" -config.Main.Advanced.player_head_icon=使用玩家面板頭像作為視窗圖示,這僅在部分舊版控制檯中有效。 -config.Main.Advanced.exit_on_failure=發生錯誤時是否直接退出,用於在非互動式指令碼中使用MCC。 -config.Main.Advanced.script_cache=快取已編譯的指令碼,以便在低端裝置上更快的載入。 -config.Main.Advanced.timestamps=在聊天資訊頭部新增時間戳。 -config.Main.Advanced.auto_respawn=死亡時自動重生(開啟前請確保你的出生點是安全的) -config.Main.Advanced.minecraft_realms=啟用對加入我的世界領域(Realms)伺服器的支援。 -config.Main.Advanced.move_head_while_walking=在移動時轉向頭部。 -config.Main.Advanced.timeout=與伺服器的TCP連線超時時間(秒)。 -config.Main.Advanced.enable_emoji=如果關閉,Emoji表情符號將被替換成更簡單的字元(用於 "/chunk status" 命令) -config.Main.Advanced.movement_speed=高於 2 的移動速度可能會被檢測為作弊。 -config.Main.Advanced.language.invaild=無效的語言程式碼! +config.Main.Advanced=ڸ@YijO֮ǰՈ_ԓx헵Ӱ푡 +config.Main.Advanced.language=ՈʹMinecraftZԳʽaԔҊ https://github.com/MCCTeam/Minecraft-Console-Client/discussions/2239 +config.Main.Advanced.internal_cmd_char=MCCȲףʹ "none", "slash"(/) "backslash"(\) +config.Main.Advanced.message_cooldown=ŷӍϢСgrg룩 +config.Main.Advanced.bot_owners=OC˵ߡ/!\ŷTԂbκ! +config.Main.Advanced.mc_version=[汾ʹ "auto"(Ԅ) "1.X.X" ֵOw汾^ŷ^̡ +config.Main.Advanced.mc_forge=ʹ "auto"(Ԅ)"no"() "force"(ƆãH 1.13 ߵİ汾п) +config.Main.Advanced.brand_info=͑˘R "mcc""vanilla"(ԭ͑) "none"(՘R)@춸׃MCCŷ͵Ŀ͑˘Rݡ +config.Main.Advanced.chatbot_log_file=Ռ ChatBot In +config.Main.Advanced.private_msgs_cmd_name=h˿ƹ܌ʹ +config.Main.Advanced.show_system_messages=@ʾ[ŷϵyӍϢԹTKȣ +config.Main.Advanced.show_xpbar_messages=@ʾlϷӍϢӍϢˢՈôx헡 +config.Main.Advanced.show_chat_links=aYӍeBYKڿƙΪ@ʾ +config.Main.Advanced.show_inventory_layout=Ԫʽ@ʾѾ֡ +config.Main.Advanced.terrain_and_movements=_̎팢ĸӛwCPU;W·l@SMƄԼͷKӡ +config.Main.Advanced.inventory_handling=Î̎ɲdӵ +config.Main.Advanced.entity_handling=Ìw̎ +config.Main.Advanced.session_cache=οȡԒơʹ "none"(ȡ)"memory"(ӛwȡ) "disk"(ŵȡ) +config.Main.Advanced.profilekey_cache=οȡ캞耡ʹ "none"(ȡ)"memory"(ӛwȡ) "disk"(ŵȡ) +config.Main.Advanced.resolve_srv_records= "no""fast"rrg犣 "yes"ijЩŷҪ_헡 +config.Main.Advanced.account_list=AccountListʹԲݔ~̖YӍڶ~̖gГQ\n# ʾ"/tell reco Player2""/connect Player1" +config.Main.Advanced.server_list=ServerListʹŷeBԓŷ\n# eܰոСc" "localhost" eʹá\n# ʾ"/tell connect Server1""/connect Server2" +config.Main.Advanced.player_head_icon=ʹ^ҕDʾ@HڲfƙЧ +config.Main.Advanced.exit_on_failure=le`rǷֱ˳ڷǻʽָaʹMCC +config.Main.Advanced.script_cache=ȡѾgָaԱڵͶbϸd롣 +config.Main.Advanced.timestamps=YӍ^rg +config.Main.Advanced.auto_respawn=rԄ_ǰՈ_ijcǰȫģ +config.Main.Advanced.minecraft_realms=ÌҵI(Realms)ŷ֧Ԯ +config.Main.Advanced.move_head_while_walking=ƄӕrD^ +config.Main.Advanced.timeout=cŷTCPBrrg룩 +config.Main.Advanced.enable_emoji=P]Emoji̖QɸεԪ "/chunk status"  +config.Main.Advanced.movement_speed= 2 Ƅٶȿܕzyס +config.Main.Advanced.language.invaild=oЧZԳʽa +config.Main.Advanced.TerminalColorDepth= "none""bit_4""bit_8" "bit_24"ͨ^eģʽµIzy֧Ԯɫȡ +config.Main.Advanced.MinTerminalWidth=ʹýKˌȁӋ@ʾӰСrСȡ +config.Main.Advanced.MinTerminalHeight=ʹýK˸߶ȁӋ@ʾӰСrС߶ȡ # Signature -config.Signature=聊天簽名相關設定(影響1.19及以上版本) -config.Signature.LoginWithSecureProfile=僅微軟賬戶可用。如禁用此項,將無法簽名訊息和進入某些的伺服器。 -config.Signature.SignChat=是否簽名傳送的聊天訊息。 -config.Signature.SignMessageInCommand=是否簽名指令中的訊息。例如"/msg"和"/me"中的訊息。 -config.Signature.MarkLegallySignedMsg=是否使用綠色色塊標識擁有合法簽名的聊天。 -config.Signature.MarkModifiedMsg=是否使用黃色色塊標識被伺服器更改過的聊天。 -config.Signature.MarkIllegallySignedMsg=是否使用紅色色塊標識沒有合法簽名的聊天。 -config.Signature.MarkSystemMessage=是否使用灰色色塊標識系統訊息(它們總是不會被簽名)。 -config.Signature.ShowModifiedChat=設定為 true,顯示被伺服器修改過的資訊;設定為 false,顯示經過簽名的原始資訊。 -config.Signature.ShowIllegalSignedChat=是否顯示沒有被正確簽名的聊天訊息。 +config.Signature=캞POӰ1.19ϰ汾 +config.Signature.LoginWithSecureProfile=H΢ܛ~áô헣oӍϢMijЩŷ +config.Signature.SignChat=Ƿ͵ӍϢ +config.Signature.SignMessageInCommand=ǷָеӍϢ"/msg""/me"еӍϢ +config.Signature.MarkLegallySignedMsg=ǷʹþGɫɫKRкϷ졣 +config.Signature.MarkModifiedMsg=ǷʹSɫɫKRŷ^졣 +config.Signature.MarkIllegallySignedMsg=ǷʹütɫɫKR]кϷ졣 +config.Signature.MarkSystemMessage=ǷʹûɫɫKRϵyӍϢDz +config.Signature.ShowModifiedChat=O true@ʾŷ޸^YӍO false@ʾ^ԭʼYӍ +config.Signature.ShowIllegalSignedChat=Ƿ@ʾ]б_ӍϢ # Logging -config.Logging=此項設定僅會影響到控制檯中的資訊(日誌)。 -config.Logging.DebugMessages=請在提交錯誤報告之前先啟用此項。謝謝! -config.Logging.ChatMessages=是否顯示來自伺服器的聊天訊息。 -config.Logging.InfoMessages=資訊性的訊息。(大部分來自MCC內部) -config.Logging.WarningMessages=顯示警告訊息。 -config.Logging.ErrorMessages=顯示錯誤訊息。 -config.Logging.ChatFilter=過濾聊天訊息所用的正規表示式。 -config.Logging.DebugFilter=過濾除錯訊息所用的正規表示式。 -config.Logging.FilterMode=過濾方式:"disable"(禁用),"blacklist"(隱藏匹配的訊息) 或 "whitelist"(僅顯示匹配的訊息) -config.Logging.LogToFile=是否將日誌資訊寫入到檔案。 -config.Logging.LogFile=日誌檔名稱。 -config.Logging.PrependTimestamp=寫入日誌檔案時是否新增時間戳。 -config.Logging.SaveColorCodes=是否保留訊息中的顏色字元。(例如"§b") +config.Logging=OHӰ푵ƙеYӍI +config.Logging.DebugMessages=Ոύe`֮ǰȆô헡xx +config.Logging.ChatMessages=Ƿ@ʾŷӍϢ +config.Logging.InfoMessages=YӍԵӍϢ󲿷ցMCCȲ +config.Logging.WarningMessages=@ʾӍϢ +config.Logging.ErrorMessages=@ʾe`ӍϢ +config.Logging.ChatFilter=^VӍϢõҎʾʽ +config.Logging.DebugFilter=^VeӍϢõҎʾʽ +config.Logging.FilterMode=^Vʽ"disable"ã"blacklist"[ƥӍϢ "whitelist"H@ʾƥӍϢ +config.Logging.LogToFile=ǷIYӍ뵽n +config.Logging.LogFile=InQ +config.Logging.PrependTimestamp=InrǷrg +config.Logging.SaveColorCodes=ǷӍϢеɫԪ"b" # AppVars -config.AppVars.Variables=可以在某些欄位中以"%yourvar%"的形式使用。\n# %username% 和 %serverip% 時保留的變數名。 +config.AppVars.Variables=ijЩλ"%yourvar%"ʽʹá\n# %username% %serverip% r׃ # Proxy -config.Proxy=通過代理連線到伺服器。\n# 如果Mojang/微軟登入服務被防火牆阻斷,設定Enabled_Login=true以使用代理進行登入。\n# 如果到Minecraft遊戲伺服器的連線被防火牆阻止,設定Enabled_Ingame=true以使用代理連線遊戲伺服器。\n# /!\ 在啟用代理前,請確保你的伺服器規則允許使用代理或VPN,否則你可能面臨被封禁等風險! -config.Proxy.Enabled_Login=是否使用代理連線Mojang或微軟的登入伺服器。 -config.Proxy.Enabled_Ingame=是否通過代理連線Minecraft遊戲伺服器。 -config.Proxy.Server=代理伺服器必須允許HTTPS登入。 -config.Proxy.Proxy_Type=支援的代理型別:"HTTP","SOCKS4","SOCKS4a","SOCKS5"。 -config.Proxy.Username=只有連線到受密碼保護的代理才需要。 -config.Proxy.Password=只有連線到受密碼保護的代理才需要。 +config.Proxy=ͨ^Bŷ\n# Mojang/΢ܛձ࣬OEnabled_Login=trueʹôMе롣\n# Minecraft[ŷBֹOEnabled_Ingame=trueʹôB[ŷ\n# /!\ چôǰՈ_ŷҎtSʹôVPNtRLU +config.Proxy.Enabled_Login=ǷʹôBMojang΢ܛĵŷ +config.Proxy.Enabled_Ingame=Ƿͨ^BMinecraft[ŷ +config.Proxy.Server=ŷSHTTPS롣 +config.Proxy.Proxy_Type=֧ԮĴ̈́e"HTTP""SOCKS4""SOCKS4a""SOCKS5" +config.Proxy.Username=ֻBܴaoĴҪ +config.Proxy.Password=ֻBܴaoĴҪ # ChatFormat -config.ChatFormat=MCC會盡力檢測聊天資訊,但有些伺服器有不尋常的聊天格式\n# 當這種情況發生時,你需要在下面自定義匹配聊天所用的正規表示式,詳見 https://mccteam.github.io/guide/configuration.html#chat-format -config.ChatFormat.Builtins=是否啟用MCC內建的聊天檢測規則。設定為 false 以避免與自定義格式衝突。 -config.ChatFormat.UserDefined=是否啟用下方的自定義正規表示式進行聊天檢測。 +config.ChatFormat=MCCMzyYӍЩŷвʽ\n# @NrlrҪԶxƥõҎʾʽԔҊ https://mccteam.github.io/guide/configuration.html#chat-format +config.ChatFormat.Builtins=ǷMCCȽzyҎtO false ԱcԶxʽnͻ +config.ChatFormat.UserDefined=Ƿ·ԶxҎʾʽMzy # MCSettings -config.MCSettings=下面的設定將會被髮送到遊戲伺服器,隻影響一些伺服器端的東西,比如你的面板。 -config.MCSettings.Enabled=如果禁用,下面的設定就不會被髮送到伺服器上。 -config.MCSettings.Locale=請使用Minecraft的語言程式碼填寫,詳見[Main.Advanced.Language] -config.MCSettings.RenderDistance=渲染距離,取值範圍[0 - 255]。 -config.MCSettings.Difficulty=Minecraft 1.7及更早版本難度。"peaceful","easy","normal","difficult"。 -config.MCSettings.ChatMode=使用 "enabled"(完全啟用聊天)、"commands"(僅限命令)或 "disabled"(完全禁用聊天)。這允許你禁言自己... -config.MCSettings.ChatColors=這允許你在伺服器端禁用聊天顏色。 -config.MCSettings.MainHand=在1.9及更高版本中的主手設定。"left"(左手) 或 "right"(右手)。 +config.MCSettings=O͵[ŷbӰһЩŷ˵Ė|塣 +config.MCSettings.Enabled=ãOͲ͵ŷϡ +config.MCSettings.Locale=ՈʹMinecraftZԳʽaԔҊ[Main.Advanced.Language] +config.MCSettings.RenderDistance=Ⱦxȡֵ[0 - 255] +config.MCSettings.Difficulty=Minecraft 1.7汾yȡ"peaceful""easy""normal""difficult" +config.MCSettings.ChatMode=ʹ "enabled"ȫ죩"commands"H "disabled"ȫ죩@SԼ... +config.MCSettings.ChatColors=@Sŷ˽ɫ +config.MCSettings.MainHand=1.9߰汾еO"left"֣ "right"֣ # ChatBot config.ChatBot================================ #\n# Minecraft Console Client Bots #\n# =============================== # # ChatBot.Alerts -config.ChatBot.Alerts=當檢測到特定聊天訊息或特定事件發生時提醒你\n # 對檢測特定玩家的聊天訊息很有用。 -config.ChatBot.Alerts.Beep_Enabled=除了高亮顯示外,當檢測到一個詞時還會播放類似蜂鳴器的嗶嗶聲。 -config.ChatBot.Alerts.Trigger_By_Words=在收到指定的關鍵詞後觸發提醒。 -config.ChatBot.Alerts.Trigger_By_Rain=在開始下雨和停止下雨時觸發提醒。 -config.ChatBot.Alerts.Trigger_By_Thunderstorm=在雷暴天氣的開始與結束觸發提醒。 -config.ChatBot.Alerts.Matches=觸發提醒的聊天關鍵詞列表。 -config.ChatBot.Alerts.Excludes=出現這些關鍵詞後該條訊息一定不觸發提醒。 -config.ChatBot.Alerts.Log_To_File=是否將提醒訊息寫入到日誌檔案。 -config.ChatBot.Alerts.Log_File=日誌檔案的路徑。 +config.ChatBot.Alerts=zyضӍϢض¼lr\n # zyضҵӍϢá +config.ChatBot.Alerts.Beep_Enabled=˸@ʾ⣬zyһ~r߀ƷQƕ +config.ChatBot.Alerts.Trigger_By_Words=յָPI~|lѡ +config.ChatBot.Alerts.Trigger_By_Rain=_ʼֹͣr|lѡ +config.ChatBot.Alerts.Trigger_By_Thunderstorm=ױ_ʼcY|lѡ +config.ChatBot.Alerts.Matches=|lѵPI~б +config.ChatBot.Alerts.Excludes=F@ЩPI~ԓlӍϢһ|lѡ +config.ChatBot.Alerts.Log_To_File=ǷӍϢ뵽In +config.ChatBot.Alerts.Log_File=In· # ChatBot.AntiAFK -config.ChatBot.AntiAfk=定期傳送命令,或讓機器人隨機走動,以避免檢測到掛機後被踢出伺服器\n # /!\啟用前請確保你的伺服器規則不禁止反AFK機制!\n# /!\如果啟用隨機移動,請將機器人圍在圍欄裡,以防走失!(建議尺寸5x5x5) -config.ChatBot.AntiAfk.Delay=執行操作的間隔時間。(秒) -config.ChatBot.AntiAfk.Command=傳送給伺服器的指令。 -config.ChatBot.AntiAfk.Use_Sneak=在傳送指令時是否蹲下。 -config.ChatBot.AntiAfk.Use_Terrain_Handling=啟用地形處理,以使機器人能夠四處移動。 -config.ChatBot.AntiAfk.Walk_Range=機器人可以隨機移動的範圍(注意:範圍越大,速度越慢) -config.ChatBot.AntiAfk.Walk_Retries=嘗試移動失敗幾次後在改為傳送命令模式。 +config.ChatBot.AntiAfk=ڂ׌CSC߄ӣԱzyCᱻ߳ŷ\n # /!\ǰՈ_ŷҎtֹAFKCƣ\n# /!\SCƄӣՈCˇڇeԷʧhߴ5x5x5 +config.ChatBot.AntiAfk.Delay=вgrg룩 +config.ChatBot.AntiAfk.Command=ͽoŷָ +config.ChatBot.AntiAfk.Use_Sneak=ڂָrǷ¡ +config.ChatBot.AntiAfk.Use_Terrain_Handling=õ̎ʹC܉̎Ƅӡ +config.ChatBot.AntiAfk.Walk_Range=C˿SCƄӵĹע⣺ԽٶԽ +config.ChatBot.AntiAfk.Walk_Retries=LԇƄʧ״ڸĞģʽ # ChatBot.AutoAttack -config.ChatBot.AutoAttack=自動攻擊周圍的生物\n# 使用此功能之前,你需要開啟實體處理。\n# /!\確保你的伺服器允許使用自動攻擊。\n# /!\伺服器外掛可能會認為此功能時作弊,並可能會封禁你的賬號,所以請自己檢查伺服器規則是否允許。 -config.ChatBot.AutoAttack.Mode="single"(單目標) 或 "multi"(多目標)。一次攻擊一個生物還是範圍內的所有生物。 -config.ChatBot.AutoAttack.Priority="health"(生命值)或 "distance"(距離)。當使用"single"模式時,以哪一個屬性確定優先順序。 -config.ChatBot.AutoAttack.Cooldown_Time=每次攻擊間的冷卻時間,設定 "Custom = false" 以讓MCC自動計算攻擊速度。 -config.ChatBot.AutoAttack.Interaction=可選項:"Interact"(互動),"Attack"(攻擊) 或 "InteractAt"(互動並攻擊) -config.ChatBot.AutoAttack.Attack_Hostile=是否攻擊敵對生物。 -config.ChatBot.AutoAttack.Attack_Passive=是否攻擊被動生物。 -config.ChatBot.AutoAttack.List_Mode=將實體列表作為 "whitelist"(白名單)還是 "blacklist"(黑名單)。 -config.ChatBot.AutoAttack.Entites_List=所有可用的實體型別可以在這裏找到:https://bit.ly/3Rg68lp +config.ChatBot.AutoAttack=Ԅӹ܇\n# ʹô˹֮ǰҪ_w̎\n# /!\_ŷSʹԄӹ\n# /!\ŷܕJ˹ܕrףKܕ~̖ՈԼzŷҎtǷS +config.ChatBot.AutoAttack.Mode="single"Ŀˣ "multi"Ŀˣһιһ߀ǹȵ +config.ChatBot.AutoAttack.Priority="health"ֵ "distance"xʹ"single"ģʽrһԴ_ +config.ChatBot.AutoAttack.Cooldown_Time=ÿιgsrgO "Custom = false" ׌MCCԄӋ㹥ٶȡ +config.ChatBot.AutoAttack.Interaction=x헣"Interact"ӣ"Attack" "InteractAt"ӁK +config.ChatBot.AutoAttack.Attack_Hostile=Ƿ񹥓 +config.ChatBot.AutoAttack.Attack_Passive=Ƿ񹥓 +config.ChatBot.AutoAttack.List_Mode=wб "whitelist"Σ߀ "blacklist"Σ +config.ChatBot.AutoAttack.Entites_List=пõČẅ́e@Yҵhttps://bit.ly/3Rg68lp # ChatBot.AutoCraft -config.ChatBot.AutoCraft=自動使用揹包中的物品進行合成。\n# 請看 https://mccteam.github.io/guide/chat-bots.html#auto-craft\n# 你需要啟用庫存處理來使用這個功能\n# 如果需要使用工作臺,你還需要啟用地形處理。 -config.ChatBot.AutoCraft.CraftingTable=如果你打算使用工作臺,請填寫它所在的位置。(需要啟用地形處理) -config.ChatBot.AutoCraft.OnFailure=合成失敗時應該怎麼處理,"abort"(中止)或 "wait"(等待)。 -config.ChatBot.AutoCraft.Recipes=Recipes.Name:給該配方起一個獨一無二的名字。(不能包含空白字元)Recipes.Type:合成型別,"player"(揹包2x2)或 "table"(工作臺3x3)\n# Recipes.Result:合成的目標物品\n# Recipes.Slots:合成的物品擺放方式,以從左到右、從上到下的格式填寫。需留空請填寫"Null"。\n# 最新的物品命名請看:https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Inventory/ItemType.cs +config.ChatBot.AutoCraft=ԄʹÓdеƷMкϳɡ\n# Ո https://mccteam.github.io/guide/chat-bots.html#auto-craft\n# ҪÎ̎ʹ@\n# Ҫʹù_߀Ҫõ̎ +config.ChatBot.AutoCraft.CraftingTable=ʹù_ՈڵλáҪõ̎ +config.ChatBot.AutoCraft.OnFailure=ϳʧrԓN̎"abort"ֹ "wait"ȴ +config.ChatBot.AutoCraft.Recipes=Recipes.Nameoԓ䷽һһo֡ܰհԪRecipes.Typeϳ̈́e"player"d2x2 "table"_3x3\n# Recipes.ResultϳɵĿƷ\n# Recipes.SlotsϳɵƷ[ŷʽԏҡϵµĸʽՈ"Null"\n# µƷՈhttps://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Inventory/ItemType.cs # AutoDig -config.ChatBot.AutoDig=自動挖掘方塊。\n# 你可以使用 "/digbot start" 和 "/digbot stop" 指令來控制 AutoDig 的啟停。\n# 由於MCC目前還不支援精確計算方塊的碰撞體積,在獲取看向的方塊時,視線上所有的方塊都被看作是完整的立方體。\n# 查詢方塊的名字,請訪問 https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Mapping/Material.cs -config.ChatBot.AutoDig.Auto_Tool_Switch=自動切換到合適的工具。 -config.ChatBot.AutoDig.Durability_Limit=不會使用低於此耐久度的工具。(需要啟用庫存處理) -config.ChatBot.AutoDig.Drop_Low_Durability_Tools=在當前使用的工具耐久度過低後,是否丟掉它。 -config.ChatBot.AutoDig.Mode="lookat","fixedpos" 或 "both"。挖掘看向的方塊還是固定位置的方塊,或者是兩個條件都滿足的方塊。 -config.ChatBot.AutoDig.Locations=使用 "fixedpos" 或 "both" 模式時,方塊的座標。 -config.ChatBot.AutoDig.Location_Order="distance" 或 "index",當使用 "fixedpos" 模式時,按照到玩家的距離,還是列表中的順序確定挖掘的方塊。 -config.ChatBot.AutoDig.Auto_Start_Delay=進入遊戲後等待多少秒後開始自動挖掘,設定為-1禁用自動開始。 -config.ChatBot.AutoDig.Dig_Timeout=若挖掘一個方塊用時超過這個值,將會重新獲取目標進行挖掘。 -config.ChatBot.AutoDig.Log_Block_Dig=是否輸出挖掘方塊的相關資訊。 -config.ChatBot.AutoDig.List_Type=將方塊列表作為 "whitelist"(白名單)還是 "blacklist"(黑名單)。 +config.ChatBot.AutoDig=Ԅھ򷽉K\n# Ҫõ̎ʹ@ܡ\n# ʹ "/digbot start" "/digbot stop" ָ AutoDig Ćͣ\n# MCCĿǰ߀֧Ԯ_Ӌ㷽Kײweګ@ȡķKrҕеķKw\n# ԃK֣ՈL https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Mapping/Material.cs +config.ChatBot.AutoDig.Auto_Tool_Switch=ԄГQmĹߡ +config.ChatBot.AutoDig.Durability_Limit=ʹõ춴;öȵĹߡҪÎ̎ +config.ChatBot.AutoDig.Drop_Low_Durability_Tools=ڮǰʹõĹ;ö^ᣬǷG +config.ChatBot.AutoDig.Mode="lookat""fixedpos" "both"ھķK߀ǹ̶λõķKǃɂlMķK +config.ChatBot.AutoDig.Locations=ʹ "fixedpos" "both" ģʽrKˡ +config.ChatBot.AutoDig.Location_Order="distance" "index"ʹ "fixedpos" ģʽrյҵľx߀бе_ھķK +config.ChatBot.AutoDig.Auto_Start_Delay=M[ȴ_ʼԄھO-1Ԅ_ʼ +config.ChatBot.AutoDig.Dig_Timeout=ھһKÕr^@ֵ«@ȡĿMھ +config.ChatBot.AutoDig.Log_Block_Dig=Ƿݔھ򷽉KPYӍ +config.ChatBot.AutoDig.List_Type=Kб "whitelist"Σ߀ "blacklist"Σ # ChatBot.AutoDrop -config.ChatBot.AutoDrop=自動從揹包/庫存中丟棄指定的物品\n# 你需要啟用庫存處理來使用這個功能。\n# 可用物品請看 https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Inventory/ItemType.cs -config.ChatBot.AutoDrop.Mode="include"(丟棄列表中的物品),"exclude"(丟棄列表外的所有物品) 或 "everything"(丟棄所有物品) +config.ChatBot.AutoDrop=Ԅӏēd/ЁGָƷ\n# ҪÎ̎ʹ@ܡ\n# ƷՈ https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Inventory/ItemType.cs +config.ChatBot.AutoDrop.Mode="include"GбеƷ"exclude"GбƷ "everything"GƷ # ChatBot.AutoEat -config.ChatBot.AutoEat=在飽食度較低是自動在揹包中尋找食物食用。\n# 你需要啟用庫存處理來使用這個功能。 +config.ChatBot.AutoEat=ʳ^ԄړdЌʳʳá\n# ҪÎ̎ʹ@ܡ # ChatBot.AutoFishing -config.ChatBot.AutoFishing=使用魚竿自動釣魚。指南:https://mccteam.github.io/guide/chat-bots.html#auto-fishingn# /!\ 啟用前請確保伺服器允許自動釣魚。 -config.ChatBot.AutoFishing.Antidespawn=如果你之前沒有啟用過這個選項,請保持它為 false 。 -config.ChatBot.AutoFishing.Mainhand=使用主手還是副手拿魚竿。 -config.ChatBot.AutoFishing.Auto_Start=是否在進入伺服器後自動開始釣魚,禁用此功能後,你需要使用"/usehand"手動使用魚竿一次。 -config.ChatBot.AutoFishing.Cast_Delay=釣到魚後多久開始下一次釣魚(拋竿)。 -config.ChatBot.AutoFishing.Fishing_Delay=進入伺服器後多久後開始自動釣魚。(秒) -config.ChatBot.AutoFishing.Fishing_Timeout=多少秒後沒有釣到魚視為超時。超時後會重新拋竿。 -config.ChatBot.AutoFishing.Durability_Limit=不會使用低於此耐久度的魚竿(魚竿耐久度最高為64)。(需要啟用庫存處理) -config.ChatBot.AutoFishing.Auto_Rod_Switch=在當前魚竿不可用後自動切換到揹包中的其他魚竿。(需要啟用庫存處理) -config.ChatBot.AutoFishing.Stationary_Threshold=魚鉤在X軸和Z軸方向上的移動小於這個值將被認為是靜止的,過高的閾值會在拋竿途中觸發收竿。 -config.ChatBot.AutoFishing.Hook_Threshold=一個「靜止」的魚鉤,在Y軸方向上的移動超過這個閾值將被認為釣到了魚。 -config.ChatBot.AutoFishing.Log_Fish_Bobber=用於調整以上兩個閾值,啟用後會在收到魚鉤實體移動資料包後列印其座標變化。 -config.ChatBot.AutoFishing.Enable_Move=這允許玩家在釣到魚後改變其位置或朝向。(需要啟用地形處理) -config.ChatBot.AutoFishing.Movements=會按照 "1->2->3->4->3->2->1->2->..." 的順序執行。每次可用改變位置、朝向或是都改變。推薦只改變朝向。 +config.ChatBot.AutoFishing=ʹ~Ԅ~ָϣhttps://mccteam.github.io/guide/chat-bots.html#auto-fishingn# /!\ ǰՈ_ŷSԄ~ +config.ChatBot.AutoFishing.Antidespawn=֮ǰ]І^@x헣Ո false +config.ChatBot.AutoFishing.Mainhand=ʹ߀Ǹ~͡ +config.ChatBot.AutoFishing.Auto_Start=ǷMŷԄ_ʼ~ô˹ᣬҪʹ"/usehand"քʹ~һΡ +config.ChatBot.AutoFishing.Cast_Delay=឵~_ʼһ~ͣ +config.ChatBot.AutoFishing.Fishing_Delay=Mŷ_ʼԄ~룩 +config.ChatBot.AutoFishing.Fishing_Timeout=]឵~ҕ鳬rr’͡ +config.ChatBot.AutoFishing.Durability_Limit=ʹõ춴;öȵ~ͣ~;öߞ64ҪÎ̎ +config.ChatBot.AutoFishing.Auto_Rod_Switch=ڮǰ~ͲԄГQdе~͡ҪÎ̎ +config.ChatBot.AutoFishing.Stationary_Threshold=~^XSZSϵƄС@ֵJoֹģ^ߵֵڒ;|lո͡ +config.ChatBot.AutoFishing.Hook_Threshold=һoֹ~^YSϵƄӳ^@ֵJ឵~ +config.ChatBot.AutoFishing.Log_Fish_Bobber={σɂֵյ~^wƄYϰӡ׃ +config.ChatBot.AutoFishing.Enable_Move=@S឵~׃λû򡣣Ҫõ̎ +config.ChatBot.AutoFishing.Movements= "1->2->3->4->3->2->1->2->..." Сÿοø׃λáǶ׃]ֻ׃ # ChatBot.AutoRelog -config.ChatBot.AutoRelog=在被伺服器斷開連線時自動重連,例如伺服器重啟時。\n# /!\ 謹慎使用Ignore_Kick_Message=true,這會在伺服器管理員將你踢出時依然連回! -config.ChatBot.AutoRelog.Delay=重新加入到伺服器前的延遲時間。(單位:秒) -config.ChatBot.AutoRelog.Retries=重新登入伺服器失敗時的重試次數,使用-1表示無限重試。 -config.ChatBot.AutoRelog.Ignore_Kick_Message=當設定為 true 時,將不考慮踢出的資訊直接重連。 -config.ChatBot.AutoRelog.Kick_Messages=如果踢出資訊與這其中的任何一個字串匹配,那麼將觸發自動重連。 +config.ChatBot.AutoRelog=ڱŷ_BrԄBŷ؆r\n# /!\ ֔ʹIgnore_Kick_Message=true@ŷT߳rȻBأ +config.ChatBot.AutoRelog.Delay=¼뵽ŷǰtrg(λ) +config.ChatBot.AutoRelog.Retries=µŷʧrԇΔʹ-1ʾoԇ +config.ChatBot.AutoRelog.Ignore_Kick_Message=O true r]߳YӍֱB +config.ChatBot.AutoRelog.Kick_Messages=߳YӍc@еκһִƥ䣬N|lԄB # ChatBot.AutoRespond -config.ChatBot.AutoRespond=當聊天訊息與檔案中的規則匹配時,自動執行指定命令。\n# /!\ 伺服器管理員可以以任意玩家的身份傳送任意訊息,記住這一點!\n# 此機器人如果設定的不得當可能會造成刷屏,建議設定一個冷卻時間。 -config.ChatBot.AutoRespond.Match_Colors=不要刪除文字中的顏色程式碼(使用§字元的程式碼)。注意:啟用後你的匹配模板也必須包括顏色程式碼。 +config.ChatBot.AutoRespond=ӍϢcnеҎtƥrԄӈָ\n# /!\ ŷTҵ݂ӍϢӛס@һc\n# ˙COIJîܕˢhOһsrg +config.ChatBot.AutoRespond.Match_Colors=ҪhеɫʽaʹáԪijʽaע⣺ƥģҲ횰ɫʽa # ChatBot.ChatLog -config.ChatBot.ChatLog=將聊天資訊寫入到日誌檔案中。 +config.ChatBot.ChatLog=YӍ뵽InС # ChatBot.FollowPlayer -config.ChatBot.FollowPlayer=讓機器人跟隨指定玩家\n# 注意這是一個實驗性的功能,目前的尋路速度可能很慢,你可能需要時常等一會機器人來讓它跟上你。\n# 你可以調整"Update_Limit",找到最適合你的速度。(注意不要設定的太低,這樣可能導致反效果或使MCC卡頓)。\n# /!\ 在使用此功能之前,請先確保伺服器規則允許你這樣做。 -config.ChatBot.FollowPlayer.Update_Limit=機器人尋路的間隔時間(以秒為單位) -config.ChatBot.FollowPlayer.Stop_At_Distance=如果玩家在該範圍內,則視為已經接近玩家了。(防止機器人將玩家推開而產生無限迴圈) +config.ChatBot.FollowPlayer=׌C˸Sָ\n# ע@һԵĹܣĿǰČ·ٶȿܺҪrһCˁ׌㡣\n# {"Update_Limit"ҵmٶȡעⲻҪO̫ͣ@ӿ܌·ЧʹMCCD\n# /!\ ʹô˹֮ǰՈȴ_ŷҎtS@ +config.ChatBot.FollowPlayer.Update_Limit=Cˌ·grgλ +config.ChatBot.FollowPlayer.Stop_At_Distance=ԓȣtҕѽӽˡֹCˌ_aoޒȦ # ChatBot.HangmanGame -config.ChatBot.HangmanGame=一個用於演示聊天互動的小遊戲。玩家可以一次一個字母地猜出神祕的單詞。\n# 你需要正確地使用 ChatFormat,並在 botowners 中新增自己,用/tell start\n# /!\ 這個機器人可能會造成刷屏,如果許多玩家與它互動。 +config.ChatBot.HangmanGame=һʾ컥ӵС[ҿһһĸز³zĆ~\n# Ҫ_ʹ ChatFormatK botowners Լ/tell start\n# /!\ @C˿ܕˢScӡ # ChatBot.Mailer -config.ChatBot.Mailer=在玩家和伺服器之間中繼訊息,就像一個郵件外掛一樣。\n# 這個機器人可以在收件人離線時儲存訊息,並在他們加入伺服器時傳送訊息。\n# /!\ 伺服器管理員可以以任意玩家的身份傳送任意訊息,請記住這一點。 +config.ChatBot.Mailer=Һŷ֮g^ӍϢһ]һӡ\n# @C˿ռxrӍϢKŷrӍϢ\n# /!\ ŷTҵ݂ӍϢՈӛס@һc # ChatBot.Map -config.ChatBot.Map=允許你將地圖渲染成.jpg圖片,該圖片會被渲染到Rendered_Maps資料夾中。\n# 注意:這個功能目前只對解決使用地圖的驗證碼有用。\n# 如果一些伺服器解決驗證碼的時間很短,請啟用Auto_Render_On_Update並準備快速開啟該檔案。\n# 在linux上,你可以使用FTP來訪問生成的檔案。 -config.ChatBot.Map.Should_Resize=是否需要調整地圖的大小?(預設大小是128x128) -config.ChatBot.Map.Resize_To=將地圖調整到什麼大小?(注意:大小越大,質量越低) -config.ChatBot.Map.Auto_Render_On_Update=一旦接收到新的地圖或已有地圖被更新,自動渲染該地圖。 -config.ChatBot.Map.Delete_All_On_Unload=在解除安裝/重新載入地圖時刪除所有已渲染的地圖(退出MCC時不會刪除影象) -config.ChatBot.Map.Notify_On_First_Update=當第一次從伺服器上收到一張地圖時,傳送一個通知。 +config.ChatBot.Map=S㌢؈DȾ.jpgDƬԓDƬȾRendered_MapsYϊAС\n# ע⣺@ĿǰֻQʹõ؈DCaá\n# һЩŷQCaĕrg̣ܶՈAuto_Render_On_UpdateKʂ_ԓn\n# linuxϣʹFTPLɵęn +config.ChatBot.Map.Render_In_Console=ǷڿƙȾ؈D +config.ChatBot.Map.Save_To_File=Ƿ񌢵؈Dn +config.ChatBot.Map.Auto_Render_On_Update=һյµĵ؈Dе؈D£ԄȾԓ؈D +config.ChatBot.Map.Delete_All_On_Unload=ڽb/d؈DrhȾĵ؈D˳MCCrhӰ +config.ChatBot.Map.Notify_On_First_Update=һΏŷյһ؈Drһ֪ͨ # ChatBot.PlayerListLogger -config.ChatBot.PlayerListLogger=定期記錄當前的玩家列表到檔案中。 -config.ChatBot.PlayerListLogger.Delay=(單位:秒) +config.ChatBot.PlayerListLogger=ӛ䛮ǰбnС +config.ChatBot.PlayerListLogger.Delay=λ룩 # ChatBot.RemoteControl -config.ChatBot.RemoteControl=通過遊戲中的私聊向機器人傳送MCC控制檯命令\n# 你需要先配置好[ChatFormat]章節的設定,並在[Main.Advanced.bot_owners]中新增自己的賬號。\n# /!\ 伺服器管理員可以以任意玩家的身份傳送任意訊息,僅在信任他們時啟用本功能。 +config.ChatBot.RemoteControl=ͨ^[е˽C˂MCCƙ\n# Ҫú[ChatFormat]¹OK[Main.Advanced.bot_owners]Լ~̖\n# /!\ ŷTҵ݂ӍϢHrñܡ # ChatBot.ReplayCapture -config.ChatBot.ReplayCapture=使用"/replay start"開始記錄遊戲,並在之後使用 Replay Mod (https://www.replaymod.com/) 進行重放。\n# 請注意,由於技術限制,玩家自身不會顯示在重放檔案中。\n# /!\ 你應該使用"/replay stop"停止記錄或者使用"/quit"退出程式,否則回放檔案可能會損壞。 -config.ChatBot.ReplayCapture.Backup_Interval=每間隔多少秒自動儲存一次回放檔案,以秒為單位。使用-1禁用自動儲存。 +config.ChatBot.ReplayCapture=ʹ"/replay start"_ʼӛ[򣬁K֮ʹ Replay Mod (https://www.replaymod.com/) Mطš\n# Ոע⣬춼gƣ@ʾطřnС\n# /!\ 㑪ԓʹ"/replay stop"ֹͣӛ䛻ʹ"/quit"˳ʽtطřnܕpġ +config.ChatBot.ReplayCapture.Backup_Interval=ÿgԄӃһλطřnλʹ-1ԄӃ档 # ChatBot.ScriptScheduler -config.ChatBot.ScriptScheduler=在加入伺服器時、到達特定時間時或以設定的時間間隔執行命令或指令碼檔案\n# 詳細使用方法請檢視 https://mccteam.github.io/guide/chat-bots.html#script-scheduler +config.ChatBot.ScriptScheduler=ڼŷr_ضrgrOĕrggָan\n# Ԕʹ÷Ոzҕ https://mccteam.github.io/guide/chat-bots.html#script-scheduler diff --git a/MinecraftClient/Settings.cs b/MinecraftClient/Settings.cs index 51041b96..5bfd337c 100644 --- a/MinecraftClient/Settings.cs +++ b/MinecraftClient/Settings.cs @@ -396,6 +396,11 @@ namespace MinecraftClient for (int i = 0; i < Advanced.BotOwners.Count; ++i) Advanced.BotOwners[i] = ToLowerIfNeed(Advanced.BotOwners[i]); + + if (Advanced.MinTerminalWidth < 1) + Advanced.MinTerminalWidth = 1; + if (Advanced.MinTerminalHeight < 1) + Advanced.MinTerminalHeight = 1; } [TomlDoNotInlineObject] @@ -466,6 +471,12 @@ namespace MinecraftClient [TomlInlineComment("$config.Main.Advanced.terrain_and_movements$")] public bool TerrainAndMovements = false; + [TomlInlineComment("$config.Main.Advanced.move_head_while_walking$")] + public bool MoveHeadWhileWalking = true; + + [TomlInlineComment("$config.Main.Advanced.movement_speed$")] + public int MovementSpeed = 2; + [TomlInlineComment("$config.Main.Advanced.inventory_handling$")] public bool InventoryHandling = false; @@ -511,17 +522,20 @@ namespace MinecraftClient [TomlInlineComment("$config.Main.Advanced.minecraft_realms$")] public bool MinecraftRealms = false; - [TomlInlineComment("$config.Main.Advanced.move_head_while_walking$")] - public bool MoveHeadWhileWalking = true; - [TomlInlineComment("$config.Main.Advanced.timeout$")] public int TcpTimeout = 30; [TomlInlineComment("$config.Main.Advanced.enable_emoji$")] public bool EnableEmoji = true; - [TomlInlineComment("$config.Main.Advanced.movement_speed$")] - public int MovementSpeed = 2; + [TomlInlineComment("$config.Main.Advanced.TerminalColorDepth$")] + public TerminalColorDepthType TerminalColorDepth = TerminalColorDepthType.bit_24; + + [TomlInlineComment("$config.Main.Advanced.MinTerminalWidth$")] + public int MinTerminalWidth = 16; + + [TomlInlineComment("$config.Main.Advanced.MinTerminalHeight$")] + public int MinTerminalHeight = 10; /// /// Load login/password using an account alias @@ -549,6 +563,8 @@ namespace MinecraftClient public enum ResolveSrvRecordType { no, fast, yes }; public enum ForgeConfigType { no, auto, force }; + + public enum TerminalColorDepthType { bit_4, bit_8, bit_24}; } public struct AccountInfoConfig @@ -1231,9 +1247,10 @@ namespace MinecraftClient { public static string GetFullMessage(this Exception ex) { + string msg = ex.Message.Replace("+", "->"); return ex.InnerException == null - ? ex.Message - : ex.Message + "\n --> " + ex.InnerException.GetFullMessage(); + ? msg + : msg + "\n --> " + ex.InnerException.GetFullMessage(); } } } diff --git a/README.md b/README.md index 4d744f0a..67bf7f97 100644 --- a/README.md +++ b/README.md @@ -50,11 +50,11 @@ If you'd like to contribute to Minecraft Console Client, great, just fork the re Check out: [How to update or add translations for MCC](https://mccteam.github.io/guide/contibuting.html#translations). MCC now supports the following languages (Alphabetical order) : - * `de.ini` (54.64% translated) : Deutsch - German + * `de.ini` (54.40% translated) : Deutsch - German * `en.ini` : English - English - * `fr.ini` (54.64% translated) : Français (France) - French - * `ru.ini` (53.74% translated) : Русский (Russkiy) - Russian - * `vi.ini` (53.74% translated) : Tiếng Việt (Việt Nam) - Vietnamese + * `fr.ini` (54.40% translated) : Français (France) - French + * `ru.ini` (53.50% translated) : Русский (Russkiy) - Russian + * `vi.ini` (53.50% translated) : Tiếng Việt (Việt Nam) - Vietnamese * `zh-Hans.ini` (100.00% translated) : 简体中文 - Chinese Simplified * `zh-Hant.ini` (100.00% translated) : 繁體中文 - Chinese Traditional From 0bd7ee0f8e6d61fe0829be977a1e90d6244eb407 Mon Sep 17 00:00:00 2001 From: BruceChen Date: Thu, 13 Oct 2022 19:49:39 +0800 Subject: [PATCH 5/8] Rename --- MinecraftClient/{ConsoleColor.cs => ColorHelper.cs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename MinecraftClient/{ConsoleColor.cs => ColorHelper.cs} (100%) diff --git a/MinecraftClient/ConsoleColor.cs b/MinecraftClient/ColorHelper.cs similarity index 100% rename from MinecraftClient/ConsoleColor.cs rename to MinecraftClient/ColorHelper.cs From 023cc2e2d4ac0fdc94d33455507221e178743e49 Mon Sep 17 00:00:00 2001 From: breadbyte Date: Fri, 14 Oct 2022 02:31:31 +0800 Subject: [PATCH 6/8] Fix Linux issues with the scripting system This fixes bugs in the scripting system in which scripts does not compile and run on Linux. This commit also changes wording around the logging in the scripting system to avoid confusion between script errors and regular script compilation. --- .../DynamicRun/Builder/CompileRunner.cs | 2 +- .../Scripting/DynamicRun/Builder/Compiler.cs | 36 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/MinecraftClient/Scripting/DynamicRun/Builder/CompileRunner.cs b/MinecraftClient/Scripting/DynamicRun/Builder/CompileRunner.cs index 0bb3b829..555622fc 100644 --- a/MinecraftClient/Scripting/DynamicRun/Builder/CompileRunner.cs +++ b/MinecraftClient/Scripting/DynamicRun/Builder/CompileRunner.cs @@ -24,7 +24,7 @@ namespace DynamicRun.Builder GC.WaitForPendingFinalizers(); } - ConsoleIO.WriteLogLine(assemblyLoadContextWeakRef.Item1.IsAlive ? "Script failed to clean-up" : "Script finished!"); + ConsoleIO.WriteLogLine(assemblyLoadContextWeakRef.Item1.IsAlive ? "Script continues to run." : "Script finished!"); return assemblyLoadContextWeakRef.Item2; } diff --git a/MinecraftClient/Scripting/DynamicRun/Builder/Compiler.cs b/MinecraftClient/Scripting/DynamicRun/Builder/Compiler.cs index 8029afe2..0ade609f 100644 --- a/MinecraftClient/Scripting/DynamicRun/Builder/Compiler.cs +++ b/MinecraftClient/Scripting/DynamicRun/Builder/Compiler.cs @@ -10,6 +10,7 @@ using System.IO; using System.IO.MemoryMappedFiles; using System.Linq; using System.Reflection; +using System.Runtime.InteropServices; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.Text; @@ -22,7 +23,7 @@ namespace DynamicRun.Builder { public CompileResult Compile(string filepath, string fileName) { - ConsoleIO.WriteLogLine($"Starting compilation of: '{fileName}'"); + ConsoleIO.WriteLogLine($"Starting compilation..."); using var peStream = new MemoryStream(); var result = GenerateCode(filepath, fileName).Emit(peStream); @@ -62,26 +63,21 @@ namespace DynamicRun.Builder var mods = Assembly.GetEntryAssembly()!.GetModules(); -#pragma warning disable IL3000 - // System.Private.CoreLib - var A = typeof(object).Assembly.Location; - // System.Console - var B = typeof(Console).Assembly.Location; - // The path to MinecraftClient.dll - var C = typeof(Program).Assembly.Location; - var references = new List - { - MetadataReference.CreateFromFile(A), - MetadataReference.CreateFromFile(B) - }; +#pragma warning disable IL3000 // We determine if we are in a self-contained binary by checking specifically if the Assembly file path is null. - // We're on a Single File Application, so we need to extract the executable to get the assembly. - if (string.IsNullOrEmpty(C)) + var SystemPrivateCoreLib = typeof(object).Assembly.Location; // System.Private.CoreLib + var SystemConsole = typeof(Console).Assembly.Location; // System.Console + var MinecraftClientDll = typeof(Program).Assembly.Location; // The path to MinecraftClient.dll + + var references = new List(); + + // We're on a self-contained binary, so we need to extract the executable to get the assemblies. + if (string.IsNullOrEmpty(MinecraftClientDll)) { // Create a temporary file to copy the executable to. - var executableDir = System.AppContext.BaseDirectory; - var executablePath = Path.Combine(executableDir, "MinecraftClient.exe"); + var executableDir = AppContext.BaseDirectory; + var executablePath = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? Path.Combine(executableDir, "MinecraftClient.exe") : Path.Combine(executableDir, "MinecraftClient"); var tempFileName = Path.GetTempFileName(); if (File.Exists(executablePath)) { @@ -99,6 +95,7 @@ namespace DynamicRun.Builder var assemblyrefs = Assembly.GetEntryAssembly()?.GetReferencedAssemblies().ToList()!; assemblyrefs.Add(new("MinecraftClient")); + assemblyrefs.Add(new("System.Private.CoreLib")); foreach (var refs in assemblyrefs) { @@ -133,10 +130,13 @@ namespace DynamicRun.Builder } else { - references.Add(MetadataReference.CreateFromFile(C)); + references.Add(MetadataReference.CreateFromFile(SystemPrivateCoreLib)); + references.Add(MetadataReference.CreateFromFile(SystemConsole)); + references.Add(MetadataReference.CreateFromFile(MinecraftClientDll)); Assembly.GetEntryAssembly()?.GetReferencedAssemblies().ToList().ForEach(a => references.Add(MetadataReference.CreateFromFile(Assembly.Load(a).Location))); } #pragma warning restore IL3000 + return CSharpCompilation.Create($"{fileName}.dll", new[] { parsedSyntaxTree }, references: references, From a7e69fd9fdf868f74561895eed3a800f6f6dc36c Mon Sep 17 00:00:00 2001 From: BruceChen Date: Fri, 14 Oct 2022 10:33:09 +0800 Subject: [PATCH 7/8] Update ConsoleInteractive --- ConsoleInteractive | 2 +- MinecraftClient/Protocol/Handlers/Protocol18.cs | 17 +++++++++++++++-- MinecraftClient/Protocol/Message/ChatParser.cs | 6 ++++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/ConsoleInteractive b/ConsoleInteractive index 225b10ec..42074c44 160000 --- a/ConsoleInteractive +++ b/ConsoleInteractive @@ -1 +1 @@ -Subproject commit 225b10ec96af5c8f179a008cc442b502d23bc601 +Subproject commit 42074c449b8cf32e035f982bd83af6dcf75bc764 diff --git a/MinecraftClient/Protocol/Handlers/Protocol18.cs b/MinecraftClient/Protocol/Handlers/Protocol18.cs index 5b00b26e..4db4b661 100644 --- a/MinecraftClient/Protocol/Handlers/Protocol18.cs +++ b/MinecraftClient/Protocol/Handlers/Protocol18.cs @@ -553,6 +553,19 @@ namespace MinecraftClient.Protocol.Handlers (messageTypeEnum == ChatParser.MessageType.TEAM_MSG_COMMAND_INCOMING || messageTypeEnum == ChatParser.MessageType.TEAM_MSG_COMMAND_OUTGOING)) senderTeamName = Json.ParseJson(targetName).Properties["with"].DataArray[0].Properties["text"].StringValue; + if (string.IsNullOrWhiteSpace(senderDisplayName)) + { + PlayerInfo? player = handler.GetPlayerInfo(senderUUID); + if (player != null && (player.DisplayName != null || player.Name != null) && string.IsNullOrWhiteSpace(senderDisplayName)) + { + senderDisplayName = ChatParser.ParseText(player.DisplayName ?? player.Name); + if (string.IsNullOrWhiteSpace(senderDisplayName)) + senderDisplayName = player.DisplayName ?? player.Name; + else + senderDisplayName += "§r"; + } + } + bool verifyResult; if (!isOnlineMode) verifyResult = false; @@ -1382,8 +1395,8 @@ namespace MinecraftClient.Protocol.Handlers byte windowID = dataTypes.ReadNextByte(packetData); short actionID = dataTypes.ReadNextShort(packetData); bool accepted = dataTypes.ReadNextBool(packetData); - if (!accepted && actionID > 0) - SendWindowConfirmation(windowID, actionID, accepted); + if (!accepted) + SendWindowConfirmation(windowID, actionID, true); } break; case PacketTypesIn.ResourcePackSend: diff --git a/MinecraftClient/Protocol/Message/ChatParser.cs b/MinecraftClient/Protocol/Message/ChatParser.cs index dc29f421..d000cfe9 100644 --- a/MinecraftClient/Protocol/Message/ChatParser.cs +++ b/MinecraftClient/Protocol/Message/ChatParser.cs @@ -47,8 +47,10 @@ namespace MinecraftClient.Protocol /// Returns the translated text public static string ParseSignedChat(ChatMessage message, List? links = null) { - string chatContent = Config.Signature.ShowModifiedChat && message.unsignedContent != null ? message.unsignedContent : message.content; - string content = message.isJson ? ParseText(chatContent, links) : chatContent; + string chatContent = (Config.Signature.ShowModifiedChat && message.unsignedContent != null) ? message.unsignedContent : message.content; + string content = ParseText(chatContent, links); + if (string.IsNullOrEmpty(content)) + content = chatContent; string sender = message.displayName!; string text; From 01802dfcffdbe1079a98d7438d2a2a8cef4f8cf1 Mon Sep 17 00:00:00 2001 From: BruceChen Date: Fri, 14 Oct 2022 20:34:45 +0800 Subject: [PATCH 8/8] Fix sign command --- .../Handlers/Packet/s2c/DeclareCommands.cs | 561 ++++++++++++++++++ .../Protocol/Handlers/Protocol18.cs | 70 +-- .../Protocol/Message/ChatParser.cs | 17 +- 3 files changed, 587 insertions(+), 61 deletions(-) create mode 100644 MinecraftClient/Protocol/Handlers/Packet/s2c/DeclareCommands.cs diff --git a/MinecraftClient/Protocol/Handlers/Packet/s2c/DeclareCommands.cs b/MinecraftClient/Protocol/Handlers/Packet/s2c/DeclareCommands.cs new file mode 100644 index 00000000..a850dd2a --- /dev/null +++ b/MinecraftClient/Protocol/Handlers/Packet/s2c/DeclareCommands.cs @@ -0,0 +1,561 @@ +using System; +using System.Collections.Generic; + +namespace MinecraftClient.Protocol.Handlers.packet.s2c +{ + internal static class DeclareCommands + { + private static int RootIdx; + private static CommandNode[] Nodes = Array.Empty(); + + public static void Read(DataTypes dataTypes, Queue packetData) + { + int count = dataTypes.ReadNextVarInt(packetData); + Nodes = new CommandNode[count]; + for (int i = 0; i < count; ++i) + { + byte flags = dataTypes.ReadNextByte(packetData); + + int childCount = dataTypes.ReadNextVarInt(packetData); + int[] childs = new int[childCount]; + for (int j = 0; j < childCount; ++j) + childs[j] = dataTypes.ReadNextVarInt(packetData); + + int redirectNode = ((flags & 0x08) > 0) ? dataTypes.ReadNextVarInt(packetData) : -1; + + string? name = ((flags & 0x03) == 1 || (flags & 0x03) == 2) ? dataTypes.ReadNextString(packetData) : null; + + int paserId = ((flags & 0x03) == 2) ? dataTypes.ReadNextVarInt(packetData) : -1; + Paser? paser = null; + if ((flags & 0x03) == 2) + { + paser = paserId switch + { + 1 => new PaserFloat(dataTypes, packetData), + 2 => new PaserDouble(dataTypes, packetData), + 3 => new PaserInteger(dataTypes, packetData), + 4 => new PaserLong(dataTypes, packetData), + 5 => new PaserString(dataTypes, packetData), + 6 => new PaserEntity(dataTypes, packetData), + 8 => new PaserBlockPos(dataTypes, packetData), + 9 => new PaserColumnPos(dataTypes, packetData), + 10 => new PaserVec3(dataTypes, packetData), + 11 => new PaserVec2(dataTypes, packetData), + 18 => new PaserMessage(dataTypes, packetData), + 27 => new PaserRotation(dataTypes, packetData), + 29 => new PaserScoreHolder(dataTypes, packetData), + 43 => new PaserResourceOrTag(dataTypes, packetData), + 44 => new PaserResource(dataTypes, packetData), + _ => new PaserEmpty(dataTypes, packetData), + }; + } + + string? suggestionsType = ((flags & 0x10) > 0) ? dataTypes.ReadNextString(packetData) : null; + + Nodes[i] = new(flags, childs, redirectNode, name, paser, suggestionsType); + } + RootIdx = dataTypes.ReadNextVarInt(packetData); + } + + public static List> CollectSignArguments(string command) + { + List> needSigned = new(); + CollectSignArguments(RootIdx, command, needSigned); + return needSigned; + } + + private static void CollectSignArguments(int NodeIdx, string command, List> arguments) + { + CommandNode node = Nodes[NodeIdx]; + string last_arg = command; + switch (node.Flags & 0x03) + { + case 0: // root + break; + case 1: // literal + { + string[] arg = command.Split(' ', 2, StringSplitOptions.None); + if (!(arg.Length == 2 && node.Name! == arg[0])) + return; + last_arg = arg[1]; + } + break; + case 2: // argument + { + int argCnt = (node.Paser == null) ? 1 : node.Paser.GetArgCnt(); + string[] arg = command.Split(' ', argCnt + 1, StringSplitOptions.None); + if ((node.Flags & 0x04) > 0) + { + if (node.Paser != null && node.Paser.GetName() == "minecraft:message") + arguments.Add(new(node.Name!, command)); + } + if (!(arg.Length == argCnt + 1)) + return; + last_arg = arg[^1]; + } + break; + default: + break; + } + + while (Nodes[NodeIdx].RedirectNode >= 0) + NodeIdx = Nodes[NodeIdx].RedirectNode; + + foreach (int childIdx in Nodes[NodeIdx].Clildren) + CollectSignArguments(childIdx, last_arg, arguments); + } + + internal class CommandNode + { + public byte Flags; + public int[] Clildren; + public int RedirectNode; + public string? Name; + public Paser? Paser; + public string? SuggestionsType; + + + public CommandNode(byte Flags, + int[] Clildren, + int RedirectNode = -1, + string? Name = null, + Paser? Paser = null, + string? SuggestionsType = null) + { + this.Flags = Flags; + this.Clildren = Clildren; + this.RedirectNode = RedirectNode; + this.Name = Name; + this.Paser = Paser; + this.SuggestionsType = SuggestionsType; + } + } + + internal abstract class Paser + { + public abstract string GetName(); + + public abstract int GetArgCnt(); + + public abstract bool Check(string text); + } + + internal class PaserEmpty : Paser + { + + public PaserEmpty(DataTypes dataTypes, Queue packetData) { } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 1; + } + + public override string GetName() + { + return ""; + } + } + + internal class PaserFloat : Paser + { + private byte Flags; + private float Min = float.MinValue, Max = float.MaxValue; + + public PaserFloat(DataTypes dataTypes, Queue packetData) + { + Flags = dataTypes.ReadNextByte(packetData); + if ((Flags & 0x01) > 0) + Min = dataTypes.ReadNextFloat(packetData); + if ((Flags & 0x02) > 0) + Max = dataTypes.ReadNextFloat(packetData); + } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 1; + } + + public override string GetName() + { + return "brigadier:float"; + } + } + + internal class PaserDouble : Paser + { + private byte Flags; + private double Min = double.MinValue, Max = double.MaxValue; + + public PaserDouble(DataTypes dataTypes, Queue packetData) + { + Flags = dataTypes.ReadNextByte(packetData); + if ((Flags & 0x01) > 0) + Min = dataTypes.ReadNextDouble(packetData); + if ((Flags & 0x02) > 0) + Max = dataTypes.ReadNextDouble(packetData); + } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 1; + } + + public override string GetName() + { + return "brigadier:double"; + } + } + + internal class PaserInteger : Paser + { + private byte Flags; + private int Min = int.MinValue, Max = int.MaxValue; + + public PaserInteger(DataTypes dataTypes, Queue packetData) + { + Flags = dataTypes.ReadNextByte(packetData); + if ((Flags & 0x01) > 0) + Min = dataTypes.ReadNextInt(packetData); + if ((Flags & 0x02) > 0) + Max = dataTypes.ReadNextInt(packetData); + } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 1; + } + + public override string GetName() + { + return "brigadier:integer"; + } + } + + internal class PaserLong : Paser + { + private byte Flags; + private long Min = long.MinValue, Max = long.MaxValue; + + public PaserLong(DataTypes dataTypes, Queue packetData) + { + Flags = dataTypes.ReadNextByte(packetData); + if ((Flags & 0x01) > 0) + Min = dataTypes.ReadNextLong(packetData); + if ((Flags & 0x02) > 0) + Max = dataTypes.ReadNextLong(packetData); + } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 1; + } + + public override string GetName() + { + return "brigadier:long"; + } + } + + internal class PaserString : Paser + { + private StringType Type; + + private enum StringType { SINGLE_WORD, QUOTABLE_PHRASE, GREEDY_PHRASE }; + + public PaserString(DataTypes dataTypes, Queue packetData) + { + Type = (StringType)dataTypes.ReadNextVarInt(packetData); + } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 1; + } + + public override string GetName() + { + return "brigadier:string"; + } + } + + internal class PaserEntity : Paser + { + private byte Flags; + + public PaserEntity(DataTypes dataTypes, Queue packetData) + { + Flags = dataTypes.ReadNextByte(packetData); + } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 1; + } + + public override string GetName() + { + return "minecraft:entity"; + } + } + + internal class PaserBlockPos : Paser + { + + public PaserBlockPos(DataTypes dataTypes, Queue packetData) { } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 3; + } + + public override string GetName() + { + return "minecraft:block_pos"; + } + } + + internal class PaserColumnPos : Paser + { + + public PaserColumnPos(DataTypes dataTypes, Queue packetData) { } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 3; + } + + public override string GetName() + { + return "minecraft:column_pos"; + } + } + + internal class PaserVec3 : Paser + { + + public PaserVec3(DataTypes dataTypes, Queue packetData) { } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 3; + } + + public override string GetName() + { + return "minecraft:vec3"; + } + } + + internal class PaserVec2 : Paser + { + + public PaserVec2(DataTypes dataTypes, Queue packetData) { } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 2; + } + + public override string GetName() + { + return "minecraft:vec2"; + } + } + + internal class PaserRotation : Paser + { + + public PaserRotation(DataTypes dataTypes, Queue packetData) { } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 2; + } + + public override string GetName() + { + return "minecraft:rotation"; + } + } + + internal class PaserMessage : Paser + { + public PaserMessage(DataTypes dataTypes, Queue packetData) { } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 1; + } + + public override string GetName() + { + return "minecraft:message"; + } + } + + internal class PaserScoreHolder : Paser + { + private byte Flags; + + public PaserScoreHolder(DataTypes dataTypes, Queue packetData) + { + Flags = dataTypes.ReadNextByte(packetData); + } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 1; + } + + public override string GetName() + { + return "minecraft:score_holder"; + } + } + + internal class PaserRange : Paser + { + private bool Decimals; + + public PaserRange(DataTypes dataTypes, Queue packetData) + { + Decimals = dataTypes.ReadNextBool(packetData); + } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 1; + } + + public override string GetName() + { + return "minecraft:range"; + } + } + + internal class PaserResourceOrTag : Paser + { + private string Registry; + + public PaserResourceOrTag(DataTypes dataTypes, Queue packetData) + { + Registry = dataTypes.ReadNextString(packetData); + } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 1; + } + + public override string GetName() + { + return "minecraft:resource_or_tag"; + } + } + + internal class PaserResource : Paser + { + private string Registry; + + public PaserResource(DataTypes dataTypes, Queue packetData) + { + Registry = dataTypes.ReadNextString(packetData); + } + + public override bool Check(string text) + { + return true; + } + + public override int GetArgCnt() + { + return 1; + } + + public override string GetName() + { + return "minecraft:resource"; + } + } + } +} diff --git a/MinecraftClient/Protocol/Handlers/Protocol18.cs b/MinecraftClient/Protocol/Handlers/Protocol18.cs index 4db4b661..56fe8d70 100644 --- a/MinecraftClient/Protocol/Handlers/Protocol18.cs +++ b/MinecraftClient/Protocol/Handlers/Protocol18.cs @@ -17,6 +17,7 @@ using MinecraftClient.Mapping; using MinecraftClient.Mapping.BlockPalettes; using MinecraftClient.Mapping.EntityPalettes; using MinecraftClient.Protocol.Handlers.Forge; +using MinecraftClient.Protocol.Handlers.packet.s2c; using MinecraftClient.Protocol.Handlers.PacketPalettes; using MinecraftClient.Protocol.Keys; using MinecraftClient.Protocol.Message; @@ -450,6 +451,10 @@ namespace MinecraftClient.Protocol.Handlers } } break; + case PacketTypesIn.DeclareCommands: + if (protocolVersion >= MC_1_19_Version) + DeclareCommands.Read(dataTypes, packetData); + break; case PacketTypesIn.ChatMessage: int messageType = 0; @@ -2239,57 +2244,6 @@ namespace MinecraftClient.Protocol.Handlers } } - /// - /// The signable argument names and their values from command - /// Signature will used in Vanilla's say, me, msg, teammsg, ban, banip, and kick commands. - /// https://gist.github.com/kennytv/ed783dd244ca0321bbd882c347892874#signed-command-arguments - /// You can find all the commands that need to be signed by searching for "MessageArgumentType.getSignedMessage" in the source code. - /// Don't forget to handle the redirected commands, e.g. /tm, /w - /// - /// - /// Command - /// List< Argument Name, Argument Value > - private List>? CollectCommandArguments(string command) - { - if (!isOnlineMode || !Config.Signature.SignMessageInCommand) - return null; - - List> needSigned = new(); - - string[] argStage1 = command.Split(' ', 2, StringSplitOptions.None); - if (argStage1.Length == 2) - { - /* /me - /say - /teammsg - /tm */ - if (argStage1[0] == "me") - needSigned.Add(new("action", argStage1[1])); - else if (argStage1[0] == "say" || argStage1[0] == "teammsg" || argStage1[0] == "tm") - needSigned.Add(new("message", argStage1[1])); - else if (argStage1[0] == "msg" || argStage1[0] == "tell" || argStage1[0] == "w" || - argStage1[0] == "ban" || argStage1[0] == "ban-ip" || argStage1[0] == "kick") - { - /* /msg - /tell - /w - /ban [] - /ban-ip [] - /kick [] */ - string[] argStage2 = argStage1[1].Split(' ', 2, StringSplitOptions.None); - if (argStage2.Length == 2) - { - if (argStage1[0] == "msg" || argStage1[0] == "tell" || argStage1[0] == "w") - needSigned.Add(new("message", argStage2[1])); - else if (argStage1[0] == "ban" || argStage1[0] == "ban-ip" || argStage1[0] == "kick") - needSigned.Add(new("reason", argStage2[1])); - } - } - } - - return needSigned; - } - /// /// Send a chat command to the server - 1.19 and above /// @@ -2320,8 +2274,10 @@ namespace MinecraftClient.Protocol.Handlers DateTimeOffset timeNow = DateTimeOffset.UtcNow; fields.AddRange(dataTypes.GetLong(timeNow.ToUnixTimeMilliseconds())); - List>? needSigned = - playerKeyPair != null ? CollectCommandArguments(command) : null; // List< Argument Name, Argument Value > + List>? needSigned = null; // List< Argument Name, Argument Value > + if (playerKeyPair != null && isOnlineMode && Config.Signature.SignMessageInCommand && protocolVersion >= MC_1_19_Version) + needSigned = DeclareCommands.CollectSignArguments(command); + if (needSigned == null || needSigned!.Count == 0) { fields.AddRange(dataTypes.GetLong(0)); // Salt: Long @@ -2333,12 +2289,12 @@ namespace MinecraftClient.Protocol.Handlers byte[] salt = GenerateSalt(); fields.AddRange(salt); // Salt: Long fields.AddRange(dataTypes.GetVarInt(needSigned.Count)); // Signature Length: VarInt - foreach (var argument in needSigned) + foreach ((string argName, string message) in needSigned) { - fields.AddRange(dataTypes.GetString(argument.Item1)); // Argument name: String + fields.AddRange(dataTypes.GetString(argName)); // Argument name: String byte[] sign = (protocolVersion >= MC_1_19_2_Version) ? - playerKeyPair!.PrivateKey.SignMessage(argument.Item2, uuid, timeNow, ref salt, acknowledgment!.lastSeen) : - playerKeyPair!.PrivateKey.SignMessage(argument.Item2, uuid, timeNow, ref salt); + playerKeyPair!.PrivateKey.SignMessage(message, uuid, timeNow, ref salt, acknowledgment!.lastSeen) : + playerKeyPair!.PrivateKey.SignMessage(message, uuid, timeNow, ref salt); fields.AddRange(dataTypes.GetVarInt(sign.Length)); // Signature length: VarInt fields.AddRange(sign); // Signature: Byte Array } diff --git a/MinecraftClient/Protocol/Message/ChatParser.cs b/MinecraftClient/Protocol/Message/ChatParser.cs index d000cfe9..367f948a 100644 --- a/MinecraftClient/Protocol/Message/ChatParser.cs +++ b/MinecraftClient/Protocol/Message/ChatParser.cs @@ -47,11 +47,20 @@ namespace MinecraftClient.Protocol /// Returns the translated text public static string ParseSignedChat(ChatMessage message, List? links = null) { - string chatContent = (Config.Signature.ShowModifiedChat && message.unsignedContent != null) ? message.unsignedContent : message.content; - string content = ParseText(chatContent, links); - if (string.IsNullOrEmpty(content)) - content = chatContent; string sender = message.displayName!; + string content; + if (Config.Signature.ShowModifiedChat && message.unsignedContent != null) + { + content = ParseText(message.unsignedContent!); + if (string.IsNullOrEmpty(content)) + content = message.unsignedContent!; + } + else + { + content = message.isJson ? ParseText(message.content) : message.content; + if (string.IsNullOrEmpty(content)) + content = message.content!; + } string text; List usingData = new();