diff --git a/MinecraftClient/Program.cs b/MinecraftClient/Program.cs
index 7cda97c9..c0ad8e90 100644
--- a/MinecraftClient/Program.cs
+++ b/MinecraftClient/Program.cs
@@ -42,6 +42,7 @@ namespace MinecraftClient
{
private static McClient? client;
public static string[]? startupargs;
+ public static readonly CultureInfo ActualCulture = CultureInfo.CurrentCulture;
public const string Version = MCHighestVersion;
public const string MCLowestVersion = "1.4.6";
@@ -57,6 +58,8 @@ namespace MinecraftClient
///
static void Main(string[] args)
{
+ InitCulture();
+
Task.Run(() =>
{
// "ToLower" require "CultureInfo" to be initialized on first run, which can take a lot of time.
@@ -110,10 +113,10 @@ namespace MinecraftClient
}
//Process ini configuration file
- bool needWriteDefaultSetting, newlyGenerated = false;
+ bool loadSucceed, needWriteDefaultSetting, newlyGenerated = false;
if (args.Length >= 1 && File.Exists(args[0]) && Settings.ToLowerIfNeed(Path.GetExtension(args[0])) == ".ini")
{
- needWriteDefaultSetting = Settings.LoadFromFile(args[0]);
+ (loadSucceed, needWriteDefaultSetting) = Settings.LoadFromFile(args[0]);
settingsIniPath = args[0];
//remove ini configuration file from arguments array
@@ -123,19 +126,59 @@ namespace MinecraftClient
}
else if (File.Exists("MinecraftClient.ini"))
{
- needWriteDefaultSetting = Settings.LoadFromFile("MinecraftClient.ini");
+ (loadSucceed, needWriteDefaultSetting) = Settings.LoadFromFile("MinecraftClient.ini");
}
else
{
+ loadSucceed = true;
needWriteDefaultSetting = true;
newlyGenerated = true;
}
- if (needWriteDefaultSetting)
+ if (!loadSucceed)
+ {
+ ConsoleInteractive.ConsoleReader.StopReadThread();
+ string command = " ";
+ while (command.Length > 0)
+ {
+ ConsoleIO.WriteLine(string.Empty);
+ ConsoleIO.WriteLineFormatted(Translations.Get("mcc.invaild_config", Config.Main.Advanced.InternalCmdChar.ToLogString()));
+ Translations.WriteLineFormatted("mcc.press_exit");
+ command = ConsoleInteractive.ConsoleReader.RequestImmediateInput().Trim();
+ if (command.Length > 0)
+ {
+ if (Config.Main.Advanced.InternalCmdChar.ToChar() != ' '
+ && command[0] == Config.Main.Advanced.InternalCmdChar.ToChar())
+ command = command[1..];
+
+ if (command.StartsWith("exit") || command.StartsWith("quit"))
+ {
+ return;
+ }
+ else if (command.StartsWith("new"))
+ {
+ (string gameLanguage, string[] langList) = Translations.GetTranslationPriority();
+ Config.Main.Advanced.Language = gameLanguage;
+ Translations.LoadTranslationFile(langList);
+
+ WriteBackSettings(true);
+ ConsoleIO.WriteLineFormatted(Translations.Get("mcc.gen_new_config", settingsIniPath));
+ return;
+ }
+ }
+ else
+ {
+ return;
+ }
+ }
+ return;
+ }
+ else if (needWriteDefaultSetting)
{
(string gameLanguage, string[] langList) = Translations.GetTranslationPriority();
Translations.LoadTranslationFile(langList);
Config.Main.Advanced.Language = gameLanguage;
+
WriteBackSettings(false);
if (newlyGenerated)
ConsoleIO.WriteLineFormatted(Translations.TryGet("mcc.settings_generated"));
@@ -618,7 +661,7 @@ namespace MinecraftClient
///
public static void ReloadSettings()
{
- if(Settings.LoadFromFile(settingsIniPath))
+ if(Settings.LoadFromFile(settingsIniPath).Item1)
ConsoleIO.WriteLine(Translations.TryGet("config.loading", settingsIniPath));
}
@@ -818,6 +861,15 @@ namespace MinecraftClient
return assembly.GetTypes().Where(t => String.Equals(t.Namespace, nameSpace, StringComparison.Ordinal)).ToArray();
}
+ public static void InitCulture()
+ {
+ CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
+ CultureInfo.DefaultThreadCurrentCulture = culture;
+ CultureInfo.DefaultThreadCurrentUICulture = culture;
+ Thread.CurrentThread.CurrentCulture = culture;
+ Thread.CurrentThread.CurrentUICulture = culture;
+ }
+
///
/// Static initialization of build information, read from assembly information
///
diff --git a/MinecraftClient/Resources/lang/en.ini b/MinecraftClient/Resources/lang/en.ini
index 2113581a..18567123 100644
--- a/MinecraftClient/Resources/lang/en.ini
+++ b/MinecraftClient/Resources/lang/en.ini
@@ -50,6 +50,8 @@ mcc.realms_available=You have access to the following Realms worlds
mcc.realms_join=Use realms: as server IP to join a Realms world
mcc.generator.generating=Generating {0} palette using the dataset: {1}
mcc.generator.done=Succesfully generated {0} palette using the dataset: {1}
+mcc.invaild_config=Failed to parse the settings file, enter "{0}new" to generate a new configuration.
+mcc.gen_new_config=New configuration file "{0}" is generated.
[debug]
# Messages from MCC Debug Mode
diff --git a/MinecraftClient/Resources/lang/zh-Hans.ini b/MinecraftClient/Resources/lang/zh-Hans.ini
index 7f1f7a4b..848c73e9 100644
--- a/MinecraftClient/Resources/lang/zh-Hans.ini
+++ b/MinecraftClient/Resources/lang/zh-Hans.ini
@@ -50,6 +50,8 @@ 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}" 。
[debug]
# Messages from MCC Debug Mode
diff --git a/MinecraftClient/Resources/lang/zh-Hant.ini b/MinecraftClient/Resources/lang/zh-Hant.ini
index 3b2ebb94..f4d745ef 100644
--- a/MinecraftClient/Resources/lang/zh-Hant.ini
+++ b/MinecraftClient/Resources/lang/zh-Hant.ini
@@ -50,6 +50,8 @@ 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}" 。
[debug]
# Messages from MCC Debug Mode
diff --git a/MinecraftClient/Settings.cs b/MinecraftClient/Settings.cs
index 1cd353c9..d90ba8b8 100644
--- a/MinecraftClient/Settings.cs
+++ b/MinecraftClient/Settings.cs
@@ -121,7 +121,7 @@ namespace MinecraftClient
}
- public static bool LoadFromFile(string filepath)
+ public static Tuple LoadFromFile(string filepath)
{
TomlDocument document;
try
@@ -141,16 +141,16 @@ namespace MinecraftClient
File.Copy(filepath, newFilePath, true);
ConsoleIO.WriteLineFormatted("§cPlease use the newly generated MinecraftClient.ini");
ConsoleIO.WriteLineFormatted("§cThe old MinecraftClient.ini has been backed up as " + newFilePath);
- return true;
+ ConsoleIO.WriteLine(Translations.GetOrNull("mcc.run_with_default_settings") ?? "\nMCC is running with default settings.");
+ return new(false, true);
}
}
catch { }
ConsoleIO.WriteLineFormatted(Translations.GetOrNull("config.load.fail") ?? "§cFailed to load settings:§r");
- ConsoleIO.WriteLine(ex.Message);
- ConsoleIO.WriteLine(Translations.GetOrNull("mcc.run_with_default_settings") ?? "\nMCC is running with default settings.");
- return false;
+ ConsoleIO.WriteLine(ex.GetFullMessage());
+ return new(false, false);
}
- return false;
+ return new(true, false);
}
public static void WriteToFile(string filepath, bool backupOldFile)
@@ -1210,4 +1210,14 @@ namespace MinecraftClient
};
}
}
+
+ public static class ExceptionExtensions
+ {
+ public static string GetFullMessage(this Exception ex)
+ {
+ return ex.InnerException == null
+ ? ex.Message
+ : ex.Message + "\n --> " + ex.InnerException.GetFullMessage();
+ }
+ }
}
diff --git a/MinecraftClient/Translations.cs b/MinecraftClient/Translations.cs
index b4a81024..0424a877 100644
--- a/MinecraftClient/Translations.cs
+++ b/MinecraftClient/Translations.cs
@@ -104,9 +104,9 @@ namespace MinecraftClient
string gameLanguage = "en_gb";
List name = new();
- string systemLanguage = string.IsNullOrWhiteSpace(CultureInfo.CurrentCulture.Name)
- ? CultureInfo.CurrentCulture.Parent.Name
- : CultureInfo.CurrentCulture.Name;
+ string systemLanguage = string.IsNullOrWhiteSpace(Program.ActualCulture.Name)
+ ? Program.ActualCulture.Parent.Name
+ : Program.ActualCulture.Name;
switch (systemLanguage)
{