From be867be2f88f0093bb301ea7582a1e4412a34dc7 Mon Sep 17 00:00:00 2001 From: Jackson Date: Thu, 18 Jun 2020 02:29:54 -0700 Subject: [PATCH 1/2] Added support for Minecraft Dungeons --- FModel/Enums.cs | 3 ++- FModel/FModel.csproj | 2 ++ FModel/Globals.cs | 1 + FModel/Grabber/Paks/LauncherSettings.cs | 7 +++++++ FModel/Resources/minecraftdungeons.ico | Bin 0 -> 67646 bytes FModel/Utils/Folders.cs | 2 ++ FModel/Utils/Paks.cs | 18 ++++++++++++++++++ FModel/Windows/Launcher/FLauncher.xaml.cs | 9 +++++++++ 8 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 FModel/Grabber/Paks/LauncherSettings.cs create mode 100644 FModel/Resources/minecraftdungeons.ico diff --git a/FModel/Enums.cs b/FModel/Enums.cs index 4a89ad01..0c616607 100644 --- a/FModel/Enums.cs +++ b/FModel/Enums.cs @@ -6,7 +6,8 @@ Fortnite, Valorant, DeadByDaylight, - Borderlands3 + Borderlands3, + MinecraftDungeons } public enum EFModel diff --git a/FModel/FModel.csproj b/FModel/FModel.csproj index e9b0e41f..91e9d8fa 100644 --- a/FModel/FModel.csproj +++ b/FModel/FModel.csproj @@ -78,6 +78,7 @@ + @@ -181,6 +182,7 @@ + diff --git a/FModel/Globals.cs b/FModel/Globals.cs index 37d6824b..2fd46140 100644 --- a/FModel/Globals.cs +++ b/FModel/Globals.cs @@ -54,6 +54,7 @@ namespace FModel EGame.Valorant => "Valorant", EGame.DeadByDaylight => "Dead By Daylight", EGame.Borderlands3 => "Borderlands 3", + EGame.MinecraftDungeons => "Minecraft Dungeons", EGame.Unknown => "Unknown", _ => "Unknown", }; diff --git a/FModel/Grabber/Paks/LauncherSettings.cs b/FModel/Grabber/Paks/LauncherSettings.cs new file mode 100644 index 00000000..458798fd --- /dev/null +++ b/FModel/Grabber/Paks/LauncherSettings.cs @@ -0,0 +1,7 @@ +namespace FModel.Grabber.Paks +{ + public class LauncherSettings + { + public string productLibraryDir; + } +} \ No newline at end of file diff --git a/FModel/Resources/minecraftdungeons.ico b/FModel/Resources/minecraftdungeons.ico new file mode 100644 index 0000000000000000000000000000000000000000..f325f63f355f019b99d742da9ff00d7562668267 GIT binary patch literal 67646 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 literal 0 HcmV?d00001 diff --git a/FModel/Utils/Folders.cs b/FModel/Utils/Folders.cs index 4301c03c..95616dff 100644 --- a/FModel/Utils/Folders.cs +++ b/FModel/Utils/Folders.cs @@ -28,6 +28,7 @@ namespace FModel.Utils "ShooterGame" => EGame.Valorant, "DeadByDaylight" => EGame.DeadByDaylight, "OakGame" => EGame.Borderlands3, + "Dungeons" => EGame.MinecraftDungeons, _ => EGame.Unknown, }; } @@ -42,6 +43,7 @@ namespace FModel.Utils EGame.Valorant => "ShooterGame", EGame.DeadByDaylight => "DeadByDaylight", EGame.Borderlands3 => "OakGame", + EGame.MinecraftDungeons => "Dungeons", _ => string.Empty, }; diff --git a/FModel/Utils/Paks.cs b/FModel/Utils/Paks.cs index 2c37b19a..61b37e16 100644 --- a/FModel/Utils/Paks.cs +++ b/FModel/Utils/Paks.cs @@ -4,6 +4,7 @@ using Newtonsoft.Json; using PakReader.Parsers.Objects; using System.Collections.Generic; using System.IO; +using System; namespace FModel.Utils { @@ -82,6 +83,23 @@ namespace FModel.Utils else return string.Empty; } + + public static string GetMinecraftDungeonsPakFilesPath() + { + var appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + var install = $"{appData}/.minecraft_dungeons/launcher_settings.json"; + if (File.Exists(install)) + { + DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[launcher_settings.json]", install); + var launcherSettings = JsonConvert.DeserializeObject(File.ReadAllText(install)); + + if (launcherSettings.productLibraryDir != null) + if(!string.IsNullOrEmpty(launcherSettings.productLibraryDir)) + return $"{launcherSettings.productLibraryDir}\\dungeons\\dungeons\\Dungeons\\Content\\Paks"; + DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[launcher_settings.json]", "Minecraft Dungeons not found"); + } + return string.Empty; + } public static void Merge(Dictionary tempFiles, out Dictionary files, string mount) { diff --git a/FModel/Windows/Launcher/FLauncher.xaml.cs b/FModel/Windows/Launcher/FLauncher.xaml.cs index 86c2b17e..750fd035 100644 --- a/FModel/Windows/Launcher/FLauncher.xaml.cs +++ b/FModel/Windows/Launcher/FLauncher.xaml.cs @@ -62,6 +62,15 @@ namespace FModel.Windows.Launcher Globals.gNotifier.ShowCustomMessage("Borderlands 3", Properties.Resources.PathAutoDetected, "/FModel;component/Resources/borderlands3.ico"); ComboBoxVm.gamesCbViewModel.Add(new ComboBoxViewModel { Id = i++, Content = "Borderlands 3", Property = borderlands3FilesPath }); } + + string minecraftdungeonsFilesPath = Paks.GetMinecraftDungeonsPakFilesPath(); + if (!string.IsNullOrEmpty(minecraftdungeonsFilesPath)) + { + DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[launcher_settings.json]", $"Minecraft Dungeons found at {minecraftdungeonsFilesPath}"); + Globals.gNotifier.ShowCustomMessage("Minecraft Dungeons", Properties.Resources.PathAutoDetected, "/FModel;component/Resources/minecraftdungeons.ico"); + ComboBoxVm.gamesCbViewModel.Add(new ComboBoxViewModel { Id = i++, Content = "Minecraft Dungeons", Property = minecraftdungeonsFilesPath }); + } + Games_CbBox.SelectedItem = ComboBoxVm.gamesCbViewModel.Where(x => x.Property.ToString() == Properties.Settings.Default.PakPath).FirstOrDefault(); } From 675971fdbd1e4d86cfe71fbdee4237e6646342b4 Mon Sep 17 00:00:00 2001 From: Jackson Date: Thu, 18 Jun 2020 02:37:21 -0700 Subject: [PATCH 2/2] Tracking localization for Minecraft Dungeons --- FModel/Utils/Localizations.cs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/FModel/Utils/Localizations.cs b/FModel/Utils/Localizations.cs index 53d0676c..e6f73b41 100644 --- a/FModel/Utils/Localizations.cs +++ b/FModel/Utils/Localizations.cs @@ -51,6 +51,8 @@ namespace FModel.Utils m = Regex.Match(mount + KvP.Value.Name, $"{gameName}/Content/Localization/Game/{langCode}/Game.locres", RegexOptions.IgnoreCase); else if (Globals.Game.ActualGame == EGame.DeadByDaylight) m = Regex.Match(mount + KvP.Value.Name, $"{gameName}/Content/Localization/{gameName}/{langCode}/{gameName}.locres", RegexOptions.IgnoreCase); + else if (Globals.Game.ActualGame == EGame.MinecraftDungeons) + m = Regex.Match(mount + KvP.Value.Name, $"{gameName}/Content/Localization/Game/{langCode}/Game.locres", RegexOptions.IgnoreCase); if (m != null && m.Success) { @@ -179,6 +181,25 @@ namespace FModel.Utils ELanguage.TraditionalChinese => "zh-Hant", _ => "en", }; + else if (Globals.Game.ActualGame == EGame.MinecraftDungeons) + return lang switch + { + //Swedish sv-SE + //Mexican Spanish es-MX + //Portugal Portuguese pt-PT + //British English en-GB + ELanguage.English => "en", + ELanguage.French => "fr-FR", + ELanguage.German => "de-DE", + ELanguage.Italian => "it-IT", + ELanguage.Spanish => "es-ES", + ELanguage.Japanese => "ja-JP", + ELanguage.Korean => "ko-KR", + ELanguage.Polish => "pl-PL", + ELanguage.PortugueseBrazil => "pt-BR", + ELanguage.Russian => "ru-RU", + _ => "en" + }; else return "en"; }