diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 3c175f4..eb33839 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -23,15 +23,15 @@ jobs:
secrets:
aws-access-key-id: ${{ secrets.NUGET_S3_REPO_KEY_ID }}
aws-secret-access-key: ${{ secrets.NUGET_S3_REPO_KEY_SECRET }}
- #nexus-api-key: ${{ secrets.NEXUS_API_KEY }}
- #nexus-cookies-header: ${{ secrets.NEXUSMOD_SESSION_COOKIE }}
- #nuget-org-key: ${{ secrets.NUGET_ORG_PAT }}
- #ts-api-key: ${{ secrets.TS_SERVICEACCOUNT }}
+ nexus-api-key: ${{ secrets.NEXUS_API_KEY }}
+ nexus-cookies-header: ${{ secrets.NEXUSMOD_SESSION_COOKIE }}
+ nuget-org-key: ${{ secrets.NUGET_ORG_PAT }}
+ ts-api-key: ${{ secrets.TS_SERVICEACCOUNT }}
webhook_url: ${{ secrets.VALHEIM_DISCORD_TITANS_WEBHOOK_URL }}
with:
- sln-file-name: Digitalroot.Valheim.Common.Placeholder
- proj-file-name: Digitalroot.Valheim.Common.Placeholder
+ sln-file-name: Digitalroot.Valheim.EarlyWishbone
+ proj-file-name: Digitalroot.Valheim.EarlyWishbone
#src-path: src
#unit-test-path: UnitTests
#skip-unit-tests: true
@@ -42,10 +42,10 @@ jobs:
#nuget-gh-upload: true
#nuget-s3-upload: true
#nuget-org-upload: true
- #nexus-enable-upload: true
- #nexus-mod-id: 000
- #ts-enable-upload: true
- #ts-name: Placeholder
- #ts-description: "TBD"
- #ts-categories: "server-side client-side" #https://thunderstore.io/api/experimental/community/valheim/category/
- #ts-dependencies: ValheimModding-Jotunn-2.20.0
+ nexus-enable-upload: true
+ nexus-mod-id: 2840
+ ts-enable-upload: true
+ ts-name: Early_Wishbone
+ Ts-description: "Add the Wishbone to Eikthyr with a 25% chance to drop"
+ ts-categories: "client-side" #https://thunderstore.io/api/experimental/community/valheim/category/
+ ts-dependencies: ValheimModding-Jotunn-2.20.0
diff --git a/docs/README.md b/docs/README.md
index 7c7077b..6d73998 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1,14 +1,17 @@
-# TBD
+# Early Wishbone
## Summary
-TBD
+Add the Wishbone to Eikthyr with a 25% chance to drop.
## License
**GNU Affero General Public License v3.0**
## Details
-TBD
+The Wishbone will help you find hidden treasuse in most of the biomes.
+Get it early from beating Eikthyr. Use the Wishbone to find hidden
+treasuses as early as the Meadows biome. Extend the lifespan and
+usefulness of this utility item before it is cast aside for a belt.
### Dependencies
- BepInExPack Valheim
@@ -20,35 +23,17 @@ TBD
### Configuration
-| Config | Category | Data Type | Desc |
-| --- | --- | --- | --- |
-| Campfire | Fireplaces | bool | Enable Campfire |
-| Bonfire | Fireplaces | bool | Enable Bonfire |
-| Sconce | Fireplaces | bool | Enable Sconce |
-| StandingWoodTorch | Fireplaces | bool | Enable Standing Wood Torch |
-| StandingIronTorch | Fireplaces | bool | Enable Standing Iron Torch |
-| StandingGreenBurningIronTorch | Fireplaces | bool | Enable Standing Green Burning Iron Torch |
-| StandingBlueBurningIronTorch | Fireplaces | bool | Enable Standing Blue Burning Iron Torch |
-| StandingBrazier | Fireplaces | bool | Enable Standing Brazier |
-| HangingBrazier | Fireplaces | bool | Enable Hanging Brazier |
-| Hearth | Fireplaces | bool | Enable Hearth |
-| HotTub | Fireplaces | bool | Enable Hot Tub |
-| JackOTurnip | Fireplaces | bool | Enable Jack O' Turnip |
-| StoneOven | Cooking Stations | bool | Enable Stone Oven |
-| Smelter | Smelters | bool | Enable Smelter |
-| BlastFurnace | Smelters | bool | Enable Blast Furnace |
-| EitrRefinery | Smelters | bool | Enable Eitr Refinery |
-| CustomPrefabs | Custom | string | A comma-separated list of prefab names |
+* No need to configure.
###### Add to server to enforce configs.
-### Crossplay ?
+### Crossplay ✔
| Point of View | Server w/ Mod | Server w/o Mod | Client (PC) w/ mod | Client (PC/Console) w/o mod |
| --- | --- | --- | --- | --- |
-| Client (PC) w/ mod | ? | ? | ? | ? |
-| Client (PC/Console) w/o mod | ? | ? | ? | ? |
-| Server w/ Mod | | | ? | ? |
-| Server w/o Mod | | | ? | ? |
+| Client (PC) w/ mod | ✔ | ✔ | ✔ | ✔ |
+| Client (PC/Console) w/o mod | ✔ | ✔ | ✔ | ✔ |
+| Server w/ Mod | | | ✔ | ✔ |
+| Server w/o Mod | | | ✔ | ✔ |
### Issues/Questions/Bugs
- Use the repo issues tab above.
diff --git a/src/Digitalroot.Valheim.ModTemplate.sln b/src/Digitalroot.Valheim.EarlyWishbone.sln
similarity index 60%
rename from src/Digitalroot.Valheim.ModTemplate.sln
rename to src/Digitalroot.Valheim.EarlyWishbone.sln
index 1629f2d..ec58353 100644
--- a/src/Digitalroot.Valheim.ModTemplate.sln
+++ b/src/Digitalroot.Valheim.EarlyWishbone.sln
@@ -28,7 +28,25 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ico", "ico", "{C66A8E3B-31D
ico\logo.png = ico\logo.png
EndProjectSection
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Digitalroot.Valheim.EarlyWishbone", "Digitalroot.Valheim.EarlyWishbone\Digitalroot.Valheim.EarlyWishbone.csproj", "{249524A5-4299-42A3-8B06-6CCE009BB255}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "UnitTests\UnitTests.csproj", "{B35A418E-FB5F-4560-9AE5-E072A2579495}"
+EndProject
Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {249524A5-4299-42A3-8B06-6CCE009BB255}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {249524A5-4299-42A3-8B06-6CCE009BB255}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {249524A5-4299-42A3-8B06-6CCE009BB255}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {249524A5-4299-42A3-8B06-6CCE009BB255}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B35A418E-FB5F-4560-9AE5-E072A2579495}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B35A418E-FB5F-4560-9AE5-E072A2579495}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B35A418E-FB5F-4560-9AE5-E072A2579495}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B35A418E-FB5F-4560-9AE5-E072A2579495}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
@@ -37,6 +55,7 @@ Global
{1960DCD1-3C51-48FF-BFF8-5FE4C3CBABB2} = {E64D67E6-C2B6-471C-990D-2E9A91427B64}
{28344659-BF34-4411-9C48-A3D5C9AFA98E} = {E5C5D2B9-639B-48CF-B5B0-E44FD7F24B1E}
{C66A8E3B-31DB-4296-9DF3-78F55E2580E5} = {E5C5D2B9-639B-48CF-B5B0-E44FD7F24B1E}
+ {249524A5-4299-42A3-8B06-6CCE009BB255} = {E5C5D2B9-639B-48CF-B5B0-E44FD7F24B1E}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {46DD4389-95C4-4F57-BB16-2A9A816F46B9}
diff --git a/src/Digitalroot.Valheim.EarlyWishbone.sln.DotSettings b/src/Digitalroot.Valheim.EarlyWishbone.sln.DotSettings
new file mode 100644
index 0000000..6e583d0
--- /dev/null
+++ b/src/Digitalroot.Valheim.EarlyWishbone.sln.DotSettings
@@ -0,0 +1,2 @@
+
+ True
\ No newline at end of file
diff --git a/src/Digitalroot.Valheim.EarlyWishbone/.nx/description.bbcode.txt b/src/Digitalroot.Valheim.EarlyWishbone/.nx/description.bbcode.txt
new file mode 100644
index 0000000..3d0fc45
--- /dev/null
+++ b/src/Digitalroot.Valheim.EarlyWishbone/.nx/description.bbcode.txt
@@ -0,0 +1,33 @@
+[size=3]Add the Wishbone to Eikthyr with a 25% chance to drop.
+[/size][b][size=4]
+License
+[/size][/b][size=3][url=https://github.com/Digitalroot-Valheim/Digitalroot.Valheim.EarlyWishbone/blob/main/LICENSE]GNU Affero General Public License v3.0[/url][/size][size=3]
+[/size][size=3]Closed-source license is available for commercial use.[/size]
+
+[b][size=4]Source[/size][/b]
+[size=3][url=https://github.com/Digitalroot-Valheim/Digitalroot.Valheim.EarlyWishbone]GitHub[/url][/size]
+
+[b][size=4]Installation (manual)[/size][/b]
+[list=1]
+[*][size=3]Download the latest release archive (zip) file.[/size]
+[*][size=3]Extract the archive into \steamapps\common\Valheim\BepInEx\plugins[/size]
+[/list]
+[b][size=4]Configuration[/size][/b][size=3]
+
+Go [url=https://github.com/Digitalroot-Valheim/Digitalroot.Valheim.EarlyWishbone?tab=readme-ov-file#configuration]here[/url] for config details.
+
+[/size][size=4][b]Crossplay[/b]:[/size][size=3] Compatible with clients without the mod. [/size]
+
+[b][size=4]Issues/Bugs[/size][/b]
+[size=3]Open an issue or bug on the [url=https://github.com/Digitalroot-Valheim/Digitalroot.Valheim.EarlyWishbone/issues]issue board[/url].[/size]
+
+[b][size=4]Questions[/size][/b]
+[size=3]Ask a question on the [url=https://github.com/Digitalroot-Valheim/Digitalroot.Valheim.EarlyWishbone/discussions]discussions board[/url].
+
+[/size]
+
+[b][size=4]Support Me[/size][/b] @ [url=https://www.buymeacoffee.com/digitalroot]https://www.buymeacoffee.com/digitalroot[/url]
+
+[center][color=#fff2cc][size=3][b]Digitalroot can be found in the Valhalla Legends' Discord[/b][/size][/color]
+
+[url=https://discord.gg/SsMW3rm67u][img]https://digitalroot.net/img/vl/vl_logo_125x154.png[/img][/url][/center]
diff --git a/src/Digitalroot.Valheim.EarlyWishbone/.ts/icon.png b/src/Digitalroot.Valheim.EarlyWishbone/.ts/icon.png
new file mode 100644
index 0000000..a8ad1ba
Binary files /dev/null and b/src/Digitalroot.Valheim.EarlyWishbone/.ts/icon.png differ
diff --git a/src/Digitalroot.Valheim.EarlyWishbone/.ts/manifest.json b/src/Digitalroot.Valheim.EarlyWishbone/.ts/manifest.json
new file mode 100644
index 0000000..63b8c76
--- /dev/null
+++ b/src/Digitalroot.Valheim.EarlyWishbone/.ts/manifest.json
@@ -0,0 +1,12 @@
+{
+ "$schema": "https://raw.githubusercontent.com/Digitalroot-Valheim/Digitalroot.Valheim.Common.Interfaces/main/src/json/tsio-manifest.json",
+ "name": "Early_Wishbone",
+ "author": "Digitalroot",
+ "description": "Add the Wishbone to Eikthyr with a 25% chance to drop.",
+ "version_number": "%VERSION_NUMBER%",
+ "dependencies": [
+ "denikson-BepInExPack_Valheim-5.4.2202",
+ "ValheimModding-Jotunn-2.20.0"
+ ],
+ "website_url": "https://github.com/Digitalroot-Valheim/Digitalroot.Valheim.EarlyWishbone"
+}
diff --git a/src/Digitalroot.Valheim.EarlyWishbone/AssemblyInfo.cs b/src/Digitalroot.Valheim.EarlyWishbone/AssemblyInfo.cs
new file mode 100644
index 0000000..4135d5a
--- /dev/null
+++ b/src/Digitalroot.Valheim.EarlyWishbone/AssemblyInfo.cs
@@ -0,0 +1,37 @@
+using Digitalroot.Valheim.Common;
+using Digitalroot.Valheim.EarlyWishbone;
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle(Main.Namespace)]
+[assembly: AssemblyDescription(Main.Name)]
+[assembly: AssemblyConfiguration(AssemblyInfo.Configuration)]
+[assembly: AssemblyCompany(AssemblyInfo.Company)]
+[assembly: AssemblyProduct(AssemblyInfo.Product)]
+[assembly: AssemblyCopyright(AssemblyInfo.Copyright)]
+[assembly: AssemblyTrademark(AssemblyInfo.Trademark)]
+[assembly: AssemblyCulture(AssemblyInfo.Culture)]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("3ccc4dc1-5b17-47c1-b996-ca03b8639a61")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion(Main.Version)]
+[assembly: AssemblyFileVersion(Main.Version)]
diff --git a/src/Digitalroot.Valheim.EarlyWishbone/Digitalroot.Valheim.EarlyWishbone.csproj b/src/Digitalroot.Valheim.EarlyWishbone/Digitalroot.Valheim.EarlyWishbone.csproj
new file mode 100644
index 0000000..5eadbbf
--- /dev/null
+++ b/src/Digitalroot.Valheim.EarlyWishbone/Digitalroot.Valheim.EarlyWishbone.csproj
@@ -0,0 +1,81 @@
+
+
+
+ Digitalroot.Valheim.EarlyWishbone
+ net48
+ 10
+ Digitalroot.Valheim.EarlyWishbone
+ False
+ True
+ embedded
+ false
+ false
+ true
+ AGPL-3.0-or-later
+ Copyright © Digitalroot Technologies 2022 - 2024
+ https://github.com/Digitalroot-Valheim/Digitalroot.Valheim.EarlyWishbone
+ https://github.com/Digitalroot-Valheim/Digitalroot.Valheim.EarlyWishbone
+ git
+ Digitalroot
+ Digitalroot Technologies
+ Digitalroot Valheim mod Early Wishbone
+ Early Wishbone mod for Valheim
+ en-US
+ true
+ README.md
+
+ https://nuget.bepinex.dev/v3/index.json;
+ https://digitalroot-valheim-nuget.s3.us-west-2.amazonaws.com/index.json
+
+ 1.0.0
+ Debug;Release
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ all
+ runtime
+
+
+ all
+
+
+ all
+ runtime
+ compile; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+ all
+ runtime
+ compile; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+ all
+
+
+
+
diff --git a/src/Digitalroot.Valheim.EarlyWishbone/FodyWeavers.xml b/src/Digitalroot.Valheim.EarlyWishbone/FodyWeavers.xml
new file mode 100644
index 0000000..4717580
--- /dev/null
+++ b/src/Digitalroot.Valheim.EarlyWishbone/FodyWeavers.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/Digitalroot.Valheim.EarlyWishbone/FodyWeavers.xsd b/src/Digitalroot.Valheim.EarlyWishbone/FodyWeavers.xsd
new file mode 100644
index 0000000..edb1753
--- /dev/null
+++ b/src/Digitalroot.Valheim.EarlyWishbone/FodyWeavers.xsd
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+ A regular expression matching the assembly names to include in merging.
+
+
+
+
+ A regular expression matching the assembly names to exclude from merging.
+
+
+
+
+ A regular expression matching the resource names to include in merging.
+
+
+
+
+ A regular expression matching the resource names to exclude from merging.
+
+
+
+
+ A switch to control whether the imported types are hidden (made private) or keep their visibility unchanged. Default is 'true'
+
+
+
+
+ A string that is used as prefix for the namespace of the imported types.
+
+
+
+
+ A switch to control whether to import the full assemblies or only the referenced types. Default is 'false'
+
+
+
+
+ A switch to control whether to compact the target assembly by skipping properties, events and unused methods. Default is 'false'
+
+
+
+
+
+ A regular expression matching the assembly names to include in merging.
+
+
+
+
+ A regular expression matching the assembly names to exclude from merging.
+
+
+
+
+ A regular expression matching the resource names to include in merging.
+
+
+
+
+ A regular expression matching the resource names to exclude from merging.
+
+
+
+
+ A switch to control whether the imported types are hidden (made private) or keep their visibility unchanged. Default is 'true'
+
+
+
+
+ A string that is used as prefix for the namespace of the imported types.
+
+
+
+
+ A switch to control whether to import the full assemblies or only the referenced types. Default is 'false'
+
+
+
+
+ A switch to control whether to compact the target assembly by skipping properties, events and unused methods. Default is 'false'
+
+
+
+
+
+
+
+ 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
+
+
+
+
+ A comma-separated list of error codes that can be safely ignored in assembly verification.
+
+
+
+
+ 'false' to turn off automatic generation of the XML Schema file.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Digitalroot.Valheim.EarlyWishbone/Main.cs b/src/Digitalroot.Valheim.EarlyWishbone/Main.cs
new file mode 100644
index 0000000..8343d7b
--- /dev/null
+++ b/src/Digitalroot.Valheim.EarlyWishbone/Main.cs
@@ -0,0 +1,84 @@
+using BepInEx;
+using BepInEx.Configuration;
+using Digitalroot.Valheim.Common;
+using Digitalroot.Valheim.Common.Names.Vanilla;
+using HarmonyLib;
+using JetBrains.Annotations;
+using Jotunn.Managers;
+using Jotunn.Utils;
+using System;
+using System.Diagnostics.CodeAnalysis;
+using System.Reflection;
+
+namespace Digitalroot.Valheim.EarlyWishbone
+{
+ [BepInPlugin(Guid, Name, Version)]
+ [BepInDependency(Jotunn.Main.ModGuid, "2.20.0")]
+ [NetworkCompatibility(CompatibilityLevel.VersionCheckOnly, VersionStrictness.Minor)]
+ [SuppressMessage("ReSharper", "MemberCanBePrivate.Global")]
+ public partial class Main : BaseUnityPlugin, ITraceableLogging
+ {
+ private Harmony _harmony;
+ [UsedImplicitly] public static ConfigEntry NexusId;
+ public static Main Instance;
+
+ public Main()
+ {
+ Instance = this;
+#if DEBUG
+ EnableTrace = true;
+ Log.RegisterSource(Instance);
+#else
+ EnableTrace = false;
+#endif
+ Log.Trace(Instance, $"{Namespace}.{MethodBase.GetCurrentMethod()?.DeclaringType?.Name}.{MethodBase.GetCurrentMethod()?.Name}");
+ }
+
+ [UsedImplicitly]
+ private void Awake()
+ {
+ try
+ {
+ Log.Trace(Instance, $"{Namespace}.{MethodBase.GetCurrentMethod()?.DeclaringType?.Name}.{MethodBase.GetCurrentMethod()?.Name}");
+ NexusId = Config.Bind("General", "NexusID", 2840, new ConfigDescription("Nexus mod ID for updates", null, new ConfigurationManagerAttributes { Browsable = false, ReadOnly = true }));
+ _harmony = Harmony.CreateAndPatchAll(typeof(Main).Assembly, Guid);
+ CreatureManager.OnVanillaCreaturesAvailable += ModifyVanillaCreatures;
+ }
+ catch (Exception e)
+ {
+ Log.Error(Instance, e);
+ }
+ }
+
+ private void ModifyVanillaCreatures()
+ {
+ // Get a vanilla creature prefab and change some values
+ var eikthyr = CreatureManager.Instance.GetCreaturePrefab(BossNames.Eikthyr);
+ var characterDropsComponent = eikthyr.GetComponent();
+ characterDropsComponent.m_drops.Add(new CharacterDrop.Drop
+ {
+ m_amountMax = 1
+ , m_amountMin = 0
+ , m_chance = 25f
+ , m_dontScale = true
+ , m_levelMultiplier = false
+ , m_onePerPlayer = false
+ , m_prefab = PrefabManager.Instance.GetPrefab(PrefabNames.Wishbone)
+
+ });
+
+ // Unregister the hook, modified and cloned creatures are kept over the whole game session
+ CreatureManager.OnVanillaCreaturesAvailable -= ModifyVanillaCreatures;
+ }
+
+ #region Implementation of ITraceableLogging
+
+ ///
+ public string Source => Namespace;
+
+ ///
+ public bool EnableTrace { get; }
+
+ #endregion
+ }
+}
diff --git a/src/Digitalroot.Valheim.EarlyWishbone/MetaData.cs b/src/Digitalroot.Valheim.EarlyWishbone/MetaData.cs
new file mode 100644
index 0000000..dad58ea
--- /dev/null
+++ b/src/Digitalroot.Valheim.EarlyWishbone/MetaData.cs
@@ -0,0 +1,13 @@
+using System.Diagnostics.CodeAnalysis;
+
+namespace Digitalroot.Valheim.EarlyWishbone
+{
+ [SuppressMessage("ReSharper", "MemberCanBePrivate.Global")]
+ public partial class Main
+ {
+ public const string Version = "1.0.0";
+ public const string Name = "Early Wishbone";
+ public const string Guid = "digitalroot.mods.earlywishbone";
+ public const string Namespace = "Digitalroot.Valheim." + nameof(EarlyWishbone);
+ }
+}
diff --git a/src/Digitalroot.Valheim.EarlyWishbone/packages.lock.json b/src/Digitalroot.Valheim.EarlyWishbone/packages.lock.json
new file mode 100644
index 0000000..a62fba0
--- /dev/null
+++ b/src/Digitalroot.Valheim.EarlyWishbone/packages.lock.json
@@ -0,0 +1,143 @@
+{
+ "version": 1,
+ "dependencies": {
+ ".NETFramework,Version=v4.8": {
+ "BepInEx.Core": {
+ "type": "Direct",
+ "requested": "[5.4.21, 5.4.21]",
+ "resolved": "5.4.21",
+ "contentHash": "NMUPlbHTTfJ+qIQCI90uIvjuUQ4wnwt4cpRsK3ItBh1DhsWFzAHXNiZjBxZkPysljEKQ2iu89sxMTga4bxBXVQ==",
+ "dependencies": {
+ "BepInEx.BaseLib": "5.4.20",
+ "HarmonyX": "2.7.0"
+ }
+ },
+ "Digitalroot.Valheim.Build.Targets": {
+ "type": "Direct",
+ "requested": "[1.0.21, )",
+ "resolved": "1.0.21",
+ "contentHash": "8mErk3UFjy80d9IlTjXNsofT7YfKLz897YE10ieB/SHNbBorzwVCPYRGsmuaNH8HyqjKQH3KnK4gDwDMBEC+DQ=="
+ },
+ "Digitalroot.Valheim.Common.AssemblyInfo": {
+ "type": "Direct",
+ "requested": "[1.0.17, )",
+ "resolved": "1.0.17",
+ "contentHash": "EMa138YM/LPqUEnJixjQlL8pBo+UvZULBrpFmq/8Lu7TggcJgwhLQ3n5534sh/vV7D5w4LZu1iJRrScMrRidlg=="
+ },
+ "Digitalroot.Valheim.Common.Log": {
+ "type": "Direct",
+ "requested": "[1.1.54, )",
+ "resolved": "1.1.54",
+ "contentHash": "LTZZsd3Ly+FaAoARVxb7oGRldAWzslsOVG4lGiCdwzj3Cv0aMmFLAIpykqtclPX7P3yy+GDqEuttbuK/asX4Og==",
+ "dependencies": {
+ "Digitalroot.Valheim.Common.Json": "1.0.42"
+ }
+ },
+ "Digitalroot.Valheim.Common.Names": {
+ "type": "Direct",
+ "requested": "[1.4.35, )",
+ "resolved": "1.4.35",
+ "contentHash": "FHHhrtAwQyUfqntbolM9yRhcOvomBU/zrLpfPmFXrtfxYYXgWGvZlo1slvgvWCuRyoSFwqUFt/jNujOLeDzTYA==",
+ "dependencies": {
+ "Digitalroot.Valheim.Common.Utils": "1.0.65"
+ }
+ },
+ "Digitalroot.Valheim.Common.References": {
+ "type": "Direct",
+ "requested": "[0.218.16, )",
+ "resolved": "0.218.16",
+ "contentHash": "RfI4oZoufAK5GVx6Y3uXDmW0t2dhNATXhPviP5srGqYM8qdQgMa4G2SWL6jaC3lP4aHp4lPEsBgCNAt1QUtEOA=="
+ },
+ "Digitalroot.Valheim.Common.Utils": {
+ "type": "Direct",
+ "requested": "[1.0.65, )",
+ "resolved": "1.0.65",
+ "contentHash": "959nl5YeT++Q/PEXRIQqI5WmY9cA5gdcVECUN+wRPkSgyImROWHxU7u1VXus59BwRxL/rGSOz0YyIIxjVh7lBA==",
+ "dependencies": {
+ "Digitalroot.Valheim.Common.Log": "1.1.54"
+ }
+ },
+ "Digitalroot.Valheim.References.JvL": {
+ "type": "Direct",
+ "requested": "[2.20.0, )",
+ "resolved": "2.20.0",
+ "contentHash": "4CCkEMVzlRDPeMQutVbRc3N0Ru4I28+2gbL788KD3+TkkqRX38+YMt1ez8gy42rka/IJ1SquxZdQnUJDnq/gcw=="
+ },
+ "ErrorProne.NET.CoreAnalyzers": {
+ "type": "Direct",
+ "requested": "[0.1.2, )",
+ "resolved": "0.1.2",
+ "contentHash": "RQdzUtFVhwLwisP2Du7Ugm7ldwAzc+QJrlZWNIwHXcgq4b5fLwZgdN1203RdYiHS8OOALophC6yWekxu3UgN2g=="
+ },
+ "Fody": {
+ "type": "Direct",
+ "requested": "[6.6.0, 6.6.0]",
+ "resolved": "6.6.0",
+ "contentHash": "NWWM8KiR9DGiAi47q9px9oI27xYBiM5KXxSnI4R5mz2/rG8LIcXJfw5zDLLH1xOgzqRNJgc8KTPQPoiQCidYUw=="
+ },
+ "ILMerge.Fody": {
+ "type": "Direct",
+ "requested": "[1.22.0, 1.22.0]",
+ "resolved": "1.22.0",
+ "contentHash": "VCWQM8q7wZwHMgksBsFfbImRUmlgn7E6EKkrnUV86/keqBvMTjhlA7mBYtz6Dace8XsJYufYJvRP25uur5W5WA==",
+ "dependencies": {
+ "Fody": "6.3.0"
+ }
+ },
+ "BepInEx.BaseLib": {
+ "type": "Transitive",
+ "resolved": "5.4.20",
+ "contentHash": "0bXgYxbCEN2Ixp3kiFEhyw+RASeFQeg/ww+lbMt7if6XMeVS60eg6epNsMA8Jbx57dmNOzNevkKKw8mP8SUMqw=="
+ },
+ "Digitalroot.References.Unity": {
+ "type": "Transitive",
+ "resolved": "2022.3.17",
+ "contentHash": "edxgtveXwn+ACtMyak1McLwoQxKm/GXdh8Drcx2hoFl5VoFeR9wdwEz1yJdVtbamtecZOVghEn3tKKR3ekqOeg=="
+ },
+ "Digitalroot.Valheim.Common.Json": {
+ "type": "Transitive",
+ "resolved": "1.0.42",
+ "contentHash": "5r8ytfJ7Aua1bDbLd5Ypg6k+xARnxnz/hVG/ZIhURdkPrSKhza5ynHZS/UCgturb6Ouj4OK+29I1xiUqRoXmCQ==",
+ "dependencies": {
+ "Digitalroot.References.Unity": "2022.3.17",
+ "LibZ.Tool": "1.2.0"
+ }
+ },
+ "HarmonyX": {
+ "type": "Transitive",
+ "resolved": "2.7.0",
+ "contentHash": "lec/SkduQspMa3Pi/nM/NSvA84Za8HCCWA8ybdToKiTqnBZa+JC5g6rxoFQCg/1vNuYcvjy77edePZzIEsRmvw==",
+ "dependencies": {
+ "MonoMod.RuntimeDetour": "21.12.13.1"
+ }
+ },
+ "LibZ.Tool": {
+ "type": "Transitive",
+ "resolved": "1.2.0",
+ "contentHash": "jcZROJ28bmrZx/RaFHcTlSy3x4SmSsMolJiKoluFFrE7oMiXUnYx1K+SJeHJhow05W0Rg9oi9HEyZWwdYSV3cw=="
+ },
+ "Mono.Cecil": {
+ "type": "Transitive",
+ "resolved": "0.11.4",
+ "contentHash": "IC1h5g0NeJGHIUgzM1P82ld57knhP0IcQfrYITDPXlNpMYGUrsG5TxuaWTjaeqDNQMBDNZkB8L0rBnwsY6JHuQ=="
+ },
+ "MonoMod.RuntimeDetour": {
+ "type": "Transitive",
+ "resolved": "21.12.13.1",
+ "contentHash": "65mB+bHjT6UCGCgO+/pYhpuGPf96rQ1Whwkut/x7cqVIW0DTndDFyWc/3bngzhnY/Y6IYtBMlXsU2ATq+CxpHg==",
+ "dependencies": {
+ "Mono.Cecil": "0.11.4",
+ "MonoMod.Utils": "21.12.13.1"
+ }
+ },
+ "MonoMod.Utils": {
+ "type": "Transitive",
+ "resolved": "21.12.13.1",
+ "contentHash": "/H+0RMWqx/D1/fSuY5jhY6GFvqhdYdlnI7J3IfL8P6y4nJkoZDxqts6+RxWWOz4pbnJdWnxSjS8XG+Lq6rUi7w==",
+ "dependencies": {
+ "Mono.Cecil": "0.11.4"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/UnitTests/UnitTests.cs b/src/UnitTests/UnitTests.cs
new file mode 100644
index 0000000..a469531
--- /dev/null
+++ b/src/UnitTests/UnitTests.cs
@@ -0,0 +1,18 @@
+using NUnit.Framework;
+
+namespace UnitTests
+{
+ public class Tests
+ {
+ [SetUp]
+ public void Setup()
+ {
+ }
+
+ [Test]
+ public void Test1()
+ {
+ Assert.Pass();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/UnitTests/UnitTests.csproj b/src/UnitTests/UnitTests.csproj
new file mode 100644
index 0000000..85143ed
--- /dev/null
+++ b/src/UnitTests/UnitTests.csproj
@@ -0,0 +1,21 @@
+
+
+
+ net6.0
+
+ false
+
+ Debug;Release
+
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/src/ico/09nFbP5n.jpg b/src/ico/09nFbP5n.jpg
new file mode 100644
index 0000000..4277726
Binary files /dev/null and b/src/ico/09nFbP5n.jpg differ
diff --git a/src/ico/7nJs-phP.jpg b/src/ico/7nJs-phP.jpg
new file mode 100644
index 0000000..adcafff
Binary files /dev/null and b/src/ico/7nJs-phP.jpg differ
diff --git a/src/ico/80i5jRZq.jpg b/src/ico/80i5jRZq.jpg
new file mode 100644
index 0000000..b6a8a76
Binary files /dev/null and b/src/ico/80i5jRZq.jpg differ
diff --git a/src/ico/EmE2o8JD.jpg b/src/ico/EmE2o8JD.jpg
new file mode 100644
index 0000000..6dc84af
Binary files /dev/null and b/src/ico/EmE2o8JD.jpg differ
diff --git a/src/ico/EmE2o8JD.xcf b/src/ico/EmE2o8JD.xcf
new file mode 100644
index 0000000..369be49
Binary files /dev/null and b/src/ico/EmE2o8JD.xcf differ
diff --git a/src/ico/G2In-_P1.jpg b/src/ico/G2In-_P1.jpg
new file mode 100644
index 0000000..5510e9f
Binary files /dev/null and b/src/ico/G2In-_P1.jpg differ
diff --git a/src/ico/OpLz0Qzg.jpg b/src/ico/OpLz0Qzg.jpg
new file mode 100644
index 0000000..11cfd55
Binary files /dev/null and b/src/ico/OpLz0Qzg.jpg differ
diff --git a/src/ico/bbNihw-O.jpg b/src/ico/bbNihw-O.jpg
new file mode 100644
index 0000000..a397fbb
Binary files /dev/null and b/src/ico/bbNihw-O.jpg differ
diff --git a/src/ico/l7EWvMtq.jpg b/src/ico/l7EWvMtq.jpg
new file mode 100644
index 0000000..93ed286
Binary files /dev/null and b/src/ico/l7EWvMtq.jpg differ
diff --git a/src/ico/u9PHGaIc.jpg b/src/ico/u9PHGaIc.jpg
new file mode 100644
index 0000000..43a4c51
Binary files /dev/null and b/src/ico/u9PHGaIc.jpg differ
diff --git a/src/ico/vin4SJVq.jpg b/src/ico/vin4SJVq.jpg
new file mode 100644
index 0000000..34b79e3
Binary files /dev/null and b/src/ico/vin4SJVq.jpg differ
diff --git a/src/ico/wbENgBsJ.jpg b/src/ico/wbENgBsJ.jpg
new file mode 100644
index 0000000..11cfd55
Binary files /dev/null and b/src/ico/wbENgBsJ.jpg differ