diff --git a/MxValheim/KillFeed/Patch.cs b/MxValheim/KillFeed/Patch.cs
index c60b45e..76e4cc0 100644
--- a/MxValheim/KillFeed/Patch.cs
+++ b/MxValheim/KillFeed/Patch.cs
@@ -46,8 +46,8 @@ namespace MxValheim.KillFeed
}
// Message Format Variables
- string type1Separator = " a été tué par ";
- string type2Separator = " a tué ";
+ string type1Separator = Localization.instance.Localize("$killfeed_format_type1");
+ string type2Separator = Localization.instance.Localize("$killfeed_format_type2");
string finalMsg = "";
string attackerFormat = "";
string victimFormat = "";
@@ -58,7 +58,8 @@ namespace MxValheim.KillFeed
starFormat = "★";
crossFormat = "✝";
attackerFormat = $"{attacker.ToUpper()}";
- if(type == 1)
+
+ if (type == 1)
{
victimFormat = $"{crossFormat} {victim.ToUpper()}";
} else if(type == 2)
@@ -81,8 +82,9 @@ namespace MxValheim.KillFeed
victimFormat = $"{starFormat}{starFormat}{starFormat}{starFormat} {victim.ToUpper()}";
break;
}
- }
- distanceFormat = $" à {distance:F1}m de distance.";
+ }
+
+ distanceFormat = $"{Localization.instance.Localize("$killfeed_format_distance_before")}{distance:F1}m{Localization.instance.Localize("$killfeed_format_distance_after")}";
finalMsg =
(type == 1) ? $"{victimFormat}{type1Separator}{attackerFormat}{distanceFormat}": // Player Death
diff --git a/MxValheim/Localization/KillFeed.cs b/MxValheim/Localization/KillFeed.cs
deleted file mode 100644
index 1db88cb..0000000
--- a/MxValheim/Localization/KillFeed.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace MxValheim.Localization
-{
- internal class KillFeed
- {
- Dictionary killfeedLocales = new Dictionary
- {
- { " has been killed by ", " a été tué par " },
- { " killed ", " a tué " }
- };
- }
-}
diff --git a/MxValheim/MxValheim.cs b/MxValheim/MxValheim.cs
index 033d2dc..9cc55a6 100644
--- a/MxValheim/MxValheim.cs
+++ b/MxValheim/MxValheim.cs
@@ -7,6 +7,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using System.Reflection;
using System.Threading;
using System.Xml;
using TMPro;
@@ -21,7 +22,7 @@ public class MxValheimMod : BaseUnityPlugin
private const string ModGUID = "ovh.mxdev.mxvalheim";
private const string ModName = "MxValheim";
- private const string ModVersion = "1.5.4";
+ private const string ModVersion = "1.5.5";
public static ConfigEntry Config_Locked;
public static ConfigEntry Config_OreMultiplier;
@@ -32,7 +33,9 @@ public class MxValheimMod : BaseUnityPlugin
public static ConfigEntry Config_autoDoorCloseEnabled;
public static ConfigEntry Config_autoDoorClose;
- private static string WeightConfigPath => Path.Combine(Paths.ConfigPath, "mxvalheim.custom_weights.json");
+ public static string modPath = Path.Combine(Paths.PluginPath, "MxValheim");
+ public static string internalConfigsPath = Path.Combine(modPath, "Configs");
+ private static string WeightConfigPath => Path.Combine(internalConfigsPath, "items_weight.json");
public static Dictionary WeightSettings = new Dictionary();
// Data structures
@@ -73,12 +76,22 @@ public class MxValheimMod : BaseUnityPlugin
Config_autoDoorCloseEnabled = Config.Bind("General", "AutoDoorCloseEnabled", true, "Your doors will auto close if enabled. See AutoDoorCloseTimer for the desired time.");
Config_autoDoorClose = Config.Bind("General", "AutoDoorCloseTimer", 5.0f, "Your doors will auto close after the specified timer duration.");
+ LoadLocalization();
LoadJsonConfig();
Harmony harmony = new Harmony(ModGUID);
harmony.PatchAll();
}
+ [HarmonyPatch(typeof(Localization), nameof(Localization.SetupLanguage))]
+ public static class Localization_SetupLanguage_Patch
+ {
+ public static void Postfix()
+ {
+ LoadLocalization();
+ }
+ }
+
// --- TEST COMMAND: Type 'testkill' in F5 console ---
[HarmonyPatch(typeof(Terminal), nameof(Terminal.InputText))]
public static class ConsoleInputPatch
@@ -86,21 +99,6 @@ public class MxValheimMod : BaseUnityPlugin
static void Postfix(Terminal __instance)
{
string text = __instance.m_input.text;
- if (text.ToLower() == "listiconsstore")
- {
- var spriteAsset = Resources.FindObjectsOfTypeAll().FirstOrDefault(x => x.name == "store_icons"); ;
-
- if (spriteAsset != null)
- {
- Debug.Log($"--- Listing all sprites in {spriteAsset.name} ---");
- for (int i = 0; i < spriteAsset.spriteCharacterTable.Count; i++)
- {
- var sprite = spriteAsset.spriteCharacterTable[i];
- Debug.Log($"Index: {i} | Name: {sprite.name}");
- }
- }
- }
-
if (text.ToLower() == "listicons")
{
var spriteAsset = Resources.FindObjectsOfTypeAll().FirstOrDefault(x => x.name == "icons"); ;
@@ -176,6 +174,52 @@ public class MxValheimMod : BaseUnityPlugin
if (_displayTimer <= 0 && _hudRoot != null) _hudRoot.SetActive(false);
}
+ }
+
+ public static void LoadLocalization()
+ {
+ if (Localization.instance == null) return;
+
+ string modPath = Path.Combine(Paths.PluginPath, "MxValheim");
+ string translationsPath = Path.Combine(modPath, "Translations");
+ string lang = Localization.instance.GetSelectedLanguage();
+ string filePath = Path.Combine(translationsPath, $"{lang}.json");
+
+ if (!File.Exists(filePath))
+ {
+ filePath = Path.Combine(translationsPath, "English.json");
+ }
+
+ if (File.Exists(filePath))
+ {
+ try
+ {
+ string json = File.ReadAllText(filePath);
+ var dict = JsonConvert.DeserializeObject>(json);
+
+ // Get the method via Reflection to bypass "Inaccessible" errors
+ MethodInfo addWordMethod = typeof(Localization).GetMethod("AddWord",
+ BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
+
+ if (addWordMethod != null)
+ {
+ foreach (var entry in dict)
+ {
+ // Parameters: (instance to run on, array of arguments)
+ addWordMethod.Invoke(Localization.instance, new object[] { entry.Key, entry.Value });
+ }
+ Debug.Log($"[MxValheim] Successfully injected {dict.Count} strings for {lang}.");
+ }
+ else
+ {
+ Debug.LogError("[MxValheim] Critical Error: Could not find AddWord method in game code.");
+ }
+ }
+ catch (Exception e)
+ {
+ Debug.LogError($"[MxValheim] Error loading JSON: {e.Message}");
+ }
+ }
}
private bool LoadJsonConfig()
diff --git a/MxValheim/MxValheim.csproj b/MxValheim/MxValheim.csproj
index a87dc39..9418bca 100644
--- a/MxValheim/MxValheim.csproj
+++ b/MxValheim/MxValheim.csproj
@@ -35,11 +35,11 @@
E:\SteamLibrary\steamapps\common\Valheim\BepInEx\core\0Harmony.dll
-
- E:\SteamLibrary\steamapps\common\Valheim\Valheim_Data\Managed\Assembly-CSharp-publicized.dll
+
+ E:\SteamLibrary\steamapps\common\Valheim\Valheim_Data\Managed\publicized_assemblies\assembly_guiutils_publicized.dll
-
- E:\SteamLibrary\steamapps\common\Valheim\Valheim_Data\Managed\assembly_valheim-publicized.dll
+
+ E:\SteamLibrary\steamapps\common\Valheim\Valheim_Data\Managed\publicized_assemblies\assembly_valheim_publicized.dll
E:\SteamLibrary\steamapps\common\Valheim\BepInEx\core\BepInEx.dll
@@ -48,6 +48,7 @@
E:\SteamLibrary\steamapps\common\Valheim\BepInEx\plugins\Newtonsoft.Json.dll
+
@@ -62,6 +63,10 @@
E:\SteamLibrary\steamapps\common\Valheim\Valheim_Data\Managed\UnityEngine.dll
+
+ False
+ E:\SteamLibrary\steamapps\common\Valheim\Valheim_Data\Managed\UnityEngine.AssetBundleModule.dll
+
E:\SteamLibrary\steamapps\common\Valheim\Valheim_Data\Managed\UnityEngine.CoreModule.dll
@@ -97,10 +102,12 @@
-copy /Y "$(TargetDir)$(TargetName).dll" "E:\SteamLibrary\steamapps\common\Valheim\BepInEx\plugins\"
-copy /Y "$(TargetDir)$(TargetName).pdb" "E:\SteamLibrary\steamapps\common\Valheim\BepInEx\plugins\"
+copy /Y "$(TargetDir)$(TargetName).dll" "E:\SteamLibrary\steamapps\common\Valheim\BepInEx\plugins\MxValheim\"
+copy /Y "$(TargetDir)$(TargetName).pdb" "E:\SteamLibrary\steamapps\common\Valheim\BepInEx\plugins\MxValheim\"
-copy /Y "$(TargetDir)$(TargetName).dll" "R:\Server\valdev\BepInEx\plugins\"
-copy /Y "$(TargetDir)$(TargetName).pdb" "R:\Server\valdev\BepInEx\plugins\"
+copy /Y "$(TargetDir)$(TargetName).dll" "R:\Server\valdev\BepInEx\plugins\MxValheim\"
+copy /Y "$(TargetDir)$(TargetName).pdb" "R:\Server\valdev\BepInEx\plugins\MxValheim\"
+if exist "E:\SteamLibrary\steamapps\common\Valheim\BepInEx\plugins\MxValheim.zip" del "E:\SteamLibrary\steamapps\common\Valheim\BepInEx\plugins\MxValheim.zip"
+"C:\Program Files\7-Zip\7z.exe" a -tzip "E:\SteamLibrary\steamapps\common\Valheim\BepInEx\plugins\MxValheim.zip" "E:\SteamLibrary\steamapps\common\Valheim\BepInEx\plugins\MxValheim\*"
\ No newline at end of file
diff --git a/README.md b/README.md
index 554bbc9..2a1c9ab 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,11 @@

## MxValheim
-Official Mx Valheim Mod.
+Official **MxValheim Server** Mod.
+**This mod is created to be used Client/Server side. A lot of features are not working in solo mode.**
## Features
+- Use your client language with built-in localization.
- Kill Feed with custom UI showing player kill and death.
- Tweak individual item(s) weight in "BepInEx\config\mxvalheim.custom_weights.json".
- Ore drop multiplier. (Value available in the generated config.)