commit f174067eb2cc557839514f3af722292a1dd056ad Author: taywon Date: Fri Oct 2 19:29:08 2026 +0200 initial commit wallah diff --git a/LogOutput.log b/LogOutput.log new file mode 100644 index 0000000..bccdd4a --- /dev/null +++ b/LogOutput.log @@ -0,0 +1,117 @@ +[Error : BepInEx] Unable to start Unity log writer +[Message: BepInEx] BepInEx 5.4.23.4 - valheim_server (30/09/2026 23:20:30) +[Info : BepInEx] Running under Unity v6000.0.75.2503836 +[Info : BepInEx] CLR runtime version: 4.0.30319.42000 +[Info : BepInEx] Supports SRE: True +[Info : BepInEx] System platform: Bits64, Windows +[Message: BepInEx] Preloader started +[Info : BepInEx] Loaded 1 patcher method from [BepInEx.Preloader 5.4.23.4] +[Info : BepInEx] 1 patcher plugin loaded +[Info : BepInEx] Patching [UnityEngine.CoreModule] with [BepInEx.Chainloader] +[Message: BepInEx] Preloader finished +[Message: BepInEx] Chainloader ready +[Message: BepInEx] Chainloader started +[Info : BepInEx] 12 plugins to load +[Info : BepInEx] Loading [Craft From Containers 4.0.6] +[Info : BepInEx] Loading [Jotunn 2.30.2] +[Info :Jotunn.Main] Initializing ModCompatibility +[Info :Jotunn.Main] Initializing SynchronizationManager +[Info :Jotunn.Main] Initializing NetworkManager +[Info : BepInEx] Loading [MultiUserChest 0.6.2] +[Info : BepInEx] Loading [Vikings for Hire - Companions 1.3.0] +[Info :Vikings for Hire - Companions] Модуль включён — спутники: идут с тобой, приказы и колесо (Y), отряд, корабли и порталы +[Info : BepInEx] Loading [Vikings for Hire - Settlement 1.3.0] +[Info :Vikings for Hire - Settlement] Модуль включён — своё поселение: знамя, профессии и работа, дома, жизнь поселения +[Info : BepInEx] Loading [Vikings for Hire - Factions 1.3.0] +[Info :Vikings for Hire - Factions] Модуль включён — чужие поселения и фракции: хутора бондов, стоянки изгоев, разбойники +[Info : BepInEx] Loading [Vikings for Hire - Traders 1.3.0] +[Info :Vikings for Hire - Traders] Модуль включён — торговцы: бродячие и в поселении, заказы, долги +[Info : BepInEx] Loading [Vikings for Hire - World Events 1.3.0] +[Info :Vikings for Hire - World Events] Модуль включён — события мира: охотники за головами, поручения, отшельник, поединки, беженцы, кузнец, сияние +[Info : BepInEx] Loading [Valheim NPC 1.3.0] +[Info :Valheim NPC] Модули: включены — спутники, поселение, чужие поселения, торговцы, события мира; нет DLL — нет +[Info :Jotunn.Main] Initializing LocalizationManager +[Info :Jotunn.Main] Initializing PrefabManager +[Info :Jotunn.Main] Initializing CommandManager +[Info :Valheim NPC] Valheim NPC 1.3.0 загружен +[Info : BepInEx] Loading [Quartermaster 0.1.62] +[Info : BepInEx] Loading [PlanBuild 0.19.1] +[Info :Jotunn.Main] Initializing InputManager +[Info :Jotunn.Main] Initializing GUIManager +[Info :Jotunn.Main] Initializing MockManager +[Info :Jotunn.Main] Initializing PieceManager +[Info :Jotunn.Main] Initializing AssetManager +[Info :Jotunn.Main] Initializing ItemManager +[Info :PlanBuild.Blueprints.BlueprintManager] Initializing BlueprintManager +[Info :PlanBuild.Blueprints.BlueprintSync] Loading known blueprints +[Info :Jotunn.Main] Initializing UndoManager +[Info :Jotunn.Main] Initializing KitbashManager +[Info :PlanBuild.Plans.PlanManager] Initializing PlanManager +[Info :PlanBuild.Patches] Applying CraftFromContainers patches +[Info : BepInEx] Loading [MassFarming 1.14] +[Message: BepInEx] Chainloader startup complete +[Info :Quartermaster] Window focus=True, runInBackground=True +[Warning:Jotunn.Managers.AssetManager] Ambiguous asset name for path. old: Assets/world/Props/stone/Stone1_huge.prefab, new: Assets/world/Props/DeepNorth/HotSpring/Stone1_huge.prefab, using old path +[Warning:Jotunn.Managers.AssetManager] Ambiguous asset name for path. old: Assets/world/Props/Caverocks/caverock_pillar.prefab, new: Assets/world/Props/DeepNorth/HotSpring/caverock_pillar.prefab, using old path +[Warning:Jotunn.Managers.AssetManager] Ambiguous asset name for path. old: Assets/world/Props/Rocks/highstone.prefab, new: Assets/world/Props/DeepNorth/HotSpring/highstone.prefab, using old path +[Info :Jotunn.Managers.CommandManager] Adding 8 commands to the Console +[Info :Valheim NPC] Совместимость: CLLC нет, ValheimPlus нет, Epic Loot нет +[Info :Valheim NPC] Компоненты викинга: Transform, CapsuleCollider, Rigidbody, ZNetView, ZSyncTransform, ZSyncAnimation, VisEquipment, FootStep, Humanoid, MonsterAI, VikingNpc, Container +[Info :Jotunn.Main] Initializing CreatureManager +[Info :Valheim NPC] Префаб VNPC_Viking создан +[Info :Valheim NPC] «Знамя поселения» сделано на основе piece_banner01 +[Info :Valheim NPC] Чужое поселение: размер «wood_floor» 2,00×0,13×2,00, центр (-0.01, 0.03, -0.01) +[Info :Valheim NPC] Чужое поселение: размер «woodwall» 2,00×2,00×0,30, центр (0.00, 0.00, 0.00) +[Info :Valheim NPC] Чужое поселение: размер «wood_door» 2,00×2,02×0,50, центр (0.00, 0.00, 0.00) +[Info :Valheim NPC] Чужое поселение: размер «bed» 1,20×0,40×2,80, центр (0.00, 0.18, 0.00) +[Info :Valheim NPC] Чужое поселение: размер «wood_roof_45» 2,00×2,12×2,12, центр (0.00, 0.03, 0.03) +[Info :Valheim NPC] Чужое поселение: уклон «wood_roof_45» вниз к (0.00, 0.00, 1.00), скат 2,12, подъём 2,12, ширина 2,00 +[Info :Valheim NPC] Чужое поселение: размер «wood_wall_roof_45» 2,43×2,43×0,40, центр (0.00, 1.00, 0.00) +[Info :Valheim NPC] Чужое поселение: уклон «wood_wall_roof_45» вниз к (-1.00, 0.00, 0.00), скат 2,43, подъём 2,43, ширина 0,40 +[Info :Valheim NPC] Чужое поселение: размер «wood_roof» 2,00×1,13×2,12, центр (0.00, 0.52, 0.00) +[Info :Valheim NPC] Чужое поселение: уклон «wood_roof» вниз к (0.00, 0.00, 1.00), скат 2,12, подъём 1,04, ширина 2,00 +[Info :Valheim NPC] Чужое поселение: размер «wood_wall_roof» 2,27×1,54×0,40, центр (0.00, 0.50, 0.00) +[Info :Valheim NPC] Чужое поселение: уклон «wood_wall_roof» вниз к (-1.00, 0.00, 0.00), скат 2,27, подъём 1,13, ширина 0,40 +[Info :Valheim NPC] Чужое поселение: размер «wood_wall_half» 2,00×1,00×0,30, центр (0.00, 0.00, 0.00) +[Info :Valheim NPC] Чужое поселение: размер «wood_pole_log_4» 0,40×4,00×0,40, центр (0.00, 0.00, 0.00) +[Info :Valheim NPC] Чужое поселение: размер «stake_wall» 2,00×3,47×0,57, центр (0.00, 1.57, -0.08) +[Info :Valheim NPC] Модули чужих поселений готовы: 15 +[Info :Quartermaster] Registered Ledger Lectern in the Hammer menu; old Deposit Chest prefab retained for existing saves. +[Info :Jotunn.Main] Initializing ZoneManager +[Info :Quartermaster] Registered original Raw Clay and shoreline pickables (new Meadows/Black Forest terrain). +[Info :Quartermaster] Registered pottery chain, native-body Pottery Kiln and 41 buildable storage furniture pieces. +[Info :Jotunn.Managers.KitbashManager] Applying Kitbash in 1 objects +[Info :Jotunn.Managers.ItemManager] Adding 8 custom items to the ObjectDB +[Info :Jotunn.Managers.CommandManager] Adding 8 commands to the Console +[Info :Jotunn.Managers.PrefabManager] Adding 95 custom prefabs to the ZNetScene +[Info :Jotunn.Managers.CreatureManager] Adding 1 custom creatures +[Info :Valheim NPC] Путь викингов: радиус 0,35 м (тело 0,45), рост 1,5 м, шаг сетки 0,1 м +[Info :Jotunn.Managers.ItemManager] Adding 8 custom items to the ObjectDB +[Info :Jotunn.Managers.ItemManager] Adding 5 custom recipes to the ObjectDB +[Info :Valheim NPC] «Знамя поселения» добавлено в молот (вкладка «Прочее») +[Info :Jotunn.Managers.PieceManager] Adding 61 custom pieces to the PieceTables +[Info :Jotunn.Managers.NetworkManager] Registering 5 custom RPCs +[Info :Jotunn.Managers.ZoneManager] Injecting 1 custom vegetation +[Warning:PlanBuild.Plans.PlanDB] Warning for mod developers: +Multiple pieces with the same m_name but different resource requirements, this will cause issues with Player.m_knownRecipes! +Piece.m_name: $piece_yuleklapp + Requirements: $item_finewood:2, $item_bonefragments:1 + Pieces: piece_gift1 + + Requirements: $item_finewood:3, $item_dandelion:1 + Pieces: piece_gift2 + + Requirements: $item_finewood:4, $item_raspberries:1 + Pieces: piece_gift3 + + +[Info :Valheim NPC] Викинги видят препятствиями слои: Default, piece, static_solid, Default_small, blocker, vehicle +[Info :Jotunn.Managers.SynchronizationManager+d__44] Sending initial data to peer #3416293772 +[Info :Quartermaster] Shutdown stage begin: Game.Shutdown +[Info :Quartermaster] Shutdown stage begin: ZNetScene.Shutdown +[Info :Quartermaster] Shutdown stage end: ZNetScene.Shutdown (0 ms) +[Info :Quartermaster] Shutdown stage begin: ZNet.Shutdown +[Info :Quartermaster] Shutdown stage end: ZNet.Shutdown (110 ms) +[Info :Quartermaster] Shutdown stage end: Game.Shutdown (112 ms) +[Info :Quartermaster] Shutdown stage begin: HeightmapBuilder.Dispose +[Info :Quartermaster] Shutdown stage end: HeightmapBuilder.Dispose (6 ms) diff --git a/cache/chainloader_typeloader.dat b/cache/chainloader_typeloader.dat new file mode 100644 index 0000000..4db10ce Binary files /dev/null and b/cache/chainloader_typeloader.dat differ diff --git a/cache/harmony_interop_cache.dat b/cache/harmony_interop_cache.dat new file mode 100644 index 0000000..cbbf08e --- /dev/null +++ b/cache/harmony_interop_cache.dat @@ -0,0 +1 @@ +nC:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\plugins\CraftFromContainers.dllø‘¨Ë<ßbC:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\core\0Harmony20.dll­åI78ßeC:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\core\MonoMod.Utils.dll‡ËT78ßmC:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\core\MonoMod.RuntimeDetour.dll kS78ßbC:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\core\Mono.Cecil.dllÖP78ßgC:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\core\HarmonyXInterop.dllÓO78ß`C:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\core\0Harmony.dllÝiH78ßhC:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\plugins\Jotunn\Jotunn.dllyù�€;ßxC:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\plugins\MultiUserChest\MultiUserChest.dllðTƒg<ß{C:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\plugins\ValheimNpc\ValheimNpc.Companions.dllQÛw¼;ß{C:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\plugins\ValheimNpc\ValheimNpc.Settlement.dllŸx¼;ßyC:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\plugins\ValheimNpc\ValheimNpc.Factions.dllQy¼;ßxC:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\plugins\ValheimNpc\ValheimNpc.Traders.dll|z¼;ßvC:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\plugins\ValheimNpc\ValheimNpc.World.dll½z¼;ßpC:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\plugins\ValheimNpc\ValheimNpc.dllåyv¼;ßvC:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\plugins\Quartermaster\Quartermaster.dllok<ßnC:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\plugins\PlanBuild\PlanBuild.dll‰ÓR.<ßrC:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server\BepInEx\plugins\MassFarming\MassFarming.dllTRø;ß \ No newline at end of file diff --git a/config/BepInEx.cfg b/config/BepInEx.cfg new file mode 100644 index 0000000..388f654 --- /dev/null +++ b/config/BepInEx.cfg @@ -0,0 +1,151 @@ +[Caching] + +## Enable/disable assembly metadata cache +## Enabling this will speed up discovery of plugins and patchers by caching the metadata of all types BepInEx discovers. +# Setting type: Boolean +# Default value: true +EnableAssemblyCache = true + +[Chainloader] + +## If enabled, hides BepInEx Manager GameObject from Unity. +## This can fix loading issues in some games that attempt to prevent BepInEx from being loaded. +## Use this only if you know what this option means, as it can affect functionality of some older plugins. +## +# Setting type: Boolean +# Default value: false +HideManagerGameObject = false + +[Harmony.Logger] + +## Specifies which Harmony log channels to listen to. +## NOTE: IL channel dumps the whole patch methods, use only when needed! +# Setting type: LogChannel +# Default value: Warn, Error +# Acceptable values: None, Info, IL, Warn, Error, Debug, All +# Multiple values can be set at the same time by separating them with , (e.g. Debug, Warning) +LogChannels = Warn, Error + +[Logging] + +## Enables showing unity log messages in the BepInEx logging system. +# Setting type: Boolean +# Default value: true +UnityLogListening = true + +## If enabled, writes Standard Output messages to Unity log +## NOTE: By default, Unity does so automatically. Only use this option if no console messages are visible in Unity log +## +# Setting type: Boolean +# Default value: false +LogConsoleToUnityLog = false + +[Logging.Console] + +## Enables showing a console for log output. +# Setting type: Boolean +# Default value: false +Enabled = false + +## If enabled, will prevent closing the console (either by deleting the close button or in other platform-specific way). +# Setting type: Boolean +# Default value: false +PreventClose = false + +## If true, console is set to the Shift-JIS encoding, otherwise UTF-8 encoding. +# Setting type: Boolean +# Default value: false +ShiftJisEncoding = false + +## Hints console manager on what handle to assign as StandardOut. Possible values: +## Auto - lets BepInEx decide how to redirect console output +## ConsoleOut - prefer redirecting to console output; if possible, closes original standard output +## StandardOut - prefer redirecting to standard output; if possible, closes console out +## +# Setting type: ConsoleOutRedirectType +# Default value: Auto +# Acceptable values: Auto, ConsoleOut, StandardOut +StandardOutType = Auto + +## Which log levels to show in the console output. +# Setting type: LogLevel +# Default value: Fatal, Error, Warning, Message, Info +# Acceptable values: None, Fatal, Error, Warning, Message, Info, Debug, All +# Multiple values can be set at the same time by separating them with , (e.g. Debug, Warning) +LogLevels = Fatal, Error, Warning, Message, Info + +[Logging.Disk] + +## Include unity log messages in log file output. +# Setting type: Boolean +# Default value: false +WriteUnityLog = false + +## Appends to the log file instead of overwriting, on game startup. +# Setting type: Boolean +# Default value: false +AppendLog = false + +## Enables writing log messages to disk. +# Setting type: Boolean +# Default value: true +Enabled = true + +## Which log leves are saved to the disk log output. +# Setting type: LogLevel +# Default value: Fatal, Error, Warning, Message, Info +# Acceptable values: None, Fatal, Error, Warning, Message, Info, Debug, All +# Multiple values can be set at the same time by separating them with , (e.g. Debug, Warning) +LogLevels = Fatal, Error, Warning, Message, Info + +[Preloader] + +## Enables or disables runtime patches. +## This should always be true, unless you cannot start the game due to a Harmony related issue (such as running .NET Standard runtime) or you know what you're doing. +# Setting type: Boolean +# Default value: true +ApplyRuntimePatches = true + +## Specifies which MonoMod backend to use for Harmony patches. Auto uses the best available backend. +## This setting should only be used for development purposes (e.g. debugging in dnSpy). Other code might override this setting. +# Setting type: MonoModBackend +# Default value: auto +# Acceptable values: auto, dynamicmethod, methodbuilder, cecil +HarmonyBackend = auto + +## If enabled, BepInEx will save patched assemblies into BepInEx/DumpedAssemblies. +## This can be used by developers to inspect and debug preloader patchers. +# Setting type: Boolean +# Default value: false +DumpAssemblies = false + +## If enabled, BepInEx will load patched assemblies from BepInEx/DumpedAssemblies instead of memory. +## This can be used to be able to load patched assemblies into debuggers like dnSpy. +## If set to true, will override DumpAssemblies. +# Setting type: Boolean +# Default value: false +LoadDumpedAssemblies = false + +## If enabled, BepInEx will call Debugger.Break() once before loading patched assemblies. +## This can be used with debuggers like dnSpy to install breakpoints into patched assemblies before they are loaded. +# Setting type: Boolean +# Default value: false +BreakBeforeLoadAssemblies = false + +[Preloader.Entrypoint] + +## The local filename of the assembly to target. +# Setting type: String +# Default value: UnityEngine.CoreModule.dll +Assembly = UnityEngine.CoreModule.dll + +## The name of the type in the entrypoint assembly to search for the entrypoint method. +# Setting type: String +# Default value: Application +Type = Application + +## The name of the method in the specified entrypoint assembly and type to hook and load Chainloader from. +# Setting type: String +# Default value: .cctor +Method = .cctor + diff --git a/config/aedenthorn.CraftFromContainers.cfg b/config/aedenthorn.CraftFromContainers.cfg new file mode 100644 index 0000000..74c14bc --- /dev/null +++ b/config/aedenthorn.CraftFromContainers.cfg @@ -0,0 +1,150 @@ +## Settings file was created by plugin Craft From Containers v4.0.6 +## Plugin GUID: aedenthorn.CraftFromContainers + +[Container Types] + +## If true, will pull fuel from containers. +# Setting type: Boolean +# Default value: true +EnablePullFuel = true + +## If true, will pull ore from containers. +# Setting type: Boolean +# Default value: true +EnablePullOre = true + +## If true, will pull cooking ingredients from containers. +# Setting type: Boolean +# Default value: true +EnablePullCooking = true + +## If true, will ignore this type of container. +# Setting type: Boolean +# Default value: false +IgnoreShipContainers = false + +## If true, will ignore this type of container. +# Setting type: Boolean +# Default value: false +IgnoreWagonContainers = false + +## If true, will ignore this type of container. +# Setting type: Boolean +# Default value: false +IgnoreWoodChests = false + +## If true, will ignore this type of container. +# Setting type: Boolean +# Default value: false +IgnorePrivateChests = false + +## If true, will ignore this type of container. +# Setting type: Boolean +# Default value: false +IgnoreBlackMetalChests = false + +## If true, will ignore this type of container. +# Setting type: Boolean +# Default value: false +IgnoreReinforcedChests = false + +[General] + +## Enable this mod +# Setting type: Boolean +# Default value: true +Enabled = true + +## Show debug messages in log +# Setting type: Boolean +# Default value: true +IsDebug = true + +## Nexus mod ID for updates +# Setting type: Int32 +# Default value: 40 +NexusID = 40 + +## The maximum range from which to pull items from +# Setting type: Single +# Default value: 10 +ContainerRange = 10 + +## String used to show required and available resources. {0} is replaced by how much is available, and {1} is replaced by how much is required. Set to nothing to leave it as default. +# Setting type: String +# Default value: {0}/{1} +ResourceCostString = {0}/{1} + +## Resource amounts will flash to this colour when coming from containers +# Setting type: Color +# Default value: FFEB04FF +FlashColor = FFEB04FF + +## Resource amounts will flash from this colour when coming from containers (set both colors to the same color for no flashing) +# Setting type: Color +# Default value: FFFFFFFF +UnFlashColor = FFFFFFFF + +## Message to show after pulling items to player inventory +# Setting type: String +# Default value: Pulled items to inventory +PulledMessage = Pulled items to inventory + +## Types of item to disallow as fuel (i.e. anything that is consumed), comma-separated. +# Setting type: String +# Default value: RoundLog,FineWood +FuelDisallowTypes = RoundLog,FineWood + +## Types of item to disallow as ore (i.e. anything that is transformed), comma-separated). +# Setting type: String +# Default value: RoundLog,FineWood +OreDisallowTypes = RoundLog,FineWood + +## Always leave the last of an item in a container. +# Setting type: Boolean +# Default value: false +LeaveOne = false + +## When pulling, pull from closest containers first. +# Setting type: Boolean +# Default value: false +PullByDistance = false + +[Hot Keys] + +## if true, holding down the PreventModKey modifier key will allow this mod's behaviour; if false, holding down the key will prevent it. +# Setting type: Boolean +# Default value: false +SwitchPrevent = false + +## Modifier key to toggle fuel and ore filling behaviour when down. Use https://docs.unity3d.com/Manual/ConventionalGameInput.html +# Setting type: String +# Default value: left alt +PreventModKey = left alt + +## Holding down this key while crafting or building will pull resources into your inventory instead of building. Use https://docs.unity3d.com/Manual/ConventionalGameInput.html +# Setting type: String +# Default value: left ctrl +PullItemsKey = left ctrl + +## Modifier key to pull all available fuel or ore when down. Use https://docs.unity3d.com/Manual/ConventionalGameInput.html +# Setting type: String +# Default value: left shift +FillAllModKey = left shift + +[Station Connections] + +## If true, will display connections to nearby workstations within range when building containers +# Setting type: Boolean +# Default value: false +ShowConnections = false + +## Height offset for the connection VFX start position +# Setting type: Single +# Default value: 1.25 +ConnectionStartOffset = 1.25 + +# Setting type: Single +# Default value: 0.05 +ConnectionRemoveDelay = 0.05 + diff --git a/config/com.valheimnpc.vikings.cfg b/config/com.valheimnpc.vikings.cfg new file mode 100644 index 0000000..2834d1a --- /dev/null +++ b/config/com.valheimnpc.vikings.cfg @@ -0,0 +1,479 @@ +## Settings file was created by plugin Valheim NPC v1.3.0 +## Plugin GUID: com.valheimnpc.vikings + +[0 - Производительность] + +## High — мощный ПК: рабочие ищут дело чаще всего. Balanced — обычный. Low — слабый ПК: рабочие думают и ищут дело реже, снимок поселения живёт дольше — FPS в поселениях выше, а на новое дело рабочие переключаются на пару секунд позже. / High for strong PCs, Balanced, Low for weak PCs (workers think and search less often — higher FPS in settlements). +# Setting type: String +# Default value: Balanced +# Acceptable values: High, Balanced, Low +PerformanceMode = Balanced + +[1 - Найм] + +## Цена найма в Лугах; каждый следующий биом дороже на столько же (300, 600, 900…). / Hire cost in Meadows, each next biome adds the same amount. +# Setting type: Int32 +# Default value: 300 +# Acceptable value range: From 0 to 5000 +HireCost = 300 + +## Сколько всего викингов (спутников и рабочих) может нанять один игрок. / Max hired vikings (companions and workers) per player. +# Setting type: Int32 +# Default value: 30 +# Acceptable value range: From 1 to 100 +MaxHiredPerPlayer = 30 + +## Спутников в отряде без побед над боссами. / Companions allowed before any boss is defeated. +# Setting type: Int32 +# Default value: 0 +# Acceptable value range: From 0 to 30 +BaseCompanions = 0 + +## Сколько мест в отряде даёт каждый побеждённый босс (Эйктюр — 1, Древний — 2…). / Squad slots per defeated boss. +# Setting type: Int32 +# Default value: 1 +# Acceptable value range: From 0 to 10 +CompanionsPerBoss = 1 + +## Могут ли игроки и спутники ранить друг друга (обманутых викингов бить можно всегда). / Can players and companions hurt each other (betrayed vikings are always fair game). +# Setting type: Boolean +# Default value: false +FriendlyFire = false + +## Пресет баланса: Easy (легко), Normal (как задумано), Hard (сурово) — сразу меняет цену найма, здоровье и урон спутников, опыт, подъём раненых, штраф за убийство и охотников за головами. Custom — не трогать. / Balance preset: Easy, Normal, Hard or Custom (don't touch). +# Setting type: String +# Default value: Custom +# Acceptable values: Custom, Easy, Normal, Hard +BalancePreset = Custom + +[2 - Спутник] + +## Здоровье викинга из Лугов. / Health of a Meadows viking. +# Setting type: Single +# Default value: 50 +# Acceptable value range: From 10 to 5000 +Health = 50 + +## Прибавка здоровья за каждый следующий биом. / Extra health per biome tier. +# Setting type: Single +# Default value: 25 +# Acceptable value range: From 0 to 1000 +HealthPerTier = 25 + +## Множитель урона оружия викинга (1 = как у оружия). / Weapon damage multiplier. +# Setting type: Single +# Default value: 0.75 +# Acceptable value range: From 0,1 to 5 +DamageMultiplier = 0.75 + +## Рост относительно игрока, нужен перезапуск игры. / Size relative to the player, restart required. +# Setting type: Single +# Default value: 0.92 +# Acceptable value range: From 0,7 to 1,1 +Scale = 0.92 + +## Через сколько секунд раненый встаёт сам (0 = только если поднять). / Seconds until a knocked out companion gets up (0 = never). +# Setting type: Single +# Default value: 60 +# Acceptable value range: From 0 to 3600 +AutoReviveSeconds = 60 + +## Доля здоровья после того, как спутника подняли. / Health fraction after revive. +# Setting type: Single +# Default value: 0.3 +# Acceptable value range: From 0,05 to 1 +ReviveHealthPercent = 0.3 + +## Если спутник отстал дальше этого расстояния, он догоняет телепортом (0 = выкл). / Teleport to the player when farther than this (0 = off). +# Setting type: Single +# Default value: 60 +# Acceptable value range: From 0 to 500 +LeashDistance = 60 + +## Спутники проходят через порталы вместе с игроком. / Companions follow through portals. +# Setting type: Boolean +# Default value: true +FollowThroughPortals = true + +## Радиус работы вокруг кровати (лесоруб, шахтёр, фермер и т. д.). / Work radius around the companion's bed. +# Setting type: Single +# Default value: 30 +# Acceptable value range: From 5 to 100 +WorkRadius = 30 + +## Сколько веса спутник несёт в сумке. / Max weight in a companion's bag. +# Setting type: Single +# Default value: 200 +# Acceptable value range: From 10 to 5000 +BackpackMaxWeight = 200 + +## На сколько игровых дней можно одолжить спутника другому игроку (потом он сам вернётся к тебе). / For how many game days a companion can be lent to another player (then returns to you). +# Setting type: Int32 +# Default value: 3 +# Acceptable value range: From 1 to 30 +LendDays = 3 + +## Верность хозяину и дружба/неприязнь между викингами (влияют на урон, работу и реплики). / Loyalty to the owner and friendship/rivalry between vikings (affect damage, work and chatter). +# Setting type: Boolean +# Default value: true +Relations = true + +## Сколько монет за вещь берёт викинг за починку твоего снаряжения (нужна станция рядом с ним). / Coins per item a viking charges to repair your gear (needs a station near them). +# Setting type: Int32 +# Default value: 5 +# Acceptable value range: From 0 to 1000 +RepairCost = 5 + +## Черты характера (одна-две у каждого викинга, меняют силу, цену, работу и повадки). / Personality traits (one or two per viking; affect power, price, work and habits). +# Setting type: Boolean +# Default value: true +Traits = true + +[3 - Доверие] + +## Доверие за обещание, оплаченное в срок. / Trust for a promise paid on time. +# Setting type: Int32 +# Default value: 1 +# Acceptable value range: From 0 to 100 +TrustPaidPromise = 1 + +## Доверие за то, что поднял раненого викинга (не чаще раза в игровые сутки с одного викинга). / Trust for helping up a knocked out viking (once per in-game day per viking). +# Setting type: Int32 +# Default value: 1 +# Acceptable value range: From 0 to 100 +TrustRevive = 1 + +## Доверие за то, что бродячий викинг за плату замолвил за тебя слово (один раз с каждого). / Trust for paying a wandering viking to put in a good word for you (once per viking). +# Setting type: Int32 +# Default value: 1 +# Acceptable value range: From 0 to 100 +TrustVouch = 1 + +## Сколько монет стоит, чтобы викинг замолвил за тебя слово. / Coins to pay for a good word. +# Setting type: Int32 +# Default value: 50 +# Acceptable value range: From 0 to 5000 +VouchCost = 50 + +## Доверие за неоплаченное обещание. / Trust for a broken promise. +# Setting type: Int32 +# Default value: -3 +# Acceptable value range: From -100 to 0 +TrustBrokenPromise = -3 + +## Доверие за отказ от поручения или просрочку. / Trust for giving up an errand or missing its deadline. +# Setting type: Int32 +# Default value: -1 +# Acceptable value range: From -100 to 0 +TrustQuestAbandon = -1 + +## Доверие за убийство викинга. / Trust for killing a viking. +# Setting type: Int32 +# Default value: -10 +# Acceptable value range: From -100 to 0 +TrustKill = -10 + +## Во сколько раз обманутый викинг сильнее: урон и броня (3 = +200%). / Damage and armor multiplier of a betrayed viking (3 = +200%). +# Setting type: Single +# Default value: 3 +# Acceptable value range: From 1 to 10 +BetrayedPowerMultiplier = 3 + +## Приходят ли охотники за головами к клятвопреступникам. / Do bounty hunters come for oathbreakers. +# Setting type: Boolean +# Default value: true +BountyHunters = true + +## При каком доверии и ниже приходят охотники. / Trust at or below which bounty hunters come. +# Setting type: Int32 +# Default value: -20 +# Acceptable value range: From -100 to 0 +BountyTrustThreshold = -20 + +## Как часто (в минутах) бросается жребий на приход охотников. / Minutes between bounty rolls. +# Setting type: Single +# Default value: 10 +# Acceptable value range: From 1 to 600 +BountyIntervalMinutes = 10 + +## Шанс прихода охотников за один бросок, %. / Chance per roll, %. +# Setting type: Single +# Default value: 35 +# Acceptable value range: From 0 to 100 +BountyChance = 35 + +## Самый большой отряд (при доверии −95 и ниже). / Largest squad size. +# Setting type: Int32 +# Default value: 4 +# Acceptable value range: From 1 to 10 +BountyMaxHunters = 4 + +## Через сколько секунд охотники уходят, если потеряли цель (дальше 200 м). / Seconds before hunters give up on a lost target. +# Setting type: Single +# Default value: 300 +# Acceptable value range: From 30 to 3600 +BountyGiveUpSeconds = 300 + +[3 - Опыт] + +## Максимальный уровень спутника. / Max companion level. +# Setting type: Int32 +# Default value: 20 +# Acceptable value range: From 1 to 100 +MaxLevel = 20 + +## Опыта до следующего уровня: столько × текущий уровень (100, 200, 300…). / XP to next level = this × current level. +# Setting type: Int32 +# Default value: 100 +# Acceptable value range: From 1 to 100000 +XpPerLevel = 100 + +## Множитель опыта; за убийство даётся 1/10 здоровья врага, за босса впятеро больше. / XP multiplier; a kill gives 1/10 of the victim's health, bosses ×5. +# Setting type: Single +# Default value: 1 +# Acceptable value range: From 0 to 100 +XpMultiplier = 1 + +## Прибавка здоровья за уровень (0.03 = +3%). / Health bonus per level. +# Setting type: Single +# Default value: 0.03 +# Acceptable value range: From 0 to 2 +HealthPerLevel = 0.03 + +## Прибавка урона за уровень (0.02 = +2%). / Damage bonus per level. +# Setting type: Single +# Default value: 0.02 +# Acceptable value range: From 0 to 2 +DamagePerLevel = 0.02 + +[4 - Появление] + +## Бродячие викинги появляются днём во всех биомах, нужен перезапуск. / Wandering vikings spawn by day in every biome, restart required. +# Setting type: Boolean +# Default value: true +SpawnEnabled = true + +## Шанс появления за одну попытку, %, нужен перезапуск. / Spawn chance per attempt, restart required. +# Setting type: Single +# Default value: 35 +# Acceptable value range: From 0 to 100 +SpawnChance = 35 + +## Секунд между попытками появления, нужен перезапуск. / Seconds between spawn attempts, restart required. +# Setting type: Single +# Default value: 180 +# Acceptable value range: From 10 to 36000 +SpawnInterval = 180 + +## Шанс, что бродячий викинг — торговец, %. Торговца не нанять, с ним торгуют. / Chance a wandering viking is a trader, %. Traders trade, they can't be hired. +# Setting type: Single +# Default value: 10 +# Acceptable value range: From 0 to 100 +TraderChance = 10 + +[5 - Клавиши] + +## Радиальное меню приказов отряду (спутники в 50 м); если рядом никого — призыв отряда. / Radial order menu for the squad (companions within 50 m); with nobody near it summons the squad. +# Setting type: KeyboardShortcut +# Default value: Y +SquadMenuHotkey = Y + +## Реестр: все твои викинги по всему миру. / Roster: all your vikings across the world. +# Setting type: KeyboardShortcut +# Default value: J +RosterHotkey = J + +[6 - Поселения] + +## Радиус поселения вокруг знамени: в нём рабочие сами занимают кровати и работают (E по знамени показывает круг). / Settlement radius around the banner: workers take beds and work inside it (E on the banner shows the circle). +# Setting type: Single +# Default value: 50 +# Acceptable value range: From 10 to 100 +SettlementRadius = 50 + +## Как далеко от знамени лесоруб, шахтёр и собиратель уходят за работой, когда в радиусе поселения её не осталось (добытое несут в сундуки поселения). Дальше ~150 м от тебя мир не загружен — там они замирают до твоего прихода. / How far woodcutters, miners and gatherers go when there is no work left inside the settlement. +# Setting type: Single +# Default value: 120 +# Acceptable value range: From 0 to 300 +FarWorkRadius = 120 + +## Что собиратель не собирает (имена предметов через запятую): по умолчанию смола из смоляных ям. / Items the gatherer leaves alone (item names, comma separated): tar from tar pits by default. +# Setting type: String +# Default value: Tar +GathererSkip = Tar + +## Сколько урожая, который сажают им же (ячмень, лён, грибы), фермер оставляет в сундуках, засевая вскопанное. 0 — сажает всё. / How much crop that is planted as its own seed (barley, flax, mushrooms) the farmer leaves in chests when sowing tilled ground. 0 = plants it all. +# Setting type: Int32 +# Default value: 0 +# Acceptable value range: From 0 to 500 +FarmSeedReserve = 0 + +## Сколько монет берёт шахтёр, которому нечего долбить, за то, чтобы искать камень дальше (в разговоре с ним). / Coins an idle miner asks to search further for stone (in the dialog). +# Setting type: Int32 +# Default value: 50 +# Acceptable value range: From 0 to 10000 +MinerSearchCost = 50 + +## На сколько метров за одну плату растёт круг поиска шахтёра. / Meters added to the miner's search radius per payment. +# Setting type: Int32 +# Default value: 10 +# Acceptable value range: From 1 to 100 +MinerSearchStep = 10 + +## Сколько метров всего можно докупить шахтёру (дальше ~150 м от тебя мир не загружен). / Max extra meters a miner's search radius can be raised by. +# Setting type: Int32 +# Default value: 100 +# Acceptable value range: From 0 to 500 +MinerSearchMax = 100 + +## Сколько поселений может «жить без тебя» — мир вокруг их знамён остаётся загруженным, когда рядом нет игроков (включается на знамени: Shift+E). Каждое такое поселение нагружает игру примерно как ещё один игрок в том месте. 0 — выключить. На выделенном сервере действует настройка сервера (мод должен стоять и на нём). / How many settlements may stay loaded while no player is near (toggle on the banner: Shift+E). Each one costs about as much as another player standing there. 0 disables. On a dedicated server the server's setting applies (the mod must be installed on the server too). +# Setting type: Int32 +# Default value: 4 +# Acceptable value range: From 0 to 10 +KeepLoadedMax = 4 + +## Самый большой радиус, который можно держать загруженным вокруг знамени, м. Рекомендуемый радиус считается по зоне поиска шахтёра (FarWorkRadius + докупленное). Чем больше радиус, тем больше участков мира (64×64 м) и тем выше нагрузка. Пока рядом никого нет, рабочие ходят только в пределах загруженного радиуса. / Largest radius kept loaded around a banner, m. The recommended radius follows the miner's search zone. Bigger radius = more world zones = more load. While nobody is near, workers stay inside the loaded radius. +# Setting type: Single +# Default value: 150 +# Acceptable value range: From 30 to 300 +KeepLoadedMaxRadius = 150 + +## Сколько животных одного вида держать в поселении: больше — животновод забивает лишнее (безымянных взрослых, по одному). 0 — не забивать. / How many animals of one kind the settlement keeps: above that the herder culls the extra (unnamed adults, one at a time). 0 = never. +# Setting type: Int32 +# Default value: 10 +# Acceptable value range: From 0 to 100 +HerdLimit = 10 + +## Поселение со 2-го уровня привлекает новичков: раз в день (чем выше уровень, тем чаще) у знамени появляется путник и просится в жители, со скидкой. Нужна свободная кровать. / From level 2 a settlement attracts newcomers who ask to join (discounted). Needs a free bed. +# Setting type: Boolean +# Default value: true +Newcomers = true + +## Чужие поселения в мире: хутора вольных бондов (дружеские, их нельзя ломать) и стоянки изгоев (враги, их можно разбить). Появляются сами неподалёку от тебя, в новых местах. / Foreign settlements: freeholder farmsteads (friendly, protected) and outlaw camps (hostile). They appear on their own near you. +# Setting type: Boolean +# Default value: true +NpcSettlements = true + +## Шанс раз в 2 минуты, что рядом с тобой появится чужое поселение (если поблизости нет других), %. / Chance every 2 minutes that a foreign settlement appears near you (if none are close), %. +# Setting type: Single +# Default value: 10 +# Acceptable value range: From 0 to 100 +NpcSettlementChance = 10 + +## Как далеко чужое поселение должно быть от любого другого поселения (твоего или чужого), м. / Minimum distance between a foreign settlement and any other settlement, m. +# Setting type: Single +# Default value: 600 +# Acceptable value range: From 150 to 3000 +NpcSettlementDistance = 600 + +## Награда за убитого изгоя: монет за каждый его уровень (с тела; у вожака — втрое). Только если убил ты или твой викинг. 0 — без монет. / Bounty for a killed outlaw: coins per outlaw level (dropped on the body; chiefs pay triple). Only when you or your Viking killed it. 0 = no coins. +# Setting type: Int32 +# Default value: 5 +# Acceptable value range: From 0 to 200 +OutlawBounty = 5 + +## Сколько доверия даёт убитый изгой (вожак — втрое): бонды благодарны. 0 — не давать. / Trust gained per killed outlaw (chiefs triple): the freeholders are grateful. 0 = none. +# Setting type: Int32 +# Default value: 1 +# Acceptable value range: From 0 to 20 +OutlawBountyTrust = 1 + +## Какой мёд-напиток рабочие вечером пьют из сундуков (имена предметов через запятую; целебные меды не трогают). Нет напитка — едят мёд из ульев. / Mead workers drink in the evening from chests (item names, comma separated; healing meads are left alone). No mead — they eat honey. +# Setting type: String +# Default value: MeadTasty +MeadItems = MeadTasty + +## Ворчат ли рабочие, когда нет кровати, тепла, мёда или сна (только реплики, без штрафов). / Do workers grumble about missing bed, warmth, mead or sleep (lines only, no penalties). +# Setting type: Boolean +# Default value: true +Grumbling = true + +## На кого охотится охотник (имена существ через запятую). / Creatures the hunter hunts (prefab names, comma separated). +# Setting type: String +# Default value: Deer,Boar,Neck,Hare,Lox,Asksvin +HuntPrey = Deer,Boar,Neck,Hare,Lox,Asksvin + +## Экономная сеть: викинги, рядом с которыми (80 м) нет игроков, думают вчетверо реже — меньше нагрузки на сервер. / Vikings with no player within 80 m think four times less often — less server load. +# Setting type: Boolean +# Default value: true +NetSaver = true + +[7 - Карта] + +## Голоса: к реплике над головой звучит бормотание (голоса торговцев игры), у каждого викинга свой тон. / Voices: a mumble plays with each overhead line (the game's trader voices), each viking has his own pitch. +# Setting type: Boolean +# Default value: true +Voices = true + +## Показывать на карте твоих викингов. / Show your vikings on the map. +# Setting type: Boolean +# Default value: true +MapPinsVikings = true + +## Показывать на карте поселения (знамёна). / Show settlements (banners) on the map. +# Setting type: Boolean +# Default value: true +MapPinsSettlements = true + +## Панель отряда слева на экране: здоровье и занятие спутников рядом. / Squad panel on the left: health and state of nearby companions. +# Setting type: Boolean +# Default value: true +SquadHud = true + +## Значки состояния над головами викингов: спит, ранен, вымотан, мёрзнет, без мёда, без работы, торговец, поручение. / Status icons above vikings' heads. +# Setting type: Boolean +# Default value: true +StatusIcons = true + +## Профессия над именем рабочих (значок и название), у торговцев — монета. / Job above workers' names (icon and title), a coin above traders. +# Setting type: Boolean +# Default value: true +JobOverName = true + +## Короткий сигнал, когда твой викинг падает без сознания или тяжело ранен. / A short beep when your viking is downed or badly hurt. +# Setting type: Boolean +# Default value: true +WoundSound = true + +## Метка над врагом, которого бьют твои спутники. / A marker above the enemy your companions are fighting. +# Setting type: Boolean +# Default value: true +ShowTargets = true + +## Боевая раскраска на лице у опытных спутников (10-й уровень и выше или ветеран), цвет — по боевой роли. / War paint on the faces of seasoned companions (level 10+ or veterans), colored by combat role. +# Setting type: Boolean +# Default value: true +WarPaint = true + +## Прятать шлемы своих викингов — только вид, защита шлема остаётся. Видно лица и боевую раскраску. / Hide your vikings' helmets (visual only, the armor still counts) to see faces and war paint. +# Setting type: Boolean +# Default value: false +HideHelmets = false + +## Подсказки ворона Хугина про найм, отряд, поселения, торговцев и чужие поселения (каждая — один раз). / Hugin the raven explains hiring, the squad, settlements, traders and foreign settlements (each once). +# Setting type: Boolean +# Default value: true +Tutorials = true + +## Цвет огонька над медиком (он только светит, туман не разгоняет — это умеет лишь маг). / Color of the healer's glow (light only; only the mage clears mist). +# Setting type: Color +# Default value: 59FF73FF +HealerGlowColor = 59FF73FF + +## Проверять при запуске, не вышла ли на Nexus новая версия мода (в мире — одно сообщение). / Check Nexus for a newer version of the mod at startup (one message in the world). +# Setting type: Boolean +# Default value: true +CheckUpdates = true + +[8 - Отладка] + +## Показать карту поселения вокруг тебя (7 м) и пути викингов по ней: зелёные крестики — где можно встать, голубые — дверной проём, жёлтые — с твоей тропы; оранжевые линии — твои тропы, фиолетовые — перешагивания по ступеням, белые — пути викингов. Нет креста — там викинг не встанет. / Show the settlement nav map around you and Vikings' paths on it. +# Setting type: Boolean +# Default value: false +ShowNavMap = false + +## Проверка: поставить викинга или торговца, наслать охотников, доверие, бессонница рабочих. / Test tools. +# Setting type: String +# Default value: +TestTools = + diff --git a/config/local.valheim.quartermaster.cfg b/config/local.valheim.quartermaster.cfg new file mode 100644 index 0000000..151dc39 --- /dev/null +++ b/config/local.valheim.quartermaster.cfg @@ -0,0 +1,105 @@ +## Settings file was created by plugin Quartermaster v0.1.62 +## Plugin GUID: local.valheim.quartermaster + +[Controls] + +## Open config for the machine or fire under the crosshair. Controller: use Machine Config from inventory. +# Setting type: KeyboardShortcut +# Default value: F9 +MachineConfig = F9 + +[Cosmetics] + +## Local owl coos and clucks. Set 0 to mute. +# Setting type: Single +# Default value: 0.35 +# Acceptable value range: From 0 to 1 +OwlVolume = 0.35 + +[General] + +## Enable base automation. +# Setting type: Boolean +# Default value: true +Enabled = true + +## Radius in metres around each Deposit Chest; loaded objects only. +# Setting type: Single +# Default value: 100 +# Acceptable value range: From 10 to 200 +BaseRange = 100 + +## Accessible container radius for crafting, building and upgrades. +# Setting type: Single +# Default value: 100 +# Acceptable value range: From 5 to 200 +CraftRange = 100 + +## Use materials from chests with Crafting Supply enabled. +# Setting type: Boolean +# Default value: true +CraftFromContainers = true + +## A required station inside a Deposit Chest's BaseRange supports building, structure repair and dismantling throughout that same area. Crafting and item upgrades still require station interaction. +# Setting type: Boolean +# Default value: true +ExtendStationCoverage = true + +## Clear cheat item tags once from your inventory after world entry and from accessible, locally owned storage chests after their saved contents load. Distant chests are scanned when loaded. Changes persist on normal saves; disabling this does not restore removed tags. +# Setting type: Boolean +# Default value: true +ClearCheatItemTagsOnLoad = true + +## Hide item cheat notices in tooltips and inventory pickup/removal messages. Independent of the item-tag cleanup scan. +# Setting type: Boolean +# Default value: true +HideCheatItemMessages = true + +## Rotating machine and deposit work budget every two seconds. +# Setting type: Int32 +# Default value: 24 +# Acceptable value range: From 1 to 100 +ObjectsPerCycle = 24 + +## After 20 seconds idle, the owl collects up to three individual dropped items per trip within 25 metres of its Deposit Chest. Respects ward access, ignored pickup types, chest room and the production-output grace period. +# Setting type: Boolean +# Default value: true +OwlCollectDroppedItems = true + +## Storage prefab exceptions: ItemPrefab=ingredients;OtherPrefab=reagents;ExcludedPrefab=none. Categories: ingredients, reagents, lumber, ingots, ores, coal, hides, textiles, feathers, bones, masonry, food, produce, meat, fish, grain, arrows, bolts, weapons, longweapons, bows, crossbows, shields, armor. Server-synchronized. Per-chest learning and ignored items remain available. +# Setting type: String +# Default value: +StorageCategoryOverrides = + +[Interface] + +## Show the Sort Inventory button. Local display preference. +# Setting type: Boolean +# Default value: true +ShowSortInventory = true + +## Horizontal offset of Sort Inventory in UI units. Positive moves right. Local display preference. +# Setting type: Int32 +# Default value: 0 +# Acceptable value range: From -1000 to 1000 +SortInventoryOffsetX = 0 + +## Vertical offset of Sort Inventory in UI units. Positive moves down. Local display preference. +# Setting type: Int32 +# Default value: 0 +# Acceptable value range: From -1000 to 1000 +SortInventoryOffsetY = 0 + +[Inventory] + +## Use MaximumStackSize for stackable items. Set false to keep normal item stack limits. Equipment and existing item quantities are unchanged. Servers running Quartermaster control this setting. Use the ledger book to apply changes in game; direct config-file edits require a restart. +# Setting type: Boolean +# Default value: true +EnableStackSizes = true + +## Maximum items per stack, not a multiplier. Does not change item weight or delete existing items when lowered. Use the ledger book to apply changes in game; direct config-file edits require a restart. +# Setting type: Int32 +# Default value: 1000 +# Acceptable value range: From 2 to 100000 +MaximumStackSize = 1000 + diff --git a/config/marcopogo.PlanBuild.cfg b/config/marcopogo.PlanBuild.cfg new file mode 100644 index 0000000..c5ccef8 --- /dev/null +++ b/config/marcopogo.PlanBuild.cfg @@ -0,0 +1,224 @@ +## Settings file was created by plugin PlanBuild v0.19.1 +## Plugin GUID: marcopogo.PlanBuild + +[Blueprints] + +## Default build mode when placing blueprints. +# Setting type: DefaultBuildMode +# Default value: Planned +# Acceptable values: Planned, Direct +Default build mode = Planned + +## Set Piece health to its maximum value when directly building blueprints. +# Setting type: Boolean +# Default value: false +Unlimited health = false + +## Place distance while using the Blueprint Rune. +# Setting type: Single +# Default value: 50 +# Acceptable value range: From 8 to 80 +Place distance = 50 + +## Smoothing value of the terrain tool when flattening with smoothing modifier key pressed. +# Setting type: Single +# Default value: 0.5 +# Acceptable value range: From 0 to 1 +Terrain smoothing = 0.5 + +## Camera height change when holding the camera modifier key and scrolling. +# Setting type: Single +# Default value: 2 +Camera offset increment = 2 + +## Invert the direction of camera offset scrolling. +# Setting type: Boolean +# Default value: false +Invert camera offset scroll = false + +## Placement height change when holding the modifier key and scrolling. +# Setting type: Single +# Default value: 0.1 +Placement offset increment = 0.1 + +## Invert the direction of placement offset scrolling. +# Setting type: Boolean +# Default value: false +Invert placement height change scroll = false + +## Selection radius increment when scrolling. +# Setting type: Single +# Default value: 1 +Selection increment = 1 + +## Invert the direction of selection scrolling. +# Setting type: Boolean +# Default value: false +Invert selection scroll = false + +## Selection rotation increment when scrolling. +# Setting type: Int32 +# Default value: 5 +Rotation increment = 5 + +## Invert the direction of rotation scrolling. +# Setting type: Boolean +# Default value: false +Invert rotation scroll = false + +## Distance of the shell used to check for connectedness. +# Setting type: Single +# Default value: 0.01 +Selection connected check margin = 0.01 + +## Shows a grid around the blueprints' bounds to visualize the blueprints' edges. +# Setting type: Boolean +# Default value: false +Show the transform bound grid = false + +## Show a tooltip with a bigger thumbnail for blueprint pieces. +# Setting type: Boolean +# Default value: true +Tooltip enabled = true + +## Set the background color for the tooltip on blueprint pieces. +# Setting type: Color +# Default value: 212121A6 +Tooltip Color = 212121A6 + +## Global name of the blueprint undo queue used for bp.undo and bp.redo commands. Can be set to the same value as other mods' config (if supported) to combine their undo queues. +# Setting type: String +# Default value: blueprintqueue +Undo queue name = blueprintqueue + +## Add your current player profile name to any blueprint file created with that player. +# Setting type: Boolean +# Default value: true +Add player prefix to file name = true + +[Directories] + +## Base directory to scan (recursively) for blueprints and vbuild files, relative paths are relative to the valheim.exe location +# Setting type: String +# Default value: . +Search directory = . + +## Directory to save blueprint files, relative paths are relative to the valheim.exe location +# Setting type: String +# Default value: BepInEx/config/PlanBuild/blueprints +Save directory = BepInEx/config/PlanBuild/blueprints + +[Keybindings] + +## Hotkey to show the blueprint marketplace GUI +# Setting type: KeyCode +# Default value: End +# Acceptable values: None, Backspace, Tab, Clear, Return, Pause, Escape, Space, Exclaim, DoubleQuote, Hash, Dollar, Percent, Ampersand, Quote, LeftParen, RightParen, Asterisk, Plus, Comma, Minus, Period, Slash, Alpha0, Alpha1, Alpha2, Alpha3, Alpha4, Alpha5, Alpha6, Alpha7, Alpha8, Alpha9, Colon, Semicolon, Less, Equals, Greater, Question, At, LeftBracket, Backslash, RightBracket, Caret, Underscore, BackQuote, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, LeftCurlyBracket, Pipe, RightCurlyBracket, Tilde, Delete, Keypad0, Keypad1, Keypad2, Keypad3, Keypad4, Keypad5, Keypad6, Keypad7, Keypad8, Keypad9, KeypadPeriod, KeypadDivide, KeypadMultiply, KeypadMinus, KeypadPlus, KeypadEnter, KeypadEquals, UpArrow, DownArrow, RightArrow, LeftArrow, Insert, Home, End, PageUp, PageDown, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, Numlock, CapsLock, ScrollLock, RightShift, LeftShift, RightControl, LeftControl, RightAlt, LeftAlt, RightCommand, RightMeta, RightApple, LeftCommand, LeftMeta, LeftApple, LeftWindows, RightWindows, AltGr, Help, Print, SysReq, Break, Menu, WheelUp, WheelDown, Mouse0, Mouse1, Mouse2, Mouse3, Mouse4, Mouse5, Mouse6, JoystickButton0, JoystickButton1, JoystickButton2, JoystickButton3, JoystickButton4, JoystickButton5, JoystickButton6, JoystickButton7, JoystickButton8, JoystickButton9, JoystickButton10, JoystickButton11, JoystickButton12, JoystickButton13, JoystickButton14, JoystickButton15, JoystickButton16, JoystickButton17, JoystickButton18, JoystickButton19, Joystick1Button0, Joystick1Button1, Joystick1Button2, Joystick1Button3, Joystick1Button4, Joystick1Button5, Joystick1Button6, Joystick1Button7, Joystick1Button8, Joystick1Button9, Joystick1Button10, Joystick1Button11, Joystick1Button12, Joystick1Button13, Joystick1Button14, Joystick1Button15, Joystick1Button16, Joystick1Button17, Joystick1Button18, Joystick1Button19, Joystick2Button0, Joystick2Button1, Joystick2Button2, Joystick2Button3, Joystick2Button4, Joystick2Button5, Joystick2Button6, Joystick2Button7, Joystick2Button8, Joystick2Button9, Joystick2Button10, Joystick2Button11, Joystick2Button12, Joystick2Button13, Joystick2Button14, Joystick2Button15, Joystick2Button16, Joystick2Button17, Joystick2Button18, Joystick2Button19, Joystick3Button0, Joystick3Button1, Joystick3Button2, Joystick3Button3, Joystick3Button4, Joystick3Button5, Joystick3Button6, Joystick3Button7, Joystick3Button8, Joystick3Button9, Joystick3Button10, Joystick3Button11, Joystick3Button12, Joystick3Button13, Joystick3Button14, Joystick3Button15, Joystick3Button16, Joystick3Button17, Joystick3Button18, Joystick3Button19, Joystick4Button0, Joystick4Button1, Joystick4Button2, Joystick4Button3, Joystick4Button4, Joystick4Button5, Joystick4Button6, Joystick4Button7, Joystick4Button8, Joystick4Button9, Joystick4Button10, Joystick4Button11, Joystick4Button12, Joystick4Button13, Joystick4Button14, Joystick4Button15, Joystick4Button16, Joystick4Button17, Joystick4Button18, Joystick4Button19, Joystick5Button0, Joystick5Button1, Joystick5Button2, Joystick5Button3, Joystick5Button4, Joystick5Button5, Joystick5Button6, Joystick5Button7, Joystick5Button8, Joystick5Button9, Joystick5Button10, Joystick5Button11, Joystick5Button12, Joystick5Button13, Joystick5Button14, Joystick5Button15, Joystick5Button16, Joystick5Button17, Joystick5Button18, Joystick5Button19, Joystick6Button0, Joystick6Button1, Joystick6Button2, Joystick6Button3, Joystick6Button4, Joystick6Button5, Joystick6Button6, Joystick6Button7, Joystick6Button8, Joystick6Button9, Joystick6Button10, Joystick6Button11, Joystick6Button12, Joystick6Button13, Joystick6Button14, Joystick6Button15, Joystick6Button16, Joystick6Button17, Joystick6Button18, Joystick6Button19, Joystick7Button0, Joystick7Button1, Joystick7Button2, Joystick7Button3, Joystick7Button4, Joystick7Button5, Joystick7Button6, Joystick7Button7, Joystick7Button8, Joystick7Button9, Joystick7Button10, Joystick7Button11, Joystick7Button12, Joystick7Button13, Joystick7Button14, Joystick7Button15, Joystick7Button16, Joystick7Button17, Joystick7Button18, Joystick7Button19, Joystick8Button0, Joystick8Button1, Joystick8Button2, Joystick8Button3, Joystick8Button4, Joystick8Button5, Joystick8Button6, Joystick8Button7, Joystick8Button8, Joystick8Button9, Joystick8Button10, Joystick8Button11, Joystick8Button12, Joystick8Button13, Joystick8Button14, Joystick8Button15, Joystick8Button16, Joystick8Button17, Joystick8Button18, Joystick8Button19, F16, F17, F18, F19, F20, F21, F22, F23, F24 +Blueprint Marketplace GUI toggle key = End + +## First modifier key to change behaviours on various tools (defaults to LeftShift) +# Setting type: KeyCode +# Default value: LeftShift +# Acceptable values: None, Backspace, Tab, Clear, Return, Pause, Escape, Space, Exclaim, DoubleQuote, Hash, Dollar, Percent, Ampersand, Quote, LeftParen, RightParen, Asterisk, Plus, Comma, Minus, Period, Slash, Alpha0, Alpha1, Alpha2, Alpha3, Alpha4, Alpha5, Alpha6, Alpha7, Alpha8, Alpha9, Colon, Semicolon, Less, Equals, Greater, Question, At, LeftBracket, Backslash, RightBracket, Caret, Underscore, BackQuote, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, LeftCurlyBracket, Pipe, RightCurlyBracket, Tilde, Delete, Keypad0, Keypad1, Keypad2, Keypad3, Keypad4, Keypad5, Keypad6, Keypad7, Keypad8, Keypad9, KeypadPeriod, KeypadDivide, KeypadMultiply, KeypadMinus, KeypadPlus, KeypadEnter, KeypadEquals, UpArrow, DownArrow, RightArrow, LeftArrow, Insert, Home, End, PageUp, PageDown, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, Numlock, CapsLock, ScrollLock, RightShift, LeftShift, RightControl, LeftControl, RightAlt, LeftAlt, RightCommand, RightMeta, RightApple, LeftCommand, LeftMeta, LeftApple, LeftWindows, RightWindows, AltGr, Help, Print, SysReq, Break, Menu, WheelUp, WheelDown, Mouse0, Mouse1, Mouse2, Mouse3, Mouse4, Mouse5, Mouse6, JoystickButton0, JoystickButton1, JoystickButton2, JoystickButton3, JoystickButton4, JoystickButton5, JoystickButton6, JoystickButton7, JoystickButton8, JoystickButton9, JoystickButton10, JoystickButton11, JoystickButton12, JoystickButton13, JoystickButton14, JoystickButton15, JoystickButton16, JoystickButton17, JoystickButton18, JoystickButton19, Joystick1Button0, Joystick1Button1, Joystick1Button2, Joystick1Button3, Joystick1Button4, Joystick1Button5, Joystick1Button6, Joystick1Button7, Joystick1Button8, Joystick1Button9, Joystick1Button10, Joystick1Button11, Joystick1Button12, Joystick1Button13, Joystick1Button14, Joystick1Button15, Joystick1Button16, Joystick1Button17, Joystick1Button18, Joystick1Button19, Joystick2Button0, Joystick2Button1, Joystick2Button2, Joystick2Button3, Joystick2Button4, Joystick2Button5, Joystick2Button6, Joystick2Button7, Joystick2Button8, Joystick2Button9, Joystick2Button10, Joystick2Button11, Joystick2Button12, Joystick2Button13, Joystick2Button14, Joystick2Button15, Joystick2Button16, Joystick2Button17, Joystick2Button18, Joystick2Button19, Joystick3Button0, Joystick3Button1, Joystick3Button2, Joystick3Button3, Joystick3Button4, Joystick3Button5, Joystick3Button6, Joystick3Button7, Joystick3Button8, Joystick3Button9, Joystick3Button10, Joystick3Button11, Joystick3Button12, Joystick3Button13, Joystick3Button14, Joystick3Button15, Joystick3Button16, Joystick3Button17, Joystick3Button18, Joystick3Button19, Joystick4Button0, Joystick4Button1, Joystick4Button2, Joystick4Button3, Joystick4Button4, Joystick4Button5, Joystick4Button6, Joystick4Button7, Joystick4Button8, Joystick4Button9, Joystick4Button10, Joystick4Button11, Joystick4Button12, Joystick4Button13, Joystick4Button14, Joystick4Button15, Joystick4Button16, Joystick4Button17, Joystick4Button18, Joystick4Button19, Joystick5Button0, Joystick5Button1, Joystick5Button2, Joystick5Button3, Joystick5Button4, Joystick5Button5, Joystick5Button6, Joystick5Button7, Joystick5Button8, Joystick5Button9, Joystick5Button10, Joystick5Button11, Joystick5Button12, Joystick5Button13, Joystick5Button14, Joystick5Button15, Joystick5Button16, Joystick5Button17, Joystick5Button18, Joystick5Button19, Joystick6Button0, Joystick6Button1, Joystick6Button2, Joystick6Button3, Joystick6Button4, Joystick6Button5, Joystick6Button6, Joystick6Button7, Joystick6Button8, Joystick6Button9, Joystick6Button10, Joystick6Button11, Joystick6Button12, Joystick6Button13, Joystick6Button14, Joystick6Button15, Joystick6Button16, Joystick6Button17, Joystick6Button18, Joystick6Button19, Joystick7Button0, Joystick7Button1, Joystick7Button2, Joystick7Button3, Joystick7Button4, Joystick7Button5, Joystick7Button6, Joystick7Button7, Joystick7Button8, Joystick7Button9, Joystick7Button10, Joystick7Button11, Joystick7Button12, Joystick7Button13, Joystick7Button14, Joystick7Button15, Joystick7Button16, Joystick7Button17, Joystick7Button18, Joystick7Button19, Joystick8Button0, Joystick8Button1, Joystick8Button2, Joystick8Button3, Joystick8Button4, Joystick8Button5, Joystick8Button6, Joystick8Button7, Joystick8Button8, Joystick8Button9, Joystick8Button10, Joystick8Button11, Joystick8Button12, Joystick8Button13, Joystick8Button14, Joystick8Button15, Joystick8Button16, Joystick8Button17, Joystick8Button18, Joystick8Button19, F16, F17, F18, F19, F20, F21, F22, F23, F24 +ShiftModifier = LeftShift + +## Second modifier key to change behaviours on various tools (defaults to LeftCtrl) +# Setting type: KeyCode +# Default value: LeftControl +# Acceptable values: None, Backspace, Tab, Clear, Return, Pause, Escape, Space, Exclaim, DoubleQuote, Hash, Dollar, Percent, Ampersand, Quote, LeftParen, RightParen, Asterisk, Plus, Comma, Minus, Period, Slash, Alpha0, Alpha1, Alpha2, Alpha3, Alpha4, Alpha5, Alpha6, Alpha7, Alpha8, Alpha9, Colon, Semicolon, Less, Equals, Greater, Question, At, LeftBracket, Backslash, RightBracket, Caret, Underscore, BackQuote, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, LeftCurlyBracket, Pipe, RightCurlyBracket, Tilde, Delete, Keypad0, Keypad1, Keypad2, Keypad3, Keypad4, Keypad5, Keypad6, Keypad7, Keypad8, Keypad9, KeypadPeriod, KeypadDivide, KeypadMultiply, KeypadMinus, KeypadPlus, KeypadEnter, KeypadEquals, UpArrow, DownArrow, RightArrow, LeftArrow, Insert, Home, End, PageUp, PageDown, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, Numlock, CapsLock, ScrollLock, RightShift, LeftShift, RightControl, LeftControl, RightAlt, LeftAlt, RightCommand, RightMeta, RightApple, LeftCommand, LeftMeta, LeftApple, LeftWindows, RightWindows, AltGr, Help, Print, SysReq, Break, Menu, WheelUp, WheelDown, Mouse0, Mouse1, Mouse2, Mouse3, Mouse4, Mouse5, Mouse6, JoystickButton0, JoystickButton1, JoystickButton2, JoystickButton3, JoystickButton4, JoystickButton5, JoystickButton6, JoystickButton7, JoystickButton8, JoystickButton9, JoystickButton10, JoystickButton11, JoystickButton12, JoystickButton13, JoystickButton14, JoystickButton15, JoystickButton16, JoystickButton17, JoystickButton18, JoystickButton19, Joystick1Button0, Joystick1Button1, Joystick1Button2, Joystick1Button3, Joystick1Button4, Joystick1Button5, Joystick1Button6, Joystick1Button7, Joystick1Button8, Joystick1Button9, Joystick1Button10, Joystick1Button11, Joystick1Button12, Joystick1Button13, Joystick1Button14, Joystick1Button15, Joystick1Button16, Joystick1Button17, Joystick1Button18, Joystick1Button19, Joystick2Button0, Joystick2Button1, Joystick2Button2, Joystick2Button3, Joystick2Button4, Joystick2Button5, Joystick2Button6, Joystick2Button7, Joystick2Button8, Joystick2Button9, Joystick2Button10, Joystick2Button11, Joystick2Button12, Joystick2Button13, Joystick2Button14, Joystick2Button15, Joystick2Button16, Joystick2Button17, Joystick2Button18, Joystick2Button19, Joystick3Button0, Joystick3Button1, Joystick3Button2, Joystick3Button3, Joystick3Button4, Joystick3Button5, Joystick3Button6, Joystick3Button7, Joystick3Button8, Joystick3Button9, Joystick3Button10, Joystick3Button11, Joystick3Button12, Joystick3Button13, Joystick3Button14, Joystick3Button15, Joystick3Button16, Joystick3Button17, Joystick3Button18, Joystick3Button19, Joystick4Button0, Joystick4Button1, Joystick4Button2, Joystick4Button3, Joystick4Button4, Joystick4Button5, Joystick4Button6, Joystick4Button7, Joystick4Button8, Joystick4Button9, Joystick4Button10, Joystick4Button11, Joystick4Button12, Joystick4Button13, Joystick4Button14, Joystick4Button15, Joystick4Button16, Joystick4Button17, Joystick4Button18, Joystick4Button19, Joystick5Button0, Joystick5Button1, Joystick5Button2, Joystick5Button3, Joystick5Button4, Joystick5Button5, Joystick5Button6, Joystick5Button7, Joystick5Button8, Joystick5Button9, Joystick5Button10, Joystick5Button11, Joystick5Button12, Joystick5Button13, Joystick5Button14, Joystick5Button15, Joystick5Button16, Joystick5Button17, Joystick5Button18, Joystick5Button19, Joystick6Button0, Joystick6Button1, Joystick6Button2, Joystick6Button3, Joystick6Button4, Joystick6Button5, Joystick6Button6, Joystick6Button7, Joystick6Button8, Joystick6Button9, Joystick6Button10, Joystick6Button11, Joystick6Button12, Joystick6Button13, Joystick6Button14, Joystick6Button15, Joystick6Button16, Joystick6Button17, Joystick6Button18, Joystick6Button19, Joystick7Button0, Joystick7Button1, Joystick7Button2, Joystick7Button3, Joystick7Button4, Joystick7Button5, Joystick7Button6, Joystick7Button7, Joystick7Button8, Joystick7Button9, Joystick7Button10, Joystick7Button11, Joystick7Button12, Joystick7Button13, Joystick7Button14, Joystick7Button15, Joystick7Button16, Joystick7Button17, Joystick7Button18, Joystick7Button19, Joystick8Button0, Joystick8Button1, Joystick8Button2, Joystick8Button3, Joystick8Button4, Joystick8Button5, Joystick8Button6, Joystick8Button7, Joystick8Button8, Joystick8Button9, Joystick8Button10, Joystick8Button11, Joystick8Button12, Joystick8Button13, Joystick8Button14, Joystick8Button15, Joystick8Button16, Joystick8Button17, Joystick8Button18, Joystick8Button19, F16, F17, F18, F19, F20, F21, F22, F23, F24 +CtrlModifier = LeftControl + +## Third modifier key to change behaviours on various tools (defaults to LeftAlt) +# Setting type: KeyCode +# Default value: LeftAlt +# Acceptable values: None, Backspace, Tab, Clear, Return, Pause, Escape, Space, Exclaim, DoubleQuote, Hash, Dollar, Percent, Ampersand, Quote, LeftParen, RightParen, Asterisk, Plus, Comma, Minus, Period, Slash, Alpha0, Alpha1, Alpha2, Alpha3, Alpha4, Alpha5, Alpha6, Alpha7, Alpha8, Alpha9, Colon, Semicolon, Less, Equals, Greater, Question, At, LeftBracket, Backslash, RightBracket, Caret, Underscore, BackQuote, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, LeftCurlyBracket, Pipe, RightCurlyBracket, Tilde, Delete, Keypad0, Keypad1, Keypad2, Keypad3, Keypad4, Keypad5, Keypad6, Keypad7, Keypad8, Keypad9, KeypadPeriod, KeypadDivide, KeypadMultiply, KeypadMinus, KeypadPlus, KeypadEnter, KeypadEquals, UpArrow, DownArrow, RightArrow, LeftArrow, Insert, Home, End, PageUp, PageDown, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, Numlock, CapsLock, ScrollLock, RightShift, LeftShift, RightControl, LeftControl, RightAlt, LeftAlt, RightCommand, RightMeta, RightApple, LeftCommand, LeftMeta, LeftApple, LeftWindows, RightWindows, AltGr, Help, Print, SysReq, Break, Menu, WheelUp, WheelDown, Mouse0, Mouse1, Mouse2, Mouse3, Mouse4, Mouse5, Mouse6, JoystickButton0, JoystickButton1, JoystickButton2, JoystickButton3, JoystickButton4, JoystickButton5, JoystickButton6, JoystickButton7, JoystickButton8, JoystickButton9, JoystickButton10, JoystickButton11, JoystickButton12, JoystickButton13, JoystickButton14, JoystickButton15, JoystickButton16, JoystickButton17, JoystickButton18, JoystickButton19, Joystick1Button0, Joystick1Button1, Joystick1Button2, Joystick1Button3, Joystick1Button4, Joystick1Button5, Joystick1Button6, Joystick1Button7, Joystick1Button8, Joystick1Button9, Joystick1Button10, Joystick1Button11, Joystick1Button12, Joystick1Button13, Joystick1Button14, Joystick1Button15, Joystick1Button16, Joystick1Button17, Joystick1Button18, Joystick1Button19, Joystick2Button0, Joystick2Button1, Joystick2Button2, Joystick2Button3, Joystick2Button4, Joystick2Button5, Joystick2Button6, Joystick2Button7, Joystick2Button8, Joystick2Button9, Joystick2Button10, Joystick2Button11, Joystick2Button12, Joystick2Button13, Joystick2Button14, Joystick2Button15, Joystick2Button16, Joystick2Button17, Joystick2Button18, Joystick2Button19, Joystick3Button0, Joystick3Button1, Joystick3Button2, Joystick3Button3, Joystick3Button4, Joystick3Button5, Joystick3Button6, Joystick3Button7, Joystick3Button8, Joystick3Button9, Joystick3Button10, Joystick3Button11, Joystick3Button12, Joystick3Button13, Joystick3Button14, Joystick3Button15, Joystick3Button16, Joystick3Button17, Joystick3Button18, Joystick3Button19, Joystick4Button0, Joystick4Button1, Joystick4Button2, Joystick4Button3, Joystick4Button4, Joystick4Button5, Joystick4Button6, Joystick4Button7, Joystick4Button8, Joystick4Button9, Joystick4Button10, Joystick4Button11, Joystick4Button12, Joystick4Button13, Joystick4Button14, Joystick4Button15, Joystick4Button16, Joystick4Button17, Joystick4Button18, Joystick4Button19, Joystick5Button0, Joystick5Button1, Joystick5Button2, Joystick5Button3, Joystick5Button4, Joystick5Button5, Joystick5Button6, Joystick5Button7, Joystick5Button8, Joystick5Button9, Joystick5Button10, Joystick5Button11, Joystick5Button12, Joystick5Button13, Joystick5Button14, Joystick5Button15, Joystick5Button16, Joystick5Button17, Joystick5Button18, Joystick5Button19, Joystick6Button0, Joystick6Button1, Joystick6Button2, Joystick6Button3, Joystick6Button4, Joystick6Button5, Joystick6Button6, Joystick6Button7, Joystick6Button8, Joystick6Button9, Joystick6Button10, Joystick6Button11, Joystick6Button12, Joystick6Button13, Joystick6Button14, Joystick6Button15, Joystick6Button16, Joystick6Button17, Joystick6Button18, Joystick6Button19, Joystick7Button0, Joystick7Button1, Joystick7Button2, Joystick7Button3, Joystick7Button4, Joystick7Button5, Joystick7Button6, Joystick7Button7, Joystick7Button8, Joystick7Button9, Joystick7Button10, Joystick7Button11, Joystick7Button12, Joystick7Button13, Joystick7Button14, Joystick7Button15, Joystick7Button16, Joystick7Button17, Joystick7Button18, Joystick7Button19, Joystick8Button0, Joystick8Button1, Joystick8Button2, Joystick8Button3, Joystick8Button4, Joystick8Button5, Joystick8Button6, Joystick8Button7, Joystick8Button8, Joystick8Button9, Joystick8Button10, Joystick8Button11, Joystick8Button12, Joystick8Button13, Joystick8Button14, Joystick8Button15, Joystick8Button16, Joystick8Button17, Joystick8Button18, Joystick8Button19, F16, F17, F18, F19, F20, F21, F22, F23, F24 +AltModifier = LeftAlt + +## Key to switch between modes on various tools +# Setting type: KeyCode +# Default value: Q +# Acceptable values: None, Backspace, Tab, Clear, Return, Pause, Escape, Space, Exclaim, DoubleQuote, Hash, Dollar, Percent, Ampersand, Quote, LeftParen, RightParen, Asterisk, Plus, Comma, Minus, Period, Slash, Alpha0, Alpha1, Alpha2, Alpha3, Alpha4, Alpha5, Alpha6, Alpha7, Alpha8, Alpha9, Colon, Semicolon, Less, Equals, Greater, Question, At, LeftBracket, Backslash, RightBracket, Caret, Underscore, BackQuote, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, LeftCurlyBracket, Pipe, RightCurlyBracket, Tilde, Delete, Keypad0, Keypad1, Keypad2, Keypad3, Keypad4, Keypad5, Keypad6, Keypad7, Keypad8, Keypad9, KeypadPeriod, KeypadDivide, KeypadMultiply, KeypadMinus, KeypadPlus, KeypadEnter, KeypadEquals, UpArrow, DownArrow, RightArrow, LeftArrow, Insert, Home, End, PageUp, PageDown, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, Numlock, CapsLock, ScrollLock, RightShift, LeftShift, RightControl, LeftControl, RightAlt, LeftAlt, RightCommand, RightMeta, RightApple, LeftCommand, LeftMeta, LeftApple, LeftWindows, RightWindows, AltGr, Help, Print, SysReq, Break, Menu, WheelUp, WheelDown, Mouse0, Mouse1, Mouse2, Mouse3, Mouse4, Mouse5, Mouse6, JoystickButton0, JoystickButton1, JoystickButton2, JoystickButton3, JoystickButton4, JoystickButton5, JoystickButton6, JoystickButton7, JoystickButton8, JoystickButton9, JoystickButton10, JoystickButton11, JoystickButton12, JoystickButton13, JoystickButton14, JoystickButton15, JoystickButton16, JoystickButton17, JoystickButton18, JoystickButton19, Joystick1Button0, Joystick1Button1, Joystick1Button2, Joystick1Button3, Joystick1Button4, Joystick1Button5, Joystick1Button6, Joystick1Button7, Joystick1Button8, Joystick1Button9, Joystick1Button10, Joystick1Button11, Joystick1Button12, Joystick1Button13, Joystick1Button14, Joystick1Button15, Joystick1Button16, Joystick1Button17, Joystick1Button18, Joystick1Button19, Joystick2Button0, Joystick2Button1, Joystick2Button2, Joystick2Button3, Joystick2Button4, Joystick2Button5, Joystick2Button6, Joystick2Button7, Joystick2Button8, Joystick2Button9, Joystick2Button10, Joystick2Button11, Joystick2Button12, Joystick2Button13, Joystick2Button14, Joystick2Button15, Joystick2Button16, Joystick2Button17, Joystick2Button18, Joystick2Button19, Joystick3Button0, Joystick3Button1, Joystick3Button2, Joystick3Button3, Joystick3Button4, Joystick3Button5, Joystick3Button6, Joystick3Button7, Joystick3Button8, Joystick3Button9, Joystick3Button10, Joystick3Button11, Joystick3Button12, Joystick3Button13, Joystick3Button14, Joystick3Button15, Joystick3Button16, Joystick3Button17, Joystick3Button18, Joystick3Button19, Joystick4Button0, Joystick4Button1, Joystick4Button2, Joystick4Button3, Joystick4Button4, Joystick4Button5, Joystick4Button6, Joystick4Button7, Joystick4Button8, Joystick4Button9, Joystick4Button10, Joystick4Button11, Joystick4Button12, Joystick4Button13, Joystick4Button14, Joystick4Button15, Joystick4Button16, Joystick4Button17, Joystick4Button18, Joystick4Button19, Joystick5Button0, Joystick5Button1, Joystick5Button2, Joystick5Button3, Joystick5Button4, Joystick5Button5, Joystick5Button6, Joystick5Button7, Joystick5Button8, Joystick5Button9, Joystick5Button10, Joystick5Button11, Joystick5Button12, Joystick5Button13, Joystick5Button14, Joystick5Button15, Joystick5Button16, Joystick5Button17, Joystick5Button18, Joystick5Button19, Joystick6Button0, Joystick6Button1, Joystick6Button2, Joystick6Button3, Joystick6Button4, Joystick6Button5, Joystick6Button6, Joystick6Button7, Joystick6Button8, Joystick6Button9, Joystick6Button10, Joystick6Button11, Joystick6Button12, Joystick6Button13, Joystick6Button14, Joystick6Button15, Joystick6Button16, Joystick6Button17, Joystick6Button18, Joystick6Button19, Joystick7Button0, Joystick7Button1, Joystick7Button2, Joystick7Button3, Joystick7Button4, Joystick7Button5, Joystick7Button6, Joystick7Button7, Joystick7Button8, Joystick7Button9, Joystick7Button10, Joystick7Button11, Joystick7Button12, Joystick7Button13, Joystick7Button14, Joystick7Button15, Joystick7Button16, Joystick7Button17, Joystick7Button18, Joystick7Button19, Joystick8Button0, Joystick8Button1, Joystick8Button2, Joystick8Button3, Joystick8Button4, Joystick8Button5, Joystick8Button6, Joystick8Button7, Joystick8Button8, Joystick8Button9, Joystick8Button10, Joystick8Button11, Joystick8Button12, Joystick8Button13, Joystick8Button14, Joystick8Button15, Joystick8Button16, Joystick8Button17, Joystick8Button18, Joystick8Button19, F16, F17, F18, F19, F20, F21, F22, F23, F24 +Toggle = Q + +[Plans] + +## Show all plans, even for pieces you don't know yet +# Setting type: Boolean +# Default value: false +Plan unknown pieces = false + +## Build radius of the plan totem +# Setting type: Single +# Default value: 30 +Plan totem build radius = 30 + +## Show particle effects when building pieces with the plan totem +# Setting type: Boolean +# Default value: true +Plan totem particle effects = true + +[Server Settings] + +## Allow usage of blueprint rune for clients connecting to the server. +## Admins are always allowed to use it. +# Setting type: Boolean +# Default value: true +Allow blueprint rune = true + +## Allow placement of blueprints without materials on this server. +## Admins are always allowed to use it. +# Setting type: Boolean +# Default value: false +Allow direct build = false + +## Allow usage of the terrain modification tools on this server. +## Admins are always allowed to use them. +# Setting type: Boolean +# Default value: false +Allow terrain tools = false + +## Allow sharing of blueprints on this server. +# Setting type: Boolean +# Default value: false +Allow serverside blueprints = false + +## Allow clients to use the Hotkey to access server blueprints. +## Admins are always allowed to use it. +# Setting type: Boolean +# Default value: true +Allow clients to use the GUI toggle key = true + +## Comma separated list of prefab names to exclude from the planned piece table on this server +## Admins are always allowed to build them. +# Setting type: String +# Default value: AltarPrefab,FloatingIslandMO +Excluded plan prefabs = AltarPrefab,FloatingIslandMO + +[Visual] + +## Apply plan shader to ghost placement (currently placing piece) +# Setting type: Boolean +# Default value: true +Transparent Ghost Placement = true + +## Color of unsupported plan pieces +# Setting type: Color +# Default value: FFFFFF1A +Unsupported color = FFFFFF1A + +## Color of supported plan pieces +# Setting type: Color +# Default value: FFFFFF80 +Supported color = FFFFFF80 + +## Additional transparency for finer control. +# Setting type: Single +# Default value: 0.3 +# Acceptable value range: From 0 to 1 +Transparency = 0.3 + +## Color of the glowing lines on the Plan totem +# Setting type: Color +# Default value: 00FFFFFF +Plan totem glow color = 00FFFFFF + diff --git a/config/xeio.MassFarming.cfg b/config/xeio.MassFarming.cfg new file mode 100644 index 0000000..ccf4c13 --- /dev/null +++ b/config/xeio.MassFarming.cfg @@ -0,0 +1,56 @@ +## Settings file was created by plugin MassFarming v1.14 +## Plugin GUID: xeio.MassFarming + +[Hotkeys] + +## Mass activation hotkey for multi-pickup/multi-plant. +# Setting type: KeyboardShortcut +# Default value: LeftShift +MassActionHotkey = LeftShift + +## Mass activation hotkey for multi-pickup/multi-plant for controller. +# Setting type: KeyboardShortcut +# Default value: JoystickButton4 +ControllerPickupHotkey = JoystickButton4 + +[Pickup] + +## Range of auto-pickup. +# Setting type: Single +# Default value: 5 +MassInteractRange = 5 + +[Plant] + +## Ignore stamina requirements when planting extra rows. +# Setting type: Boolean +# Default value: false +IgnoreStamina = false + +## Ignore durability when planting extra rows. +# Setting type: Boolean +# Default value: false +IgnoreDurability = false + +[PlantGrid] + +## Grid width of auto-plant. Recommend odd-number, default is '5' so (5x5). +# Setting type: Int32 +# Default value: 5 +PlantGridWidth = 5 + +## Grid length of auto-plant. Recommend odd-number, default is '5' so (5x5). +# Setting type: Int32 +# Default value: 5 +PlantGridLength = 5 + +## Planting grid anchor point (width). Default is 'enabled' so the grid will extend left and right from the crosshairs. Disable to set the anchor to the side of the grid. Disable both anchors to set to corner. +# Setting type: Boolean +# Default value: true +GridAnchorWidth = true + +## Planting grid anchor point (length). Default is 'enabled' so the grid will extend forward and backward from the crosshairs. Disable to set the anchor to the side of the grid. Disable both anchors to set to corner. +# Setting type: Boolean +# Default value: true +GridAnchorLength = true + diff --git a/core/0Harmony.dll b/core/0Harmony.dll new file mode 100644 index 0000000..99daef7 Binary files /dev/null and b/core/0Harmony.dll differ diff --git a/core/0Harmony.xml b/core/0Harmony.xml new file mode 100644 index 0000000..70ec413 --- /dev/null +++ b/core/0Harmony.xml @@ -0,0 +1,4288 @@ + + + + 0Harmony + + + + A factory to create delegate types + + + + Instance for the delegate type factory + + + Exists for API compatibility with Harmony + + + + + Creates a delegate type for a method + + Type of the return value + Types of the arguments + The new delegate type for the given type info + + + + Creates a delegate type for a method + + Type of the return value + Types of the arguments + Calling convention. If specified, adds to the delegate type + The new delegate type for the given type info + + + Creates a delegate type for a method + The method + The new delegate type + + + Creates a delegate type for a method + The method + Calling convention. If specified, adds to the delegate type. + The new delegate type + + + A getter delegate type + Type that getter gets field/property value from + Type of the value that getter gets + The instance get getter uses + An delegate + + + + A setter delegate type + Type that setter sets field/property value for + Type of the value that setter sets + The instance the setter uses + The value the setter uses + An delegate + + + + A constructor delegate type + Type that constructor creates + An delegate + + + + A helper class for fast access to getters and setters + + + Creates an instantiation delegate + Type that constructor creates + The new instantiation delegate + + + + Creates an getter delegate for a property + Type that getter reads property from + Type of the property that gets accessed + The property + The new getter delegate + + + + Creates an getter delegate for a field + Type that getter reads field from + Type of the field that gets accessed + The field + The new getter delegate + + + + Creates an getter delegate for a field (with a list of possible field names) + Type that getter reads field/property from + Type of the field/property that gets accessed + A list of possible field names + The new getter delegate + + + + Creates an setter delegate + Type that setter assigns property value to + Type of the property that gets assigned + The property + The new setter delegate + + + + Creates an setter delegate for a field + Type that setter assigns field value to + Type of the field that gets assigned + The field + The new getter delegate + + + + A delegate to invoke a method + The instance + The method parameters + The method result + + + A helper class to invoke method with delegates + + + Creates a fast invocation handler from a method + The method to invoke + Controls if boxed value object is accessed/updated directly + The + + + The directBoxValueAccess option controls how value types passed by reference (e.g. ref int, out my_struct) are handled in the arguments array + passed to the fast invocation handler. + Since the arguments array is an object array, any value types contained within it are actually references to a boxed value object. + Like any other object, there can be other references to such boxed value objects, other than the reference within the arguments array. + For example, + + var val = 5; + var box = (object)val; + var arr = new object[] { box }; + handler(arr); // for a method with parameter signature: ref/out/in int + + + + + If directBoxValueAccess is true, the boxed value object is accessed (and potentially updated) directly when the handler is called, + such that all references to the boxed object reflect the potentially updated value. + In the above example, if the method associated with the handler updates the passed (boxed) value to 10, both box and arr[0] + now reflect the value 10. Note that the original val is not updated, since boxing always copies the value into the new boxed value object. + + + If directBoxValueAccess is false (default), the boxed value object in the arguments array is replaced with a "reboxed" value object, + such that potential updates to the value are reflected only in the arguments array. + In the above example, if the method associated with the handler updates the passed (boxed) value to 10, only arr[0] now reflects the value 10. + + + + + Patch function helpers + + + Sorts patch methods by their priority rules + The original method + Patches to sort + Use debug mode + The sorted patch methods + + + + Sorts patch methods by their priority rules + The original method + Patches to sort + Use debug mode + The sorted patch methods + + + + Creates new replacement method with the latest patches and detours the original method + The original method + Information describing the patches + The newly created replacement method + + + + + High-level IL code manipulator for MonoMod that allows to manipulate a method as a stream of CodeInstructions. + + + + + Initialize IL transpiler + + Body of the method to transpile + Whether to always log everything for this instance + + + + Adds a transpiler method that edits the IL of the given method + + Transpiler method + Currently not implemented + + + + Processes and writes IL to the provided method body. + Note that this cleans the existing method body (removes insturctions and exception handlers). + + Method body to write to. + Original method that transpiler can optionally call into + + One of IL opcodes contains a CallSide (e.g. calli), which is currently not + fully supported. + + One of IL opcodes with an operand contains a null operand. + + + + Normalizes instructions into a consistent format for passing to transpilers. + Converts short branches to long, ensures that certain fields are properly initialized. + + Enumerable of instructions + Enumerable of normalized instructions + + + + Basic safe DLL emitter for dynamically generated s. + + Based on https://github.com/MonoMod/MonoMod.Common/blob/master/Utils/DMDGenerators/DMDCecilGenerator.cs + + + + Helper wrapper around ILProcessor to allow emitting code at certain positions + + + + + Write method body to a ILDasm -like representation + + Method body to write + String representation of the method body (locals and instruction) + Unexpected exception block type + + + + Patching methods potentially messes up the stack. + Especially calls to GetExecutingAssembly won't turn in correct methods + + + + Creates a patch sorter + Array of patches that will be sorted + Use debugging + + + Sorts internal PatchSortingWrapper collection and caches the results. + After first run the result is provided from the cache. + The original method + The sorted patch methods + + + Sorts internal PatchSortingWrapper collection and caches the results. + After first run the result is provided from the cache. + The original method + The sorted patch methods as instance + + + Checks if the sorter was created with the same patch list and as a result can be reused to + get the sorted order of the patches. + List of patches to check against + true if equal + + + Removes one unresolved dependency from the least important patch. + + + Outputs all unblocked patches from the waiting list to results list + + + Adds patch to both results list and handled patches set + Patch to add + + + Wrapper used over the Patch object to allow faster dependency access and + dependency removal in case of cyclic dependencies + + + Create patch wrapper object used for sorting + Patch to wrap + + + Determines how patches sort + The other patch + integer to define sort order (-1, 0, 1) + + + Determines whether patches are equal + The other patch + true if equal + + + Hash function + A hash code + + + Bidirectionally registers Patches as after dependencies + List of dependencies to register + + + Bidirectionally registers Patches as before dependencies + List of dependencies to register + + + Bidirectionally removes Patch from after dependencies + Patch to remove + + + Bidirectionally removes Patch from before dependencies + Patch to remove + + + Specifies the type of method + + + + This is a normal method + + + This is a getter + + + This is a setter + + + This is a constructor + + + This is a static constructor + + + This is an enumerator (, or UniTask coroutine) + This path will target the method that contains the actual enumerator code + + + Specifies the type of argument + + + + This is a normal argument + + + This is a reference argument (ref) + + + This is an out argument (out) + + + This is a pointer argument (&) + + + Specifies the type of patch + + + + Any patch + + + A prefix patch + + + A postfix patch + + + A transpiler + + + A finalizer + + + A reverse patch + + + A MonoMod + + + Specifies the type of reverse patch + + + + Use the unmodified original method (directly from IL) + + + Use the original as it is right now including previous patches but excluding future ones + + + Specifies the type of method call dispatching mechanics + + + + Call the method using dynamic dispatching if method is virtual (including overriden) + + + This is the built-in form of late binding (a.k.a. dynamic binding) and is the default dispatching mechanic in C#. + This directly corresponds with the instruction. + + + For virtual (including overriden) methods, the instance type's most-derived/overriden implementation of the method is called. + For non-virtual (including static) methods, same behavior as : the exact specified method implementation is called. + + + Note: This is not a fully dynamic dispatch, since non-virtual (including static) methods are still called non-virtually. + A fully dynamic dispatch in C# involves using + the dynamic type + (actually a fully dynamic binding, since even the name and overload resolution happens at runtime), which does not support. + + + + + Call the method using static dispatching, regardless of whether method is virtual (including overriden) or non-virtual (including static) + + + a.k.a. non-virtual dispatching, early binding, or static binding. + This directly corresponds with the instruction. + + + For both virtual (including overriden) and non-virtual (including static) methods, the exact specified method implementation is called, without virtual/override mechanics. + + + + + The base class for all Harmony annotations (not meant to be used directly) + + + + The common information for all attributes + + + Annotation to define targets of your Harmony patch methods + + + + An empty annotation can be used together with TargetMethod(s) + + + + An annotation that specifies a class to patch + The declaring class/type + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The argument types of the method or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + Assembly-qualified name of the declaring class/type + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + Assembly-qualified name of the declaring class/type + The name of the method, property or constructor to patch + The + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + An array of argument types to target overloads + An array of + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The + An array of argument types to target overloads + An array of + + + + An annotation that specifies a method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + An array of argument types to target overloads + An array of + + + + Annotation to define the original method for delegate injection + + + + An annotation that specifies a class to patch + The declaring class/type + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The argument types of the method or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The + An array of argument types to target overloads + Array of + + + + An annotation that specifies a method, property or constructor to patch + The declaring class/type + The name of the method, property or constructor to patch + The + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + An array of argument types to target overloads + An array of + + + + An annotation that specifies a method, property or constructor to patch + The name of the method, property or constructor to patch + The + + + + An annotation that specifies call dispatching mechanics for the delegate + The + + + + An annotation that specifies a method, property or constructor to patch + The + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + The + An array of argument types to target overloads + An array of + + + + An annotation that specifies a method, property or constructor to patch + An array of argument types to target overloads + + + + An annotation that specifies a method, property or constructor to patch + An array of argument types to target overloads + An array of + + + + Annotation to define your standin methods for reverse patching + + + + An annotation that specifies the type of reverse patching + The of the reverse patch + + + + A Harmony annotation to define that all methods in a class are to be patched + + + + A Harmony annotation used to change order in which Harmony patches are applied + + + + A Harmony annotation to define patch priority + The priority + + + + A Harmony annotation to define that a patch comes before another patch + + + + A Harmony annotation to define that a patch comes before another patch + The array of harmony IDs of the other patches + + + + A Harmony annotation to define that a patch comes after another patch + + + A Harmony annotation to define that a patch comes after another patch + The array of harmony IDs of the other patches + + + + A Harmony annotation to output a debug log for a patch + + + A Harmony annotation to debug a patch (output uses to log to your Desktop) + + + + A Harmony annotation to emit IL of the patch to a DLL + + + + A Harmony annotation to emit IL of the patch to the current working directory + + + + A Harmony annotation to emit IL of the patch to the given path + Directory to which emit the patch + + + + A Harmony attribute to automatically wrap the patch into try/catch. Exceptions are logged to Harmony log and eaten. + + + + If specified on a prefix, postfix or a finalizer, the method will be automatically wrapped into try/catch. + + + + Specifies the Prepare function in a patch class + + + + Specifies the Cleanup function in a patch class + + + + Specifies the TargetMethod function in a patch class + + + + Specifies the TargetMethods function in a patch class + + + + Specifies the Prefix function in a patch class + + + + Specifies the Postfix function in a patch class + + + + Specifies the Transpiler function in a patch class + + + + Specifies the ILManipulator function in a patch class> + + + + Specifies the Finalizer function in a patch class + + + + A Harmony annotation to declare injected arguments + + + + The name of the original argument + + + + The index of the original argument + + + + The new name of the original argument + + + + An annotation to declare injected arguments by name + + + + An annotation to declare injected arguments by index + Zero-based index + + + + An annotation to declare injected arguments by renaming them + Name of the original argument + New name + + + + An annotation to declare injected arguments by index and renaming them + Zero-based index + New name + + + + An abstract wrapper around OpCode and their operands. Used by transpilers + + + + The opcode + + + + The operand + + + + All labels defined on this instruction + + + + All exception block boundaries defined on this instruction + + + + Creates a new CodeInstruction with a given opcode and optional operand + The opcode + The operand + + + + Create a full copy (including labels and exception blocks) of a CodeInstruction + The to copy + + + + Clones a CodeInstruction and resets its labels and exception blocks + A lightweight copy of this code instruction + + + + Clones a CodeInstruction, resets labels and exception blocks and sets its opcode + The opcode + A copy of this CodeInstruction with a new opcode + + + + Clones a CodeInstruction, resets labels and exception blocks and sets its operand + The operand + A copy of this CodeInstruction with a new operand + + + + Creates a CodeInstruction calling a method (CALL) + The class/type where the method is declared + The name of the method (case sensitive) + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A code instruction that calls the method matching the arguments + + + + Creates a CodeInstruction calling a method (CALL) + The target method in the form TypeFullName:MethodName, where the type name matches a form recognized by Type.GetType like Some.Namespace.Type. + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A code instruction that calls the method matching the arguments + + + + Creates a CodeInstruction calling a method (CALL) + The lambda expression using the method + + + + + Creates a CodeInstruction calling a method (CALL) + The lambda expression using the method + + + + + Creates a CodeInstruction calling a method (CALL) + The lambda expression using the method + + + + + Creates a CodeInstruction calling a method (CALL) + The lambda expression using the method + + + + + Returns an instruction to call the specified closure + The delegate type to emit + The closure that defines the method to call + A that calls the closure as a method + + + + Creates a CodeInstruction loading a field (LD[S]FLD[A]) + The class/type where the field is defined + The name of the field (case sensitive) + Use address of field + + + + Creates a CodeInstruction storing to a field (ST[S]FLD) + The class/type where the field is defined + The name of the field (case sensitive) + + + + Returns a string representation of the code instruction + A string representation of the code instruction + + + + Exception block types + + + + The beginning of an exception block + + + + The beginning of a catch block + + + + The beginning of an except filter block + + + + The beginning of a fault block + + + + The beginning of a finally block + + + + The end of an exception block + + + + An exception block + + + + Block type + + + + Catch type + + + + Creates an exception block + The + The catch type + + + + + An exception thrown when a patch argument in a Harmony patch is invalid. + + + + + Original method to be patched. + + + + + Patch that was attempted to be applied. + + + + + + + + Constructs a new exception instance. + + Message of the exception. + Original method to be patched. + Patch that was attempted to be applied. + + + + An exception thrown when a reflection member is not found. + + + + + + + The Harmony instance is the main entry to Harmony. After creating one with an unique identifier, it is used to patch and query the current application domain + + + + Set to true before instantiating Harmony to debug Harmony or use an environment variable to set HARMONY_DEBUG to '1' like this: cmd /C "set HARMONY_DEBUG=1 && game.exe" + This is for full debugging. To debug only specific patches, use the attribute + + + + Creates a new Harmony instance + A unique identifier (you choose your own) + A Harmony instance + + + + The unique identifier + + + + Searches the current assembly for Harmony annotations and uses them to create patches + This method can fail to use the correct assembly when being inlined. It calls StackTrace.GetFrame(1) which can point to the wrong method/assembly. If you are unsure or run into problems, use PatchAll(Assembly.GetExecutingAssembly()) instead. + + + + Creates a empty patch processor for an original method + The original method/constructor + A new instance + + + + Creates a patch class processor from an annotated class + The class/type + A new instance + + + + Creates a patch class processor from an annotated class + The class/type + If true, the type doesn't need to have any attributes present for processing + A new instance + + + + Creates a reverse patcher for one of your stub methods + The original method/constructor + The stand-in stub method as + A new instance + + + + Searches an assembly for Harmony annotations and uses them to create patches + The assembly + + + + Searches the given type for Harmony annotation and uses them to create patches + The type to search + + + + Creates patches by manually specifying the methods + The original method/constructor + An optional prefix method wrapped in a object + An optional postfix method wrapped in a object + An optional transpiler method wrapped in a object + An optional finalizer method wrapped in a object + An optional ilmanipulator method wrapped in a + The replacement method that was created to patch the original method + + + + Creates patches by manually specifying the methods + The original method/constructor + An optional prefix method wrapped in a object + An optional postfix method wrapped in a object + An optional transpiler method wrapped in a object + An optional finalizer method wrapped in a object + The replacement method that was created to patch the original method + + + + Patches a foreign method onto a stub method of yours and optionally applies transpilers during the process + The original method/constructor you want to duplicate + Your stub method as that will become the original. Needs to have the correct signature (either original or whatever your transpilers generates) + An optional transpiler as method that will be applied during the process + An optional ilmanipulator as method that will be applied during the process + The replacement method that was created to patch the stub method + + + + Patches a foreign method onto a stub method of yours and optionally applies transpilers during the process + The original method/constructor you want to duplicate + Your stub method as that will become the original. Needs to have the correct signature (either original or whatever your transpilers generates) + An optional transpiler as method that will be applied during the process + The replacement method that was created to patch the stub method + + + + Unpatches all methods that were patched by the specified . Unpatching is done by repatching methods without patches of this instance. + The Harmony ID to restrict unpatching to a specific Harmony instance. + Gets thrown when a null or empty HarmonyID gets passed in. + + + + Unpatches all methods that were patched by this Harmony instance's ID. Unpatching is done by repatching methods without patches of this instance. + + + + Globally unpatches ALL methods by patching them with zero patches. Complete unpatching is not supported. + + + + Unpatches methods by patching them with zero patches. Fully unpatching is not supported. Be careful, unpatching is global + The Harmony ID to restrict unpatching to a specific Harmony instance. Whether this parameter is actually optional is determined by the global flag + When is set to true, the execution of this method will be skipped when no is specified. + + + + Unpatches a method by patching it with zero patches. Fully unpatching is not supported. Be careful, unpatching is global + The original method/constructor + The + The optional Harmony ID to restrict unpatching to a specific Harmony instance + + + + Unpatches a method by patching it with zero patches. Fully unpatching is not supported. Be careful, unpatching is global + The original method/constructor + The patch method as method to remove + + + + Test for patches from a specific Harmony ID + The Harmony ID + True if patches for this ID exist + + + + Gets patch information for a given original method + The original method/constructor + The patch information as + + + + Gets the methods this instance has patched + An enumeration of original methods/constructors + + + + Gets all patched original methods in the appdomain + An enumeration of patched original methods/constructors + + + + Gets the original method from a given replacement method + A replacement method, for example from a stacktrace + The original method/constructor or null if not found + + + + Tries to get the method from a stackframe including dynamic replacement methods + The + For normal frames, frame.GetMethod() is returned. For frames containing patched methods, the replacement method is returned or null if no method can be found + + + + Gets Harmony version for all active Harmony instances + [out] The current Harmony version + A dictionary containing assembly versions keyed by Harmony IDs + + + + Creates a new Harmony instance and applies all patches specified in the type + The type to scan for patches. + The ID for the Harmony instance to create, which will be used. + + + + Applies all patches specified in the assembly + The assembly to scan. + The ID for the Harmony instance to create, which will be used. + + + + Under Mono, HarmonyException wraps IL compile errors with detailed information about the failure + + + + Default serialization constructor (not implemented) + The info + The context + + + + Get a list of IL instructions in pairs of offset+code + A list of key/value pairs which represent an offset and the code at that offset + + + + Get a list of IL instructions without offsets + A list of + + + + Get the error offset of the errornous IL instruction + The offset + + + + Get the index of the errornous IL instruction + The index into the list of instructions or -1 if not found + + + + Class that holds all Global Harmony settings + + + + Set to true to disallow executing the legacy instance method without specifying a harmonyId. + If set to true and the legacy instance method is called without passing a harmonyId, then execution of said method will be skipped. + + + A wrapper around a method to use it as a patch (for example a Prefix) + + + + The original method + + + + Class/type declaring this patch + + + + Patch method name + + + + Optional patch + + + + Array of argument types of the patch method + + + + of the patch + + + + Install this patch before patches with these Harmony IDs + + + + Install this patch after patches with these Harmony IDs + + + + Reverse patch type, see + + + + Create debug output for this patch + + + + If not null, the IL of the patch is output to this path + + + + Whether to use (true) or (false) mechanics + for -attributed delegate + + + + Whether to wrap the patch itself into a try/catch. + + + + Default constructor + + + + Creates a patch from a given method + The original method + + + + Creates a patch from a given method + The original method + The patch + A list of harmony IDs that should come after this patch + A list of harmony IDs that should come before this patch + Set to true to generate debug output + + + + Creates a patch from a given method + The patch class/type + The patch method name + The optional argument types of the patch method (for overloaded methods) + + + + Gets the names of all internal patch info fields + A list of field names + + + + Merges annotations + The list of to merge + The merged + + + + Returns a string that represents the annotation + A string representation + + + + Annotation extensions + + + + Copies annotation information + The source + The destination + + + + Clones an annotation + The to clone + A copied + + + + Merges annotations + The master + The detail + A new, merged + + + + Gets all annotations on a class/type + The class/type + A list of all + + + + Gets merged annotations on a class/type + The class/type + The merged + + + + Gets all annotations on a method + The method/constructor + A list of + + + + Gets merged annotations on a method + The method/constructor + The merged + + + + + A mutable representation of an inline signature, similar to Mono.Cecil's CallSite. + Used by the calli instruction, can be used by transpilers + + + + + See + + + + See + + + + See + + + + The list of all parameter types or function pointer signatures received by the call site + + + + The return type or function pointer signature returned by the call site + + + + Returns a string representation of the inline signature + A string representation of the inline signature + + + + + A mutable representation of a parameter type with an attached type modifier, + similar to Mono.Cecil's OptionalModifierType / RequiredModifierType and C#'s modopt / modreq + + + + + Whether this is a modopt (optional modifier type) or a modreq (required modifier type) + + + + The modifier type attached to the parameter type + + + + The modified parameter type + + + + Returns a string representation of the modifier type + A string representation of the modifier type + + + + Patch serialization + + + + Control the binding of a serialized object to a type + Specifies the assembly name of the serialized object + Specifies the type name of the serialized object + The type of the object the formatter creates a new instance of + + + + Serializes a patch info + The + The serialized data + + + + Deserialize a patch info + The serialized data + A + + + + Compare function to sort patch priorities + The patch + Zero-based index + The priority + A standard sort integer (-1, 0, 1) + + + + Serializable patch information + + + + Prefixes as an array of + + + + Postfixes as an array of + + + + Transpilers as an array of + + + + Finalizers as an array of + + + + ILManipulators as an array of + + + + Returns if any of the patches wants debugging turned on + + + + Returns a list of paths that the IL should be dumped to + + + + Adds prefixes + An owner (Harmony ID) + The patch methods + + + + Adds a prefix + + + Removes prefixes + The owner of the prefixes, or * for all + + + + Adds postfixes + An owner (Harmony ID) + The patch methods + + + + Adds a postfix + + + Removes postfixes + The owner of the postfixes, or * for all + + + + Adds transpilers + An owner (Harmony ID) + The patch methods + + + + Adds a transpiler + + + Removes transpilers + The owner of the transpilers, or * for all + + + + Adds finalizers + An owner (Harmony ID) + The patch methods + + + + Adds a finalizer + + + Removes finalizers + The owner of the finalizers, or * for all + + + + Adds ilmanipulators + An owner (Harmony ID) + The patch methods + + + + Removes ilmanipulators + The owner of the ilmanipulators, or * for all + + + + Removes a patch using its method + The method of the patch to remove + + + + Gets a concatenated list of patches + The Harmony instance ID adding the new patches + The patches to add + The current patches + + + + Gets a list of patches with any from the given owner removed + The owner of the methods, or * for all + The current patches + + + + A serializable patch + + + + Zero-based index + + + + The owner (Harmony ID) + + + + The priority, see + + + + Keep this patch before the patches indicated in the list of Harmony IDs + + + + Keep this patch after the patches indicated in the list of Harmony IDs + + + + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + If not null, IL DLL is output to this directory + + + + Whether to wrap the patch into a general try/catch that logs the error + + + + The method of the static patch method + + + + Creates a patch + The method of the patch + Zero-based index + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for patches that should run after this patch + A list of Harmony IDs for patches that should run before this patch + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + + + + Creates a patch + The method of the patch + Zero-based index + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for patches that should run after this patch + A list of Harmony IDs for patches that should run before this patch + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + Whether to wrap the patch into a general try/catch that logs the error + + + + Creates a patch + The method of the patch + Zero-based index + An owner (Harmony ID) + The priority, see + A list of Harmony IDs for patches that should run after this patch + A list of Harmony IDs for patches that should run before this patch + A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future + Whether to wrap the patch into a general try/catch that logs the error + If not null, the patch IL DLL is saved to this directory + + + + Creates a patch + The method of the patch + Zero-based index + An owner (Harmony ID) + + + Get the patch method or a DynamicMethod if original patch method is a patch factory + The original method/constructor + The method of the patch + + + + Determines whether patches are equal + The other patch + true if equal + + + + Determines how patches sort + The other patch + integer to define sort order (-1, 0, 1) + + + + Hash function + A hash code + + + + A PatchClassProcessor used to turn on a class/type into patches + + + + Creates a patch class processor by pointing out a class. Similar to PatchAll() but without searching through all classes. + The Harmony instance + The class to process (need to have at least a [HarmonyPatch] attribute if allowUnannotatedType is set to false) + + + + Creates a patch class processor by pointing out a class. Similar to PatchAll() but without searching through all classes. + The Harmony instance + The class to process (need to have at least a [HarmonyPatch] attribute if allowUnannotatedType is set to false) + If true, the type doesn't need to have any attributes present for processing + + + + Applies the patches + A list of all created replacement methods or null if patch class is not annotated + + + + A group of patches + + + + A collection of prefix + + + + A collection of postfix + + + + A collection of transpiler + + + + A collection of finalizer + + + + A collection of ILManipulator + + + + Gets all owners (Harmony IDs) or all known patches + The patch owners + + + + Creates a group of patches + An array of prefixes as + An array of postfixes as + An array of transpileres as + An array of finalizeres as + An array of ilmanipulators as + + + + Creates a group of patches + An array of prefixes as + An array of postfixes as + An array of transpileres as + An array of finalizeres as + + + + + IL manipulator to create Harmony-style patches. + + + + + Initializes a new instance of the class. + + Patches to apply to the body. + + + + Manipulates a by applying Harmony patches to it. + + + Reference to the method that should be considered as original. Used to reference parameter and + return types. + + Collection of Harmony patches to apply. + Method body to manipulate as instance. Should contain instructions to patch. + + In most cases you will want to use to create or obtain global + patch info for the method that contains aggregated info of all Harmony instances. + + + + + Manipulates IL into a replacement method with Harmony patches applied to it. + + Original method that contains and other metadata. + IL to rewrite. + + + + Convert the IL code into a Harmony patch. + + IL body of the method to rewrite into a Harmony patch. + Original method to use for context. + + + + Method patcher for normal managed methods that have IL body attached to them. + Uses in order to apply hooks in a way compatible with MonoMod's own + hooking system. + + + + + + + + + + + + + + + + + + A handler for that checks if a method is a normal Managed method. + + Not used + Patch resolver arguments + + + + + A general method patcher for implementing custom Harmony patcher backends. + + + + + + Constructs a method patcher + + Original method to patch + + + + + Original method to patch. + + + + + + Prepares method body for the unpatched that simply calls + function. + + + A that contains a call to + the original method to pass to the IL manipulator. + If null, Harmony patches must be manually applied to the original via . + + + + + + Detours to the provided replacement function. If called multiple times, + is re-detoured to the new method. + + + Result of + if returned non-null. + Otherwise, this will be null, in which case you must manually generate Harmony-patched method + with . + + of the hook, if it's different from `replacement`. + + + + + Creates a copy of the original method. If not possible, creates a method that calls into the original method. + + Copy of the original method that is transpileable. If not possible, returns null. + + This method creates a pure copy of the original method that is usable with transpilers. Currently, this + method is used to generate reverse patchers. + If a purse IL copy is not possible, a best approximation should be generated + (e.g. a wrapper that calls original method). + If no best approximation is possible, this method should return null, in which case generating reverse + patchers for the method will fail. + + + + + + A method patcher that uses to patch internal calls, + methods marked with and any other managed method that CLR managed-to-native + trampolines for and which has no IL body defined. + + + + + Constructs a new instance of method patcher. + + + + + + + + + + + + + + + A handler for that checks if a method doesn't have a body + (e.g. it's icall or marked with ) and thus can be patched with + . + + Not used + Patch resolver arguments + + + + + A global manager for handling Harmony patch state. Contains information about all patched methods and all + actual instances that handle patching implementation. + + + + + + Method patcher resolve event. + + + When a method is to be patched, this resolver event is called once on the method to determine which + backend to use in order to patch the method. + To make Harmony use the specified backend, set to an + instance of the method patcher backend to use. + + + + + + Creates or gets an existing instance of that handles patching the method. + + Method to patch. + Instance of that handles patching the method. + No suitable patcher found for the method. + + + + + Gets patch info for the given target method. + + Method to get patch info for. + Current patch info of the method. + + + + + Gets or creates patch info for the given method. + + Method to get info from. + An existing or new patch info for the method containing information about the applied patches. + + + + + Gets all methods that have been patched. + + List of methods that have been patched. + + + + + Removes all method resolvers. Use with care, this removes the default ones too! + + + + + Patcher resolve event arguments. + + + + + + Original method that is to be patched. + + + + + + Method patcher to use to patch . + Set this value to specify which one to use. + + + + + A PatchProcessor handles patches on a method/constructor + + + + Creates an empty patch processor + The Harmony instance + The original method/constructor + + + + Adds a prefix + The prefix as a + A for chaining calls + + + + Adds a prefix + The prefix method + A for chaining calls + + + + Adds a postfix + The postfix as a + A for chaining calls + + + + Adds a postfix + The postfix method + A for chaining calls + + + + Adds a transpiler + The transpiler as a + A for chaining calls + + + + Adds a transpiler + The transpiler method + A for chaining calls + + + + Adds a finalizer + The finalizer as a + A for chaining calls + + + + Adds a finalizer + The finalizer method + A for chaining calls + + + + Adds an ilmanipulator + The ilmanipulator as a + A for chaining calls + + + + Adds an ilmanipulator + The ilmanipulator method + A for chaining calls + + + + Gets all patched original methods in the appdomain + An enumeration of patched method/constructor + + + + Applies all registered patches + The generated replacement method + + + + Unpatches patches of a given type and/or Harmony ID + The patch type + Harmony ID or * for any + A for chaining calls + + + + Unpatches a specific patch + The method of the patch + A for chaining calls + + + + Gets patch information on an original + The original method/constructor + The patch information as + + + + Sort patch methods by their priority rules + The original method + Patches to sort + The sorted patch methods + + + + Gets Harmony version for all active Harmony instances + [out] The current Harmony version + A dictionary containing assembly version keyed by Harmony ID + + + + Creates a new empty generator to use when reading method bodies + A new + + + + Creates a new generator matching the method/constructor to use when reading method bodies + The original method/constructor to copy method information from + A new + + + + Returns the methods unmodified list of code instructions + The original method/constructor + Optionally an existing generator that will be used to create all local variables and labels contained in the result (if not specified, an internal generator is used) + A list containing all the original + + + + Returns the methods unmodified list of code instructions + The original method/constructor + A new generator that now contains all local variables and labels contained in the result + A list containing all the original + + + + Returns the methods current list of code instructions after all existing transpilers have been applied + The original method/constructor + Apply only the first count of transpilers + Optionally an existing generator that will be used to create all local variables and labels contained in the result (if not specified, an internal generator is used) + A list of + + + + Returns the methods current list of code instructions after all existing transpilers have been applied + The original method/constructor + A new generator that now contains all local variables and labels contained in the result + Apply only the first count of transpilers + A list of + + + + A low level way to read the body of a method. Used for quick searching in methods + The original method + All instructions as opcode/operand pairs + + + + A low level way to read the body of a method. Used for quick searching in methods + The original method + An existing generator that will be used to create all local variables and labels contained in the result + All instructions as opcode/operand pairs + + + + A patch priority + + + + Patch last + + + + Patch with very low priority + + + + Patch with low priority + + + + Patch with lower than normal priority + + + + Patch with normal priority + + + + Patch with higher than normal priority + + + + Patch with high priority + + + + Patch with very high priority + + + + Patch first + + + + A reverse patcher + + + + Creates a reverse patcher + The Harmony instance + The original method/constructor + Your stand-in stub method as + + + + Applies the patch + The type of patch, see + The generated replacement method + + + + A collection of commonly used transpilers + + + + Returns an instruction to call the specified delegate + The delegate type to emit + The delegate to emit + The instruction to call the specified action + + + + A transpiler that replaces all occurrences of a given method with another one using the same signature + The enumeration of to act on + Method or constructor to search for + Method or constructor to replace with + Modified enumeration of + + + + A transpiler that alters instructions that match a predicate by calling an action + The enumeration of to act on + A predicate selecting the instructions to change + An action to apply to matching instructions + Modified enumeration of + + + + A transpiler that logs a text at the beginning of the method + The instructions to act on + The log text + Modified enumeration of + + + + A transpiler that replaces the entire body of the method with another one + The replacement method. It's up to the caller of this transpiler to make sure that the signatures match. + of the patch. This is passed via transpiler. + A collection of that contains instructions of replacement method. + The replacement method is not a managed method that contains any IL. + This transpiler has a side effect of clearing up all previous locals and previous transpilers. + Use to run this transpiler as early as possible. + + + A helper class for reflection related functions + + + + Shortcut for to simplify the use of reflections and make it work for any access level + + + + Shortcut for to simplify the use of reflections and make it work for any access level but only within the current type + + + + Enumerates all assemblies in the current app domain, excluding visual studio assemblies + An enumeration of + + + Gets a type by name. Prefers a full name with namespace but falls back to the first type matching the name otherwise + The name + A type or null if not found + + + + Gets all successfully loaded types from a given assembly + The assembly + An array of types + + This calls and returns , while catching any thrown . + If such an exception is thrown, returns the successfully loaded types (, + filtered for non-null values). + + + + + Enumerates all successfully loaded types in the current app domain, excluding visual studio assemblies + An enumeration of all in all assemblies, excluding visual studio assemblies + + + Applies a function going up the type hierarchy and stops at the first non-null result + Result type of func() + The class/type to start with + The evaluation function returning T + The first non-null result, or null if no match + + The type hierarchy of a class or value type (including struct) does NOT include implemented interfaces, + and the type hierarchy of an interface is only itself (regardless of whether that interface implements other interfaces). + The top-most type in the type hierarchy of all non-interface types (including value types) is . + + + + + Applies a function going into inner types and stops at the first non-null result + Generic type parameter + The class/type to start with + The evaluation function returning T + The first non-null result, or null if no match + + + + Gets the reflection information for a directly declared field + The class/type where the field is defined + The name of the field + A field or null when type/name is null or when the field cannot be found + + + + Gets the reflection information for a field by searching the type and all its super types + The class/type where the field is defined + The name of the field (case sensitive) + A field or null when type/name is null or when the field cannot be found + + + + Gets the reflection information for a field + The class/type where the field is declared + The zero-based index of the field inside the class definition + A field or null when type is null or when the field cannot be found + + + + Gets the reflection information for a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A property or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the getter method of a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the setter method of a directly declared property + The class/type where the property is declared + The name of the property (case sensitive) + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for a property by searching the type and all its super types + The class/type + The name + A property or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the getter method of a property by searching the type and all its super types + The class/type + The name + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for the setter method of a property by searching the type and all its super types + The class/type + The name + A method or null when type/name is null or when the property cannot be found + + + + Gets the reflection information for a directly declared method + The class/type where the method is declared + The name of the method (case sensitive) + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the reflection information for a method by searching the type and all its super types + The class/type where the method is declared + The name of the method (case sensitive) + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets the reflection information for a method by searching the type and all its super types + The target method in the form TypeFullName:MethodName, where the type name matches a form recognized by Type.GetType like Some.Namespace.Type. + Optional parameters to target a specific overload of the method + Optional list of types that define the generic version of the method + A method or null when type/name is null or when the method cannot be found + + + + Gets method of an enumerator method. + Enumerator method from which to get its + of the enumerator or null if no valid enumerator is detected + + + Gets the names of all method that are declared in a type + The declaring class/type + A list of method names + + + + Gets the names of all method that are declared in the type of the instance + An instance of the type to search in + A list of method names + + + + Gets the names of all fields that are declared in a type + The declaring class/type + A list of field names + + + + Gets the names of all fields that are declared in the type of the instance + An instance of the type to search in + A list of field names + + + + Gets the names of all properties that are declared in a type + The declaring class/type + A list of property names + + + + Gets the names of all properties that are declared in the type of the instance + An instance of the type to search in + A list of property names + + + + Gets the type of any class member of + A member + The class/type of this member + + + + Test if a class member is actually an concrete implementation + A member + True if the member is a declared + + + + Gets the real implementation of a class member + A member + The member itself if its declared. Otherwise the member that is actually implemented in some base type + + + + Gets the reflection information for a directly declared constructor + The class/type where the constructor is declared + Optional parameters to target a specific overload of the constructor + Optional parameters to only consider static constructors + A constructor info or null when type is null or when the constructor cannot be found + + + + Gets the reflection information for a constructor by searching the type and all its super types + The class/type where the constructor is declared + Optional parameters to target a specific overload of the method + Optional parameters to only consider static constructors + A constructor info or null when type is null or when the method cannot be found + + + + Gets reflection information for all declared constructors + The class/type where the constructors are declared + Optional parameters to only consider static constructors + A list of constructor infos + + + + Gets reflection information for all declared methods + The class/type where the methods are declared + A list of methods + + + + Gets reflection information for all declared properties + The class/type where the properties are declared + A list of properties + + + + Gets reflection information for all declared fields + The class/type where the fields are declared + A list of fields + + + + Gets the return type of a method or constructor + The method/constructor + The return type + + + + Given a type, returns the first inner type matching a recursive search by name + The class/type to start searching at + The name of the inner type (case sensitive) + The inner type or null if type/name is null or if a type with that name cannot be found + + + + Given a type, returns the first inner type matching a recursive search with a predicate + The class/type to start searching at + The predicate to search with + The inner type or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first method matching a predicate + The class/type to start searching at + The predicate to search with + The method or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first constructor matching a predicate + The class/type to start searching at + The predicate to search with + The constructor info or null if type/predicate is null or if a type with that name cannot be found + + + + Given a type, returns the first property matching a predicate + The class/type to start searching at + The predicate to search with + The property or null if type/predicate is null or if a type with that name cannot be found + + + + Returns an array containing the type of each object in the given array + An array of objects + An array of types or an empty array if parameters is null (if an object is null, the type for it will be object) + + + + Creates an array of input parameters for a given method and a given set of potential inputs + The method/constructor you are planing to call + The possible input parameters in any order + An object array matching the method signature + + + + A readable/assignable reference delegate to an instance field of a class or static field (NOT an instance field of a struct) + + An arbitrary type if the field is static; otherwise the class that defines the field, or a parent class (including ), + implemented interface, or derived class of this type + + + The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), + a type that is assignable from that type; or if the field's type is an enum type, + either that type or the underlying integral type of that enum type + + The runtime instance to access the field (ignored and can be omitted for static fields) + A readable/assignable reference to the field + Null instance passed to a non-static field ref delegate + + Instance of invalid type passed to a non-static field ref delegate + (this can happen if is a parent class or interface of the field's declaring type) + + + + This delegate cannot be used for instance fields of structs, since a struct instance passed to the delegate would be passed by + value and thus would be a copy that only exists within the delegate's invocation. This is fine for a readonly reference, + but makes assignment futile. Use instead. + + + Note that is not required to be the field's declaring type. It can be a parent class (including ), + implemented interface, or a derived class of the field's declaring type ("instanceOfT is FieldDeclaringType" must be possible). + Specifically, must be assignable from OR to the field's declaring type. + Technically, this allows Nullable, although Nullable is only relevant for structs, and since only static fields of structs + are allowed for this delegate, and the instance passed to such a delegate is ignored, this hardly matters. + + + Similarly, is not required to be the field's field type, unless that type is a non-enum value type. + It can be a parent class (including object) or implemented interface of the field's field type. It cannot be a derived class. + This variance is not allowed for value types, since that would require boxing/unboxing, which is not allowed for ref values. + Special case for enum types: can also be the underlying integral type of the enum type. + Specifically, for reference types, must be assignable from + the field's field type; for non-enum value types, must be exactly the field's field type; for enum types, + must be either the field's field type or the underyling integral type of that field type. + + + This delegate supports static fields, even those defined in structs, for legacy reasons. + For such static fields, is effectively ignored. + Consider using (and StaticFieldRefAccess methods that return it) instead for static fields. + + + + + + Creates a field reference delegate for an instance field of a class + The class that defines the instance field, or derived class of this type + + The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), + a type that is assignable from that type; or if the field's type is an enum type, + either that type or the underlying integral type of that enum type + + The name of the field + A readable/assignable delegate + + + For backwards compatibility, there is no class constraint on . + Instead, the non-value-type check is done at runtime within the method. + + + + + + Creates an instance field reference for a specific instance of a class + The class that defines the instance field, or derived class of this type + + The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), + a type that is assignable from that type; or if the field's type is an enum type, + either that type or the underlying integral type of that enum type + + The instance + The name of the field + A readable/assignable reference to the field + + + This method is meant for one-off access to a field's value for a single instance. + If you need to access a field's value for potentially multiple instances, use instead. + FieldRefAccess<T, F>(instance, fieldName) is functionally equivalent to FieldRefAccess<T, F>(fieldName)(instance). + + + For backwards compatibility, there is no class constraint on . + Instead, the non-value-type check is done at runtime within the method. + + + + + + Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct) + + The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), + a type that is assignable from that type; or if the field's type is an enum type, + either that type or the underlying integral type of that enum type + + + The type that defines the field, or derived class of this type; must not be a struct type unless the field is static + + The name of the field + + A readable/assignable delegate with T=object + (for static fields, the instance delegate parameter is ignored) + + + + This method is meant for cases where the given type is only known at runtime and thus can't be used as a type parameter T + in e.g. . + + + This method supports static fields, even those defined in structs, for legacy reasons. + Consider using (and other overloads) instead for static fields. + + + + + + Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct) + + An arbitrary type if the field is static; otherwise the class that defines the field, or a parent class (including ), + implemented interface, or derived class of this type ("instanceOfT is FieldDeclaringType" must be possible) + + + The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), + a type that is assignable from that type; or if the field's type is an enum type, + either that type or the underlying integral type of that enum type + + The field + A readable/assignable delegate + + + This method is meant for cases where the field has already been obtained, avoiding the field searching cost in + e.g. . + + + This method supports static fields, even those defined in structs, for legacy reasons. + For such static fields, is effectively ignored. + Consider using (and other overloads) instead for static fields. + + + For backwards compatibility, there is no class constraint on . + Instead, the non-value-type check is done at runtime within the method. + + + + + + Creates a field reference for an instance field of a class + + The type that defines the field; or a parent class (including ), implemented interface, or derived class of this type + ("instanceOfT is FieldDeclaringType" must be possible) + + + The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), + a type that is assignable from that type; or if the field's type is an enum type, + either that type or the underlying integral type of that enum type + + The instance + The field + A readable/assignable reference to the field + + + This method is meant for one-off access to a field's value for a single instance and where the field has already been obtained. + If you need to access a field's value for potentially multiple instances, use instead. + FieldRefAccess<T, F>(instance, fieldInfo) is functionally equivalent to FieldRefAccess<T, F>(fieldInfo)(instance). + + + For backwards compatibility, there is no class constraint on . + Instead, the non-value-type check is done at runtime within the method. + + + + + + A readable/assignable reference delegate to an instance field of a struct + The struct that defines the instance field + + The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), + a type that is assignable from that type; or if the field's type is an enum type, + either that type or the underlying integral type of that enum type + + A reference to the runtime instance to access the field + A readable/assignable reference to the field + + + + Creates a field reference delegate for an instance field of a struct + The struct that defines the instance field + + The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), + a type that is assignable from that type; or if the field's type is an enum type, + either that type or the underlying integral type of that enum type + + The name of the field + A readable/assignable delegate + + + + Creates an instance field reference for a specific instance of a struct + The struct that defines the instance field + + The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), + a type that is assignable from that type; or if the field's type is an enum type, + either that type or the underlying integral type of that enum type + + The instance + The name of the field + A readable/assignable reference to the field + + + This method is meant for one-off access to a field's value for a single instance. + If you need to access a field's value for potentially multiple instances, use instead. + StructFieldRefAccess<T, F>(ref instance, fieldName) is functionally equivalent to StructFieldRefAccess<T, F>(fieldName)(ref instance). + + + + + + Creates a field reference delegate for an instance field of a struct + The struct that defines the instance field + + The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), + a type that is assignable from that type; or if the field's type is an enum type, + either that type or the underlying integral type of that enum type + + The field + A readable/assignable delegate + + + This method is meant for cases where the field has already been obtained, avoiding the field searching cost in + e.g. . + + + + + + Creates a field reference for an instance field of a struct + The struct that defines the instance field + + The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), + a type that is assignable from that type; or if the field's type is an enum type, + either that type or the underlying integral type of that enum type + + The instance + The field + A readable/assignable reference to the field + + + This method is meant for one-off access to a field's value for a single instance and where the field has already been obtained. + If you need to access a field's value for potentially multiple instances, use instead. + StructFieldRefAccess<T, F>(ref instance, fieldInfo) is functionally equivalent to StructFieldRefAccess<T, F>(fieldInfo)(ref instance). + + + + + + A readable/assignable reference delegate to a static field + + The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), + a type that is assignable from that type; or if the field's type is an enum type, + either that type or the underlying integral type of that enum type + + A readable/assignable reference to the field + + + + Creates a static field reference + The type (can be class or struct) the field is defined in + + The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), + a type that is assignable from that type; or if the field's type is an enum type, + either that type or the underlying integral type of that enum type + + The name of the field + A readable/assignable reference to the field + + + + Creates a static field reference + + The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), + a type that is assignable from that type; or if the field's type is an enum type, + either that type or the underlying integral type of that enum type + + The type (can be class or struct) the field is defined in + The name of the field + A readable/assignable reference to the field + + + + Creates a static field reference + An arbitrary type (by convention, the type the field is defined in) + + The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), + a type that is assignable from that type; or if the field's type is an enum type, + either that type or the underlying integral type of that enum type + + The field + A readable/assignable reference to the field + + The type parameter is only used in exception messaging and to distinguish between this method overload + and the overload (which returns a rather than a reference). + + + + + Creates a static field reference delegate + + The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), + a type that is assignable from that type; or if the field's type is an enum type, + either that type or the underlying integral type of that enum type + + The field + A readable/assignable delegate + + + + Creates a delegate to a given method + The delegate Type + The method to create a delegate from. + + Only applies for instance methods. If null (default), returned delegate is an open (a.k.a. unbound) instance delegate + where an instance is supplied as the first argument to the delegate invocation; else, delegate is a closed (a.k.a. bound) + instance delegate where the delegate invocation always applies to the given . + + + Only applies for instance methods. If true (default) and is virtual, invocation of the delegate + calls the instance method virtually (the instance type's most-derived/overriden implementation of the method is called); + else, invocation of the delegate calls the exact specified (this is useful for calling base class methods) + Note: if false and is an interface method, an ArgumentException is thrown. + + A delegate of given to given + + + Delegate invocation is more performant and more convenient to use than + at a one-time setup cost. + + + Works for both type of static and instance methods, both open and closed (a.k.a. unbound and bound) instance methods, + and both class and struct methods. + + + + + + Creates a delegate for a given delegate definition, attributed with [] + The delegate Type, attributed with [] + + Only applies for instance methods. If null (default), returned delegate is an open (a.k.a. unbound) instance delegate + where an instance is supplied as the first argument to the delegate invocation; else, delegate is a closed (a.k.a. bound) + instance delegate where the delegate invocation always applies to the given . + + A delegate of given to the method specified via [] + attributes on + + This calls with the method and virtualCall arguments + determined from the [] attributes on , + and the given (for closed instance delegates). + + + + + Returns who called the current method + The calling method/constructor (excluding the caller) + + + + Rethrows an exception while preserving its stack trace (throw statement typically clobbers existing stack traces) + The exception to rethrow + + + + True if the current runtime is based on Mono, false otherwise (.NET) + + + + True if the current runtime is .NET Framework, false otherwise (.NET Core or Mono, although latter isn't guaranteed) + + + + True if the current runtime is .NET Core, false otherwise (Mono or .NET Framework) + + + + Throws a missing member runtime exception + The type that is involved + A list of names + + + + Gets default value for a specific type + The class/type + The default value + + + + Creates an (possibly uninitialized) instance of a given type + The class/type + The new instance + + + + Creates an (possibly uninitialized) instance of a given type + The class/type + The new instance + + + + + A cache for the or similar Add methods for different types. + + + + Makes a deep copy of any object + The type of the instance that should be created; for legacy reasons, this must be a class or interface + The original object + A copy of the original object but of type T + + + + Makes a deep copy of any object + The type of the instance that should be created + The original object + [out] The copy of the original object + Optional value transformation function (taking a field name and src/dst instances) + The optional path root to start with + + + + Makes a deep copy of any object + The original object + The type of the instance that should be created + Optional value transformation function (taking a field name and src/dst instances) + The optional path root to start with + The copy of the original object + + + + Tests if a type is a struct + The type + True if the type is a struct + + + + Tests if a type is a class + The type + True if the type is a class + + + + Tests if a type is a value type + The type + True if the type is a value type + + + + Tests if a type is an integer type + The type + True if the type represents some integer + + + + Tests if a type is a floating point type + The type + True if the type represents some floating point + + + + Tests if a type is a numerical type + The type + True if the type represents some number + + + + Tests if a type is void + The type + True if the type is void + + + + Test whether an instance is of a nullable type + Type of instance + An instance to test + True if instance is of nullable type, false if not + + + + Tests whether a type or member is static, as defined in C# + The type or member + True if the type or member is static + + + + Tests whether a type is static, as defined in C# + The type + True if the type is static + + + + Tests whether a property is static, as defined in C# + The property + True if the property is static + + + + Tests whether an event is static, as defined in C# + The event + True if the event is static + + + + Calculates a combined hash code for an enumeration of objects + The objects + The hash code + + + + A CodeInstruction match + + + The name of the match + + + The matched opcodes + + + The matched operands + + + The matched labels + + + The matched blocks + + + The jumps from the match + + + The jumps to the match + + + The match predicate + + + Creates a code match + The optional opcode + The optional operand + The optional name + + + + Creates a code match + The CodeInstruction + An optional name + + + + Creates a code match + The predicate + An optional name + + + + Returns a string that represents the match + A string representation + + + + Creates a new code match for an opcode + Opcode to match + + + + Creates a new code match for a code instruction + Code instruction + + + + A CodeInstruction matcher + + + The current position + The index or -1 if out of bounds + + + + Gets the number of code instructions in this matcher + The count + + + + Checks whether the position of this CodeMatcher is within bounds + True if this CodeMatcher is valid + + + + Checks whether the position of this CodeMatcher is outside its bounds + True if this CodeMatcher is invalid + + + + Gets the remaining code instructions + The remaining count + + + + Gets the opcode at the current position + The opcode + + + + Gets the operand at the current position + The operand + + + + Gets the labels at the current position + The labels + + + + Gets the exception blocks at the current position + The blocks + + + + Creates an empty code matcher + + + Creates a code matcher from an enumeration of instructions + The instructions (transpiler argument) + An optional IL generator + + + + Makes a clone of this instruction matcher + A copy of this matcher + + + + Gets instructions at the current position + The instruction + + + + Gets instructions at the current position with offset + The offset + The instruction + + + + Gets all instructions + A list of instructions + + + + Gets all instructions as an enumeration + A list of instructions + + + + Gets some instructions counting from current position + Number of instructions + A list of instructions + + + + Gets all instructions within a range + The start index + The end index + A list of instructions + + + + Gets all instructions within a range (relative to current position) + The start offset + The end offset + A list of instructions + + + + Gets a list of all distinct labels + The instructions (transpiler argument) + A list of Labels + + + + Reports a failure + The method involved + The logger + True if current position is invalid and error was logged + + + + Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed) + Explanation of where/why the exception was thrown that will be added to the exception message + The same code matcher + + + + Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed), + or if the matches do not match at current position + Explanation of where/why the exception was thrown that will be added to the exception message + Some code matches + The same code matcher + + + + Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed), + or if the matches do not match at any point between current position and the end + Explanation of where/why the exception was thrown that will be added to the exception message + Some code matches + The same code matcher + + + + Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed), + or if the matches do not match at any point between current position and the start + Explanation of where/why the exception was thrown that will be added to the exception message + Some code matches + The same code matcher + + + + Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed), + or if the check function returns false + Explanation of where/why the exception was thrown that will be added to the exception message + Function that checks validity of current state. If it returns false, an exception is thrown + The same code matcher + + + + Sets an instruction at current position + The instruction to set + The same code matcher + + + + Sets instruction at current position and advances + The instruction + The same code matcher + + + + Sets opcode and operand at current position + The opcode + The operand + The same code matcher + + + + Sets opcode and operand at current position and advances + The opcode + The operand + The same code matcher + + + + Sets opcode at current position and advances + The opcode + The same code matcher + + + + Sets operand at current position and advances + The operand + The same code matcher + + + + Creates a label at current position + [out] The label + The same code matcher + + + + Creates a label at a position + The position + [out] The new label + The same code matcher + + + + Adds an enumeration of labels to current position + The labels + The same code matcher + + + + Adds an enumeration of labels at a position + The position + The labels + The same code matcher + + + + Sets jump to + Branch instruction + Destination for the jump + [out] The created label + The same code matcher + + + + Inserts some instructions + The instructions + The same code matcher + + + + Inserts an enumeration of instructions + The instructions + The same code matcher + + + + Inserts a branch + The branch opcode + Branch destination + The same code matcher + + + + Inserts some instructions and advances the position + The instructions + The same code matcher + + + + Inserts an enumeration of instructions and advances the position + The instructions + The same code matcher + + + + Inserts a branch and advances the position + The branch opcode + Branch destination + The same code matcher + + + + Removes current instruction + The same code matcher + + + + Removes some instruction from current position by count + Number of instructions + The same code matcher + + + + Removes the instructions in a range + The start + The end + The same code matcher + + + + Removes the instructions in a offset range + The start offset + The end offset + The same code matcher + + + + Advances the current position + The offset + The same code matcher + + + + Moves the current position to the start + The same code matcher + + + + Moves the current position to the end + The same code matcher + + + + Searches forward with a predicate and advances position + The predicate + The same code matcher + + + + Searches backwards with a predicate and reverses position + The predicate + The same code matcher + + + + Matches forward and advances position + True to set position to end of match, false to set it to the beginning of the match + Some code matches + The same code matcher + + + + Matches backwards and reverses position + True to set position to end of match, false to set it to the beginning of the match + Some code matches + The same code matcher + + + + Matches forward and advances position to beginning of matching sequence + Some code matches + The same code matcher + + + + Matches forward and advances position to ending of matching sequence + Some code matches + The same code matcher + + + + Matches backwards and reverses position to beginning of matching sequence + Some code matches + The same code matcher + + + + Matches backwards and reverses position to ending of matching sequence + Some code matches + The same code matcher + + + + Repeats a match action until boundaries are met + The match action + An optional action that is executed when no match is found + The same code matcher + + + + Gets a match by its name + The match name + An instruction + + + + General extensions for common cases + + + + Joins an enumeration with a value converter and a delimiter to a string + The inner type of the enumeration + The enumeration + An optional value converter (from T to string) + An optional delimiter + The values joined into a string + + + + Converts an array of types (for example methods arguments) into a human readable form + The array of types + A human readable description including brackets + + + + A full description of a type + The type + A human readable description + + + + A a full description of a method or a constructor without assembly details but with generics + The method/constructor + A human readable description + + + + A helper converting parameter infos to types + The array of parameter infos + An array of types + + + + A helper to access a value via key from a dictionary + The key type + The value type + The dictionary + The key + The value for the key or the default value (of T) if that key does not exist + + + + A helper to access a value via key from a dictionary with extra casting + The value type + The dictionary + The key + The value for the key or the default value (of T) if that key does not exist or cannot be cast to T + + + + Escapes Unicode and ASCII non printable characters + The string to convert + The string to convert + A string literal surrounded by + + + + Extensions for + + + + Shortcut for testing whether the operand is equal to a non-null value + The + The value + True if the operand has the same type and is equal to the value + + + + Shortcut for testing whether the operand is equal to a non-null value + The + The value + True if the operand is equal to the value + This is an optimized version of for + + + + Shortcut for code.opcode == opcode && code.OperandIs(operand) + The + The + The operand value + True if the opcode is equal to the given opcode and the operand has the same type and is equal to the given operand + + + + Shortcut for code.opcode == opcode && code.OperandIs(operand) + The + The + The operand value + True if the opcode is equal to the given opcode and the operand is equal to the given operand + This is an optimized version of for + + + + Tests for any form of Ldarg* + The + The (optional) index + True if it matches one of the variations + + + + Tests for Ldarga/Ldarga_S + The + The (optional) index + True if it matches one of the variations + + + + Tests for Starg/Starg_S + The + The (optional) index + True if it matches one of the variations + + + + Tests for any form of Ldloc* + The + The optional local variable + True if it matches one of the variations + + + + Tests for any form of Stloc* + The + The optional local variable + True if it matches one of the variations + + + + Tests if the code instruction branches + The + The label if the instruction is a branch operation or if not + True if the instruction branches + + + + Tests if the code instruction calls the method/constructor + The + The method + True if the instruction calls the method or constructor + + + + Tests if the code instruction loads a constant + The + True if the instruction loads a constant + + + + Tests if the code instruction loads an integer constant + The + The integer constant + True if the instruction loads the constant + + + + Tests if the code instruction loads a floating point constant + The + The floating point constant + True if the instruction loads the constant + + + + Tests if the code instruction loads an enum constant + The + The enum + True if the instruction loads the constant + + + + Tests if the code instruction loads a field + The + The field + Set to true if the address of the field is loaded + True if the instruction loads the field + + + + Tests if the code instruction stores a field + The + The field + True if the instruction stores this field + + + + Adds labels to the code instruction and return it + The + One or several to add + The same code instruction + + + Adds labels to the code instruction and return it + The + An enumeration of + The same code instruction + + + Extracts all labels from the code instruction and returns them + The + A list of + + + Moves all labels from the code instruction to a different one + The to move the labels from + The to move the labels to + The code instruction labels were moved from (now empty) + + + Moves all labels from a different code instruction to the current one + The to move the labels from + The to move the labels to + The code instruction that received the labels + + + Adds ExceptionBlocks to the code instruction and return it + The + One or several to add + The same code instruction + + + Adds ExceptionBlocks to the code instruction and return it + The + An enumeration of + The same code instruction + + + Extracts all ExceptionBlocks from the code instruction and returns them + The + A list of + + + Moves all ExceptionBlocks from the code instruction to a different one + The to move the ExceptionBlocks from + The to move the ExceptionBlocks to + The code instruction blocks were moved from (now empty) + + + Moves all ExceptionBlocks from a different code instruction to the current one + The to move the ExceptionBlocks from + The to move the ExceptionBlocks to + The code instruction that received the blocks + + + General extensions for collections + + + + A simple way to execute code for every element in a collection + The inner type of the collection + The collection + The action to execute + + + + A simple way to execute code for elements in a collection matching a condition + The inner type of the collection + The collection + The predicate + The action to execute + + + + A helper to add an item to a collection + The inner type of the collection + The collection + The item to add + The collection containing the item + + + + A helper to add an item to an array + The inner type of the collection + The array + The item to add + The array containing the item + + + + A helper to add items to an array + The inner type of the collection + The array + The items to add + The array containing the items + + + + General extensions for collections + + + + Tests a class member if it has an IL method body (external methods for example don't have a body) + The member to test + Returns true if the member has an IL body or false if not + + + A file log for debugging + + + + Full pathname of the log file, defaults to a file called harmony.log.txt on your Desktop + + + + The indent character. The default is tab + + + + The current indent level + + + + Changes the indentation level + The value to add to the indentation level + + + + Log a string in a buffered way. Use this method only if you are sure that FlushBuffer will be called + or else logging information is incomplete in case of a crash + The string to log + + + + Logs a list of string in a buffered way. Use this method only if you are sure that FlushBuffer will be called + or else logging information is incomplete in case of a crash + A list of strings to log (they will not be re-indented) + + + + Returns the log buffer and optionally empties it + True to empty the buffer + The buffer. + + + + Replaces the buffer with new lines + The lines to store + + + + Flushes the log buffer to disk (use in combination with LogBuffered) + + + + Log a string directly to disk. Slower method that prevents missing information in case of a crash + The string to log. + + + + Log a string directly to disk if Harmony.DEBUG is true. Slower method that prevents missing information in case of a crash + The string to log. + + + + Resets and deletes the log + + + + Logs some bytes as hex values + The pointer to some memory + The length of bytes to log + + + + + Default Harmony logger that writes to a file + + + + + Whether or not to enable writing the log. + + + + + Text writer to write the logs to. If not set, defaults to a file log. + + + + + File path of the log. + + + + + Main logger class that exposes log events. + + + + + A single log event that represents a single log message. + + + + + Log channel of the message. + + + + + The log message. + + + + + Log channel for the messages. + + + + + No channels (or an empty channel). + + + + + Basic information. + + + + + Full IL dumps of the generated dynamic methods. + + + + + Channel for warnings. + + + + + Channel for errors. + + + + + Additional debug information that is related to patching + + + + + All channels. + + + + + Filter for which channels should be listened to. + If the channel is in the filter, all log messages from that channel get propagated into event. + + + + + Event fired on any incoming message that passes the channel filter. + + + + + Pretty print a full type name. + + The . + The pretty printed full type name. + + + + A helper class to retrieve reflection info for non-private methods + + + + Given a lambda expression that calls a method, returns the method info + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The generic type + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The generic type + The generic result type + The lambda expression using the method + The method in the lambda expression + + + + Given a lambda expression that calls a method, returns the method info + The lambda expression using the method + The method in the lambda expression + + + + A reflection helper to read and write private elements + The result type defined by GetValue() + + + + Creates a traverse instance from an existing instance + The existing instance + + + + Gets/Sets the current value + The value to read or write + + + + A reflection helper to read and write private elements + + + + Creates a new traverse instance from a class/type + The class/type + A instance + + + + Creates a new traverse instance from a class T + The class + A instance + + + + Creates a new traverse instance from an instance + The object + A instance + + + + Creates a new traverse instance from a named type + The type name, for format see + A instance + + + + Creates a new and empty traverse instance + + + + Creates a new traverse instance from a class/type + The class/type + + + + Creates a new traverse instance from an instance + The object + + + + Gets the current value + The value + + + + Gets the current value + The type of the value + The value + + + + Invokes the current method with arguments and returns the result + The method arguments + The value returned by the method + + + + Invokes the current method with arguments and returns the result + The type of the value + The method arguments + The value returned by the method + + + + Sets a value of the current field or property + The value + The same traverse instance + + + + Gets the type of the current field or property + The type + + + + Moves the current traverse instance to a inner type + The type name + A traverse instance + + + + Moves the current traverse instance to a field + The type name + A traverse instance + + + + Moves the current traverse instance to a field + The type of the field + The type name + A traverse instance + + + + Gets all fields of the current type + A list of field names + + + + Moves the current traverse instance to a property + The type name + Optional property index + A traverse instance + + + + Moves the current traverse instance to a field + The type of the property + The type name + Optional property index + A traverse instance + + + + Gets all properties of the current type + A list of property names + + + + Moves the current traverse instance to a method + The name of the method + The arguments defining the argument types of the method overload + A traverse instance + + + + Moves the current traverse instance to a method + The name of the method + The argument types of the method + The arguments for the method + A traverse instance + + + + Gets all methods of the current type + A list of method names + + + + Checks if the current traverse instance is for a field + True if its a field + + + + Checks if the current traverse instance is for a property + True if its a property + + + + Checks if the current traverse instance is for a method + True if its a method + + + + Checks if the current traverse instance is for a type + True if its a type + + + + Iterates over all fields of the current type and executes a traverse action + Original object + The action receiving a instance for each field + + + + Iterates over all fields of the current type and executes a traverse action + Original object + Target object + The action receiving a pair of instances for each field pair + + + + Iterates over all fields of the current type and executes a traverse action + Original object + Target object + The action receiving a dot path representing the field pair and the instances + + + + Iterates over all properties of the current type and executes a traverse action + Original object + The action receiving a instance for each property + + + + Iterates over all properties of the current type and executes a traverse action + Original object + Target object + The action receiving a pair of instances for each property pair + + + + Iterates over all properties of the current type and executes a traverse action + Original object + Target object + The action receiving a dot path representing the property pair and the instances + + + + A default field action that copies fields to fields + + + + Returns a string that represents the current traverse + A string representation + + + + + Indicates that the marked symbol is used implicitly (e.g. via reflection, in external library), + so this symbol will not be reported as unused (as well as by other usage inspections). + + + + + Can be applied to attributes, type parameters, and parameters of a type assignable from . + When applied to an attribute, the decorated attribute behaves the same as . + When applied to a type parameter or to a parameter of type , indicates that the corresponding type + is used implicitly. + + + + + Specify the details of implicitly used symbol when it is marked + with or . + + + + Only entity marked with attribute considered used. + + + Indicates implicit assignment to a member. + + + + Indicates implicit instantiation of a type with fixed constructor signature. + That means any unused constructor parameters won't be reported as such. + + + + Indicates implicit instantiation of a type. + + + + Specify what is considered to be used implicitly when marked + with or . + + + + Members of entity marked with attribute are considered used. + + + Inherited entities are considered used. + + + Entity marked with attribute and all its members considered used. + + + diff --git a/core/0Harmony20.dll b/core/0Harmony20.dll new file mode 100644 index 0000000..8053843 Binary files /dev/null and b/core/0Harmony20.dll differ diff --git a/core/BepInEx.Harmony.dll b/core/BepInEx.Harmony.dll new file mode 100644 index 0000000..07b79f9 Binary files /dev/null and b/core/BepInEx.Harmony.dll differ diff --git a/core/BepInEx.Harmony.xml b/core/BepInEx.Harmony.xml new file mode 100644 index 0000000..86b7dc6 --- /dev/null +++ b/core/BepInEx.Harmony.xml @@ -0,0 +1,86 @@ + + + + BepInEx.Harmony + + + + + Specifies the indices of parameters that are ByRef. + + + + + The indices of parameters that are ByRef. + + + + The indices of parameters that are ByRef. + + + + An extension class for Harmony based operations. + + + + + Applies all patches specified in the type. + + The HarmonyInstance to use. + The type to scan. + + + + A wrapper for Harmony based operations. + + + + + Applies all patches specified in the type. + + The type to scan. + The HarmonyInstance to use. + + + + Applies all patches specified in the type. + + The type to scan. + The ID for the Harmony instance to create, which will be used. + + + + Applies all patches specified in the assembly. + + The assembly to scan. + The HarmonyInstance to use. + + + + Applies all patches specified in the assembly. + + The assembly to scan. + The ID for the Harmony instance to create, which will be used. + + + + Applies all patches specified in the calling assembly. + + The Harmony instance to use. + + + + Applies all patches specified in the calling assembly. + + The ID for the Harmony instance to create, which will be used. + + + + Returns an instruction to call the specified delegate. + + The delegate type to emit. + The delegate to emit. + The instruction to + + + diff --git a/core/BepInEx.Preloader.dll b/core/BepInEx.Preloader.dll new file mode 100644 index 0000000..5b78c7a Binary files /dev/null and b/core/BepInEx.Preloader.dll differ diff --git a/core/BepInEx.Preloader.xml b/core/BepInEx.Preloader.xml new file mode 100644 index 0000000..159e156 --- /dev/null +++ b/core/BepInEx.Preloader.xml @@ -0,0 +1,169 @@ + + + + BepInEx.Preloader + + + + + Doorstop environment variables, passed into the BepInEx preloader. + https://github.com/NeighTools/UnityDoorstop/wiki#environment-variables + + + + + Path to the assembly that was invoked via Doorstop. Contains the same value as in "targetAssembly" configuration option in the config file. + + + + + Full path to the game's "Managed" folder that contains all the game's managed assemblies + + + + + Full path to the game executable currently running. + + + + + Array of paths where Mono searches DLLs from before assembly resolvers are invoked. + + + + + Log listener that listens to logs during preloading time and buffers messages for output in Unity logs later. + + + + + + + + + + + + + + + + Delegate used in patching assemblies. + + The assembly that is being patched. + + + + Worker class which is used for loading and patching entire folders of assemblies, or alternatively patching and + loading assemblies one at a time. + + + + + List of all patcher plugins to be applied + + + + + Adds a single assembly patcher to the pool of applicable patches. + + Patcher to apply. + + + + Adds all patchers from all managed assemblies specified in a directory. + + Directory to search patcher DLLs from. + + + + Releases all patchers to let them be collected by GC. + + + + + Applies patchers to all assemblies in the given directory and loads patched assemblies into memory. + + Directories to load CLR assemblies from in their search order. + + + + Loads an individual assembly definition into the CLR. + + The assembly to load. + File name of the assembly being loaded. + + + + A single assembly patcher. + + + + + Target assemblies to patch. + + + + + Initializer method that is run before any patching occurs. + + + + + Finalizer method that is run after all patching is done. + + + + + The main patcher method that is called on every DLL defined in . + + + + + Type name of the patcher. + + + + + + + + + + + Recreation of MonoMod's PlatformHelper.DeterminePlatform method, but with libc calls instead of creating processes. + + + + + The main entrypoint of BepInEx, and initializes all patchers and the chainloader. + + + + + The log writer that is specific to the preloader. + + + + + Inserts BepInEx's own chainloader entrypoint into UnityEngine. + + The assembly that will be attempted to be patched. + + + + Allocates a console window for use by BepInEx safely. + + + + + This exists because the Mono implementation of is/was broken, and would call Write directly instead of calling TraceEvent. + + + + + The main entrypoint of BepInEx, called from Doorstop. + + + + diff --git a/core/BepInEx.dll b/core/BepInEx.dll new file mode 100644 index 0000000..918ea7a Binary files /dev/null and b/core/BepInEx.dll differ diff --git a/core/BepInEx.xml b/core/BepInEx.xml new file mode 100644 index 0000000..a96d13d --- /dev/null +++ b/core/BepInEx.xml @@ -0,0 +1,1737 @@ + + + + BepInEx + + + + + The manager and loader for all plugins, and the entry point for BepInEx plugin system. + + + + + The loaded and initialized list of plugins. + + + + + List of all loaded via the chainloader. + + + + + Collection of error chainloader messages that occured during plugin loading. + Contains information about what certain plugins were not loaded. + + + + + The GameObject that all plugins are attached to as components. + + + + + Initializes BepInEx to be able to start the chainloader. + + + + + Analyzes the given type definition and attempts to convert it to a valid + + Type definition to analyze. + If the type represent a valid plugin, returns a instance. Otherwise, return null. + + + + The entrypoint for the BepInEx plugin system. + + + + + A cacheable metadata item. Can be used with and to cache plugin metadata. + + + + + Serialize the object into a binary format. + + + + + + Loads the object from binary format. + + + + + + A cached assembly. + + + + + + List of cached items inside the assembly. + + + + + Timestamp of the assembly. Used to check the age of the cache. + + + + + Provides methods for loading specified types from an assembly. + + + + + Default assembly resolved used by the + + + + + Default reader parameters used by + + + + + Event fired when fails to resolve a type during type loading. + + + + + Looks up assemblies in the given directory and locates all types that can be loaded and collects their metadata. + + The specific base type to search for. + The directory to search for assemblies. + A function to check if a type should be selected and to build the type metadata. + A filter function to quickly determine if the assembly can be loaded. + The name of the cache to get cached types from. + A dictionary of all assemblies in the directory and the list of type metadatas of types that match the selector. + + + + Loads an index of type metadatas from a cache. + + Name of the cache + Cacheable item + Cached type metadatas indexed by the path of the assembly that defines the type. If no cache is defined, return null. + + + + Saves indexed type metadata into a cache. + + Name of the cache + List of plugin metadatas indexed by the path to the assembly that contains the types + Cacheable item + + + + Converts TypeLoadException to a readable string. + + TypeLoadException + Readable representation of the exception + + + + Base type of all classes representing and enforcing acceptable values of config settings. + + + + Type of values that this class can Clamp. + + + + Change the value to be acceptable, if it's not already. + + + + + Check if the value is an acceptable value. + + + + + Type of the supported values. + + + + + Get the string for use in config files. + + + + + Specify the list of acceptable values for a setting. + + + + + List of values that a setting can take. + + + + + Specify the list of acceptable values for a setting. + If the setting does not equal any of the values, it will be set to the first one. + + + + + + + + + + + + + + Specify the range of acceptable values for a setting. + + + + Lowest acceptable value + Highest acceptable value + + + + Lowest acceptable value + + + + + Highest acceptable value + + + + + + + + + + + + + + Section and key of a setting. Used as a unique key for identification within a . + The same definition can be used in multiple config files, it will point to different settings then. + + + + + + Group of the setting. All settings within a config file are grouped by this. + + + + + Name of the setting. + + + + + Create a new definition. Definitions with same section and key are equal. + + Group of the setting, case sensitive. + Name of the setting, case sensitive. + + + + + + + Check if the definitions are the same. + + + + + + Check if the definitions are the same. + + + + + + + + Check if the definitions are the same. + + + + + Check if the definitions are the same. + + + + + + + + Metadata of a . + + + + + Create a new description. + + Text describing the function of the setting and any notes or warnings. + Range of values that this setting can take. The setting's value will be automatically clamped. + Objects that can be used by user-made classes to add functionality. + + + + Text describing the function of the setting and any notes or warnings. + + + + + Range of acceptable values for a setting. + + + + + Objects that can be used by user-made classes to add functionality. + + + + + An empty description. + + + + + Provides access to a single setting inside of a . + + Type of the setting. + + + + Fired when the setting is changed. Does not detect changes made outside from this object. + + + + + Value of this setting. + + + + + + + + Container for a single setting of a . + Each config entry is linked to one config file. + + + + + Types of defaultValue and definition.AcceptableValues have to be the same as settingType. + + + + + Config file this entry is a part of. + + + + + Category and name of this setting. Used as a unique key for identification within a . + + + + + Description / metadata of this setting. + + + + + Type of the that this setting holds. + + + + + Default value of this setting (set only if the setting was not changed before). + + + + + Get or set the value of the setting. + + + + + Get the serialized representation of the value. + + + + + Set the value by using its serialized form. + + + + + If necessary, clamp the value to acceptable value range. T has to be equal to settingType. + + + + + Trigger setting changed event. + + + + + Write a description of this setting using all available metadata. + + + + + A helper class to handle persistent data. All public methods are thread-safe. + + + + + All config entries inside + + + + + Create a list with all config entries inside of this config file. + + + + + Create an array with all config entries inside of this config file. Should be only used for metadata purposes. + If you want to access and modify an existing setting then use + instead with no description. + + + + + Full path to the config file. The file might not exist until a setting is added and changed, or is called. + + + + + If enabled, writes the config to disk every time a value is set. + If disabled, you have to manually use or the changes will be lost! + + + + + + + + Create a new config file at the specified config path. + + Full path to a file that contains settings. The file will be created as needed. + If the config file/directory doesn't exist, create it immediately. + Information about the plugin that owns this setting file. + + + + Reloads the config from disk. Unsaved changes are lost. + + + + + Writes the config to disk. + + + + + Access one of the existing settings. If the setting has not been added yet, null is returned. + If the setting exists but has a different type than T, an exception is thrown. + New settings should be added with . + + Type of the value contained in this setting. + Section and Key of the setting. + + + + Access one of the existing settings. If the setting has not been added yet, null is returned. + If the setting exists but has a different type than T, an exception is thrown. + New settings should be added with . + + Type of the value contained in this setting. + Section/category/group of the setting. Settings are grouped by this. + Name of the setting. + + + + Access one of the existing settings. If the setting has not been added yet, false is returned. Otherwise, true. + If the setting exists but has a different type than T, an exception is thrown. + New settings should be added with . + + Type of the value contained in this setting. + Section and Key of the setting. + The ConfigEntry value to return. + + + + Access one of the existing settings. If the setting has not been added yet, null is returned. + If the setting exists but has a different type than T, an exception is thrown. + New settings should be added with . + + Type of the value contained in this setting. + Section/category/group of the setting. Settings are grouped by this. + Name of the setting. + The ConfigEntry value to return. + + + + Create a new setting. The setting is saved to drive and loaded automatically. + Each definition can be used to add only one setting, trying to add a second setting will throw an exception. + + Type of the value contained in this setting. + Section and Key of the setting. + Value of the setting if the setting was not created yet. + Description of the setting shown to the user and other metadata. + + + + Create a new setting. The setting is saved to drive and loaded automatically. + Each section and key pair can be used to add only one setting, trying to add a second setting will throw an exception. + + Type of the value contained in this setting. + Section/category/group of the setting. Settings are grouped by this. + Name of the setting. + Value of the setting if the setting was not created yet. + Description of the setting shown to the user and other metadata. + + + + Create a new setting. The setting is saved to drive and loaded automatically. + Each section and key pair can be used to add only one setting, trying to add a second setting will throw an exception. + + Type of the value contained in this setting. + Section/category/group of the setting. Settings are grouped by this. + Name of the setting. + Value of the setting if the setting was not created yet. + Simple description of the setting shown to the user. + + + + Create a new setting. The setting is saved to drive and loaded automatically. + Each definition can be used to add only one setting, trying to add a second setting will throw an exception. + + Type of the value contained in this setting. + Section and Key of the setting. + Value of the setting if the setting was not created yet. + Description of the setting shown to the user and other metadata. + + + + Create a new setting. The setting is saved to drive and loaded automatically. + Each section and key pair can be used to add only one setting, trying to add a second setting will throw an exception. + + Type of the value contained in this setting. + Section/category/group of the setting. Settings are grouped by this. + Name of the setting. + Value of the setting if the setting was not created yet. + Description of the setting shown to the user and other metadata. + + + + Create a new setting. The setting is saved to drive and loaded automatically. + Each section and key pair can be used to add only one setting, trying to add a second setting will throw an exception. + + Type of the value contained in this setting. + Section/category/group of the setting. Settings are grouped by this. + Name of the setting. + Value of the setting if the setting was not created yet. + Simple description of the setting shown to the user. + + + + Access a setting. Use Bind instead. + + + + + Access a setting. Use Bind instead. + + + + + An event that is fired every time the config is reloaded. + + + + + Fired when one of the settings is changed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Returns the ConfigDefinitions that the ConfigFile contains. + Creates a new array when the property is accessed. Thread-safe. + + + + + Returns the ConfigEntryBase values that the ConfigFile contains. + Creates a new array when the property is accessed. Thread-safe. + + + + + Provides access to a single setting inside of a . + + Type of the setting. + + + + Entry of this setting in the . + + + + + Unique definition of this setting. + + + + + Config file this setting is inside of. + + + + + Fired when the setting is changed. Does not detect changes made outside from this object. + + + + + Value of this setting. + + + + + A keyboard shortcut that can be used in Update method to check if user presses a key combo. The shortcut is only + triggered when the user presses the exact combination. For example, F + LeftCtrl will trigger only if user + presses and holds only LeftCtrl, and then presses F. If any other keys are pressed, the shortcut will not trigger. + + Can be used as a value of a setting in + to allow user to change this shortcut and have the changes saved. + + How to use: Use in this class instead of in the Update loop. + + + + + Shortcut that never triggers. + + + + + All KeyCode values that can be used in a keyboard shortcut. + + + + + Create a new keyboard shortcut. + + Main key to press + Keys that should be held down before main key is registered + + + + Main key of the key combination. It has to be pressed / let go last for the combination to be triggered. + If the combination is empty, is returned. + + + + + Modifiers of the key combination, if any. + + + + + Attempt to deserialize key combination from the string. + + + + + Serialize the key combination into a user readable string. + + + + + Check if the main key was just pressed (Input.GetKeyDown), and specified modifier keys are all pressed + + + + + Check if the main key is currently held down (Input.GetKey), and specified modifier keys are all pressed + + + + + Check if the main key was just lifted (Input.GetKeyUp), and specified modifier keys are all pressed. + + + + + + + + + + + + + + Arguments for events concerning a change of a setting. + + + + + + + + + Setting that was changed + + + + + Serializer/deserializer used by the config system. + + + + + Convert object of a given type to a string using available converters. + + + + + Convert string to an object of a given type using available converters. + + + + + Convert string to an object of a given type using available converters. + + + + + Get a converter for a given type if there is any. + + + + + Add a new type converter for a given type. + If a different converter is already added, this call is ignored and false is returned. + + + + + Check if a given type can be converted to and from string. + + + + + Give a list of types with registered converters. + + + + + For types that are in assemblies that can't get loaded before preloader runs (or it won't work on these assemblies) + + + + + A serializer/deserializer combo for some type(s). Used by the config system. + + + + + Used to serialize the type into a (hopefully) human-readable string. + Object is the instance to serialize, Type is the object's type. + + + + + Used to deserialize the type from a string. + String is the data to deserialize, Type is the object's type, should return instance to an object of Type. + + + + + True if an external console has been started, false otherwise. + + + + + The stream that writes to the standard out stream of the process. Should never be null. + + + + + The stream that writes to an external console. Null if no such console exists + + + + + This attribute denotes that a class is a plugin, and specifies the required metadata. + + + + + The unique identifier of the plugin. Should not change between plugin versions. + + + + + The user friendly name of the plugin. Is able to be changed between versions. + + + + + The specfic version of the plugin. + + + + The unique identifier of the plugin. Should not change between plugin versions. + The user friendly name of the plugin. Is able to be changed between versions. + The specfic version of the plugin. + + + + This attribute specifies any dependencies that this plugin has on other plugins. + + + + + Flags that are applied to a dependency + + + + + The plugin has a hard dependency on the referenced plugin, and will not run without it. + + + + + This plugin has a soft dependency on the referenced plugin, and is able to run without it. + + + + + The GUID of the referenced plugin. + + + + + The flags associated with this dependency definition. + + + + + The minimum version of the referenced plugin. + + + + + Marks this as depenant on another plugin. The other plugin will be loaded before this one. + If the other plugin doesn't exist, what happens depends on the parameter. + + The GUID of the referenced plugin. + The flags associated with this dependency definition. + + + + Marks this as depenant on another plugin. The other plugin will be loaded before this one. + If the other plugin doesn't exist or is of a version below , this plugin will not load and an error will be logged instead. + + The GUID of the referenced plugin. + The minimum version of the referenced plugin. + When version is supplied the dependency is always treated as HardDependency + + + + This attribute specifies other plugins that are incompatible with this plugin. + + + + + The GUID of the referenced plugin. + + + + + Marks this as incompatible with another plugin. + If the other plugin exists, this plugin will not be loaded and a warning will be shown. + + The GUID of the referenced plugin. + + + + This attribute specifies which processes this plugin should be run for. Not specifying this attribute will load the plugin under every process. + + + + + The name of the process that this plugin will run under. + + + + The name of the process that this plugin will run under. + + + + Helper class to use for retrieving metadata about a plugin, defined as attributes. + + + + + Retrieves the BepInPlugin metadata from a plugin type. + + The plugin type. + The BepInPlugin metadata of the plugin type. + + + + Retrieves the BepInPlugin metadata from a plugin instance. + + The plugin instance. + The BepInPlugin metadata of the plugin instance. + + + + Gets the specified attributes of a type, if they exist. + + The attribute type to retrieve. + The plugin type. + The attributes of the type, if existing. + + + + Gets the specified attributes of an instance, if they exist. + + The attribute type to retrieve. + The plugin instance. + The attributes of the instance, if existing. + + + + Retrieves the dependencies of the specified plugin type. + + The plugin type. + A list of all plugin types that the specified plugin type depends upon. + + + + This class is appended to AssemblyInfo.cs when BepInEx is built via a CI pipeline. + It is mainly intended to signify that the current build is not a release build and is special, like for instance a bleeding edge build. + + + + + The base plugin type that is used by the BepInEx plugin loader. + + + + + Information about this plugin as it was loaded. + + + + + Logger instance tied to this plugin. + + + + + Default config file tied to this plugin. The config file will not be created until + any settings are added and changed, or is called. + + + + + Create a new instance of a plugin and all of its tied in objects. + + BepInPlugin attribute is missing. + + + + Data class that represents information about a loadable BepInEx plugin. + Contains all metadata and additional info required for plugin loading by . + + + + + General metadata about a plugin. + + + + + Collection of attributes that describe what processes the plugin can run on. + + + + + Collection of attributes that describe what plugins this plugin depends on. + + + + + Collection of attributes that describe what plugins this plugin + is incompatible with. + + + + + File path to the plugin DLL + + + + + Instance of the plugin that represents this info. NULL if no plugin is instantiated from info (yet) + + + + + + + + Logs entries using Unity specific outputs. + + + + + + + + + + + Logs entries using Unity specific outputs. + + + + + Log levels to display. + + + + + Writer for the disk log. + + + + + Timer for flushing the logs to a file. + + + + + Whether to write Unity log messages to disk log. + + + + + Creates a new disk log listener. + + Path to the log. + Log levels to display. + Whether to append logs to an already existing log file. + Whether to include Unity log into the disk log. + + + + + + + + + + Disposes of Disk logger + + + + + A generic log listener that receives log events and can route them to some output (e.g. file, console, socket). + + + + + Handle an incoming log event. + + Log source that sent the event. Don't use; instead use + Information about the log message. + + + + Log source that can output log messages. + + + + + Name of the log source. + + + + + Event that sends the log message. Call to send a log message. + + + + + Log event arguments. Contains info about the log message. + + + + + Logged data. + + + + + Log levels for the data. + + + + + Log source that emitted the log event. + + + + + Creates the log event args- + + Logged data. + Log level of the data. + Log source that emits these args. + + + + + + + Like but appends newline at the end. + + Same output as but with new line. + + + + A static Logger instance. + + + + + Collection of all log listeners that receive log events. + + + + + Collection of all log source that output log events. + + + + + Logs an entry to the current logger instance. + + The level of the entry. + The textual value of the entry. + + + + Creates a new log source with a name and attaches it to log sources. + + Name of the log source to create. + An instance of that allows to write logs. + + + + Simple thread safe list that prioritizes read speed over write speed. + Read is the same as a normal list, while write locks and allocates a copy of the list. + Logger lists are rarely updated so this tradeoff should be fine. + + + + + + The level, or severity of a log entry. + + + + + No level selected. + + + + + A fatal error has occurred, which cannot be recovered from. + + + + + An error has occured, but can be recovered from. + + + + + A warning has been produced, but does not necessarily mean that something wrong has happened. + + + + + An important message that should be displayed to the user. + + + + + A message of low importance. + + + + + A message that would likely only interest a developer. + + + + + All log levels. + + + + + Helper methods for log level handling. + + + + + Gets the highest log level when there could potentially be multiple levels provided. + + The log level(s). + The highest log level supplied. + + + + Returns a translation of a log level to it's associated console colour. + + The log level(s). + A console color associated with the highest log level supplied. + + + + A generic, multi-purpose log source. Exposes simple API to manually emit logs. + + + + + + + + + + + Creates a manual log source. + + Name of the log source. + + + + Logs a message with the specified log level. + + Log levels to attach to the message. Multiple can be used with bitwise ORing. + Data to log. + + + + Logs a message with level. + + Data to log. + + + + Logs a message with level. + + Data to log. + + + + Logs a message with level. + + Data to log. + + + + Logs a message with level. + + Data to log. + + + + Logs a message with level. + + Data to log. + + + + Logs a message with level. + + Data to log. + + + + + + + A source that routes all logs from API to BepInEx logger. + + + + + + Whether Trace logs are rerouted. + + + + + Creates a new trace log source. + + New log source (or already existing one). + + + + Internal log source. + + + + + Creates a new trace log source. + + + + + Writes a message to the underlying instance. + + The message to write. + + + + Writes a message and a newline to the underlying instance. + + The message to write. + + + + + + + + + + Logs entries using Unity specific outputs. + + + + + + + + + + + Logs entries using Unity specific outputs. + + + + + + + + + + + Creates a new Unity log source. + + + + + + + + Paths used by BepInEx + + + + + List of directories from where Mono will search assemblies before assembly resolving is invoked. + + + + + The directory that the core BepInEx DLLs reside in. + + + + + The path to the core BepInEx DLL. + + + + + The path to the main BepInEx folder. + + + + + The path of the currently executing program BepInEx is encapsulated in. + + + + + The directory that the currently executing process resides in. + On OSX however, this is the parent directory of the game.app folder. + + + + + The path to the Managed folder of the currently running Unity game. + + + + + The path to the config directory. + + + + + The path to the global BepInEx configuration file. + + + + + The path to temporary cache files. + + + + + The path to the patcher plugin folder which resides in the BepInEx folder. + + + + + The path to the plugin folder which resides in the BepInEx folder. + + This is ONLY guaranteed to be set correctly when Chainloader has been initialized. + + + + + + The name of the currently executing process. + + + + + Provides methods for running code on other threads and synchronizing with the main thread. + + + + + Current instance of the helper. + + + + + Gives methods for invoking delegates on the main unity thread, both synchronously and asynchronously. + Can be used in many built-in framework types, for example + and to make their events fire on the main unity thread. + + + + + Queue the delegate to be invoked on the main unity thread. Use to synchronize your threads. + + + + + Queue the delegate to be invoked on a background thread. Use this to run slow tasks without affecting the game. + NOTE: Most of Unity API can not be accessed while running on another thread! + + + Task to be executed on another thread. Can optionally return an Action that will be executed on the main thread. + You can use this action to return results of your work safely. Return null if this is not needed. + + + + + False if current code is executing on the main unity thread, otherwise True. + Warning: Will return true before the first frame finishes (i.e. inside plugin Awake and Start methods). + + + + + + Convenience extensions for utilizing multiple threads and using the . + + + + + + + + Apply a function to a collection of data by spreading the work on multiple threads. + Outputs of the functions are returned to the current thread and yielded one by one. + + Type of the input values. + Type of the output values. + Input values for the work function. + Function to apply to the data on multiple threads at once. + Number of worker threads. By default SystemInfo.processorCount is used. + An exception was thrown inside one of the threads, and the operation was aborted. + Need at least 1 workerCount. + + + + Abstraction layer over Unity's input systems for use in universal plugins that need to use hotkeys. + It can use either Input or Unity.InputSystem, depending on what's available. Input is preferred. + WARNING: Use only inside of Unity's main thread! + + + + + Best currently supported input system. + + + + + True if the Input class is not disabled. + + + + + Generic input system interface. Just barely good enough for hotkeys. + + + + + + + + + + + + + + + + + + + + All KeyCodes supported by the current input system. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Generic helper properties and methods. + + + + + Whether current Common Language Runtime supports dynamic method generation using namespace. + + + + + An encoding for UTF-8 which does not emit a byte order mark (BOM). + + + + + Try to perform an action. + + Action to perform. + Possible exception that gets returned. + True, if action succeeded, false if an exception occured. + + + + Combines multiple paths together, as the specific method is not available in .NET 3.5. + + The multiple paths to combine together. + A combined path. + + + + Returns the parent directory of a path, optionally specifying the amount of levels. + + The path to get the parent directory of. + The amount of levels to traverse. Defaults to 1 + The parent directory. + + + + Tries to parse a bool, with a default value if unable to parse. + + The string to parse + The value to return if parsing is unsuccessful. + Boolean value of input if able to be parsed, otherwise default value. + + + + Converts a file path into a UnityEngine.WWW format. + + The file path to convert. + A converted file path. + + + + Indicates whether a specified string is null, empty, or consists only of white-space characters. + + The string to test. + True if the value parameter is null or empty, or if value consists exclusively of white-space characters. + + + + Sorts a given dependency graph using a direct toposort, reporting possible cyclic dependencies. + + Nodes to sort + Function that maps a node to a collection of its dependencies. + Type of the node in a dependency graph. + Collection of nodes sorted in the order of least dependencies to the most. + Thrown when a cyclic dependency occurs. + + + + Checks whether a given cecil type definition is a subtype of a provided type. + + Cecil type definition + Type to check against + Whether the given cecil type is a subtype of the type. + + + + Try to resolve and load the given assembly DLL. + + Name of the assembly, of the type . + Directory to search the assembly from. + The loaded assembly. + True, if the assembly was found and loaded. Otherwise, false. + + + + Try to resolve and load the given assembly DLL. + + Name of the assembly, of the type . + Directory to search the assembly from. + Reader parameters that contain possible custom assembly resolver. + The loaded assembly. + True, if the assembly was found and loaded. Otherwise, false. + + + + Tries to create a file with the given name + + Path of the file to create + File open mode + Resulting filestream + File access options + File share options + + + + + Try to parse given string as an assembly name + + Fully qualified assembly name + Resulting instance + true, if parsing was successful, otherwise false + + On some versions of mono, using fails because it runs on unmanaged side + which has problems with encoding. + Using solves this by doing parsing on managed side instead. + + + + + Gets unique files in all given directories. If the file with the same name exists in multiple directories, + only the first occurrence is returned. + + Directories to search from. + File pattern to search. + Collection of all files in the directories. + + + + Console class with safe handlers for Unity 4.x, which does not have a proper Console implementation + + + + diff --git a/core/HarmonyXInterop.dll b/core/HarmonyXInterop.dll new file mode 100644 index 0000000..39c642c Binary files /dev/null and b/core/HarmonyXInterop.dll differ diff --git a/core/Mono.Cecil.Mdb.dll b/core/Mono.Cecil.Mdb.dll new file mode 100644 index 0000000..bddf5cb Binary files /dev/null and b/core/Mono.Cecil.Mdb.dll differ diff --git a/core/Mono.Cecil.Pdb.dll b/core/Mono.Cecil.Pdb.dll new file mode 100644 index 0000000..9227f6d Binary files /dev/null and b/core/Mono.Cecil.Pdb.dll differ diff --git a/core/Mono.Cecil.Rocks.dll b/core/Mono.Cecil.Rocks.dll new file mode 100644 index 0000000..a77ac87 Binary files /dev/null and b/core/Mono.Cecil.Rocks.dll differ diff --git a/core/Mono.Cecil.dll b/core/Mono.Cecil.dll new file mode 100644 index 0000000..18735f9 Binary files /dev/null and b/core/Mono.Cecil.dll differ diff --git a/core/MonoMod.RuntimeDetour.dll b/core/MonoMod.RuntimeDetour.dll new file mode 100644 index 0000000..5709bbb Binary files /dev/null and b/core/MonoMod.RuntimeDetour.dll differ diff --git a/core/MonoMod.RuntimeDetour.xml b/core/MonoMod.RuntimeDetour.xml new file mode 100644 index 0000000..45e9d3b --- /dev/null +++ b/core/MonoMod.RuntimeDetour.xml @@ -0,0 +1,178 @@ + + + + MonoMod.RuntimeDetour + + + + + A fully managed detour. + Multiple Detours for a method to detour from can exist at any given time. Detours can be layered. + If you're writing your own detour manager or need to detour native functions, it's better to create instances of NativeDetour instead. + + + + + Mark the detour as applied in the detour chain. This can be done automatically when creating an instance. + + + + + Undo the detour without freeing it, allowing you to reapply it later. + + + + + Free the detour, while also permanently undoing it. This makes any further operations on this detour invalid. + + + + + Undo and free this temporary detour. + + + + + Generate a new DynamicMethod with which you can invoke the previous state. + + + + + Generate a new DynamicMethod with which you can invoke the previous state. + + + + + Generate a new DynamicMethod with which you can invoke the previous state. + + + + + A "raw" native detour, acting as a wrapper around NativeDetourData with a few helpers. + Only one NativeDetour for a method to detour from can exist at any given time. NativeDetours cannot be layered. + If you don't need the trampoline generator or any of the management helpers, use DetourManager.Native directly. + Unless you're writing your own detour manager or need to detour native functions, it's better to create instances of Detour instead. + + + + + Apply the native detour. This can be done automatically when creating an instance. + + + + + Undo the native detour without freeing the detour native data, allowing you to reapply it later. + + + + + Changes the source of this native detour to a new source address. This does not repair the old source location. + This also assumes that is simply a new address for the same method as this was constructed with. + + The new source location. + + + + Changed the target of this native detour to a new target. + + The new target address. + + + + Free the detour's data without undoing it. This makes any further operations on this detour invalid. + + + + + Undo and free this temporary detour. + + + + + Generate a new DynamicMethod with which you can invoke the previous state. + If the NativeDetour holds a reference to a managed method, a copy of the original method is returned. + If the NativeDetour holds a reference to a native function, an "undo-call-redo" trampoline with a matching signature is returned. + + + + + Generate a new delegate with which you can invoke the previous state. + If the NativeDetour holds a reference to a managed method, a copy of the original method is returned. + If the NativeDetour holds a reference to a native function, an "undo-call-redo" trampoline with a matching signature is returned. + + + + + Write the given value at the address to + offs, afterwards advancing offs by sizeof(byte). + + + + + Write the given value at the address to + offs, afterwards advancing offs by sizeof(ushort). + + + + + Write the given value at the address to + offs, afterwards advancing offs by sizeof(ushort). + + + + + Write the given value at the address to + offs, afterwards advancing offs by sizeof(ulong). + + + + + Generate a DynamicMethod to easily call the given native function from another DynamicMethod. + + The pointer to the native function to call. + A MethodBase with the target function's signature. + The detoured DynamicMethod. + + + + Fill the DynamicMethodDefinition with a throw. + + + + + Emit a call to DetourManager.Native.Copy using the given parameters. + + + + + Emit a call to DetourManager.Native.Apply using a copy of the given data. + + + + + The data forming a "raw" native detour, created and consumed by DetourManager.Native. + + + + + The method to detour from. Set when the structure is created by the IDetourNativePlatform. + + + + + The target method to be called instead. Set when the structure is created by the IDetourNativePlatform. + + + + + The type of the detour. Determined when the structure is created by the IDetourNativePlatform. + + + + + The size of the detour. Calculated when the structure is created by the IDetourNativePlatform. + + + + + DetourManager.Native-specific data. + + + + diff --git a/core/MonoMod.Utils.dll b/core/MonoMod.Utils.dll new file mode 100644 index 0000000..1d9fb35 Binary files /dev/null and b/core/MonoMod.Utils.dll differ diff --git a/core/MonoMod.Utils.xml b/core/MonoMod.Utils.xml new file mode 100644 index 0000000..96ba37f --- /dev/null +++ b/core/MonoMod.Utils.xml @@ -0,0 +1,1470 @@ + + + + MonoMod.Utils + + + + + An IL manipulation "context" with various helpers and direct access to the MethodBody. + + + + + The manipulator callback, accepted by the Invoke method. + + + + + + The manipulated method. + + + + + The manipulated method's IL processor. + + + + + The manipulated method body. + + + + + The manipulated method's module. + + + + + The manipulated method instructions. + + + + + A readonly list of all defined labels. + + + + + Has the context been made read-only? No further method access is possible, but the context has not yet been disposed. + + + + + Events which run when the context will be disposed. + + + + + The current reference bag. Used for methods such as EmitReference and EmitDelegate. + + + + + Invoke a given manipulator callback. + + The manipulator to run in this context. + + + + Mark this ILContext as read-only and prevent this context from further accessing the originally passed method. + + + If the method is altered prior to calling MakeReadOnly or afterwards by accessing the method directly, the results are undefined. + + + + + See + + + + + See + + + + + See + + + + + Define a new label to be marked with a cursor. + + A label without a target instruction. + + + + Define a new label pointing at a given instruction. + + The instruction the label will point at. + A label pointing at the given instruction. + + + + Determine the index of a given instruction. + + The instruction to get the index of. + The instruction index, or the end of the method body if it hasn't been found. + + + + Obtain all labels pointing at the given instruction. + + The instruction to get all labels for. + All labels targeting the given instruction. + + + + Bind an arbitary object to an ILContext for static retrieval. + + The type of the object. The combination of typeparam and id provides the unique static reference. + The object to store. + The id to use in combination with the typeparam for object retrieval. + + + + Dispose this context, making it read-only and invoking all OnDispose event listeners. + + + + + Obtain a string representation of this context (method ID and body). + + A string representation of this context. + + + + Specifies where a ILCursor should be positioned in relation to the target of a search function + + + + + Move the cursor before the first instruction in the match + + + + + Equivalent to Before with `cursor.MoveAfterLabels()` causing emitted instructions to become the target of incoming labels + + + + + Move the cursor after the last instruction in the match + + + + + Indicates whether the position of a ILCursor is the result of a search function and + if the next search should ignore the instruction preceeding or following this cursor. + + SearchTarget.Next is the result of searching with MoveType.Before, and SearchTarget.Prev from MoveType.After + + + + + A foward searching function cannot match the Next instruction and must move the cursor forward + + + + + A reverse searching function cannot match the Next instruction and must move the cursor backward + + + + + A cursor used to manipulate a method body in an ILContext. + + + + + The context to which this cursor belongs to. + + + + + The instruction immediately following the cursor position or null if the cursor is at the end of the instruction list. + + + + + The instruction immediately preceding the cursor position or null if the cursor is at the start of the instruction list. + + + + + The instruction immediately preceding the cursor position or null if the cursor is at the start of the instruction list. + + + + + The index of the instruction immediately following the cursor position. Range: 0 to Instrs.Count + Setter accepts negative indexing by adding Instrs.Count to the operand + + + + + Indicates whether the position of a MMILCursor is the result of a search function and + if the next search should ignore the instruction preceeding or following this cursor. + + See + + + + + Enumerates all labels which point to the current instruction (label.Target == Next) + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + Create a clone of this cursor. + + The cloned cursor. + + + + Is this cursor before the given instruction? + + The instruction to check. + True if this cursor is before the given instruction, false otherwise. + + + + Is this cursor after the given instruction? + + The instruction to check. + True if this cursor is after the given instruction, false otherwise. + + + + Obtain a string representation of this cursor (method ID, index, search target, surrounding instructions). + + A string representation of this cursor. + + + + Move the cursor to a target instruction. All other movements go through this. + + The target instruction + Where to move in relation to the target instruction and incoming labels (branches) + Whether to set the `SearchTarget` and skip the target instruction with the next search function + this + + + + Move the cursor after incoming labels (branches). If an instruction is emitted, all labels which currently point to Next, will point to the newly emitted instruction. + + this + + + + Move the cursor before incoming labels (branches). This is the default behaviour. Emitted instructions will not cause labels to change targets. + + this + + + + Move the cursor to a target index. Supports negative indexing. See + + this + + + + Overload for Goto(label.Target). defaults to MoveType.AfterLabel + + this + + + + Search forward and moves the cursor to the next sequence of instructions matching the corresponding predicates. See also + + this + If no match is found + + + + Search forward and moves the cursor to the next sequence of instructions matching the corresponding predicates. + + True if a match was found + + + + Search backward and moves the cursor to the next sequence of instructions matching the corresponding predicates. See also + + this + If no match is found + + + + Search backward and moves the cursor to the next sequence of instructions matching the corresponding predicates. + + True if a match was found + + + + Find the next occurences of a series of instructions matching the given set of predicates with gaps permitted. + + An array of cursors corresponding to each found instruction (MoveType.Before) + If no match is found + + + + Find the next occurences of a series of instructions matching the given set of predicates with gaps permitted. + + An array of cursors corresponding to each found instruction (MoveType.Before) + True if a match was found + + + + Search backwards for occurences of a series of instructions matching the given set of predicates with gaps permitted. + + An array of cursors corresponding to each found instruction (MoveType.Before) + If no match is found + + + + Search backwards for occurences of a series of instructions matching the given set of predicates with gaps permitted. + + An array of cursors corresponding to each found instruction (MoveType.Before) + True if a match was found + + + + Set the target of a label to the current position (label.Target = Next) and moves after it. + + The label to mark + + + + Create a new label targetting the current position (label.Target = Next) and moves after it. + + The newly created label + + + + Create a new label for use with + + A new label with no target + + + + Remove the Next instruction + + + + + Remove several instructions + + + + + Move the cursor and all labels the cursor is positioned after to a target instruction + + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position. + + The instruction opcode. + The instruction operand. + this + + + + Emit a new instruction at this cursor's current position, accessing a given member. + + The type in which the member is defined. + The instruction opcode. + The accessed member name. + this + + + + Bind an arbitary object to an ILContext for static retrieval. See + + + + + Emit the IL to retrieve a stored reference of type with the given and place it on the stack. + + + + + Store an object in the reference store, and emit the IL to retrieve it and place it on the stack. + + + + + Emit the IL to invoke a delegate as if it were a method. Stack behaviour matches OpCodes.Call + + + + + A label to be used in ILContexts. + + + + + The target instruction this label points at. + + + + + All instructions using this label. + + + + + An IL inline reference bag used for ILContexts. + + + + + Get the object for the given ID. + + The object type. + The object ID. + The stored object. + + + + Get a MethodInfo for the getter. + + The object type. + The getter method. + + + + Store a new object. + + The object type. + The object to be stored. + An ID to be used for all further operations. + + + + Remove the object with the given ID from the bag, essentially clearing the ID's slot. + + The object type. + The object ID. + + + + Get a MethodInfo invoking a delegate of the given type, with the delegate at the top of the stack. Used by . + + The delegate type. + A MethodInfo invoking a delegate of the given type. + + + + The default IL reference bag. Throws NotSupportedException for every operation. + + + + + An IL reference bag implementation to be used for runtime-generated methods. + + + + + Collection of extensions used by MonoMod and other projects. + + + + + Create a hexadecimal string for the given bytes. + + The input bytes. + The output hexadecimal string. + + + + Invokes all delegates in the invocation list, passing on the result to the next. + + Type of the result. + The multicast delegate. + The initial value and first parameter. + Any other arguments that may be passed. + The result of all delegates. + + + + Invokes all delegates in the invocation list, as long as the previously invoked delegate returns true. + + + + + Invokes all delegates in the invocation list, as long as the previously invoked delegate returns false. + + + + + Invokes all delegates in the invocation list, as long as the previously invoked delegate returns null. + + + + + Split PascalCase words to become Pascal Case instead. + + PascalCaseString + Pascal Case String + + + + Read the string from the BinaryReader BinaryWriter in a C-friendly format. + + The input which the method reads from. + The output string. + + + + Write the string to the BinaryWriter in a C-friendly format. + + The output which the method writes to. + The input string. + + + + Cast a delegate from one type to another. Compatible with delegates holding an invocation list (combined delegates). + + The input delegate. + The output delegate. + + + + Cast a delegate from one type to another. Compatible with delegates holding an invocation list (combined delegates). + + The input delegate. + The wanted output delegate type. + The output delegate. + + + + Print the exception to the console, including extended loading / reflection data useful for mods. + + + + + Get the method of interest for a given state machine method. + + The method creating the state machine. + The "main" method in the state machine. + + + + Gets the actual generic method definition of a method, as defined on the fully open type. + + The potentially instantiated method to find the definition of. + The original method definition, with no generic arguments filled in. + + + + Safely resolve a reference, silently discarding any exceptions. + + The reference to resolve. + The resolved definition or null. + + + + Safely resolve a reference, silently discarding any exceptions. + + The reference to resolve. + The resolved definition or null. + + + + Safely resolve a reference, silently discarding any exceptions. + + The reference to resolve. + The resolved definition or null. + + + + Safely resolve a reference, silently discarding any exceptions. + + The reference to resolve. + The resolved definition or null. + + + + Get a certain custom attribute from an attribute provider. + + The attribute provider. + The custom attribute name. + The first matching custom attribute, or null if no matching attribute has been found. + + + + Determine if an attribute provider has got a specific custom attribute. + + The attribute provider. + The custom attribute name. + true if the attribute provider contains the given custom attribute, false otherwise. + + + + Get the integer value pushed onto the stack with this instruction. + + The instruction to get the pushed integer value for. + The pushed integer value. + + + + Get the integer value pushed onto the stack with this instruction. + + The instruction to get the pushed integer value for. + The pushed integer value or null. + + + + Determine if the method call is a base method call. + + The caller method body. + The called method. + True if the called method is a base method of the caller method, false otherwise. + + + + Determine if the given method can be preferably called using callvirt. + + The called method. + True if the called method can be called using callvirt, false otherwise. + + + + Determine if the given type is a struct (also known as "value type") or struct-alike (f.e. primitive). + + The type to check. + True if the type is a struct, primitive or similar, false otherwise. + + + + Get the long form opcode for any short form opcode. + + The short form opcode. + The long form opcode. + + + + Get the short form opcode for any long form opcode. + + The long form opcode. + The short form opcode. + + + + Calculate updated instruction offsets. Required for certain manual fixes. + + The method to recalculate the IL instruction offsets for. + + + + Fix (and optimize) any instructions which should use the long / short form opcodes instead. + + The method to apply the fixes to. + + + + Check if the signatures of a given System.Reflection and Mono.Cecil member reference match. + + The System.Reflection member reference. + The Mono.Cecil member reference. + True if both references share the same signature, false otherwise. + + + + Check if the signatures of a given System.Reflection and Mono.Cecil member reference match. + + The Mono.Cecil member reference. + The System.Reflection member reference. + True if both references share the same signature, false otherwise. + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + Determine if two types are compatible with each other (f.e. object with string, or enums with their underlying integer type). + + The first type. + The second type. + True if both types are compatible with each other, false otherwise. + + + + Creates a delegate of the specified type from this method. + + The method to create the delegate from. + The type of the delegate to create. + The delegate for this method. + + + + Creates a delegate of the specified type with the specified target from this method. + + The method to create the delegate from. + The type of the delegate to create. + The object targeted by the delegate. + The delegate for this method. + + + + Creates a delegate of the specified type from this method. + + The method to create the delegate from. + The type of the delegate to create. + The delegate for this method. + + + + Creates a delegate of the specified type with the specified target from this method. + + The method to create the delegate from. + The type of the delegate to create. + The object targeted by the delegate. + The delegate for this method. + + + + Find a method for a given ID. + + The type to search in. + The method ID. + Whether to perform a simple search pass as well or not. + The first matching method or null. + + + + Find a method for a given ID recursively (including the passed type's base types). + + The type to search in. + The method ID. + Whether to perform a simple search pass as well or not. + The first matching method or null. + + + + Find a method for a given ID. + + The type to search in. + The method ID. + Whether to perform a simple search pass as well or not. + The first matching method or null. + + + + Find a method for a given ID recursively (including the passed type's base types). + + The type to search in. + The method ID. + Whether to perform a simple search pass as well or not. + The first matching method or null. + + + + Find a property for a given name. + + The type to search in. + The property name. + The first matching property or null. + + + + Find a property for a given name recursively (including the passed type's base types). + + The type to search in. + The property name. + The first matching property or null. + + + + Find a field for a given name. + + The type to search in. + The field name. + The first matching field or null. + + + + Find a field for a given name recursively (including the passed type's base types). + + The type to search in. + The field name. + The first matching field or null. + + + + Find an event for a given name. + + The type to search in. + The event name. + The first matching event or null. + + + + Find an event for a given name recursively (including the passed type's base types). + + The type to search in. + The event name. + The first matching event or null. + + + + Get a reference ID that is similar to the full name, but consistent between System.Reflection and Mono.Cecil. + + The method to get the ID for. + The name to use instead of the reference's own name. + The ID to use instead of the reference's declaring type ID. + Whether the type ID should be included or not. System.Reflection avoids it by default. + Whether the ID should be "simple" (name only). + The ID. + + + + Get a reference ID that is similar to the full name, but consistent between System.Reflection and Mono.Cecil. + + The call site to get the ID for. + The ID. + + + + Get a reference ID that is similar to the full name, but consistent between System.Reflection and Mono.Cecil. + + The method to get the ID for. + The name to use instead of the reference's own name. + The ID to use instead of the reference's declaring type ID. + Whether the type ID should be included or not. System.Reflection avoids it by default. + Whether the method is regarded as a proxy method or not. Setting this paramater to true will skip the first parameter. + Whether the ID should be "simple" (name only). + The ID. + + + + Get the "patch name" - the name of the target to patch - for the given member. + + The member to get the patch name for. + The patch name. + + + + Get the "patch name" - the name of the target to patch - for the given member. + + The member to get the patch name for. + The patch name. + + + + Clone the given method definition. + + The original method. + The method definition to apply the cloning process onto, or null to create a new method. + A clone of the original method. + + + + Clone the given method body. + + The original method body. + The method which will own the newly cloned method body. + A clone of the original method body. + + + + Force-update a generic parameter's position and type. + + The generic parameter to update. + The new position. + The new type. + The updated generic parameter. + + + + Resolve a given generic parameter in another context. + + The new context. + The original generic parameter. + A generic parameter provided by the given context which matches the original generic parameter. + + + + Relink the given member reference (metadata token provider). + + The reference to relink. + The relinker to use during the relinking process. + The generic context provided to relink generic references. + A relinked reference. + + + + Relink the given type reference. + + The reference to relink. + The relinker to use during the relinking process. + The generic context provided to relink generic references. + A relinked reference. + + + + Relink the given method reference. + + The reference to relink. + The relinker to use during the relinking process. + The generic context provided to relink generic references. + A relinked reference. + + + + Relink the given callsite. + + The reference to relink. + The relinker to use during the relinking process. + The generic context provided to relink generic references. + A relinked reference. + + + + Relink the given field reference. + + The reference to relink. + The relinker to use during the relinking process. + The generic context provided to relink generic references. + A relinked reference. + + + + Relink the given parameter definition. + + The reference to relink. + The relinker to use during the relinking process. + The generic context provided to relink generic references. + A relinked reference. + + + + Clone the given parameter definition. + + The original parameter definition. + A clone of the original parameter definition. + + + + Relink the given custom attribute. + + The reference to relink. + The relinker to use during the relinking process. + The generic context provided to relink generic references. + A relinked reference. + + + + Clone the given custom attribute. + + The original custom attribute. + A clone of the original custom attribute. + + + + Relink the given generic parameter reference. + + The reference to relink. + The relinker to use during the relinking process. + The generic context provided to relink generic references. + A relinked reference. + + + + Clone the given generic parameter. + + The original generic parameter. + A clone of the original generic parameter. + + + + Get the managed size of a given type. This matches an IL-level sizeof(t), even if it cannot be determined normally in C#. + Note that sizeof(t) != Marshal.SizeOf(t), f.e. when t is char. + + The type to get the size from. + The managed type size. + + + + Get a type which matches what the method should receive via ldarg.0 + + The method to obtain the "this" parameter type from. + The "this" parameter type. + + + + Get a native function pointer for a given method. This matches an IL-level ldftn. + + + The result of ldftn doesn't always match that of MethodHandle.GetFunctionPointer(). + For example, ldftn doesn't JIT-compile the method on mono, which thus keeps the class constructor untouched. + And on .NET, struct overrides (f.e. ToString) have got multiple entry points pointing towards the same code. + + The method to get a native function pointer for. + The native function pointer. + + + + A variant of ILGenerator which uses Mono.Cecil under the hood. + + + + + The underlying Mono.Cecil.Cil.ILProcessor. + + + + + Abstract version of System.Reflection.Emit.ILGenerator. See for proper documentation. + + + + + Get a "real" ILGenerator for this ILGeneratorShim. + + A "real" ILGenerator. + + + + Get the proxy type for a given ILGeneratorShim type. The proxy type implements ILGenerator. + + The ILGeneratorShim type. + The "real" ILGenerator type. + + + + Get the proxy type for a given ILGeneratorShim type. The proxy type implements ILGenerator. + + The ILGeneratorShim type. + The "real" ILGenerator type. + + + + Get the non-generic proxy type implementing ILGenerator. + + The "real" ILGenerator type, non-generic. + + + + A DynamicMethodDefinition "generator", responsible for generating a runtime MethodInfo from a DMD MethodDefinition. + + + + + + A DMDGenerator implementation using Mono.Cecil to build an in-memory assembly. + + + + + Fill the DynamicMethod with a stub. + + + + + Fill the DynamicMethod with a stub. + + + + + Emit a reference to an arbitrary object. Note that the references "leak." + + + + + Emit a reference to an arbitrary object. Note that the references "leak." + + + + + Emit a reference to an arbitrary object. Note that the references "leak." + + + + + Emit a reference to an arbitrary object. Note that the references "leak." + + + + + Allows you to remap library paths / names and specify loading flags. Useful for cross-platform compatibility. Applies only to DynDll. + + + + + Open a given library and get its handle. + + The library name. + Whether to skip using the mapping or not. + Any optional platform-specific flags. + The library handle. + + + + Try to open a given library and get its handle. + + The library name. + The library handle, or null if it failed loading. + Whether to skip using the mapping or not. + Any optional platform-specific flags. + True if the handle was obtained, false otherwise. + + + + Release a library handle obtained via OpenLibrary. Don't release the result of OpenLibrary(null)! + + The library handle. + + + + Get a function pointer for a function in the given library. + + The library handle. + The function name. + The function pointer. + + + + Get a function pointer for a function in the given library. + + The library handle. + The function name. + The function pointer, or null if it wasn't found. + True if the function pointer was obtained, false otherwise. + + + + Extension method wrapping Marshal.GetDelegateForFunctionPointer + + + + + Fill all static delegate fields with the DynDllImport attribute. + Call this early on in the static constructor. + + The type containing the DynDllImport delegate fields. + Any optional mappings similar to the static mappings. + + + + Fill all instance delegate fields with the DynDllImport attribute. + Call this early on in the constructor. + + An instance of a type containing the DynDllImport delegate fields. + Any optional mappings similar to the static mappings. + + + + Similar to DllImport, but requires you to run typeof(DeclaringType).ResolveDynDllImports(); + + + + + The library or library alias to use. + + + + + A list of possible entrypoints that the function can be resolved to. Implicitly includes the field name and delegate name. + + + + The library or library alias to use. + A list of possible entrypoints that the function can be resolved to. Implicitly includes the field name and delegate name. + + + + A mapping entry, to be used by . + + + + + The name as which the library will be resolved as. Useful to remap libraries or to provide full paths. + + + + + Platform-dependent loading flags. + + + + The name as which the library will be resolved as. Useful to remap libraries or to provide full paths. + Platform-dependent loading flags. + + + + The relinker callback delegate type. + + The reference (metadata token provider) to relink. + The generic context provided to relink generic references. + A relinked reference. + + + + Generic platform enum. + + + + + Bit applied to all OSes (Unknown, Windows, MacOS, ...). + + + + + On demand 64-bit platform bit. + + + + + Applied to all NT and NT-oid platforms (Windows). + + + + + Applied to all Unix and Unix-oid platforms (macOS, Linux, ...). + + + + + On demand ARM platform bit. + + + + + On demand Wine bit. DON'T RELY ON THIS. + + + + + Unknown OS. + + + + + Windows, using the NT kernel. + + + + + macOS, using the Darwin kernel. + + + + + Linux. + + + + + Android, using the Linux kernel. + + + + + iOS, sharing components with macOS. + + + + diff --git a/plugins/CraftFromContainers.dll b/plugins/CraftFromContainers.dll new file mode 100644 index 0000000..c935406 Binary files /dev/null and b/plugins/CraftFromContainers.dll differ diff --git a/plugins/Jotunn/CHANGELOG.md b/plugins/Jotunn/CHANGELOG.md new file mode 100644 index 0000000..55e8bde --- /dev/null +++ b/plugins/Jotunn/CHANGELOG.md @@ -0,0 +1,853 @@ +# Changelog + +## Version 2.30.2 +* Fixed Deep North assets overriding previous vanilla assets for mocking (thx OrianaVenture) +* Fixed legacy build menu not being supported by the category changes from 2.30.1 + +## Version 2.30.1 +* Added custom piece categories to the new build menu, pieces of a custom category are shown under an own tag +* Added `PieceConfig.Usage` to set the build menu tags of a piece, Jötunn guesses them from the piece if left empty +* Added `PieceTableConfig.GuessUsage` to opt out of that guessing per piece table +* Deprecated the piece table category API, piece tables don't own categories since Valheim 1.0 +* Fixed selecting a piece placing the piece of another category, the category list of a piece table is kept up to date again +* Fixed TerrainOp not being registed into the new ObjectDB.m_terrainOps / ObjectDB.m_terrainOpsByHash (thx MaikiOS) + +## Version 2.30.0 +* Updated the majority of systems for Valheim 1.0.7 (thx warp) +* Piece categories are not updated yet, Valheim overhauled the system completely. Custom pieces show up in the build menu, but don't have a category associated +* Fixed the PreBuild task case-insensitively (thx joeyparrish) + +## Version 2.29.2 +* Fixed `InputManager.AddButton` not registering the button if ZInput was already initialized + +## Version 2.29.1 +* Fixed ZoneLocation radii and clear area not being synced from prefab's location component (thx warp) +* Fixed SoftReference location proxy spawning of inactive prefabs causing duplicate objects (thx warp) +* Fixed minimap texture missmatch for map drawing (thx MidnightsFX) +* Fixed network version lookup for future game versions + +## Version 2.29.0 +* Added new method in ConsoleCommand to take a Terminal context parameter, so mods can write output to either Console or Chat depending on where the command was executed from. Backwards compatible. For more info on that see https://valheim-modding.github.io/Jotunn/tutorials/console-commands.html +* Added TMPro FontAssets shortcuts to the GUIManager + +## Version 2.28.0 +* Added YAML localization file support (thx warp) +* Added macOS development support and an overridable VALHEIM_MANAGED variable (thx warp) +* Fixed skill names lost in UI after language change (thx warp) +* Fixed errors with read-only properties in mock resolution (thx warp) + +## Version 2.27.1 +* Fixed the Vulkan compile target of internal AssetBundles (thx MidnightsFX) +* Fixed an issue where unloaded SoftReference location assets were still released, causing errors on access (thx warp) + +## Version 2.27.0 +* Added `AssetUtils.LoadImage` wrapper to resolve .netstandard 2.1 compile issues +* Added `AssetUtils.DuplicateTexture` to create a readable copy of a texture +* Fixed an error if an AssetLoader loads a null m_asset while resolving mocks. It now logs a waning with the bundle path +* Fixed recent rename of valheim_Data to Valheim_Data in the PrebuildTask and core refs for case-sensitive file systems (e.g. Linux) + +## Version 2.26.1 +* Added gui_framework.dll to PrebuildTask publicize and reference it in the JotunnLibRefsCorlib.props +* Fixed GUI initialization for Valheim 0.221.3, backwards compatible +* Fixed mock names not being sanitized in some cases + +## Version 2.26.0 +* Added CustomLocation loading via the SoftReferenceableAssets system to only load locations when needed. This requires special setup of the assets (thx warp) +* Added `AssetManager.GenerateAssetID(string)` overload (thx warp) +* Added `AssetManager.ResolveMocksOnLoad` to resolve all mocks when the SoftReference asset is loaded +* Added `AssetManager.OnSoftReferenceableAssetsReady` event +* Fixed PrefabManager.RegisterToZNetScene to skip mocks from being registered to the ZNetScene (thx warp) +* Fixed errors when rendering broken prefabs via the RenderManager + +## Version 2.25.0 +* Changed unresolved mocks to log a warning without skipping the associated CustomEntity being added to the game (thanks OrianaVenture) +* Improved mock warnings to be aggregated, showing up to 5 issues per object (thanks OrianaVenture) +* Improved consistency of return values for CustomLocalization.TryTranslate +* Fixed mocks not being resolved on a dedicated server +* Fixed an incompatibility with mods using blaxxun's LocationManager that insert null or duplicate values into AssetBundleLoader.m_assetLoaders +* Fixed custom categories not being created after PieceCategory ID 100 was reached +* Fixed hammer HUD tabs not using full available width with other mods that add custom categories +* Fixed admin list watcher starts every time running a server +* Fixed admin-only config settings being locked by default +* Fixed CustomLocalization.TryTranslate logging warnings for strings that are already localized +* Fixed log spam from localization tokens with invalid characters by logging only the first occurrence +* Fixed log spam if configs are synced to a client that doesn't have the mod installed + +## Version 2.24.3 +* Fixed config sync reset for local worlds and when configs are written to the disk (thx Searica) +* Fixed exposing Windows username in Filewatcher logs (thx Searica) +* Fixed an error with the Microsoft Store version because ZSteamSocket is not available +* Fixed missing assembly references at build time for dependent mods + +## Version 2.24.2 +* Fixed a black screen and error on the server when connecting via crossplay +* Fixed an error if no mods are installed on the server +* Fixed assets being added too early on a dedicated server + +## Version 2.24.1 +* Fixed GUI for Valheim 0.220.3 + +## Version 2.24.0 +* Added the `ConfigFileWatcher` class to setup a watcher for changes in the file system and reload the config (thx Searica) +* Added overloads to AddRequirement for items, pieces and recipe configs to simplify usage +* Changed timing of initialisation of Local AdminOnly to ZNet.Start, allowing mods to bind configs during world load (thx Searica) +* Changed default RequirementConfig recover to true + +## Version 2.23.2 +* Fixed CustomGUIFront and CustomGUIBack offset slightly to the left +* Fixed Nuget package could not be installed due to changes in the build pipeline + +## Version 2.23.1 +* Fixed RPCs could be sent twice or to the wrong players if a specific target id is used + +## Version 2.23.0 +* Added ConfigFile BindConfig and BindConfigInOrder extensions for convenience (thx Searica) +* Fixed compatibility with shudnal's ConfigurationManager + +## Version 2.22.0 +* Added `SynchronizationMode` attribute to allow mod authors to change how AdminOnly configs are handled. See https://valheim-modding.github.io/Jotunn/tutorials/config.html#admin-only-strictness (thx Searica) +* Fixed mod detection for connection compatibility now use guid instead of name (thx Searica) +* Fixed a conflict with mods that use `__state` in a ZNetScene/ObjectDB patch while the ModQuery is active + +## Version 2.21.3 +* Fixed category tabs refreshed every frame, causing saplings to spin in the cultivator + +## Version 2.21.2 +* Fixed for Valheim 0.219.14 (Bog Witch), older Valheim versions are not compatible + +## Version 2.21.1 +* Fixed changing config values in the main menu resulted in an error + +## Version 2.21.0 +* Added DungeonManager, CustomRoom and RoomConfig for custom dungeons (thx probablykory & warp) +* Added GameVersions utility to check for specific game versions +* Added ConfigManagerUtils for soft access to common ConfigurationManager functionality +* Added PieceManager.AddPieceCategory(string name) + RemovePieceCategory +* Deprecated PieceManager.AddPieceCategory(string table, string name) + RemovePieceCategory, use the new overloads +* Changed the version check of Jotunn to require the exact same version, if installed on both server and client +* Fixed AdminOnly configs were not locked if the server doesn't load Jotunn +* Fixed SynchronizationManager.PlayerIsAdmin was always true if the server doesn't load Jotunn +* Fixed parsing of mod version data for connection compatibility with only a major.minor part +* Fixed excessive debug logging in the SynchronizationManager + +## Version 2.20.3 +* Fixed explicit `AdminOnly = false` config entries being locked for editing. Introduced in 2.20.2, `AdminOnly = true` was not affected +* Fixed performance when searching for config entries to sync in large config files + +## Version 2.20.2 +* Fixed adding admin-only configs between loading to the main menu and before loading the game being locked for local editing +* Fixed network version in the disconnect window was always 27 duo to accessing a constant value +* Fixed SimpleJson deserialization of non-primitive dictionaries (thx bid) +* Fixed GUIManager asset loading to use the prefab cache and not hard crash on missing assets + +## Version 2.20.1 +* Fixed an error when cloning an item with an existing ExtEquipment +* Changed prebuild to reference Mono.Cecil from the BepInEx folder to avoid version conflicts +* Changed internal ItemManager.Items to be a dictionary +* Removed unnecessary debug logging from AssetManager + +## Version 2.20.0 +* Fixed for Valheim 0.218.15 (Ashlands), older Valheim versions may not work properly +* Added HeavyBuild to PieceCategories +* Fixed internal renaming of the Building piece category +* Fixed positioning and size of hammer categories +* Fixed warnings about mock ParticleSystem dictionaries +* Fixed CreatureManager.OnCreaturesRegistered was not invoked if no custom creatures were added + +## Version 2.19.4 +* Fixed errors when loading prefabs when running with Krumpac's Reforged (thx probablykory) +* Fixed prebuild publicizer could create ambiguous events +* Fixed prebuild publicizer to include an assembly hash to detect if it has changed +* Changed references to be copied to the build output folder when compiling a mod that uses JotunnLib.props +* Simplified vanilla category count lookup + +## Version 2.19.3 +* Fixed piece categories to dynamically find the vanilla category count +* Fixed clear area of locations was not applied since changes in Valheim 0.217.43 +* Fixed mock resolve of components on GameObjects, like workstations in recipes +* Marked LocationConfig.Location as deprecated because the association is never valid + +## Version 2.19.2 +* Changed PrefabManager.Cache to prefer SoftReferences over searching loaded assets, in order to be more reliable future proof. This especially affects (directly mocked) Meshes, please see the [Mesh List](https://valheim-modding.github.io/Jotunn/data/prefabs/mesh-list.html) and update your mocks from the Internal Name to the SoftReference Name +* Fixed item variants were not correctly applied when the item was added in Awake/Start +* Fixed a potential error when calling PrefabManager.Cache.GetPrefab for an invalid Mesh + +## Version 2.19.1 +* Fixed an issue where the game would load infinitely +* Fixed mocks were not being resolved if the assets are only used in locations +* Fixed mock meshes not being resolved correctly in some cases +* Fixed an error when modded prefabs are cloned before the vanilla asset system is ready +* Fixed assemblies being referenced that are no longer shipped + +## Version 2.19.0 +* Fixed for Valheim 0.217.46, not working with older Valheim versions +* Added AssetManager for direct interactions with the new SoftReference system. Existing entities and mocks are already handled implicitly + +## Version 2.18.2 +* Fixed more cases where components were not correctly removed in the RenderManager (thx bid) + +## Version 2.18.1 +* Fixed errors about failing to remove components in the RenderManager, which could occur in specific inheritance edge cases +* Fixed mouse buttons from configs were not converted to the new input system +* Fixed button config changes did not update the button at runtime in singleplayer + +## Version 2.18.0 +* Added GameObject mocking, i.e. objects in the hierarchy with the JVLmock_ prefix will be swapped with the real object +* Added non-enforced mods to version check messages, so changed enforcement across mod versions can be detected and applied on the server +* Added rendering of particle effects to the RenderManager (thx bid) +* Added RenderManager.RenderRequest.ParticleSimulationTime to control the time of the particle simulation (thx bid) +* Added events to ZoneManager: OnLocationsRegistered, OnClutterRegistered, OnVanillaVegetationAvailable and OnVegetationRegistered + +## Version 2.17.0 +* Added PrefabManager.Cache.Clear to the API +* Added a PrefabManager.Cache clear before ZoneSystem.SetupLocations to resolve mocked assets that are loaded later than usual +* Changed the ZoneManager to always initialize the PrefabManager to prevent timing issues +* Fixed warnings about missing textures from mocks on dedicated servers +* Fixed category text not being resized automatically +* Fixed category tokens omitting invalid characters like spaces from the original name, they are now replaced with an underscore + +## Version 2.16.2 +* Fixed a bug where newly spawned locations did not spawn their child net objects anymore after a relog without restart was performed + +## Version 2.16.1 +* Fixed mocks targeting an asset starting with an underscore were not split correctly and threw exceptions +* Fixed mocks using the asset path were not cleaned and could fail to resolve + +## Version 2.16.0 +* Added mocking of ambiguous assets like meshes. This can be done via a new `JVLmock_PrefabName__ChildName` format where assets can be searched inside a named prefab. Multiple children can be provided for a specific path to a child, otherwise breadth search is used (thx OrianaVenture) +* Added Weight and StackSize properties to ItemConfig, items are unaffected by default values +* Added Icon property to ItemConfig for simpler access to Icons for non-variants +* Added optional `BEPINEX_PATH` environment variable for build process (thx Defee) +* Improved warnings of unresolvable mocks + +## Version 2.15.2 +* Fixed ButtonConfigs with mouse keys were not correctly converted for the input changes in Valheim 0.217.38 + +## Version 2.15.1 +* Fixed InputManager for Valheim 0.217.38 + +## Version 2.15.0 +* Added OnSyncingConfiguration event to the SynchronizationManager that is called before configs are synced on the server/client (thx Searica) +* Added UpdatedPluginGUIDs to arguments of OnConfigurationSynchronized event (thx Searica) +* Added OnConfigurationWindowClosed event to the SynchronizationManager (thx Searica) +* Added more helper methods for GameObject, Transform and String (thx Searica) +* Changed SynchronizationManager OnConfigurationSynchronized event to trigger on both server and client (thx Searica) +* Fixed a build time warning in ScaleTexture that prevents Jotunn from loading in Unity 2022.3.12 projects +* Fixed a bug where the GUIManager could be initialized at shutdown with certain calls, resulting in an error + +## Version 2.14.6 +* Added a soft dependency to the LocalizationCache mod so that it loads a bit earlier. This has no direct impact on Jötunn +* Changed prebuild references from the unstripped_corlib folder to the game assemblies as Valheim is no longer unstripped and the folder has been removed from the BepInEx package +* Fixed the debug mode Jötunn ASCII art +* Fixed AddComponentCopy was setting the name and tag of the Component's GameObject +* Fixed KeyHints for left hand items +* Fixed sprite rendering results in mostly empty sprites in Unity 2022, backwards compatible and an existing cached sprite will be recreated + +## Version 2.14.5 +* Fixed GUIManager assets not being properly initialized when later accessed, causing some elements to not show up +* Fixed an edge case where holding a reference to the ObjectDB causes it not to be destroyed correctly. This fixes some errors on logout with certain mods + +## Version 2.14.4 +* Fixed KeyHints display +* Fixed internal piece table list was not available if the PieceManager was initialised after ObjectDB.Awake +* Fixed internal piece table list was not fully updated if the game was reloaded without a restart +* Fixed an error when a development build of Valheim is used + +## Version 2.14.3 +* Compatible with Valheim version 0.217.22, not working with an older version +* Updated and compiled for BepInExPack 5.4.2200 + +## Version 2.14.2 +* Fixed adding commands being aborted if a command tries to override an existing name +* Removed the console clear command to improve mod compatibility. With the recent changes, the command wasn't always added anyway + +## Version 2.14.1 +* Fixed some errors when a Jotunn dependent mod has no BepInEx dependency set and loads before Jotunn. A warning will be logged +* Fixed items were not added to the main menu ObjectDB if added in the OnVanillaPrefabsAvailable event and thus not visually shown on the player +* Fixed input block did not prevent mouse wheel character zoom +* Improved module initialisation logging by unifying messages + +## Version 2.14.0 +* Fixed the SynchronizationManager wasn't always initialised, resulting in no sync of admin configs + +## Version 2.13.0 +* Improved startup time by only initialising accessed managers. This reduces the load time without dependent mods by about 90% (on my machine under 100ms instead of 800ms), making Jötunn almost unnoticeable. When all managers are accessed, the overall startup time is the same as before. Also, if a Valheim update breaks some parts, only loaded managers are affected +* Added `AssetUtils.LoadTextFromResources` overload without assembly parameter +* Added CustomCreature constructor with AssetBundle parameter +* Added `ZoneManager.CreateLocationContainer` with AssetBundle parameter +* Added `CustomVegetation.IsValid` interface +* Added `RequirementConfig.IsValid` interface +* Added recipe RequireOnlyOneIngredient and QualityResultAmountMultiplier +* Fixed GetOrAddComponent to use TryGetComponent (thx redseiko) +* Improved error messages of entities loaded directly from AssetBundles: CustomClutter, CustomCreature, CustomItem, CustomPiece, CustomPieceTable, CustomPrefab, CustomVegetation +* Improved PrefabManager.GetPrefab to search for items in ObjectDB if available +* Improved startup time of SkillManager + +## Version 2.12.7 +* Fixed input block did not prevent the map from opening +* Improved Kitbash error and warning messages to include the mod name and affected Kitbash settings + +## Version 2.12.6 +* Fixed input block did not prevent input from closing the inventory +* Fixed PrefabManager.Cache to prefer materials with a non-error shader + +## Version 2.12.5 +* Fixed NRE using KeyHints +* Fixed Mouse cursor not visible when blocking Input for UI + +## Version 2.12.4 +* Fixed mock resolution to not fail when a member throws an exception on GetValue. This happens in rare cases, for example when mocking a TMP component (thx OrianaVenture) + +## Version 2.12.3 +* Fixed an error with the console command for the upcoming 0.217 update (currently in PTB), still compatible with the stable Valheim release (0.216.9). Note that the PTB branch isn't supported and may cause unexpected issues at any time +* Fixed JotunnBuildTask compile issues for .NET 7.0 + +## Version 2.12.2 +* Fixed an error when switching tabs with Q/E and no custom categories where added +* Fixed order of custom tabs with other mods that add custom categories + +## Version 2.12.1 +* Fixed compatibility issues with the custom hammer tabs when Auga is installed. There will be some warnings as some visual changes can't be applied but these should not affect the functionality + +## Version 2.12.0 +* Compatible with Valheim version 0.216.9, not working with an older version +* Added prefab name helpers for CookingStations, CraftingStations, Fermenters, Incinerators, PieceCategories, PieceTables and Smelters +* Added `CustomPiece.Category` helper property to make it easier to set the piece category at runtime. +* Added `PieceManager.Instance.GetPieceCategoriesMap` to get a complete map of all piece categories +* Reworked custom piece categories to be compatible with other mods. This changes some internal category ids +* Changed custom hammer tabs to stack instead of scroll. Tabs also no longer have a dynamic width, instead the text tires to fit the tab +* Changed `PieceManager.GetPieceCategories` to be obsolete, use `PieceManager.Instance.GetPieceCategoriesMap` instead to get a complete map of all piece categories +* Changed `PieceManager.PieceCategorySettings` to be obsolete as they are no longer used +* Changed `PieceManager.RemovePieceCategory` to no longer remove categories where a piece is still assigned to the category. This is to prevent problems with other mods that might still use this category +* Changed Manager Init() methods to be private and not callable by mods. They were not intended to be called by mods and could cause issues +* Changed Mock resolve depth from 3 to 5, this should catch some edge cases where fields are nested deeper +* Changed empty CustomLocalization constructor to be marked obsolete, LocalizationManager.Instance.GetLocalization() should be used instead +* Fixed empty translation values where not allowed, thus a valid key can be translated to an empty string +* Fixed translations not being added to the Localization instance if it was already initialized +* Slightly improved loading time of big mod packs when creating custom entities (again) + +## Version 2.11.7 +* Added Valheim network version check to the disconnect window to better identify the cause of a disconnect. Only visible if both server and client are running Jotunn 2.11.7 or higher +* Removed the Valheim version string check from the disconnect window, as the network version is used for the version check + +## Version 2.11.6 +* Fixed an issue with custom category tabs where the hammer menu wouldn't open when using a controller + +## Version 2.11.5 +* Fixed custom category tabs caused errors after relogging + +## Version 2.11.4 +* Added the magic string `(HiddenCategory)` to disabled category tab names, so other mods can detect them easier +* Changed that vanilla tabs are always enabled for vanilla tools and only Jotunn managed and vanilla tabs can be disabled + +## Version 2.11.3 +* Compatible with Valheim version 0.214.300 and the upcoming 0.215.1 patch +* Fixed a client with a different Valheim version will no longer be additionally disconnected by Jötunn. If the player was disconnected, a mismatching Valheim version will still be displayed +* Fixed side-loaded localisations being loaded too early, causing translations to be added to the internal Jötunn localisation instead of the respective mod +* Fixed custom hammer tabs had the wrong size when being localised +* Fixed scroll of last custom hammer tab was not correct +* Fixed a compatibility issue with Auga because of the changed hammer tabs +* Slightly improved loading time of big mod packs by caching mod info used when creating custom entities + +## Version 2.11.2 +* Compatible with Valheim version 0.214.300 + +## Version 2.11.1 +* Fixed KeyHints not being correctly destroyed when using inventories with containers +* Fixed ItemManager.RemoveItem was not removing the item from the active ObjectDB if it already existed +* Fixed an issue that caused client config values to not reset correctly when a mod used shared ConfigurationManagerAttributes/ConfigDescription with server enforced values + +## Version 2.11.0 +* Compatible with Valheim version 0.214.2 +* Added Norse fonts and additional colors to the GUIManger (thx SpikeHimself) +* Added interface to remove a custom item conversion +* Added reference to the BepInExPack 5.4.2100 +* Added reference to Unity.TextMeshPro in the NuGet package +* Updated ConfigurationManagerAttributes to match BepInEx.ConfigurationManager v17.0 +* Updated the localization injection to be easier and removed the need to load vanilla translations a second time. Because the implementation concept changed, debug logs will no longer be printed +* Fixed dropdown created with GUIManager.CreateDropDown was not in the correct UI layer, causing it to be wrongly rendered in VR (thx SpikeHimself) +* Fixed calling LocalizationManager/CustomLocalization.TryTranslate() could cause the game localisation to be initialized too early +* Fixed an error inside the ModQuery if a null prefab is inside ZNetScene or ObjectDB +* Fixed an error caused by releasing a render texture too early +* Fixed KeyHints for keyboard, Gamepad hints are still not working a 100% +* Removed changing the hammer category tab width and removed re-parenting of the tab border for better compatibility + +## Version 2.10.4 +* Fixed that same item conversions could not be added to different stations +* Fixed custom skills names were not being added to autocomplete in cheat commands +* Fixed wrong console outputs when using custom skills in cheat commands + +## Version 2.10.3 +* Fixed ServerCharacters from showing up in the compatibility window as it does it's own version check on the modified version string +* Added explanation for further steps to the compatibility window + +## Version 2.10.2 +* Changed PieceConfig to not override piece requirements when no custom requirements were provided +* Changed PieceConfig, ItemConfig and RecipeConfig to remove non valid requirements (no item name or amount set) +* Changed Mocks to not resolve fields and properties marked as `NonSerialized` +* Improved warning messages with custom localization +* Fixed warning messages with a source mod where always attributed to Jotunn.Logger instead of the correct calling type + +## Version 2.10.1 +* Added [Server Troubleshooting](https://github.com/Valheim-Modding/Wiki/wiki/Server-Troubleshooting) link as a button to the compatibility window +* Changed "open log file" button to "open log folder" in the compatibility window +* Fixed an edge case where PrefabManager.Cache preferred the prefab for ObjectDB parent instead of the scene object +* Fixed an error when an independent mod adds a prefab twice to ObjectDB. A warning will be logged with the prefab name and hash to help debugging, but vanilla or other mods may still have issues with the double prefab +* Fixed an error when available pieces in the build hammer where not initialised properly +* Fixed an error that could occur when a build tab is localised +* Fixed dynamic build tab width was not working for localised tabs + +## Version 2.10.0 +* Deprecated "ChanceToSpawn" in LocationConfig and made it compatible with version 0.212.6 +* Added Remove and Destroy methods to the ZoneManager +* Added method to inject a ZoneLocation at runtime to the ZoneManager +* Added missing GetClutter without mod guid to ModQuery and cleanup code +* Added catching of patch errors with the ModQuery to log a clean error on the console and avoid unrelated errors +* Added AddInitialSynchronization to SynchronizationManager, this allows sending arbitrary data to the connecting client and making sure it will be received before the client's connection is fully established +* Added registration of custom ConfigFiles to SynchronizationManager +* Fixed RenderManager inconsistency between a headless server and normal client. Instead of always returning null, an empty sprite is returned on headless when it should have been rendered +* Fixed trying to insert Jötunn's localisation multiple times + +## Version 2.9.0 +* Big compatibility window improvements: internal cleanup, better use of available space, button to open the log file, improved language and added german localization +* Changed that mocked shaders will not be resolved on a headless server because they are not available. This stops unnecessary warnings from being printed +* Fixed crossplay connection issues properly and removed the hotfix from Jotunn 2.8.1 +* Fixed admin check was false instead of true in some special cases + +## Version 2.8.1 +* Implemented hotfix for PlayFab connection issues (disables vanilla compression again, but works for now at least) + +## Version 2.8.0 +* Compatible with Valheim version 0.211.11 +* Fixed connection issues in Steam multiplayer with the latest Valheim patch. Crossplay (XBox multiplayer) is not working yet due to bigger changes, we are working on solving this issue +* Marked PatchInit attribute as obsolete + +## Version 2.7.9 +* Added ZoneManager.OnVanillaClutterAvailable event +* Added CustomClutter to ModRegistry +* Fixed mocked material textures/shaders where not directly fixed after they were injected. Properties that are not available at this time are still delayed +* Fixed connection issues with the upcoming cross play update +* Fixed admin checks for the upcoming cross play update + +## Version 2.7.8 +* Added custom clutter, check out the tutorial at https://valheim-modding.github.io/Jotunn/tutorials/zones.html#adding-clutter +* Improved mod compatibility window, the disconnect reason is shown inside the Jotunn window +* Fixed mocking of some textures loaded by the game after vanilla prefabs are available + +## Version 2.7.7 +* Fixed GUIManager.BlockInput also blocking Escape from opening the menu in-game +* Fixed Shader mocking and enabled it again. Shaders are a bit special and only those that are correctly marked as mocks are resolved, please see https://valheim-modding.github.io/Jotunn/tutorials/asset-mocking.html#shader-mocking +* Fixed disabling a piece inside a PieceConfig was not working +* Made UndoCreate and UndoRemove more extensible + +## Version 2.7.6 +* Added fixed Hint to ButtonConfig, overrides translated HintToken +* Fixed source mod of new prefabs in custom locations is now set to the corresponding mod instead of Jotunn + +## Version 2.7.5 +* Disabled mock shader resolve, seems to be causing problems and needs to be investigated more + +## Version 2.7.4 +* Changed that non-resolvable mock textures on a material only print a warning instead of skipping the whole prefab +* Fixed mock system did not resolve some arrays correctly +* Improved warning messages to include the source mod where available + +## Version 2.7.3 +* Added UndoManager to handle undo and redo actions and queue management, check out the tutorial at https://valheim-modding.github.io/Jotunn/tutorials/undoqueue.html (big thx to Jere) +* Refactored and improved the ModQuery utility +* Reworked mock system to improve world loading time, up to 5x faster than the old system +* Added support for shaders and materials to the mock system + +## Version 2.7.2 +* Fixed possible NRE in SyncManager +* Opened up some previously internal interfaces for mods to use (e.g. BepInExUtils) + +## Version 2.7.1 +* Fixed Bep ConfigManager hooking for config sync not working sometimes +* Slight improvements of startup time + +## Version 2.7.0 +* Removed mod settings as they have caused problems and are a redundant feature. The BepInEx ConfigurationManager can be used instead + +## Version 2.6.12 +* Fixed JotunnBuildTask. This has no effect on the actual game but fixes the NuGet package upload, meaning the mod version and NuGet version match again + +## Version 2.6.11 +* Compatible with Valheim version 0.209.8 +* Fixed ModQuery has not cleared old prefabs, resulting in null instances + +## Version 2.6.10 +* Fixed mod settings could bypass ServerSync settings +* Fixed mod settings slider could bypass readonly settings + +## Version 2.6.9 +* Fixed error of ModQuery if no ObjectDB/ZNetScene is available. + +## Version 2.6.8 +* Changed mod settings to display all mods, not just Jötunn ones +* Added config option to disable the mod settings completely +* Added helper methods for CustomConfigs +* Fixed the PrefabManager Cache chose a child GameObject in rare cases, even if a better prefab with the same name existed +* Fixed cache path of rendered icons could contain illegal characters +* Fixed NRE of icon rendering if the prefab has null bones +* Fixed language loading if an empty language was saved +* Fixed tabs were rebuilt every time in RemovePieceCategory, even if categories have not changed +* Fixed NRE of ModQuery and slightly improved performance +* Fixed vanilla items could be detected as modded ones in ModQuery if the mod calls UpdateItemHashes in a prefix before vanilla +* Improved performance of adding and retrieving custom pieces + +## Version 2.6.7 +* Added display of the Valheim version string to the compatibility window. If a mismatch is produced by a mod, it will be displayed accordingly +* Added the ModQuery class which allows to get metadata about content of loaded mods, including non-Jötunn ones. It is disabled by default to not create unnecessary loading time when not used +* Added hammer tab UI settings to the public API + +## Version 2.6.6 +* Added automatic refresh of vanilla locations after OnVanillaLocationsAvailable to prevent ZNetView problems +* Added GetPieceCategory to the PieceManager for runtime translation of custom piece table categories to their int values +* Fixed NRE error message when client has disconnected before initial data sending + +## Version 2.6.5 +* Added RemovePieceCategory to the PieceManager to remove a category from a piece table again (works at runtime) +* Added GetPieceTables to the PieceManager to get a list of all piece tables in the game +* Added dynamic tab width calculation for custom piece categories +* Fixed pieces with PieceCategory.All were not displayed in custom tabs + +## Version 2.6.4 +* Fixed a CustomLocation was not prepared correctly if a deactivated prefab was passed, causing it to spawn inside itself when proximity loaded again +* Fixed vanilla piece categories could be hidden when a mod used the long piece table name + +## Version 2.6.3 +* Fixed connection error on first connection attempt with QuickConnect +* Fixed the compatibility window was not showing up, if the server has no password +* Fixed a client could sometimes connect to a server, even if mods are incompatible + +## Version 2.6.2 +* Fixed custom category display using Auga (and probably other UI mods) +* Fixed Mod Settings FPS drop + +## Version 2.6.1 +* Removed the MMHOOK dependency from Jötunn. Mods using MMHOOK themself should list the HookGenPatcher as a dependency directly. +* Jötunn's PrebuildTask does not generate MMHOOK dlls any more, publicized dlls can still be generated automatically. + +## Version 2.6.0 +* Compatible with Valheim version 0.207.20 +* KeyHint performance improvements +* Fixed custom RPCs not routing to "self" +* Fixed empty KeyboardShortcut saving (thx Heinermann) +* Fixed Settings closing on Escape in KeyBind + +## Version 2.5.1 +* Added consumable items to CreatureConfig +* Added faction/group to CreatureConfig +* Added cumulative level effects for custom creatures (thx A Sharp Pen) +* Compiled against BepInEx 5.4.1900 + +## Version 2.5.0 +* Added utility methods for texture rescaling to Utils.ShaderHelper +* Added CustomLocation.IsCustomLocation to check if a prefab is a custom location added by Jötunn +* Added CustomVegetation.IsCustomVegetation to check if a prefab is a custom vegetation added by Jötunn +* Added ZoneManager.GetCustomLocation +* Fixed setting MapOverlay.Enabled in code to also change the GUI toggle +* Fixed ZPackage corruption in certain custom RPC scenarios + +## Version 2.4.10 +* Added CreatureManager to inject custom creatures into the game using basic drop and spawn configs (see https://valheim-modding.github.io/Jotunn/tutorials/creatures.html for a tutorial) +* Added optional icon cache to the RenderManager (thx MSchmoecker) + +## Version 2.4.9 +* LocationContainer always create instances, add your custom locations directly to the manager if you don't want to alter it further (see https://valheim-modding.github.io/Jotunn/tutorials/zones.html#creating-locations-from-assetbundles for more information) + +## Version 2.4.8 +* Added mock support for custom vegetation +* Added mock support for DropTable structs +* Removed direct GO mock replacement + +## Version 2.4.7 +* Fixed mock resolving of certain components (piece place effects for example) + +## Version 2.4.6 +* Custom skills add an additional localization token to the game using the format "$skill_\{hashcode\}" +* Fixed multiple issues with custom locations (mocking, ZNetView handling, RandomSpawns) +* Added FixReference property to CustomLocation, obsoleted the parameter on ZoneManager.AddLocation and the old CustomLocation constructors +* Added possibility to create CustomLocation instances as early as the mod's Awake() +* __Mod authors are encouraged to adapt their mods to the new FixReference property__ + +## Version 2.4.5 +* Added MinimapManager, enabling mods to draw on the map or create overlays for it (see https://valheim-modding.github.io/Jotunn/tutorials/map.html for tutorials) (thx Nosirrom) +* Fixed NRE on mod compat window +* ModStub can have a different deploy path than the Valheim directory (deploying to a r2modman profile for example) + +## Version 2.4.4 +* Fixed in-game menu not reacting on Esc after closing mod settings +* Fixed a NRE condition on the mod settings + +## Version 2.4.3 +* Fixed admin config display for non-admin users + +## Version 2.4.2 +* Reworked the mod settings menu completely using Unity, it should be much faster now and also removed some oddities from using a vanilla Settings clone before +* Added support for Vector2 and generic enums in mod settings +* Removed necessity for key binds backed by a config to also have a button registered in ZInput to show up in the mod settings +* Added some RectTransform extensions for world positioning and overlapping +* Changed the timing of GUIManager.OnCustomGUIAvailable to execute *after* custom Localization has been loaded to ensure GUI content is properly localized +* Fixed NRE while resolving mock references for null enumerables +* Fixed the naming of location containers in ZoneManager +* ItemConfigs without requirements don't create a Recipe for that item +* Updated the asset creation guide to reflect Valheim's recent updates (https://valheim-modding.github.io/Jotunn/tutorials/asset-creation.html) +* Reworked the Asset Mocking tutorial completely (https://valheim-modding.github.io/Jotunn/tutorials/asset-mocking.html) + +## Version 2.4.1 +* Fixed compatibility of RenderManager by not destroying Components any more (RRR for example) + +## Version 2.4.0 +* Added ZoneManager for custom Locations and Vegetation (see https://valheim-modding.github.io/Jotunn/tutorials/zones.html for tutorials) (thx MarcoPogo) +* Added NetworkManager for custom RPCs with a simpler interface, automatic package compression/slicing and Coroutines (see https://valheim-modding.github.io/Jotunn/tutorials/rpcs.html for tutorials) +* Added support for mocked objects in Enumerables mixed with non-mocked objects +* Fixed mock resolution in HashSets +* Added language tokens and translations to the docs (https://valheim-modding.github.io/Jotunn/data/localization/overview.html) (thx joeyparrish) + +## Version 2.3.12 +* Added RenderManager.Render() which renders the given GameObject in the same frame instead of waiting for the next frame. Marked EnqueueRender obsolete. +* Force unload mod's loaded asset bundles on Game.OnApplicationQuit to prevent the Unity engine from crashing +* Depend on BepInExPack-5.4.1601 for the new Unity engine corlibs + +## Version 2.3.10 +* Added custom piece table category injection at runtime +* Added RenderRequest for the RenderManager to define options for the render process +* Fixed mock resolving of generic List types +* Fixed CustomGUI anchor settings +* Fixed Dropdown list sizing (thx joeyparrish) + +## Version 2.3.9 +* Added the possibility to define vanilla console command modifiers in ConsoleCommand (thx joeyparrish) +* Added the possibility to define command options in ConsoleCommand +* Fixed exception for mods loaded without PluginInfo.Location set +* Fixed NRE on missing KeyHint objects + +## Version 2.3.8 +* Added RenderManager to render Sprites from GameObjects at runtime (thx MSchmoecker) +* Added GamepadButton to the InputManager and ButtonConfig - custom inputs can now define a gamepad button corresponding to the keyboard input +* Added gamepad buttons to KeyHints for custom inputs as well as vanilla key overrides +* Gamepad buttons can be defined in the mod settings if they are bound to a config +* Refactored custom KeyHints into their own KeyHintManager and obsoleted the API in the GUIManager +* Fixed automatic mod recognition from filesystem paths (thx Digitalroot) +* Fixed duplication check on ObjectDB not always working correctly +* Fixed NRE in ModCompat for VersionCheckOnly mods +* Fixed a strange hard crash when using GUIManager.IsHeadless() + +## Version 2.3.7 +* Fixed translation of the custom skill raise message +* Added ZInput.GetButton support for custom buttons + +## Version 2.3.6 +* Added JSON helper methods to PieceConfig +* Added support for BepInEx' KeyboardShortcuts in ButtonConfig and InputManager +* Added slider for numerical values in the mod settings GUI (thx MSchmoecker) +* Item property in ItemConfig is publicly readable now so it can be serialized +* Fixed button config in mod settings for control keys +* Fixed the localization for Jötunn tokens + +## Version 2.3.5 +* Added support for custom Obliterator/Incinerator item conversions + +## Version 2.3.4 +* Fixed BoneReorder for equip with disabled attach points (thx GoldenJude) +* Fixed DragWindowCntrl not respecting the screen size sometimes (thx MSchmoecker) +* Fixed ModCompat NRE with missing "NotEnforced" mods +* Fixed double values not saving in mod settings +* Added support for KeyboardShortcuts in mod settings + +## Version 2.3.3 +* Reworked the mod compatibility checks +* Obsoleted and replaced some misleading named compat level +* Added two new mod compat level: ServerMustHaveMod and ClientMustHaveMod +* __Please check your mod's compat level and change appropriately__ +* See https://valheim-modding.github.io/Jotunn/tutorials/networkcompatibility.html for a list of the new compat levels + +## Version 2.3.2 +* Adapted the custom piece categories to the new width +* Inject custom commands into the new Terminal system + +## Version 2.3.1 +* Added support for double values in the mod settings +* Collected new H&H dumps at https://valheim-modding.github.io/Jotunn/data/intro.html + +## Version 2.3.0 +* Basic H&H compatibility. Looks like everything works but problems might still arise +* __Please report any problems you encounter, preferably on our Discord__ +* Added possibility to traverse child GameObjects when resolving mocks (FixReference = true) +* Mock references added via Config are resolved automatically, set FixReference = false if your actual GO does not use mocks +* __Check your mod's items and pieces if they really need FixReference set to true__ +* Fundamentally refactored the Localization system - mods can and should add a CustomLocalization wrapper for all mod specific localization from now on +* Localization is stored per mod, so you can create / add only one custom localization instance, which behaves like the LocalizationManager in older releases +* Marked the old API obsolete, __existing mods are encouraged to adapt the new system__ +* See https://valheim-modding.github.io/Jotunn/tutorials/localization.html for more information about the new localization system +* Added ApplyTextStyle to GUIManager (thx MSchmoecker) +* Enabled item style variants for items which do not support variants in vanilla (e.g. swords or armor) + +## Version 2.2.9 +* Fixed compat errors + +## Version 2.2.8 +* Added global mod registry, collecting added entities per mod +* Added entity CustomPrefab including the possibility to let Jötunn fix mock references +* Show color on the ColorPicker button in the mod settings +* Refactored manually built controls in GUIManager to use Unity's DefaultControls (thx redseiko) +* GUIManager.ApplyButtonStyle does not add a Text GO any more +* Added GUIManager.CreateInputField +* Fixed sprite atlas loading +* Fixed OnLocalizationAdded event timing +* Deprecated ItemManager.OnVanillaItemsAvailable, mods should use PrefabManager.OnVanillaObjectsAvailable now + +## Version 2.2.7 +* Added loading of dll embedded text assets (thx MSchmoecker) +* Added "ApplyStyle" methods for Scrollbars (thx MSchmoecker) +* Added material and shader dumps to the docs (https://valheim-modding.github.io/Jotunn/data/prefabs/overview.html) +* Fixed the ScrollView pivot in GUIManager.CreateScrollView +* Added removal of failed items/pieces from ZNetScene + +## Version 2.2.6 +* Fixed category translations with special chars in the category +* Hardened Mock creation a bit + +## Version 2.2.5 +* LocalizationManager.TryTranslate searches custom localization first with english fallback +* Custom piece categories and the "Mod Settings" menu entry can be translated, for token names see https://valheim-modding.github.io/Jotunn/tutorials/localization.html#localizable-content-in-jötunn +* Fixed a bug where custom piece descriptions were not imported (thx Dominowood371) +* Fixed config "Order" attribute interpretation in the "Mod Settings" (thx Digitalroot) + +## Version 2.2.4 +* ModCompatibility now disconnects clients from vanilla servers when the client runs enforceable mods +* Added a brand new Mod Settings GUI, accessible from the menu list +* Don't show server side configs in the GUI when a client has no admin rights +* Added two new custom GUI containers for mods to use (in front of and behind Valheim's own GUI) +* Marked the old PixelFix container as obsolete +* Added a new event after custom Localization got added +* Fixed a NRE with dynamic KeyHints +* Fixed mod compatibility window showing on version errors not related to Jötunn +* Track requests to BlockInput and release the block only after all requests are released +* Added new flag "ActiveInCustomGUI" to ButtonConfig to receive button presses while GUIManager.BlockInput is active + +## Version 2.2.3 +* Don't use own canvas for custom GUI (fixes compat with VHVR for example) +* Compile against BepInEx v5.4.15 + +## Version 2.2.2 +* Fixed NREs for mods without proper BepInEx-Info +* Fixed some NREs with custom GUI components (Auga for example). Jötunn does not brake anything any more but some features won't work with a custom GUI. + +## Version 2.2.1 +* Fixed a bug which rendered clients unable to login to dedicated servers + +## Version 2.2.0 +* Custom items get loaded into the ObjectDB _before_ any HarmonyX hooks run (fixes compatibility with BetterTrader for example) +* Added non-server-blocking, fragemented and compressed config sync to the clients (thx to [blaxxun](https://github.com/blaxxun-boop)) +* Server configs get displayed in the Settings but don't overwrite local configs when connected to a server +* Player with admin status on a server can change server config values directly in the Settings without touching the local configuration +* Compatible with reloading config changes from the filesystem at runtime, changes get propagated to the server or clients if applicable +* AdminOnly configs can be changed in the main menu for local games +* Added event to subscribe to when a players admin status changes on a server, gets also synced to the client +* Added ColorPicker in the "ModConfig" Settings tab to pick color values easily +* Added ColorPicker and GradientPicker to the GUIManager for mods to use +* Added more GUIManager stuff (apply styles for GUI elements, mod usable GUI dragging component) +* Moved most of Jötunns console output to Debug level + +## Version 2.1.3 +* Fixed KeyCode configs without backing ButtonConfig +* Fixed KeyCode settings display +* Fixed constant NRE when another mod throws at sceneLoaded +* Added tokens of items and pieces to the table dumps +* Added method to query registered custom piece category names + +## Version 2.1.2 +* Fixed first category selection on custom tables +* Fixed compatibility with mods hooking prev/next category with HarmonyX (e.g. BuildExpansion) + +## Version 2.1.1 +* Fixed some errors with custom piece table categories +* Custom KeyHints for "missing keys" fallback to the provided button name + +## Version 2.1.0 +* Added new entity CustomPieceTable and corresponding PieceTableConfig +* Added custom piece categories per table via PieceTableConfig +* Added custom piece categories per piece via PieceConfig +* Added piece table reference for custom tools via ItemConfig +* Added support for tokenized piece names and descriptions via PieceConfig +* Added item variations via ItemConfig +* Added possibility to directly link a BepInEx ConfigEntry to a ButtonConfig +* Added colored and invisible config entries +* Added KitbashManager to allow Kitbashing +* Added option to CustomButton to ignore custom inputs when a GUI is open (e.g. chat, console) +* Added event in GUIManager when the PixelFix got recreated and custom GUI can be added +* Added static method to the GUIManager to block all input except GUI +* Added static method to the GUIManager to detect a headless/dedicated server before ZNet is instantiated +* Removed game hooks on certain managers when running on a dedicated server (GUI, Input) +* Added registering of prefabs "on the fly" to the game in ItemManager and PieceManager +* SynchronizationManager.PlayerIsAdmin gets synced with the server status when changed +* Removed icon enforcement for CustomItems without a Recipe (e.g. monster drops) +* Localization falls back to english when no translation is found in the users language +* Fixed a bug in ItemConfig where the RepairStation was added as the CraftingStation +* Plenty of new and revised documentation at https://valheim-modding.github.io/Jotunn + +## Version 2.0.12 +* Disabled SaveManager for now to counter lags +* Added removal of erroneous entities from managers +* Added better handling of empty strings in configs +* Removed output of managers when no custom entities got added +* Added global changelog on github (https://github.com/Valheim-Modding/Jotunn/blob/dev/CHANGELOG.md) + +## Version 2.0.11 +* Added support for Color type configurations in the mod settings GUI +* Added visual indicator for server side configurations in the mod settings GUI +* Added an event for mods to subscribe to when configuration got synced from the server +* Fixed KeyHints not disappearing when an item is unequipped +* Added KeyHints per Piece +* Added support for registering KeyHints "on the fly" +* Included xmldoc and debug files in releases +* Removed Jötunn version string in main menu + +## Version 2.0.10 +* Fixed mod compatibility window not scrollable +* Fixed "invalid command" output when using other mod's commands +* Fixed rare NRE when resolving mock refs +* Added new network compatibility mode so vanilla clients can connect if no loaded mod *enforces*compatibility +* Changed the modified "help" output +* Restructured and extended the docs at https://valheim-modding.github.io/Jotunn/ + +## Version 2.0.9 +* Compatible with Valheim 0.153.2 +* Fixed ModCompat window showing when a wrong password was entered + +## Version 2.0.8 +* Mocks which can not resolve throw Exceptions now (mod devs should check if their mods *have these issues when updating) +* Items, Pieces, Recipes etc don't get added to the game any more when Mocks are not *resolved preventing follow-up errors +* More sanity checks for custom entities (Recipe names for example) - also preventing *follow-up errors +* ModCompatibility does not wrap the PeerInfo ZPackage any more but registers own RPC *calls +* Automatic lib refs from Jötunn now check if the Unity libs reside in *"unstripped_managed" and import these into the project +* Custom console commands are case insensitive now +* PieceManager collects and exposes a list of all PieceTables for mods to query +* Fixed KeyHint NRE (hopefully) + +## Version 2.0.7 +* Fixed a rare compat issue with ZRpc calls +* Added defaults to RequirementConfig + +## Version 2.0.6 +* Fixed ModCompatibility mode "NoNeedForSync" +* Added "User installation" to the documentation with instructions for manual installation* of Jötunn +* Resolved an issue with Valheim's localization implementation for all mods relying on LoadLanguage/SetupLanguage hooks + +## Version 2.0.5 +* Fixed compatibility with RRR Monsters or any other mods, who insert into the wrong *ObjectDB on Startup +* Fixed NRE with mods who manage to have no BepInEx PluginInfo attached +* Fixed default station value for FermenterConversionConfig + +## Version 2.0.4 +* Fixed incompatibility with mods using ZRpc (WoV SSC for example) +* Introduce new event ItemManager.OnVanillaItemsAvailable for mods to clone vanilla assets for mod use + +## Version 2.0.3 +* Fixed a NRE when depending mods are null referenced + +## Version 2.0.1 +* Initial Release diff --git a/plugins/Jotunn/Jotunn.dll b/plugins/Jotunn/Jotunn.dll new file mode 100644 index 0000000..4b88d7a Binary files /dev/null and b/plugins/Jotunn/Jotunn.dll differ diff --git a/plugins/Jotunn/Jotunn.dll.mdb b/plugins/Jotunn/Jotunn.dll.mdb new file mode 100644 index 0000000..aa9d25b Binary files /dev/null and b/plugins/Jotunn/Jotunn.dll.mdb differ diff --git a/plugins/Jotunn/Jotunn.pdb b/plugins/Jotunn/Jotunn.pdb new file mode 100644 index 0000000..5c37626 Binary files /dev/null and b/plugins/Jotunn/Jotunn.pdb differ diff --git a/plugins/Jotunn/Jotunn.xml b/plugins/Jotunn/Jotunn.xml new file mode 100644 index 0000000..bd94f72 --- /dev/null +++ b/plugins/Jotunn/Jotunn.xml @@ -0,0 +1,10187 @@ + + + + Jotunn + + + + + Configuration class for adding custom inputs and custom key hints.
+ See + for more information on Unity Input handling. +
+
+ + + Name of the config. Use this to react to the button press bound by this config. + + + + + Axis string this config should be bound to.
+ Use special Axis "Mouse ScrollWheel" to display the scroll icon as the key hint. +
+
+ + + Private store for the Key property + + + + + Unity KeyCode this config should be bound to. + + + + + BepInEx configuration entry of a KeyCode that should be used. + Overrides the value of this config. + + + + + Private store for the shortcut + + + + + BepInEx KeyboardShortcut this config should be bound to. + + + + + BepInEx configuration entry of a KeyCode that should be used. + Overrides the value of this config. + + + + + Private store for the GamepadButton property + + + + + GamepadButton this config should be bound to for gamepads. + + + + + BepInEx configuration entry of a GamepadButton that should be used. + Overrides the value of this config. + + + + + Should the Axis value be inverted? + + + + + Delay until a constantly pressed key is considered "pressed" again. + + + + + Interval in which the check timer for the repeat delay is decremented. + + + + + Key hint text, overrides HintToken when set + + + + + Token for translating the key hint text. + + + + + Should this button react on key presses when a Valheim GUI is open? Defaults to false. + + + + + Should this button react on key presses when a custom GUI is open and requested to block input? Defaults to false. + + + + + Should this button block all other inputs using the same key or button? Defaults to false.
+ Warning: If set to true, all other input using the same key or axis is reset when queried via ZInput. + Make sure to gate your usage properly. +
+
+ + + Internal flag if this button config is backed by any BepInEx ConfigEntry + + + + + Configuration class for adding custom clutter.
+ Use this in a constructor of +
+
+ + + Whether this clutter gets spawned in the world. Defaults to true. + + + + + Biome to spawn in, multiple Biomes can be allowed with .
+ Default to all biomes. +
+
+ + + Whether this clutter has an attached that should be used. + + + + + The amount of displayed clutter prefabs per patch. + For high values an should be used to lower the amount of overall prefabs. + + + + + Whether this clutter should be shown on unmodified ground. + + + + + Whether this clutter should be shown on modified ground. + + + + + Minimum random size of the prefab, only active when is used. + + + + + Maximum random size of the prefab, only active when is used. + + + + + Maximum terrain tilt in degrees this clutter will be placed on. + + + + + Minimum terrain height this clutter will be placed on. + + + + + Maximum terrain height this clutter will be placed on. + + + + + Whether the y position will always be at water level. + Used before + + + + + Random y offset of every individual prefab. + Calculated after . + + + + + Whether this clutter will be rotated with the underlying terrain. + Otherwise it will always point straight up. + + + + + Whether the clutter should check for ocean height. + + + + + Minimum ocean depth that is needed to place this clutter. + Needs to be true. + + + + + Maximum ocean depth to place this clutter. + Needs to be true. + + + + + Whether the clutter should check for forest thresholds. + + + + + Minimum value of the forest fractal:
+ 0 - 1: inside the forest
+ 1: forest edge
+ 1 - infinity: outside the forest +
+
+ + + Maximum value of the forest fractal:
+ 0 - 1: inside the forest
+ 1: forest edge
+ 1 - infinity: outside the forest +
+
+ + + Size of a noise map used to determine if the clutter should be placed. + Set to 0 to disable and place it everywhere. + + + + + Offset of the noise map. + + + + + Minimum value of the noise map that is needed to place the clutter. + + + + + Maximum value of the noise map to place the clutter. + + + + + Create a new + + + + + Create a copy of the + + + + + + Base class for adding new ItemConversions to various Valheim stations + + + + + The name of the station prefab this conversion is added to. + + + + + The name of the item prefab you need to put ín the station. + + + + + The name of the item prefab that your "FromItem" will be turned into. + + + + + Used to add new ItemConversions to the CookingStation + + + + + The name of the station prefab this conversion is added to. Defaults to . + + + + + Amount of time it takes to perform the conversion. Defaults to 10f. + + + + + Turns the CookingConversionConfig into a Valheim CookingStation.ItemConversion item. + + The Valheim CookingStation.ItemConversion + + + + Loads a single CookingConversionConfig from a JSON string + + JSON text + Loaded CookingConversionConfig + + + + Loads a list of CookingConversionConfigs from a JSON string + + JSON text + Loaded list of CookingConversionConfigs + + + + Helper to get existing cooking station names + + + + + Cooking station + + + + + Iron cooking station + + + + + Stone oven cooking station + + + + + Gets the human readable name to internal names map + + + + + + Get a of all cooking station names. + This can be used to create a where only valid cooking stations can be selected.

+ Example: + + var stationConfig = Config.Bind("Section", "Key", nameof(CookingStations.CookingStation), new ConfigDescription("Description", CookingStations.GetAcceptableValueList())); + +
+ +
+ + + Get the internal name for a cooking station from its human readable name. + + + + The matched internal name. + If the cookingStation parameter is null or empty, an empty string is returned. + Otherwise the unchanged cookingStation parameter is returned. + + + + + Helper to get existing crafting station names + + + + + No crafting station + + + + + Workbench crafting station + + + + + Forge crafting station + + + + + Stonecutter crafting station + + + + + Cauldron crafting station + + + + + Artisan table crafting station + + + + + Black forge crafting station + + + + + Galdr table crafting station + + + + + Mead Ketill crafting station + + + + + Food Preparation Table crafting station + + + + + Gets the human readable name to internal names map + + + + + + Get a of all crafting station names. + This can be used to create a where only valid crafting stations can be selected.

+ Example: + + var stationConfig = Config.Bind("Section", "Key", nameof(CraftingStations.Workbench), new ConfigDescription("Description", CraftingStations.GetAcceptableValueList())); + +
+ +
+ + + Get the internal name for a crafting station from its human readable name. + + + + The matched internal name. + If the craftingStation parameter is null or empty, is returned. + Otherwise the unchanged craftingStation parameter is returned. + + + + + Configuration class for adding custom creature spawns.
+ Use this in a constructor of +
+
+ + + The unique name for your custom creature. May be tokenized. + + + + + Group tag of this creature.
+ Creatures in the same group don't attack each other, regardless of faction. +
+
+ + + of this creature. + + + + + If set to true, stack the "EnableObject" action for all levels + instead of only activating the GameObject of the highest level matched. + + + + + Array of DropConfigs to use for this creature's .
+ A component will automatically be added if not present.
+ The drop table of an existing component will be replaced. +
+
+ + + Array of SpawnConfigs used for world spawns of your custom creature.
+ Leave empty if you don't want your creature to spawn in the world automatically.
+
+
+ + + String array of items this creature can consume to use in the component.
+ Jötunn will try to resolve all strings to ItemDrops at runtime.
+ An existing consumeItems table will be replaced. +
+
+ + + Apply this config's values to a creature GameObject. + + Prefab to apply this config to + + + + Converts the DropConfigs to Valheim style array. + + The Valheim array + + + + Converts the SpawnConfigs to Valheim style array. + + The Valheim array + + + + Creates an array of mocks for the consumeItem list of the creature. + + An array of mocks + + + + Appends a new to the array of existing ones. + + + + + + Appends a new to the array of existing ones. + + + + + + Appends a new consumable to the array of existing ones. + + + + + + Configuration class for drops of CustomCreatures used in . + + + + + Name of the item prefab of this drop. Gets resolved by Jötunn at runtime. + + + + + Minimum amount of this drop. Defaults to 1. + + + + + Maximum amount of this drop. Defaults to 1. + + + + + Chance of this drop in percent. Defaults to 100f. + + + + + If true, only one instance per active player will be dropped regardless of min/max amount. Defaults to false. + + + + + Should the drop amount be multiplied by the creature level. Defaults to true. + + + + + Creates a Valheim from this config. + + The Valheim + + + + Used to add new ItemConversions to the Fermenter + + + + + The name of the station prefab this conversion is added to. Defaults to . + + + + + The amount of items one conversion yields. Defaults to 4. + + + + + Turns the FermenterConversionConfig into a Valheim Fermenter.ItemConversion item. + + The Valheim Fermenter.ItemConversion + + + + Loads a single FermenterConversionConfig from a JSON string + + JSON text + Loaded FermenterConversionConfig + + + + Loads a list of FermenterConversionConfigs from a JSON string + + JSON text + Loaded list of FermenterConversionConfigs + + + + Helper to get existing fermenter names + + + + + Fermenter + + + + + Gets the human readable name to internal names map + + + + + + Get a of all fermenter names. + This can be used to create a where only valid fermenter can be selected.

+ Example: + + var fermenterConfig = Config.Bind("Section", "Key", nameof(Fermenters.Fermenter), new ConfigDescription("Description", Fermenters.GetAcceptableValueList())); + +
+ +
+ + + Get the internal name for a fermenter from its human readable name. + + + + The matched internal name. + If the fermenter parameter is null or empty, an empty string is returned. + Otherwise the unchanged fermenter parameter is returned. + + + + + Used to add new IncineratorConversions to the Incinerator + + + + + The name of the station prefab this conversion is added to. Defaults to . + + + + + List of requirements for this conversion. + + + + + The amount of items one conversion yields. Defaults to 1. + + + + + Priority of this conversion. + Lower prioritized conversions will be incinerated first when mulitple conversions requirements are met. + + + + + True: Requires only one of the list of ingredients to be able to produce the result. + False: All of the ingredients are required. + Defaults to false. + + + + + Turns the IncineratorConversionConfig into a Valheim Incinerator.IncineratorConversion item. + + The Valheim Incinerator.IncineratorConversion + + + + Loads a single IncineratorConversionConfig from a JSON string + + JSON text + Loaded IncineratorConversionConfig + + + + Loads a list of IncineratorConversionConfigs from a JSON string + + JSON text + Loaded list of IncineratorConversionConfigs + + + + Wrapper for the + + + + + Name of the item prefab of this incinerator requirement + + + + + Amount that is needed to fulfill the requirement. Defaults to 1. + + + + + Creates a new incinerator requirement config with default values. + + + + + Creates a new incinerator requirement config with the given values. + + + + + + + Creates a Valheim Piece.Requirement from this config. + + + + + + Helper to get existing incinerator names + + + + + Incinerator + + + + + Gets the human readable name to internal names map + + + + + + Get a of all incinerator names. + This can be used to create a where only valid incinerator can be selected.

+ Example: + + var incineratorConfig = Config.Bind("Section", "Key", nameof(Incinerators.Incinerator), new ConfigDescription("Description", Incinerators.GetAcceptableValueList())); + +
+ +
+ + + Get the internal name for a incinerator from its human readable name. + + + + The matched internal name. + If the incinerator parameter is null or empty, an empty string is returned. + Otherwise the unchanged incinerator parameter is returned. + + + + + Configuration class for adding custom items. Automatically creates a recipe for this item.
+ Use this in a constructor of and + Jötunn resolves the references to the game objects at runtime. +
+
+ + + The unique name for your item. May be tokenized. + + + + + The description of your item. May be tokenized. + + + + + The name of the item prefab. Is automatically set in . + + + + + The amount of that will be created when crafting this item. Defaults to 1. + + + + + Whether this item is craftable or not. Defaults to true. + + + + + The name of the piece table prefab this item uses to build pieces. + + + + + The name of the crafting station prefab where this recipe can be crafted.
+ Can be set to null to have the recipe be craftable without a crafting station. +
+
+ + + The name of the crafting station prefab where this item can be repaired.
+ Can be set to null to have the item be repairable without a crafting station. +
+
+ + + The minimum required level for the crafting station. Defaults to 1. + + + + + Whether this recipe requires only one of the crafting requirements to be crafted. Defaults to false. + + + + + Multiplier for the amount of items created by the recipe based on the quality of the crafting materials. Defaults to 1. + + + + + Weight of a single item in an inventory. Values lower than 0 are ignored when applying the config. Defaults to -1. + + + + + Maximum stack size. Values lower than 1 are ignored when applying the config. Defaults to -1. + + + + + Icons for this item. If more than one icon is added, this item automatically has variants. + + + + + Gets or sets the first icon of the item. For item variants with multiple icons, use the property instead. + + + + + Texture holding the variants different styles. + + + + + Array of s for all crafting materials it takes to craft the recipe. + + + + + Apply this config's values to a GameObject's ItemDrop. + + + + + + Converts the RequirementConfigs to Valheim style Piece.Requirements + + The Valheim Piece.Requirement array + + + + Converts the ItemConfig to a Valheim style Recipe. + + The Valheim recipe + + + + Loads a single ItemConfig from a JSON string + + JSON text + Loaded ItemConfig + + + + Loads a list of ItemConfigs from a JSON string + + JSON text + Loaded list of ItemConfigs + + + + Appends a new to the array of existing ones.
+ If the requirement is null or is not valid (has not item name or amount set) nothing will be added. +
+ +
+ + + Appends a new to the array of existing ones.
+ If the item name is null or empty or the amount is less than 1 nothing will be added. +
+ The internal item prefab id, see https://valheim-modding.github.io/Jotunn/data/objects/item-list.html or the Valheim Wiki + The amount of items needed to craft this item + The amount of items needed to upgrade this item. The basic formular is: Upgrade Amount = Item Level * Amount Per Level +
+ + + Configuration class for adding custom key hints. + + + + + Item for which the KeyHint should be displayed when equipped.
+ Must be the name of the prefab as registered in the . +
+
+ + + If not null or empty the KeyHint will also be bound to a specific + which must be selected for building. + + + + + Array of s used for this key hint. + + + + + Internal marker if any of the button configs backed by a BepInEx ConfigEntry did change + to regenerate the key hint object + + + + + + + + Kitbash configuration for a prefab + + + + + A list of KitbashSourceConfigs to apply to the prefab + + + + + Optional: The layer of the prefab, all Kitbashed parts will be set to this layer + + + + + Whether to fix references on the prefab + + + + + Configuration class for defining kitbash parts to add to a prefab with + + + + + An optional name of the pasted GameObject
+ Defaults to the source name +
+
+ + + Target parent of the pasted GameObject
+ Defaults to the root of the prefab +
+
+ + + Source prefab that contains the GameObject to copy + + + + + Location of the GameObject to copy from the source prefab + + + + + Position of the pasted GameObject
+ Defaults to +
+
+ + + Rotation of the pasted GameObject
+ Defaults to (no rotation) +
+
+ + + Scale of the pasted GameObject
+ Defaults to (no rescale) +
+
+ + + An optional list of Materials to set on the pasted GameObject
+ Defaults to the original materials +
+
+ + + + + + Configuration class for adding custom localizations. + + + + + Language of this localization. Defaults to English. + + + + + Dictionary of tokens and their respective translation in this configs language. + + + + + A new localization for a specific language. + + Name of the language + + + + Configuration class for adding custom locations.
+ Use this in a constructor of and +
+
+ + + Associated component + + + + + Biome to spawn in, multiple Biomes can be allowed with + + + + + BiomeArea to spawn in, defaults to Everything + + + + + Enable to place this kind of location first, and make it twice as likely that the objects will all be placed (random samples increase from 100,000 to 200,000) + + + + + Upper limit on how many of these locations will be placed in the world + + + + + Unused in Valheim, but available in case that changes in the future + + + + + Radius of the location. Terrain delta is calculated within this circle. + If left unset, falls back to the prefab's component value when one exists. + Defaults to 10f when no value has been set and no component is present. + + + + + True when the caller explicitly assigned a value to . + + + + + Attempt to place in the central zone first + + + + + Enable to check forest thresholds against the forest fractal. + + + + + Minimum value of the forest fractal: + 0 - 1: inside the forest + 1: forest edge + 1 - infinity: outside the forest + + + + + Maximum value of the forest fractal: + 0 - 1: inside the forest + 1: forest edge + 1 - infinity: outside the forest + + + + + Enable to make this location unique, it will not be replaced when locations change + + + + + Minimal altitude of the location + + + + + Maximum altitude of the location + + + + + Minimum distance from the center of the map of the location + + + + + Maximum distance from the center of the map of the location + + + + + Group of the location. Used with + + + + + Minimum distance to a similar location, either the same location or a location with the same + + + + + Minimum terrain delta (difference between min and max height) in the circle defined by + + + + + Maximum terrain delta (difference between min and max height) in the circle defined by + + + + + Rotate towards the average slope of the terrain in the circle defined by + + + + + Enable to activate interior handling + + + + + Radius of the interior attached to the location. + If left unset, falls back to the prefab's component value when one exists. + + + + + True when the caller explicitly assigned a value to . + + + + + Environment string used by the interior + + + + + Randomize location rotation when placing + + + + + Place at water level + + + + + Enable if the location places an icon to push the location icons + + + + + Always show the associated icon on the minimap + + + + + Enable to forbid Vegetation from spawning inside the circle defined by . + If left unset, falls back to the prefab's component value when one exists. + + + + + True when the caller explicitly assigned a value to . + + + + + Create a new + + + + + Create a copy of the + + ZoneLocation to copy + + + + Converts the LocationConfig to a Valheim style . + + The Valheim + + + + Helper to get existing piece category names + + + + + Piece 'Misc' category + + + + + Piece 'Crafting' category + + + + + Piece 'Building' category + + + + + Piece 'HeavyBuild' category + + + + + Piece 'Furniture' category + + + + + Piece 'DeepNorth' category + + + + + Piece 'Food' category + + + + + Piece 'Mead' category + + + + + Piece 'Feasts' category + + + + + All piece categories.
+ Since Valheim 1.0 this doesn't show the piece under every tag in the build menu anymore, + use to define where a piece shows up. +
+
+ + + Gets the human readable name to internal names map + + + + + + Get a of all piece category names. + This can be used to create a where only valid piece category can be selected.

+ Example: + + var pieceCategoryConfig = Config.Bind("Section", "Key", nameof(PieceCategories.Building), new ConfigDescription("Description", PieceCategories.GetAcceptableValueList())); + +
+ +
+ + + Get the internal name for a piece category from its human readable name. + + + + The matched internal name. + If the pieceCategory parameter is null or empty, an empty string is returned. + Otherwise the unchanged pieceCategory parameter is returned. + + + + + Configuration class for adding custom pieces.
+ Use this in a constructor of and + Jötunn resolves the references to the game objects at runtime. +
+
+ + + The name for your piece. May be tokenized. + + + + + The description of your piece. May be tokenized. + + + + + Whether this piece is buildable or not. Defaults to true. + + + + + Can this piece be built in dungeons? Defaults to false. + + + + + The name of the piece table where this piece will be added. + + + + + The name of the category this piece belongs to.
+ If the given category can't be found, a new is created. + Pieces of a custom category are shown under an own tag in the build menu, + next to the vanilla tags defined by . +
+
+ + + Hammer categories where this piece can be selected.
+ See for valid values.
+ If left empty, Jötunn will guess appropriate tags from the piece's category, components and name. +
+
+ + + The name of the crafting station prefab which needs to be in close proximity to build this piece. + + + + + The name of the crafting station prefab to which this piece will be an upgrade to. + + + + + Icon which is displayed in the crafting GUI. + + + + + Array of s for all crafting materials it takes to craft the recipe. + + + + + Apply this configs values to a piece GameObject. + + + + + + Converts the RequirementConfigs to Valheim style array. + + The Valheim array + + + + Loads a single PieceConfig from a JSON string + + JSON text + Loaded PieceConfig + + + + Loads a list of PieceConfigs from a JSON string + + JSON text + Loaded list of PieceConfigs + + + + Appends a new to the array of existing ones.
+ If the requirement is null or is not valid (has not item name or amount set) nothing will be added. +
+ +
+ + + Appends a new to the array of existing ones.
+ If the item name is null or empty or the amount is less than 1 nothing will be added. +
+ The internal item prefab id, see https://valheim-modding.github.io/Jotunn/data/objects/item-list.html or the Valheim Wiki + The amount of items needed to place this piece + Whether the item is dropped after deconstructing a piece +
+ + + Configuration class for adding custom piece tables. + + + + + Indicator if the uses the vanilla categories. Defaults to true. + + + + + Indicator if the uses custom categories. Defaults to false. + + + + + Array of custom categories the uses. + Will be ignored when is false. + + + + + Indicator if the can also remove pieces. Defaults to true. + + + + + Indicator if Jötunn guesses the hammer usage tags for pieces added to this + which have no usage tags set. Defaults to true. + + + + + Creates the final categories array for this . + Adds vanilla categories when is true. + Adds custom categories when is true. + + Array of category strings. + + + + Apply this configs values to a piece table GameObject. + + + + + + Helper to get existing piece table names + + + + + Hammer piece table + + + + + Cultivator piece table + + + + + Hoe piece table + + + + + Serving Tray piece table + + + + + Gets the human readable name to internal names map + + + + + + Get a of all piece table names. + This can be used to create a where only valid piece table can be selected.

+ Example: + + var pieceTableConfig = Config.Bind("Section", "Key", nameof(PieceTables.Hammer), new ConfigDescription("Description", PieceTables.GetAcceptableValueList())); + +
+ +
+ + + Get the internal name for a piece table from its human readable name. + + + + The matched internal name. + If the pieceTable parameter is null or empty, an empty string is returned. + Otherwise the unchanged pieceTable parameter is returned. + + + + + Helper to get existing piece usage tag names + + + + + Piece 'Misc' usage tag + + + + + Piece 'Crafting' usage tag + + + + + Piece 'Building' usage tag + + + + + Piece 'Floor' usage tag + + + + + Piece 'Wall' usage tag + + + + + Piece 'Roof' usage tag + + + + + Piece 'Architecture' usage tag + + + + + Piece 'Furniture' usage tag + + + + + Piece 'Lighting' usage tag + + + + + Piece 'Decor' usage tag + + + + + Piece 'Storage' usage tag + + + + + Piece 'Transport' usage tag + + + + + Piece 'Food' usage tag + + + + + Piece 'Meads' usage tag + + + + + Piece 'Feasts' usage tag + + + + + Piece 'Defense' usage tag + + + + + Piece 'Stacks' usage tag + + + + + Piece 'Stairs' usage tag + + + + + Piece 'Doors' usage tag + + + + + Piece 'Seasonal' usage tag + + + + + Gets the human readable name to internal names map + + + + + + Get a of all piece usage tag names.
+ Since a piece can have any number of tags, store them as one comma separated + Example: + + var pieceUsageConfig = Config.Bind("Piece", "Hammer Usages", $"{PieceUsages.Storage},{PieceUsages.Doors}", $"Comma separated usage tags.\n{PieceUsages.GetAcceptableValueList().ToDescriptionString()}"); + pieceConfig.Usage = pieceUsageConfig.Value.Split(','); + +
+ +
+ + + Get the internal name for a piece usage tag from its human readable name. + + + + The matched internal name. + If the pieceUsage parameter is null or empty, an empty string is returned. + Otherwise the unchanged pieceUsage parameter is returned. + + + + + Configuration class for adding custom recipes. + + + + + The unique name for your recipe. + + + + + The name of the item prefab that this recipe should create. + + + + + The amount of that will be created from this Recipe. Defaults to 1. + + + + + Whether this recipe is craftable or not. Defaults to true. + + + + + The name of the crafting station prefab where this recipe can be crafted. +
+ Can be set to null to have the recipe be craftable without a crafting station. +
+
+ + + The name of the crafting station prefab where this item can be repaired. +
+ Can be set to null to have the recipe be repairable without a crafting station. +
+
+ + + The minimum required level for the crafting station. Defaults to 1. + + + + + Whether this recipe requires only one of the crafting requirements to be crafted. Defaults to false. + + + + + Multiplier for the amount of items created by the recipe based on the quality of the crafting materials. Defaults to 1. + + + + + Array of s for all crafting materials it takes to craft the recipe. + + + + + Converts the RequirementConfigs to Valheim style Piece.Requirements + + The Valheim Piece.Requirement array + + + + Converts the RecipeConfig to a Valheim style Recipe. + + The Valheim recipe + + + + Loads a single RecipeConfig from a JSON string. + + JSON text + Loaded RecipeConfig + + + + Loads a list of RecipeConfigs from a JSON string. + + JSON text + Loaded list of RecipeConfigs + + + + Appends a new to the array of existing ones.
+ If the requirement is null or is not valid (has not item name or amount set) nothing will be added. +
+ +
+ + + Appends a new to the array of existing ones.
+ If the item name is null or empty or the amount is less than 1 nothing will be added. +
+ The internal item prefab id, see https://valheim-modding.github.io/Jotunn/data/objects/item-list.html or the Valheim Wiki + The amount of items needed to craft this item + The amount of items needed to upgrade this item. The basic formular is: Upgrade Amount = Item Level * Amount Per Level +
+ + + Configuration class for requirements needed to craft items or build pieces. + + + + + Name of the item prefab of this requirement. + + + + + Amount that is needed to fulfill the requirement. Defaults to 1. + + + + + How much more of this requirement is needed per item level. Defaults to 0. + + + + + Whether the item is dropped after deconstructing a piece. Defaults to true. + + + + + Creates a new requirement config with default values. + + + + + Creates a new requirement config with the given values. + + The internal item prefab id, see https://valheim-modding.github.io/Jotunn/data/objects/item-list.html or the Valheim Wiki + The amount of items needed to craft an item/piece + The amount of items needed to upgrade an item. Does not apply to pieces. The basic formular is: Upgrade Amount = Item Level * Amount Per Level + Whether the item is dropped after deconstructing a piece + + + + Creates a Valheim Piece.Requirement from this config. + + + + + + Checks if the requirement has any item and amount set. + + + + + + Configuration class for adding custom rooms.
+ Use this in a constructor of +
+
+ + + Theme name of this room. If adding a room to a vanilla dungeon, use nameof(Room.Theme.value) + + + + + If set to false, room will not be added to , thus + won't be used during generation. + + + + + Flag indicating if this room is a dungeon entrance. + + + + + Flag indicating if this room is an endcap. + + + + + Flag indicating if this room is a divider. + + + + + A rank value to prioritize this endcap over others during generation. + + + + + Exclude this room if the adjoining connection's is less than this value. + + + + + A weight value used to sort available rooms during some modes of generation. Defaults to 1f. + + + + + Flag to orient this room towards the center. Used only for generating camps (draugr/fuling villages). + + + + + Flag to ensure this room is only placed around the perimeter of a camp. Used only for generating camps (draugr/fuling villages). + + + + + Create a config with a theme name. + + + + + + Create a new + + + + + Converts the RoomConfig to a Valheim style . + + + + + Configuration class for adding custom skills. + + + + + A SkillType used to distinguish this skill from others. This is a unique ID that Jotunn generates + based on the Identifier provided. + + + + + A unique string used to identify the skill, and used to generate the . + + Do not change the Identifier after you have released a mod using it. + If the Identifier changes, so will the skill's SkillType/UID, so + all users who have your mod will lose their save progress for the skill. + + + + + + The in-game name for your skill. + Can either be the name you want to see in-game, or a localization token. + + + + + The in-game description for your skill. + Can either be the description you want to see in-game, or a localization token. + + + + + The in-game icon for your skill. If null, will default to a "shield" icon. + + + + + The multiplier applied to all XP gained for this skill via . + If this is set to 0, your skill will be unable to gain XP at all. + + + + + The path to load an icon png/jpg file from. + If you wish to load from an asset bundle, use a $ to separate the path to the asset bundle, + and your sprite name in the asset bundle + + + This cannot be set if is also set. You can only set one of them at once. + + + + This sample shows how you would load a sprite from an asset bundle: + + IconPath = "MyMod/Assets/assetbundle$mysprite" + + + + + + + Converts the SkillConfig to a printable string. + + String representation of the SkillConfig + + + + Converts a Jotunn SkillConfig into a Valheim SkillDef. + + Valheim SkillDef representation of the SkillConfig + + + + Creates a SkillConfig object for mods that previously used SkillInjector. + + Unique identifier of the new skill, ex: "com.jotunn.testmod.testskill" + "id" from SkillInjector + "name" from SkillInjector + "description" from SkillInjector + "increment" from SkillInjector + "icon" from SkillInjector + New SkillConfig object that bridges SkillInjector to Jotunn without losing user progress + For any new skills please do not use this method! + + + + Loads a single SkillConfig from a JSON string. + + JSON text + Loaded SkillConfig + + + + Loads a list of SkillConfigs from a JSON string. + + JSON text + Loaded list of SkillConfigs + + + + Used to add new ItemConversions to the Smelter + + + + + The name of the station prefab this conversion is added to. Defaults to . + + + + + Turns the SmelterConversionConfig into a Valheim Smelter.ItemConversion item. + + The Valheim Smelter.ItemConversion + + + + Loads a single SmelterConversionConfig from a JSON string + + JSON text + Loaded SmelterConversionConfig + + + + Loads a list of SmelterConversionConfigs from a JSON string + + JSON text + Loaded list of SmelterConversionConfigs + + + + Helper to get existing smelter names + + + + + Smelter + + + + + Blast furnace + + + + + Charcoal kiln + + + + + Eitr refinery + + + + + Bathtub + + + + + Spinning wheel + + + + + Windmill + + + + + Gets the human readable name to internal names map + + + + + + Get a of all smelter names. + This can be used to create a where only valid smelter can be selected.

+ Example: + + var smelterConfig = Config.Bind("Section", "Key", nameof(Smelters.Smelter), new ConfigDescription("Description", Smelters.GetAcceptableValueList())); + +
+ +
+ + + Get the internal name for a smelter from its human readable name. + + + + The matched internal name. + If the smelter parameter is null or empty, an empty string is returned. + Otherwise the unchanged smelter parameter is returned. + + + + + Configuration class for adding custom creature spawns.
+ Use this to define spawn configurations in your . +
+
+ + + The unique name for your spawn configuration. + + + + + Should this creature be loaded into the world spawn lists? Defaults to true. + + + + + Biome to spawn in, multiple Biomes can be allowed with . + + + + + BiomeArea to spawn in. Defaults to Everything. + + + + + Maximum count of instances of this creature that can be active at the same time. Defaults to 1. + + + + + Spawning interval. Defaults to 4f. + + + + + Spawn chance each spawn interval. Defaults to 100f. + + + + + Minimum distance to another instance. Defaults to 10f. + + + + + Minimun spawn range (0 = use global setting). + + + + + Maximum spawn range. + + + + + Minimum level the creature spawns with. Defaults to 1. + + + + + Maximum level the creature spawns with. Defaults to 1. + + + + + Only spawn if this key is set. See for constant values + + + + + Only spawn if this environment is active, see for constant values + + + + + Minimum number of entities to attempt to spawn at a time. Defaults to 1. + + + + + Maximum number of entities to attempt to spawn at a time. Defaults to 1. + + + + + Radius for the group to spawn in. Defaults to 3f. + + + + + Creature can spawn at day. Defaults to true. + + + + + Creature can spawn at night. Defaults to true. + + + + + The minimum altitude (distance to water surface) for the creature to spawn. Defaults to -1000f. + + + + + The maximum altitude (distance to water surface) for the creature to spawn. Defaults to 1000f. + + + + + The minimum tilt of terrain required to spawn. Range 0 to 90. + + + + + The maximum tilt of terrain required to spawn. Range 0 to 90. Defaults to 35f. + + + + + The minimum ocean depth for the creature to spawn. + + + + + The maximum ocean depth for the creature to spawn. + + + + + Spawn can happen in forest areas. Defaults to true. + + + + + Spawn can happen outside forest areas. Defaults to true. + + + + + Set true to let the AI hunt the player on spawn. + + + + + Offset to the ground the creature spawns on. Defaults to 0.5f + + + + + Converts the SpawnConfig to a Valheim style without a prefab set. + + The Valheim + + + + Configuration class for adding custom vegetation.
+ Use this in a constructor of and +
+
+ + + Biome to spawn in, multiple Biomes can be allowed with + + + + + BiomeArea to spawn in, defaults to Everything + + + + + Do a check before placing that there is nothing already from layers: "Default", "static_solid", "Default_small", "piece" + + + + + Unlike what the name suggests, Valheim will attempt 50 times the normal amount of placements, almost guaranteeing that everything will be placed + + + + + Minimum amount per zone + + + + + Values between 0 - 1 are used as a chance to place + Values above 1 are used as integer amount of maximum per zone + + + + + Minimal altitude of the vegetation + + + + + Maximum altitude of the vegetation + + + + + Minimum ocean depth + + + + + Maximum ocean depth + + + + + Minimum terrain delta (difference between min and max height) in the circle defined by + + + + + Maximum terrain delta (difference between min and max height) in the circle defined by + + + + + Minimum tilt in degrees + + + + + Maximum tilt in degrees + + + + + Enable to check forest thresholds against the forest fractal. + + + + + Minimum value of the forest fractal:
+ 0 - 1: inside the forest
+ 1: forest edge
+ 1 - infinity: outside the forest +
+
+ + + Maximum value of the forest fractal:
+ 0 - 1: inside the forest
+ 1: forest edge
+ 1 - infinity: outside the forest +
+
+ + + Size of the circle used to determine terrain delta + + + + + Minimum scale of placed instances + + + + + Maximum scale of place instances + + + + + Minimum amount in group + + + + + Maximum amount in group + + + + + Radius of group + + + + + Placement offset, use negatives to bury underground + + + + + Create a new + + + + + Create a copy of the + + ZoneVegetation to copy + + + + A custom console command. + + + + + The command that the user will need to type in their console to run your command. + + + + + The help text that will be displayed to the user for your command when they type `help` into their console. + + + + + If true, this command will only work after `devcommands` is run in the console. + + + + + If true, this command will only be allowed in networked play. + + + + + If true, and IsNetwork is true, this command will only be allowed in networked play, but only for the server. + + + + + If true, this command will not be shown when the user types `help` into their console. + + + + + The function that will be called when the user runs your console command, with space-delimited arguments. + + The arguments the user types, with spaces being the delimiter. + + + + The function that will be called when the user runs your console command, with space-delimited arguments and + a context object (Console or Chat). Use context?.AddString() to write to the respective + output. + + The arguments the user types, with spaces being the delimiter. + Terminal from which this command is run (Console or Chat window) + + + + Override this function to return a list of strings that are valid options for your command + + List of valid command options + + + + + + + Main interface for adding custom clutter to the game.
+ Clutter are client side only objects scattered on the ground.
+ All custom clutter have to be wrapped inside this class to add it to Jötunns . +
+
+ + + The prefab for this custom clutter. + + + + + Associated class. + + + + + Name of this custom clutter. + + + + + Indicator if references from s will be replaced at runtime. + + + + + Custom clutter from a prefab.
+ Can fix references for mocks. +
+ The prefab for this custom clutter. + If true references for objects get resolved at runtime by Jötunn. + The for this custom vegation. +
+ + + Custom clutter from a prefab loaded from an .
+ Can fix references for mocks. +
+ A preloaded + Name of the prefab in the bundle. + If true references for objects get resolved at runtime by Jötunn. + The for this custom clutter. +
+ + + Checks if a custom clutter is valid (i.e. has a prefab). + + true if all criteria is met + + + + + + + Main interface for adding custom creatures to the game.
+ All custom creatures have to be wrapped inside this class to add it to Jötunns . +
+
+ + + The creature prefab. + + + + + Associated list of of the creature. + + + + + Indicator if references from mocks will be replaced at runtime. + + + + + Indicator if references from configs should get replaced + + + + + Internal flag for the cumulative level effects hook. Value is set in the config. + + + + + Custom creature from a prefab. + + The prefab of this custom creature. + If true references for objects get resolved at runtime by Jötunn. + + + + Custom creature from a prefab with a attached. + + The prefab of this custom creature. + If true references for objects get resolved at runtime by Jötunn. + The for this custom creature. + + + + Custom creature created as a copy of a vanilla Valheim creature.
+ SpawnData is not cloned, you will have to add SpawnConfigs + to your if you want to spawn the cloned creature automatically. +
+ The new name of the creature after cloning. + The name of the base prefab the custom creature is cloned from. + The for this custom creature. +
+ + + Custom creature from a prefab loaded from an with a attached.
+ The members and references from the will be referenced by Jötunn at runtime. +
+ A preloaded + Name of the prefab in the bundle. + If true references for objects get resolved at runtime by Jötunn. + The for this custom creature. +
+ + + Checks if a custom creature is valid (i.e. has a prefab and all required components). + + true if all criteria is met + + + + Helper method to determine if a prefab with a given name is a custom creature created with Jötunn. + + Name of the prefab to test. + true if the prefab is added as a custom creature to the . + + + + + + + + + + + + + Base class for all custom entities + + + + + Reference to the which added this entity. + + + + + ctor automatically getting the SourceMod + + + + + ctor with manual assigned SourceMod + + Metadata of the mod adding this entity + + + + ctor with passed calling assembly. + If the calling is no BepInEx plugin or Jotunn itself, the SourceMod will be searched via reflection + + + + + + Main interface for adding custom items to the game.
+ All custom items have to be wrapped inside this class to add it to Jötunns . +
+
+ + + The prefab for this custom item. + + + + + The component for this custom item as a shortcut. + + + + + The associated with this custom item. Is needed to craft + this item on a workbench or from the players crafting menu. + + + + + Indicator if references from s will be replaced at runtime. + + + + + Texture holding the variants different styles. + + + + + Indicator if references from configs should get replaced + + + + + Custom item from a prefab.
+ Can fix references for s and the . +
+ The prefab for this custom item. + If true references for objects get resolved at runtime by Jötunn. +
+ + + Custom item from a prefab with a made from a .
+ Can fix references for s. +
+ The prefab for this custom item. + If true references for objects get resolved at runtime by Jötunn. + The item config for this custom item. +
+ + + Custom item created as an "empty" primitive.
+ At least the name and the Icon of the must be edited after creation. +
+ Name of the new prefab. Must be unique. + If true a ZNetView component will be added to the prefab for network sync. +
+ + + Custom item created as an "empty" primitive with a made from a . + + Name of the new prefab. Must be unique. + If true a ZNetView component will be added to the prefab for network sync. + The item config for this custom item. + + + + Custom item created as a copy of a vanilla Valheim prefab. + + The new name of the prefab after cloning. + The name of the base prefab the custom item is cloned from. + + + + Custom item created as a copy of a vanilla Valheim prefab with a made from a . + + The new name of the prefab after cloning. + The name of the base prefab the custom item is cloned from. + The item config for this custom item. + + + + Custom item from a prefab loaded from an with a made from a .
+ Can fix references for s. +
+ A preloaded + Name of the prefab in the bundle. + If true references for objects get resolved at runtime by Jötunn. + The item config for this custom item. +
+ + + Checks if a custom item is valid (i.e. has a prefab, an and an icon, if it should be craftable). + + true if all criteria is met + + + + Helper method to determine if a prefab with a given name is a custom item created with Jötunn. + + Name of the prefab to test. + true if the prefab is added as a custom item to the . + + + + + + + + + + + + + Main interface for adding custom item conversions to the game.
+ Supports and combines conversions for the cooking station, fermenter and smelter.
+ All custom item conversions have to be wrapped inside this class to add it to Jötunns . +
+
+ + + Type of the conversion component used in game. + + + + + Add a conversion to a station with the CookingStation component attached. + + + + + Add a conversion to a station with the Fermenter component attached. + + + + + Add a conversion to a station with the Smelter component attached. + + + + + Add a conversion to a station with the Incinerator component attached. + + + + + Type of the item conversion. Defines to which station the conversion is added. + + + + + Config of the item conversion. Depends on the of the conversion. + + + + + Indicator if the conversion needs fixing. + + + + + Actual ItemConversion type as . Needs to be cast according to . + + + + + Create a custom item conversion. Depending on the config class this custom + conversion represents one of the following item conversions:
+ + CookingStation.ItemConversion + Fermenter.ItemConversion + Smelter.ItemConversion + +
+ The item conversion config +
+ + + Checks if a custom item conversion is valid. + + true if all criteria is met + + + + + + + + + + + + Wrapper to hold each mod localization data. + + + Map that work as [language][token] = translation. + + + + Returns true if YamlDotNet is loaded in the current AppDomain. + Placed here (not on LocalizationManager) so it can be called without triggering + LocalizationManager's static constructor, which requires the game runtime. + + + + + Default constructor. + + + + + SourceMod hint constructor. + + Mod data in the shape of BepInPlugin class. + + + Retrieve list of languages that have been added. + + + Retrieve translations for given language. + Language of the translation you want to retrieve. + + + + Retrieve a translation from this custom localization or . + Searches with the user language with a fallback to English. + + Word to translate. + Translated word in player language or english as a fallback. + + + Checks if a translation exists for given language and token. + Language being checked. + Token being checked. + True if the token was found. + + + Add a translation. + Token of the translation you want to add. + The translation. + + + Add a translation. + Language of the translation you want to add. + Token of the translation you want to add. + The translation. + + + Add a group of translations. + Language of the translation you want to add. + Token-Value dictionary. + + + Add a translation file via absolute path. + Absolute path to file. + Is the language file a json file. + + + Add a json language file (match crowdin format). + Language for the json file, for example, "English" + Entire file as string + + + Add a YAML language file. Keys are flat string-to-string mappings. + Language for the yaml file, for example, "English" + Entire file as string + + + Add a Unity style translation file. + Contents of the language file in string format. + + + Attempts to remove a given token from certain language. + Language from which to search the token. + Token to clear. + + + Attempts to remove a given token from default language. + Token to clear. + + + Attempts to remove given language. + Language to clear. + + + Clear all localization data. + + + + + + + Main interface for adding custom locations to the game.
+ All custom locations have to be wrapped inside this class to add it to Jötunns . +
+
+ + + The exterior prefab for this custom location. + + + + + Associated component + + + + + Associated component + + + + + Name of this custom location + + + + + Indicator if references from s will be replaced at runtime. + + + + + Indicator if location is added from SoftReferenceableAssets.
+ Used to delay mocking prefabs until ZoneSystem.SpawnLocation() +
+
+ + + Custom location from a prefab with a attached.
+ Does not fix references. +
+ The exterior prefab for this custom location. + The for this custom location. +
+ + + Custom location from a prefab with a attached.
+ Does not fix references. +
+ The exterior prefab for this custom location. + The interior prefab for this custom location. + The for this custom location. +
+ + + Custom location from a prefab with a attached. + + The exterior prefab for this custom location. + If true references for objects get resolved at runtime by Jötunn. + The for this custom location. + + + + Custom location from a prefab with a attached. + + The exterior prefab for this custom location. + The interior prefab for this custom location. + If true references for objects get resolved at runtime by Jötunn. + The for this custom location. + + + + Custom location from a prefab with a attached. Using SoftReference system. + + The exterior prefab for this custom location. + If true references for objects get resolved at runtime by Jötunn. + The for this custom location. + + + + Helper method to determine if a location prefab with a given name is a custom location created with Jötunn. + + Name of the prefab to test. + true if the prefab is added as a custom location to the . + + + + + + + Main interface for adding custom pieces to the game.
+ All custom pieces have to be wrapped inside this class to add it to Jötunns . +
+
+ + + The prefab for this custom piece. + + + + + The component for this custom piece as a shortcut. + + + + + Name of the this custom piece belongs to. + + + + + Name of the category this custom piece belongs to.
+ When setting this value, Piece.m_category will be updated as well.
+ Pieces of a custom category are shown under an own tag in the build menu, + next to the vanilla tags defined by . +
+
+ + + Hammer categories where this custom piece can be selected.
+ See for valid values.
+ If left empty, Jötunn will guess appropriate tags from the piece's category, components and name. +
+
+ + + Indicator if references from s will be replaced at runtime. + + + + + Indicator if references from configs should get replaced + + + + + Custom piece from a prefab.
+ Will be added to the provided by name.
+ Can fix references from s or not. +
+ The prefab for this custom piece. + + Name of the the custom piece should be added to. + Can by the "internal" or the s name (e.g. "_PieceTableHammer" or "Hammer") + + If true references for objects get resolved at runtime by Jötunn. +
+ + + Custom piece from a prefab with a attached.
+ The members and references from the will be referenced by Jötunn at runtime. +
+ The prefab for this custom piece. + The for this custom piece. +
+ + + Custom piece from a prefab with a attached.
+ The members and references from the will be referenced by Jötunn at runtime. +
+ The prefab for this custom piece. + If true references for objects get resolved at runtime by Jötunn. + The for this custom piece. +
+ + + Custom piece from a prefab loaded from an .
+ Will be added to the provided by name.
+ Can fix references from s or not. +
+ A preloaded + Name of the prefab in the bundle. + + Name of the the custom piece should be added to. + Can by the "internal" or the s name (e.g. "_PieceTableHammer" or "Hammer") + + If true references for objects get resolved at runtime by Jötunn. +
+ + + Custom piece from a prefab loaded from an with a attached.
+ The members and references from the will be referenced by Jötunn at runtime. +
+ A preloaded + Name of the prefab in the bundle. + The for this custom piece. +
+ + + Custom piece from a prefab loaded from an with a attached.
+ The members and references from the will be referenced by Jötunn at runtime. +
+ A preloaded + Name of the prefab in the bundle. + If true references for objects get resolved at runtime by Jötunn. + The for this custom piece. +
+ + + Custom piece created as an "empty" primitive.
+ Will be added to the provided by name. +
+ Name of the new prefab. Must be unique. + If true a ZNetView component will be added to the prefab for network sync. + + Name of the the custom piece should be added to. + Can by the "internal" or the s name (e.g. "_PieceTableHammer" or "Hammer") + +
+ + + Custom piece created as an "empty" primitive with a attached.
+ The members and references from the will be referenced by Jötunn at runtime. +
+ Name of the new prefab. Must be unique. + If true a ZNetView component will be added to the prefab for network sync. + The for this custom piece. +
+ + + Custom piece created as a copy of a vanilla Valheim prefab.
+ Will be added to the provided by name. +
+ The new name of the prefab after cloning. + The name of the base prefab the custom item is cloned from. + + Name of the the custom piece should be added to. + Can by the "internal" or the s name (e.g. "_PieceTableHammer" or "Hammer") + +
+ + + Custom piece created as a copy of a vanilla Valheim prefab with a attached.
+ The members and references from the will be referenced by Jötunn at runtime. +
+ The new name of the prefab after cloning. + The name of the base prefab the custom item is cloned from. + The for this custom piece. +
+ + + Checks if a custom piece is valid (i.e. has a prefab, a target PieceTable is set, + has a component and that component has an icon). + + true if all criteria is met + + + + Helper method to determine if a prefab with a given name is a custom piece created with Jötunn. + + Name of the prefab to test. + true if the prefab is added as a custom piece to the . + + + + + + + + + + + + + Main interface for adding custom piece tables to the game.
+ All custom piece tables have to be wrapped inside this class + to add it to Jötunns . +
+
+ + + The prefab for this custom piece table. + + + + + The component for this custom piece table as a shortcut. + + + + + String array of categories used on the .
+ All categories listed here are registered when the table is added. +
+
+ + + Indicator if Jötunn guesses the hammer usage tags for pieces added to this + which have no usage tags set. Defaults to true.
+ Set to false to keep the usage tags defined on the piece prefabs untouched. +
+
+ + + Custom piece table from a prefab. + + The prefab for this custom piece table. It has to have a component attached + + + + Custom piece table from a prefab with a attached. + + The prefab for this custom piece table. It has to have a component attached. + The for this custom piece table. + + + + "Empty" custom piece table with a attached. + + The name of the custom piece table. + The for this custom piece table. + + + + Custom piece table from a prefab loaded from an with a attached. + + A preloaded + Name of the prefab in the bundle. It has to have a component attached. + The for this custom piece table. + + + + Checks if a custom piece table is valid (i.e. has a prefab and a PieceTable component). + + true if all criteria is met + + + + + + + + + + + + + Wrapper for custom added GameObjects holding the mod reference. + + + + + Original prefab + + + + + Indicator if references from s will be replaced at runtime. + + + + + Internal ctor with provided metadata.
+ Does not fix references. +
+ Prefab added + Metadata of the mod adding this prefab +
+ + + Custom prefab.
+ Can fix references for s. +
+ The prefab for this custom item. + If true references for objects get resolved at runtime by Jötunn. +
+ + + Custom prefab loaded from an .
+ Can fix references for s. +
+ A preloaded + Name of the prefab in the bundle. + If true references for objects get resolved at runtime by Jötunn. +
+ + + Checks if a custom item is valid (i.e. has a prefab, an and an icon, if it should be craftable). + + true if all criteria is met + + + + Helper method to determine if a prefab with a given name is a custom prefab created with Jötunn. + + Name of the prefab to test. + true if the prefab is added as a custom prefab to the . + + + + + + + Main interface for adding custom recipes to the game.
+ All custom recipes have to be wrapped inside this class to add it to Jötunns . +
+
+ + + The for this custom recipe. + + + + + Indicator if references from s will be replaced at runtime. + + + + + Indicator if references from s will be replaced at runtime. + + + + + Custom recipe from a .
+ Can fix references for s and s or not. +
+ The for a custom item. + If true references for objects get resolved at runtime by Jötunn. + If true references for s get resolved at runtime by Jötunn. +
+ + + Custom recipe from a .
+ The is created automatically by Jötunn at runtime. +
+ The for a custom recipe. +
+ + + Checks if a custom status effect is valid (i.e. has a ). + + true if all criteria is met + + + + + + + + + + + + + Main interface for adding custom dungeon rooms to the game.
+ All custom rooms have to be wrapped inside this class to add it to Jötunns . +
+
+ + + The prefab for this custom room. + + + + + The component for this custom room as a shortcut. + + + + + The name of this custom room as a shortcut. + + + + + Indicator if references from s will be replaced at runtime. + + + + + Theme name of this room. + + + + + Indicator if room is added from SoftReferenceableAssets.
+ Used to delay mocking prefabs until DungeonGenerator loads the room. +
+
+ + + Associated holding data used during generation. + + + + + Custom room from a prefab loaded from an with a made from a .
+ Can fix references for s. +
+ A preloaded + Name of the prefab in the bundle. + If true references for objects get resolved at runtime by Jötunn. + The config for this custom room. +
+ + + Custom room from a prefab loaded from an with a made from a .
+ Can fix references for s. +
+ The prefab for this custom room. + If true references for objects get resolved at runtime by Jötunn. + The config for this custom room. +
+ + + Custom room from a SoftReference prefab with a attached. Using SoftReference system.
+ The prefab is not loaded until the DungeonGenerator needs it during generation. +
+ A to the room prefab registered in a SoftRef manifest. + If true references for objects get resolved at runtime by Jötunn. + The config for this custom room. +
+ + + Helper method to determine if a prefab with a given name is a custom room created with Jötunn. + + Name of the prefab to test. + true if the prefab is added as a custom item to the . + + + + Helper method to determine if a given themeName matches any vanilla values. + + Name of the theme to test. + true if the themeName matches a built-in value, or false. + + + + Helper method to get the value, if the given themeName matches any vanilla values. + + Name of the theme. + The value, or Room.Theme.None if no match is found. + + + + Wrapper for Valheim's RPC calls implementing convenience delegate methods for client and server processing of packages.
+ Automatically compresses and slices big packages to fit into the Steam package limit.
+ All sending and processing of received packages is executed in Coroutines to ensure the game loop's execution. +
+
+ + + Name of the custom RPC as defined at instantiation + + + + + True, if this RPC is currently sending data + + + + + True, if this RPC is currently receiving data + + + + + True, if this RPC is currently processing received data. + This is always true while executing the registered delegates. + + + + + True, if this RPC is processing received data outside the current delegate call. + This should only be used in the registered delegate methods to determine + if this RPC is already processing another package. + + + + + Unique ID of this RPC to prevent name clashes between mods + + + + + Delegate called when a package is received on the server + + + + + Delegate called when a package is received on the client + + + + + Internal constructor only, CustomRPCs are instantiated via + + Reference to the which created this RPC. + + + + + + + Initiates an RPC exchange with the server by sending an empty package. + + + + + Send a package to a single target. Compresses and fragments the package if necessary. + + + + + + + Send a package to a list of peers. Compresses and fragments the package if necessary. + + + + + + + Coroutine to send a package to a single target. Compresses and fragments the package if necessary. + + + + + + + + Coroutine to send a package to a list of peers. Compresses and fragments the package if necessary. + + + + + + + + Coroutine to send a package to an actual peer. + + + + + + + + Receive and handle an incoming package + + + + + + + + + + Main interface for adding custom status effects to the game.
+ All custom status effects have to be wrapped inside this class to add it to Jötunns . +
+
+ + + The for this custom status effect. + + + + + Indicator if references from s will be replaced at runtime. + + + + + Custom status effect from a .
+ Can fix references for s. +
+ A preloaded + If true references for objects get resolved at runtime by Jötunn. +
+ + + Checks if a custom status effect is valid (i.e. has a ). + + true if all criteria is met + + + + + + + + + + + + + Main interface for adding custom vegetation to the game.
+ All custom vegetation have to be wrapped inside this class to add it to Jötunns . +
+
+ + + The prefab for this custom vegetation. + + + + + Associated component + + + + + Name of this custom vegetation + + + + + Indicator if references from s will be replaced at runtime. + + + + + Custom vegetation from a prefab.
+
+ The prefab for this custom vegetation. + The vegetation config for this custom vegation. +
+ + + Custom vegetation from a prefab.
+ Can fix references for mocks. +
+ The prefab for this custom vegetation. + If true references for objects get resolved at runtime by Jötunn. + The for this custom vegation. +
+ + + Custom vegetation from a prefab loaded from an .
+ Can fix references for mocks. +
+ A preloaded + Name of the prefab in the bundle. + If true references for objects get resolved at runtime by Jötunn. + The for this custom vegation. +
+ + + Helper method to determine if a prefab with a given name is a custom Vegetation created with Jötunn. + + Name of the prefab to test. + true if the prefab is added as a custom vegetation to the . + + + + Checks if a custom vegetation is valid (i.e. has a prefab, an and an icon, if it should be craftable). + + true if all criteria is met + + + + + + + Container class for Kitbashed prefabs, returned by + + + + + Callback that is called when Kitbashes are applied + + + + + The Kitbashed prefab + + + + + Config for the KitbashObject + + + + + + + + Helper class for creating Mocks of a given vanilla Component. + + Type of the mocked + + + + Create a new Mock of type T : Component + + Name of the original component + Mocked + + + + Helper class for creating Mocks of item/piece requirements. + + + + + Creates a mocked Piece.Requirement + + Prefab name + Amount + Whether the item is dropped after deconstructing a piece + + + + + Creates a mocked Piece.Requirement array + + List of prefab names and amounts + Whether the items are dropped after deconstructing a piece + + + + + Helper for Arrays + + + + + Populate an array with a default value + + Array value type + Array instance + Default value + Reference to the array instance + + + + Extends with convenience functions. + + + + + Check, if this config entry is "visible" + + + + + + + Check, if this config entry is "syncable" + + + + + + + Get bound button's name + + + + + + + + Get bound button config + + + + + + + + Get the local value of an admin config + + + + + + + Set the local value of an admin config + + + + + + + + Extends ConfigFile with a convenience method to bind config entries with less boilerplate code + and explicitly expose commonly used configuration manager attributes. + + + + + Formats section name as "{sectionNumber} - {section}" based on how + many sections have been bound to this config. + + + + + + + + Orders settings within a section. + + + + + + + + Bind a new config entry to the config file and modify description to state whether the config entry is synced or not. + + Type of the value the config entry holds. + Configuration file to bind the config entry to. + Configuration file section to list the config entry in. Settings are grouped by this. + Name of the setting. + Default value of the config entry. + Plain text description of the config entry to display as hover text in configuration manager. + Whether the config entry IsAdminOnly and should be synced with server. + Whether to number the section names using a prefix based on the order they are bound to the config file. + Whether to order the settings in each section based on the order they are bound to the config file. + Acceptable values for config entry as an AcceptableValueRange, AcceptableValueList, or custom subclass. + Custom setting editor (OnGUI code that replaces the default editor provided by ConfigurationManager). + Config manager attributes for additional user specified functionality. Any fields of BindConfig will overwrite properties in configAttributes. + ConfigEntry bound to the config file. + + + + Bind a new config entry to the config file and modify description to state whether the config entry is synced or not. + + Type of the value the config entry holds. + Configuration file to bind the config entry to. + Configuration file section to list the config entry in. Settings are grouped by this. + Name of the setting. + Default value of the config entry. + Plain text description of the config entry to display as hover text in configuration manager. + Whether the config entry IsAdminOnly and should be synced with server. + Order of the setting on the settings list relative to other settings in a category. 0 by default, higher number is higher on the list. + Acceptable values for config entry as an AcceptableValueRange, AcceptableValueList, or custom subclass. + Custom setting editor (OnGUI code that replaces the default editor provided by ConfigurationManager). + Config manager attributes for additional user specified functionality. Any fields of BindConfig will overwrite properties in configAttributes. + ConfigEntry bound to the config file. + + + + Sets SaveOnConfigSet and returns the original value before this method was called. + + + + + + Helper methods for strings + + + + + Returns true if the string contains any of the substrings. + + + + + + + + Returns true if the string ends with any one of the suffixes. + + + + + + + + Returns true if the string starts with any one of the prefixes. + + + + + + + + If the string ends with the suffix then return a copy of the string + with the suffix stripped, otherwise return the original string. + + + + + + + + If the string starts with the prefix then return a copy of the string + with the prefix stripped, otherwise return the original string. + + + + + + + + Returns a copy of the string with the first character capitalized + + + + + + + Convenience methods for Transforms + + + + + Extension method to find nested children by name using either + a breadth-first or depth-first search. Default is breadth-first. + + + Name of the child object to search for. + Whether to preform a breadth first or depth first search. Default is breadth first. + + + + + Helper class for C# Events. + + + + + try/catch the delegate chain so that it doesnt break on the first failing Delegate. + + + + + + try/catch the delegate chain so that it doesnt break on the first failing Delegate. + + + + + + + + try/catch the delegate chain so that it doesnt break on the first failing Delegate. + + + + + + + + + + try/catch the delegate chain so that it doesnt break on the first failing Delegate. + + + + + + + + + Extends GameObject with a shortcut for the Unity bool operator override. + + + + + Facilitates use of null propagation operator for unity GameObjects by respecting op_equality. + + this + Returns null when GameObject.op_equality returns false. + + + + Facilitates use of null propagation operator for unity MonBehaviours by respecting op_equality. + + Any type that inherits MonoBehaviour + this + Returns null when MonoBehaviours.op_equality returns false. + + + + Returns the component of Type type. If one doesn't already exist on the GameObject it will be added. + + Source: https://wiki.unity3d.com/index.php/GetOrAddComponent + The type of Component to return. + The GameObject this Component is attached to. + Component + + + + Adds a new copy of the provided component to a gameObject + + + + + + + + + Check if GameObject has any of the specified components. + + + + + + + + Check if GameObject has any of the specified components. + + + + + + + + Check if GameObject has all of the specified components. + + + + + + + + Check if GameObject has all of the specified components. + + + + + + + + Check if GameObject or any of it's children + have any of the specified components. + + + + + + + + + Extension method to find nested children by name using either + a breadth-first or depth-first search. Default is breadth-first. + + + Name of the child object to search for. + Whether to preform a breadth first or depth first search. Default is breadth first. + + + + Extension method to find nested children by an ordered list of names using either + a breadth-first or depth-first search. Default is breadth-first. + + + Names in order of the child object to search for. + Whether to preform a breadth first or depth first search. Default is breadth first. + + + + Use only, if you know what you do. + There are no checks if a component exists. + + + + + Extends GameObject with a check if the GameObject is valid + + + + + Check for validity + + + + + + + Extends ItemDrop with a TokenName + + + + + m_itemData.m_shared.m_name + + + + + + + Extends ItemData with a TokenName. + + + + + m_shared.m_name + + + + + + + Extends StatusEffect with a TokenName and a check if the StatusEffect is valid so it can be added to the game. + + + + + Check for validity + + + + + + + Extends Piece with a TokenName + + + + + m_name + + + + + + + Extends StatusEffect with a TokenName and a check if the StatusEffect is valid so it can be added to the game. + + + + + m_name + + + + + + + Check for validity + + + + + + + Extends prefab GameObjects with functionality related to the mocking system. + + + + + Will attempt to fix every field that are mocks gameObjects / Components from the given object. + + + + + + Resolves all references for mocks in this GameObject's components recursively + + + + + + Resolves all references for mocks in this GameObject recursively. + Can additionally traverse the transforms hierarchy to fix child GameObjects recursively. + + This GameObject + Traverse all child transforms + + + + Resolves all references for mocks in this GameObject recursively. + Can additionally traverse the transforms hierarchy to fix child GameObjects recursively. + + This GameObject + Traverse all child transforms + + + + Clones all fields from this GameObject to objectToClone. + + + + + + + Helpful Unity Object extensions. + + + + + Extensions for working with Unity UI RectTransforms + + + + + Test if a RectTransform overlaps another RectTransform in world space + + + + + + + + Test if a RectTransform overlaps another RectTransform in world space + + + + + + + + + Calculate the world rect of a RectTransform + + + + + + + Extends ZNet with a clear diversion between local, client and server instances. + + + + + Possible states of the game regarding to networking. + + + + + A local game instance playing on a local world. + + + + + A local game instance playing on a dedicated server. + + + + + A dedicated server instance. + + + + + Returns true if the game was started locally and a local world was started. + + + + + + + Returns true if the game was started locally and is connected to a server. + + + + + + + Returns true if the game was started as a dedicated server. + + + + + + + Determine the current game instance type regarding to networking. + + + + + + + Determine if a peer uid is in the admin list on the current . Only works on the server instance + + + + + + + + The base class for all the library's various Managers + + + + + Initialize manager class after all manager scripts have been added to the root game object + + + + + A namespace wide Logger class, which automatically creates a ManualLogSource + for every Class from which it is being called. + + + + + Add DateTime to the log output + + + + + Remove and clear all Logger instances + + + + + Get or create a with the callers + + A BepInEx + + + + Logs a message with level. + + Data to log + + + + Logs a message with level. + This is used when the responsible mod is different from mod logging this message. + + Known mod that is responsible for this log + Data to log + + + + Logs a message with level. + + Data to log + + + + Logs a message with level. + This is used when the responsible mod is different from mod logging this message. + + Known mod that is responsible for this log + Data to log + + + + Logs a message with level. + + Data to log + + + + Logs a message with level. + This is used when the responsible mod is different from mod logging this message. + + Known mod that is responsible for this log + Data to log + + + + Logs a message with level. + + Data to log + + + + Logs a message with level. + This is used when the responsible mod is different from mod logging this message. + + Known mod that is responsible for this log + Data to log + + + + Logs a message with level. + + Data to log + + + + Logs a message with level. + This is used when the responsible mod is different from mod logging this message. + + Known mod that is responsible for this log + Data to log + + + + Logs a message with level. + + Data to log + + + + Logs a message with level. + This is used when the responsible mod is different from mod logging this message. + + Known mod that is responsible for this log + Data to log + + + + Main class implementing BaseUnityPlugin. + + + + + The current version of the Jotunn library. + + + + + The name of the library. + + + + + The BepInEx plugin Mod GUID being used (com.jotunn.jotunn). + + + +
+ Manager to handle interactions with the vanilla asset system, called SoftReferenceableAssets. + See the Vanilla FAQ for more information. + + + + + The singleton instance of this manager. + + + + + Event that is invoked when the soft referenceable system is ready to be used. + + + + + Hide .ctor + + + + + Checks if the vanilla loader is ready. + If false, Runtime.Loader must not be accessed and no assets may be loaded. + If the vanilla loader is initialized too early, mods can become incompatible. + + true if the vanilla asset loader is ready, false otherwise + + + + Registers a new asset with the same asset dependencies as the original asset and generates a unique AssetID.
+ Assets can be added at any time and will be registered as soon as the vanilla loader is ready. +
+ The asset to register + Assets to copy dependencies from + AssetID generated from the prefab's name +
+ + + Registers a new asset and generates a unique AssetID.
+ Assets can be added at any time and will be registered as soon as the vanilla loader is ready. +
+ The asset to register + AssetID generated from the prefab's name +
+ + + Registers an asset to be instantiated and have its mock references resolved on load.
+ Must be called before the asset is loaded the first time. +
+ The of the asset to instantiate and resolve mocks for on load +
+ + + Registers an asset to be instantiated under the given parent and have its mock references resolved on load.
+ Must be called before the asset is loaded the first time. +
+ The of the asset to instantiate and resolve mocks for on load + Optional transform under which the asset will be instantiated, otherwise a default container is used +
+ + + Registers an asset to be instantiated under the given parent and have its mock references resolved on load.
+ Must be called before the asset is loaded the first time.
+ The callback will be invoked when the asset is already resolved and instantiated. Multiple callbacks can be registed for the same asset.
+
+ The to instantiate and resolve mocks for on load + Optional transform under which the asset will be instantiated, otherwise a default container is used + Adds a callback when the asset was resolved and instantiated +
+ + + Registers an asset to be instantiated under the given parent and have its mock references resolved on load.
+ Must be called before the asset is loaded the first time.
+ The callback will be invoked when the asset is already resolved and instantiated. Multiple callbacks can be registed for the same asset.
+
+ The of the asset to instantiate and resolve mocks for on load + Optional transform under which the asset will be instantiated, otherwise a default container is used + Adds a callback when the asset was resolved and instantiated +
+ + + Generates a unique AssetID, based on the asset name + + + AssetID generated from the prefab's name + + + + Generates a unique AssetID, from a given string + + + AssetID generated from the prefab's name + + + + Clones a prefab and registers it in the SoftReference system with the same dependencies as the original asset + + + + + + + + + Finds the AssetID by an asset name at runtime.
+ The closed matching base type must be used. + E.g. for prefabs use , for Textures use etc.
+ If no asset is found, an invalid AssetID is returned. +
+ Asset type to search for + Asset name to search for + The AssetID of the searched asset if found, otherwise an invalid AssetID + Thrown if the vanilla asset system is not initialized yet +
+ + + Finds the AssetID by an asset name at runtime.
+ The closed matching base type must be used. + E.g. for prefabs use , for Textures use etc.
+ If no asset is found, an invalid AssetID is returned. +
+ Asset name to search for + Asset type to search for + + Thrown if the vanilla asset system is not initialized yet +
+ + + Finds the AssetID by an asset name at runtime and returns a SoftReference to the asset.
+
+ Asset type to search for + Asset name to search for + +
+ + + Finds the AssetID by an asset name at runtime and returns a SoftReference to the asset.
+
+ Asset name to search for + Asset type to search for + +
+ + + Manager for handling custom console and chat commands. + + + + + The singleton instance of this manager. + + + + + Hide .ctor + + + + + Internal Action delegate to add custom entities into vanilla command's option list + + + + + A list of all the custom console commands that have been added to the game through this manager, + either by Jotunn or by mods using Jotunn. + + + + + Initialize console commands that come with Jotunn. + + + + + Adds a new console command to Valheim. + + The console command to add + + + + Fire for any ConsoleCommand when its tabOptions member + is first populated to add Jötunn entities to the option list + + + + + + + + Manager for handling all custom data added to the game related to creatures. + + + + + The singleton instance of this manager. + + + + + Hide .ctor + + + + + Unity "character" layer ID. + + + + + Event that gets fired after the vanilla creatures are in memory and available for cloning. + Your code will execute every time before a new is copied (on every menu start). + If you want to execute just once you will need to unregister from the event after execution. + + + + + Event that gets fired after registering all custom creatures to . + Your code will execute every time a new ZNetScene is created (on every game start). + If you want to execute just once you will need to unregister from the event after execution. + + + + + Internal lists of all custom entities added + + + + + Container for Jötunn's SpawnSystemList in the DontDestroyOnLoad scene. + + + + + Reference to the SpawnList component of the container. + + + + + Creates the spawner container and registers all hooks. + + + + + Add a to the game.
+ Checks if the custom creature is valid and unique and adds it to the list of custom creatures. +
+ The custom Creature to add. + true if the custom Creature was added to the manager. +
+ + + Get a custom creature by its name. + + Name of the custom creature to search. + The if found. + + + + Get a custom or vanilla creature prefab by its name. + + Name of the creature to search. + The prefab of the creature if found. + + + + Remove a custom creature by its name. + + Name of the creature to remove. + + + + Remove a custom creature by its ref. Removes the custom recipe, too. + + to remove. + + + + Safely invoke the event + + + + + + Resolve mocks of all custom creatures if necessary. + + + + + Safely invoke the event. + + + + + Add the internal to the awoken spawner if not already added. + + + + + Enable cumulative level effects for custom creatures requesting it. Thx ASP for the code. + + + + + Manager for handling all custom data added to the game related to creatures. + + + + + The singleton instance of this manager. + + + + + Event that gets fired after the vanilla has loaded rooms. Your code will execute + every time a main scene is started (on joining a game).
+ If you want to execute just once you will need to unregister from the event after execution. +
+
+ + + Event that gets fired after all custom rooms are registered to the . Your code will execute + every time a main scene is started (on joining a game).
+ If you want to execute just once you will need to unregister from the event after execution. +
+
+ + + Internal dictionary of all custom rooms + + + + + Container for Jötunn's DungeonRooms in the DontDestroyOnLoad scene. + + + + + Hide .ctor + + + + + Creates the spawner container and registers all hooks. + + + + + Add a to the game.
+ Checks if the custom room is valid and unique and adds it to the list of custom rooms. +
+ The custom Room to add. + true if the custom Room was added to the manager. +
+ + + Get a custom room by its name. + + Name of the custom room to search. + The if found. + + + + Remove a custom room by its name. + + Name of the room to remove. + + + + Registers a new dungeon theme, identified by a unique theme name string.
+ Assets can be added at any time and will be registered as soon as the vanilla loader is ready. +
+ The prefab. + The name of the theme to register. + True if theme is successfullly registered, otherwise false. +
+ + + Adds a new environment prefab to be registered when runs.
+ If you intend to use a custom interior environment , this method enables you + to provide a prefab with an appropriately configured containing atleast one + within . +
+ The containing the prefab. + The name of the prefab to register. +
+ + + Attempt to get room by hash. + + + + + + Manager for handling anything GUI related. Provides Valheim style + GUI elements as well as an anchor for custom GUI prefabs. + + + + + Singleton instance + + + + + Hide .ctor + + + + + Event that gets fired every time the Unity scene changed and a new PixelFix + object was created. Subscribe to this event to create your custom GUI objects + and add them as a child to the . + + + + + GUI container with automatic scaling for high res displays. + Gets rebuild at every scene change so make sure to add your custom + GUI prefabs again on each scene change. + + + + + Event that gets fired every time the Unity scene changed and new CustomGUI + objects were created. Subscribe to this event to create your custom GUI objects + and add them as a child to either or . + + + + + GUI container in front of Valheim's GUI elements with automatic scaling for + high res displays and pixel correction. + Gets rebuild at every scene change so make sure to add your custom + GUI prefabs again on each scene change. + + + + + GUI container behind Valheim's GUI elements with automatic scaling for + high res displays and pixel correction. + Gets rebuild at every scene change so make sure to add your custom + GUI prefabs again on each scene change. + + + + + Unity layer constant for UI objects. + + + + + The default Valheim beige color. + + + + + The default Valheim orange color. + + + + + The default Valheim yellow color. + + + + + Scrollbar handle color block in default Valheim orange. + + + + + Toggle color block in Valheim style. + + + + + Button color block in Valheim style + + + + + Valheim's standard font, normal faced. + + + + + Valheim's standard font, bold faced. + + + + + Valheim's rune-like font, normal faced. + + + + + Valheim's rune-like font, bold faced. + + + + + Valheim's standard font as a TMPro FontAsset + + + + + Valheim's rune-like font as a TMPro FontAsset + + + + + with default Valheim assets. + + + + + SpriteAtlas holding the references to the sprites used in the helper methods. + + + + + SpriteAtlas holding the references to the sprites used in the helper methods. + + + + + Indicates if the PixelFix must be created for the start or main scene. + + + + + Detect headless mode (aka dedicated server) + + + + + + Global indicator if the input is currently blocked by the GUIManager. + + + + + Counter to track multiple block requests. + + + + + Block all input except GUI + + Indicator if the input should be blocked or released + + + + Enable the InputBlock + + + + + Reset the InputBlock to its initial state (disabled) + + + + + Initialize the manager + + + + + Prevents hiding the InventoryGui on an E press or similar when the GUIManager blocks the input + + + + + + + Load GUI assets on first start + + + + + Create GameObjects for mods to append their custom GUI to + + + + + + + + Add a to the manager.
+ Checks if the custom key hint is unique (i.e. the first one registered for an item).
+ Custom status effects are displayed in the game instead of the default + KeyHints for equipped tools or weapons they are registered for. +
+ The custom key hint config to add. + true if the custom key hint config was added to the manager. +
+ + + Removes a from the game. + + The custom key hint config to add. + + + + Get a sprite by name. + + The sprite name + The sprite with given name + + + + Creates and displays a Valheim style ColorPicker + + Min anchor on first instantiation + Max anchor on first instantiation + Position on first instantiation + Color before editing + Display message + Event that gets called when the color gets modified + Event that gets called when one of the buttons done or cancel get pressed + When set to false the colors used don't have an alpha channel + + + + + Creates and displays a Valheim style GradientPicker + + Min anchor on first instantiation + Max anchor on first instantiation + Position on first instantiation + Color before editing + Display message + Event that gets called when the gradient gets modified + Event that gets called when one of the buttons done or cancel gets pressed + + + + + Creates a Valheim style woodpanel which is draggable per default + + Parent + Minimal anchor + Maximal anchor + Anchored position + Optional width + Optional height + A as a Valheim style woodpanel + + + + Creates a Valheim style woodpanel, can optionally be draggable + + Parent + Minimal anchor + Maximal anchor + Anchored position + Optional width + Optional height + Optional flag if the panel should be draggable (default true) + A as a Valheim style woodpanel + + + + Create a complete scroll view + + parent transform + show horizontal scrollbar + show vertical scrollbar + size of the handle + + Colorblock for the handle + Background color for the sliding area + rect width + rect height + + + + + Create a with a Text (and optional Outline and ContentSizeFitter) component + + Text to show + Parent transform + Anchor min + Anchor max + Anchored position + Font + Font size + Font color + Add outline component + Outline color + Width + Height + Add ContentSizeFitter + A text + + + + Create a new button (Valheim style). + + Text to display on the button + Parent transform + Min anchor + Max anchor + Position + Set width if > 0 + Set height if > 0 + Button GameObject in Valheim style + + + + Create a new InputField (Valheim style). + + Parent transform + Min anchor + Max anchor + Position + Content type for the input field + Text to display as a placeholder (can be null) + Optional font size, defaults to 16 + Set width if > 0 + Set height if > 0 + Input field GameObject in Valheim style + + + + Create toggle field + + Parent transform + Set width + Set height + + + + + Create dropdown field + + Parent transform + Min anchor + Max anchor + Position + Optional font size, defaults to 16 + Set width if > 0 + Set height if > 0 + + + + + Create key binding field + + + + + + + + + + Apply Valheim style to a woodpanel. + + + + + + Apply Valheim style to a Component + + Target component + Own font or GUIManager.Instance.AveriaSerifBold/GUIManager.Instance.AveriaSerif + Custom color or GUIManager.Instance.ValheimOrange + creates an component when true + Optional font size, defaults to 16 + + + + Apply Valheim style to a Component. + Uses GUIManager.Instance.AveriaSerifBold by default + + Target component + Custom color or GUIManager.Instance.ValheimOrange + creates an component when true + Optional font size, defaults to 16 + + + + Apply Valheim style to a Component. + Uses GUIManager.Instance.AveriaSerifBold, Color.white and creates an outline by default + + Target component + Optional font size, defaults to 16 + + + + Apply valheim style to a Component + + Component to apply the style to + Optional font size, defaults to 16 + + + + Apply Valheim style to an Component. + + Component to apply the style to + + + + Apply Valheim style to an Component. + + Component to apply the style to + Optional font size, defaults to 16 + + + + Apply Valheim style to a component. + + Component to apply the style to + + + + Apply Valheim style to a component. + + Component to apply the style to + Optional font size, defaults to 16 + + + + Apply Valheim style to a component. + + Component to apply the style to + + + + Apply Valheim style to a component. + + Component to apply the style to + + + + Apply Valheim style to a component. + + + + + + Apply Valheim style to a component. + + + + + + + Manager for handling custom inputs registered by mods. + + + + + Abstraction for gamepad buttons and axes used as inputs + + + + + No gamepad button, internally treated as null + + + + + Up direction on the directional pad + + + + + Down direction on the directional pad + + + + + Left direction on the directional pad + + + + + Right direction on the directional pad + + + + + Southern button on the gamepad (A on XBox-like) + + + + + Eastern button on the gamepad (B on XBox-like) + + + + + Western button on the gamepad (X on XBox-like) + + + + + Nothern button on the gamepad (Y on XBox-like) + + + + + Left shoulder button + + + + + Right shoulder button + + + + + Left trigger + + + + + Right trigger + + + + + Left special button (Back on XBox-like) + + + + + Right special button (Menu on XBox-like) + + + + + Left Joystick press + + + + + Right Joystick press + + + + + Translates a to its value + + + + + Translate a to its axis string value + + + + + Translate an axis string to its + UnityEngine.InputSystem.InputBinding.path value + + + + + + + Translate a to its + UnityEngine.InputSystem.InputBinding.path value + + + + + + + Translates a to its printable string value + + + + + Translates an axis string to its value + + + + + Translate an axis string to its value + + + + + Translate a to its value + + + + + Singleton instance + + + + + Hide .ctor + + + + + Initialize the manager + + + + + Add a Button to Valheim + + Mod GUID + Button config + + + + Manager for handling all custom data added to the game related to items. + + + + + The singleton instance of this manager. + + + + + Hide .ctor + + + + + Event that gets fired after the vanilla items are in memory and available for cloning. + Your code will execute every time a new ObjectDB is copied (on every menu start). + If you want to execute just once you will need to unregister from the event after execution. + + + + + Internal event that gets fired after did run. + On this point all mods should have their items and pieces registered with the managers. + + + + + Event that gets fired after all items were added to the ObjectDB on the FejdStartup screen. + Your code will execute every time a new ObjectDB is copied (on every menu start). + If you want to execute just once you will need to unregister from the event after execution. + + + + + Event that gets fired after all items were added to the ObjectDB. + Your code will execute every time a new ObjectDB is created (on every game start). + If you want to execute just once you will need to unregister from the event after execution. + + + + + Registers all hooks. + + + + + Add a to the game.
+ Checks if the custom item is valid and unique and adds it to the list of custom items.
+ Also adds the prefab of the custom item to the .
+ Custom items are added to the current on every . +
+ The custom item to add. + true if the custom item was added to the manager. +
+ + + Get a custom item by its name. + + Name of the item to search. + + + + + Remove a custom item by its name. Removes the custom recipe, too. + + Name of the item to remove. + + + + Remove a custom item by its ref. Removes the custom recipe, too. + + to remove. + + + + Add a to the game.
+ Checks if the custom recipe is unique and adds it to the list of custom recipes.
+ Custom recipes are added to the current on every . +
+ The custom recipe to add. + true if the custom recipe was added to the manager. +
+ + + Adds recipes defined in a JSON file at given path, relative to BepInEx/plugins + + JSON file path, relative to BepInEx/plugins folder + + + + Get a custom recipe by its name. + + Name of the recipe to search. + + + + + Remove a custom recipe by its name. Removes it from the manager and the , if instantiated. + + Name of the recipe to remove. + + + + Remove a custom recipe by its ref. Removes it from the manager and the , if instantiated. + + to remove. + + + + Add a to the game.
+ Checks if the custom status effect is unique and adds it to the list of custom status effects.
+ Custom status effects are added to the current on every . +
+ The custom status effect to add. + true if the custom status effect was added to the manager. +
+ + + Add a new item conversion + + Item conversion details + Whether the addition was successful or not + + + + Remove an item conversion + + item conversion to remove + Whether the removal was successful or not + + + + Register all custom items added to the manager to the given + + + + + + Register a single item in the current ObjectDB. + Also adds the prefab to the and if necessary.
+ No mock references are fixed. +
+ with an component to add to the +
+ + + Internal method for adding a prefab to a specific ObjectDB. + + the prefab should be added to + with an component to add + which created the prefab + + + + Register the custom recipes added to the manager to the given + + + + + + Register the custom status effects added to the manager to the given + + + + + + Register the custom item conversions added to the manager + + + + + Prefix on to add custom items to FejdStartup screen (aka main menu) + + + + + Safely invoke the event + + + + + Safely invoke the event + + + + + Safely invoke the event late in the detour chain + + + + + Hook on to register all custom entities from this manager to the . + + + + + + Safely invoke the event + + + + + Hook on to refresh recipes for the custom items. + + + + + + Manager for handling custom key hints + + + + + Singleton instance + + + + + Hide .ctor + + + + + Internal Dictionary holding the references to the custom key hints added to the manager + + + + + Internal Dictionary holding the references to the key hint GameObjects created per KeyHintConfig + + + + + Reference to the current "KeyHints" instance + + + + + Reference to the games "KeyHint" GameObjects RectTransform + + + + + Base GameObjects of vanilla key hint parts + + + + + Initialize the manager + + + + + Add a to the manager.
+ Checks if the custom key hint is unique (i.e. the first one registered for an item).
+ Custom key hints are displayed in the game instead of the default + KeyHints for equipped tools or weapons they are registered for. +
+ The custom key hint config to add. + true if the custom key hint config was added to the manager. +
+ + + Removes a from the game. + + The custom key hint config to add. + + + + Instantiate base GameObjects from vanilla KeyHints to use in our custom key hints + + + + + Extract base key hint elements and create key hint objects. + + + + + Copy vanilla BuildHints object and create a custom one from a KeyHintConfig. + + + + + + Hook on to show custom key hints instead of the vanilla ones. + + + + + Set any key hint config using buttons without a backing bep config dirty + + + + + Manager for handling Kitbashed objects + + + + + The singleton instance of this manager. + + + + + Hide .ctor + + + + + Internal list of objects to which Kitbashing should be applied. + + + + + Registers all hooks. + + + + + Register a prefab with a KitbashConfig to be applied when the vanilla prefabs are available + + Prefab to add kitbashed parts to + KitbashConfig to apply to the prefab + The KitbashObject container for this prefab + + + + Apply all Kitbashs to the objects registered in the manager. + + + + + Apply kitbash to a single object. + + + + + + + Manager for handling localizations for all custom content added to the game. + + + + + List where all data is collected. + + + + + Your token must start with this character. + + + + + Default language of the game. + + + + + Name of the folder that will hold the custom .json translations files. + + + + + Name of the community translation files that will be the first custom languages files loaded before any others. + + + + + String of chars not allowed in a token string. + + + + + Array of chars not allowed in a token string. + + + + + The singleton instance of this manager. + + + + + Hide .ctor + + + + + Localizations for internal use. + + + + + Event that gets fired after all custom localization has been added to the game. + Use this event if you need to translate strings using the vanilla class. + Your code will execute every time the localization gets reset (on every menu start). + If you want to execute just once you will need to unregister from the event after execution. + + + + + Call into unity's DoQuoteLineSplit. + + + + + Initialize localization manager. + + + + + Add your mod's custom localization. Only one can be added per mod. + + The localization to add. + true if the custom localization was added to the manager. + + + + Get the CustomLocalization for your mod. + Creates a new if no localization was added before. + + Existing or newly created . + + + + Get the CustomLocalization for a given mod. + Creates a new if no localization was added before. + + Existing or newly created . + + + + Retrieve a translation if it's found in any CustomLocalization or . + + Word to translate. + Translated word in player language or english as a fallback. + + + + Registers a new Localization for a language. + + Wrapper which contains a language and a Token-Value dictionary. + + + + Registers a new Localization for a language. + + The language being added. + Token-Value dictionary. + + + + Add a token and its value to the "English" language. + + Token + Translation. + Replace the token if it already exists + + + + Add a token and its value to the specified language (default to "English"). + + Token + Translation. + Language ID for this token. + Replace the token if it already exists + + + + Add a file via absolute path. + + Absolute path to file. + Is the language file a json file. + + + + Add a json language file (match crowdin format). + + Language for the json file, for example, "English" + Entire file as string + + + + Add a language file that matches Valheim's language format. + + Entire file as string + + + + Manager for adding custom Map Overlays to the game. + + + + + The singleton instance of this manager. + + + + + Hide .ctor + + + + + Event that gets fired once the Map for a World has started and Mods can begin to draw. + + + + + Event that gets fired once data for a specific Map for a world has been loaded. Eg, Pins are available after this has fired. + + + + + Colour which sets a filter on. Used for ForestFilter and FogFilter. + A full alpha value enables this pixel, and then the red value is written to the result texture. + + + + + Colour which sets a filter off. See FilterOn. + + + + + Height "Colour" used for the base height of "Meadows" + + + + + Container to hold all live Overlays. + + + + + Container to hold all live Drawings. + + + + + Creates the Overlays and registers hooks. + + + + + Create a new MapOverlay with a custom overlay name + + Custom name for the MapOverlay + When set to true, that layer will be drawn regardless of exploration status, defaults to false + Reference to MapOverlay for modder to edit + + + + Create a new MapDrawing with a custom overlay name + + Custom name for the MapDrawing + Reference to MapDrawing for modder to edit + + + + Causes MapManager to stop updating the MapOverlay object and removes this Manager's reference to that overlay. + + The name of the MapOverlay to be removed + True if removal was successful. False if there was an error removing the object from the internal dict. + + + + Causes MapManager to stop updating the MapDrawing object and removes this Manager's reference to that drawing. + + The name of the MapDrawing to be removed + True if removal was successful. False if there was an error removing the object from the internal dict. + + + + Return a list of all current overlay names + + List of names + + + + Return a list of all current MapDrawing names + + List of names + + + + Input a World Coordinate and the size of the overlay texture to retrieve the translated overlay coordinates. + + World Coordinates + Size of the image from your MapOverlay + The 2D coordinate space on the MapOverlay + + + + Input a MapOverlay Coordinate and the size of the overlay texture to retrieve the translated World coordinates. + + The 2D Overlay coordinate + The size of the Overlay + The 3D World coordinate that corresponds to the input Vector + + + + + Setup GUI on . + + + + + Safely invoke OnVanillaMapAvailable event. + + + + + Setup textures and GUI on + + + + + Safely invoke InvokeOnVanillaMapDataLoaded event. + + + + + Return whether the Drawings functionality is active. + + + + + + Called when the first MapDraw object is created. + Initializes all variables required for MapDraw objects to be rendered. + Changes the behaviour of some vanilla shaders. + + + + + Object for modders to use to access and modify their Overlay. + Modders should modify the texture directly. + + + + + Texture to draw overlay texture information to + + + + + Set true to render this overlay, false to hide + + + + + Flag to determine if this overlay had changes since its last draw + + + + + Flag to determine if this overlay should be hidden in unexplored areas + + + + + Hide .ctor + + + + + Function called on Texture2D.Apply to check if one of our member textures was changed + + + + + + Destroys the overlay texture + + + + + Object for modders to use to access and modify their Overlay. + Modders should modify the texture directly. + + + + + + Texture to draw main texture information to + + + + + Texture to draw height filter information to + + + + + Texture to draw forest filter information to + + + + + Texture to draw fog filter information to + + + + + Set true to render this overlay, false to hide + + + + + Flag to determine if this overlay had changes since its last draw + + + + + Hide .ctor + + + + + Function called on Texture2D.Apply to check if one of our member textures was changed + + + + + + Destroys all textures + + + + + Overlay Base to inherit from + + + + + + Unique name per overlay + + + + + Initial texture size to calculate the relative drawing position + + + + + Reference to the GUI toggle element to notify changes on the overlay state + + + + + Hide .ctor + + + + + Helper function to create and copy overlay texture instances + + + + + Handles all logic to do with managing mocked prefabs added into the game. + + + + + The singleton instance of this manager. + + + + + Hide .ctor + + + + + Legacy ValheimLib prefix used by the Mock System to recognize Mock gameObject that must be replaced at some point. + + + + + Prefix used by the Mock System to recognize Mock gameObject that must be replaced at some point. + + + + + String used by the Mock System to recognize start of a relative path of a replacement for a Mock gameObject. + + + + + Internal container for mocked prefabs + + + + + Creates the container and registers all hooks + + + + + Create an empty GameObject with the mock string prepended + + Name of the mocked vanilla prefab + Mocked GameObject reference + + + + Create a mocked component on an empty GameObject + + + + + + + + Will try to find the real vanilla prefab from the given mock + + + + the real prefab + + + + Will try to find the real vanilla prefab from the given mock + + + + the real prefab + + + + Replaces all mock Textures with the real Texture + + + true if no mocks were found or all mock could be resolved + + + + Replaces a potential mock Shader with the real Shader + + + true if no mock was found or the mock could be resolved + + + + Manager handling all network related code + + + + + Singleton instance + + + + + Hide .ctor + + + + + Delegate for receiving ZPackages. + Gets called inside a . + + Sender ID of the package + Package sent + + + + + Internal list of registered RPCs + + + + + Manager's main init + + + + + Get a for your mod + + Unique name for your RPC + Delegate which gets called on client instances when packages are received + Delegate which gets called on server instances when packages are received + Existing or newly created + + + + Get the for a given mod. + + Reference to the which added this entity + Unique name for your RPC + Delegate which gets called on client instances when packages are received + Delegate which gets called on server instances when packages are received + Existing or newly created . + + + + Register all custom RPCs as ZRoutedRPCs + + + + + Manager for handling custom pieces added to the game. + + + + + The singleton instance of this manager. + + + + + Hide .ctor + + + + + Event that gets fired after all pieces were added to their respective PieceTables. + Your code will execute every time a new ObjectDB is created (on every game start). + If you want to execute just once you will need to unregister from the event after execution. + + + + + Settings of the hammer UI tab selection. + + + + + Piece table tab header width. + + + + + Minimum size of a piece table tab. The tab can grow bigger than this the name doesn't fit. + + + + + Tab size per name character. This determines how fast the tab size grows. + + + + + Minimum left/right space that is visible for not selected adjacent tabs. + + + + + Creates the piece table container and registers all hooks. + + + + + Add a to the game.
+ Checks if the custom piece table is valid and unique and adds it to the list of custom piece tables. +
+ The custom piece table to add. + true if the custom piece table was added to the manager. +
+ + + Add a new from .
+ Creates a and adds it to the manager. +
+ The to add. +
+ + + Add a new from string.
+ Creates a and adds it to the manager. +
+ Name of the new piece table. +
+ + + Get a by name.

+ Search hierarchy:
+ + PieceTable with the exact name (e.g. "_HammerPieceTable") + PieceTable via "item" name (e.g. "Hammer") + +
+ Prefab or item name of the PieceTable + component +
+ + + Returns all instances in the game. + The list is gathered on every ObjectDB.Awake() from all items in it, + so depending on the timing of the call, the list might not be complete. + + A list of instances + + + + Optimistically guess the for a given by the piece category, and optionally by attached components, prefab name and localized name. + + The to find the usage tags for. + If true, Jötunn will try to guess the usage tags for pieces that have no usage tags set. + All vanilla that match + + + + Add a new by name. A new category + gets assigned a random integer for internal use. If you pass a vanilla category + the actual integer value of the enum is returned. + + Prefab or item name of the PieceTable. + Name of the category. + int value of the vanilla or custom category + + + + Add a new by name. A new category + gets assigned a random integer for internal use. If you pass a vanilla category + the actual integer value of the enum is returned.
+ Since Valheim 1.0 pieces of a custom category are shown under an own tag + in the build menu, next to the vanilla tags. +
+ Name of the category. + int value of the vanilla or custom category +
+ + + Get a by name. Translates + vanilla or custom Piece Categories to their current integer value. + + Name of the category. + int value of the vanilla or custom category + + + + Remove a from a table by name. + This does noting if a piece is still assigned to the category, remove it before calling this. + + Prefab or item name of the PieceTable. + Name of the category. + + + + Remove a by name.
+ The category id stays registered, only a refresh of the displayed categories is triggered. +
+ Name of the category. +
+ + + Get a list of all custom Jötunn piece category names + + + + + + Get a complete map of all piece categories. + This includes vanilla, Jötunn and other modded categories that use the same system + + + + + + Add a to the game.
+ Checks if the custom piece is valid and unique and adds it to the list of custom pieces.
+ Custom pieces are added to their respective s after . +
+ The custom piece to add. + true if the custom piece was added to the manager. +
+ + + Get a custom piece by its name. + + Name of the piece to search. + + + + + Remove a custom piece by its name. + + Name of the piece to remove. + + + + Remove a custom piece by its ref. + + to remove. + + + + Loop all items in the game and get all PieceTables used (vanilla and custom ones). + + + + + Registers all custom pieces to their respective piece tables. + Removes erroneous ones from the manager. + + + + + Register a single piece prefab into a piece table by name.
+ Also adds the prefab to the and if necessary.
+ Custom categories can be referenced if they have been added to the manager before.
+ No mock references are fixed. +
+ with a component to add to the table + Prefab or item name of the PieceTable + Optional category string, does not create new custom categories +
+ + + Internal method for adding a prefab to a piece table. + + + + + Determines if usage tags may be guessed for pieces added to a table. + Only custom tables can opt out, vanilla tables always guess. + + + + + Hook on to refresh recipes for the custom items. + + + + + + Updates the piece categories, should be called after setting the m_category field of a piece. + + + + + Manager for handling custom prefabs added to the game. + + + + + The singleton instance of this manager. + + + + + Hide .ctor + + + + + Event that gets fired after the vanilla prefabs are in memory and available for cloning. + Your code will execute every time before a new is copied (on every menu start). + If you want to execute just once you will need to unregister from the event after execution. + + + + + Event that gets fired after registering all custom prefabs to . + Your code will execute every time a new ZNetScene is created (on every game start). + If you want to execute just once you will need to unregister from the event after execution. + + + + + Container for custom prefabs in the DontDestroyOnLoad scene. + + + + + Dictionary of all added custom prefabs by name hash. + + + + + Creates the prefab container and registers all hooks. + + + + + Makes sure the PrefabManager initializes. Only needed if timing is important. + + + + + Add a custom prefab to the manager with known source mod metadata. Don't fix references. + + Prefab to add + Metadata of the mod adding this prefab + true if the custom prefab was added to the manager. + + + + Add a custom prefab to the manager.
+ Checks if a prefab with the same name is already added.
+ Added prefabs get registered to the on . +
+ Prefab to add +
+ + + Add a custom prefab to the manager.
+ Checks if a prefab with the same name is already added.
+ Added prefabs get registered to the on . +
+ Prefab to add +
+ + + Create a new prefab from an empty primitive. + + The name of the new GameObject + + When true a ZNetView component is added to the new GameObject for ZDO generation and networking. Default: true + + The newly created empty prefab + + + + Create a copy of a given prefab without modifying the original. + + Name of the new prefab. + Name of the vanilla prefab to copy from. + Newly created prefab object + + + + Create a copy of a given prefab without modifying the original. + + Name of the new prefab. + Prefab instance to copy. + Newly created prefab object + + + + Get a prefab by its name.

+ Search hierarchy: + + Custom prefab with the exact name + Vanilla prefab with the exact name from if already instantiated + Vanilla prefab from the prefab cache + +
+ Name of the prefab to search for. + The existing prefab, or null if none exists with given name +
+ + + Remove a custom prefab from the manager. + + Name of the prefab to remove + + + + Destroy a custom prefab.
+ Removes it from the manager and if already instantiated also from the . +
+ The name of the prefab to destroy +
+ + + Register all custom prefabs to m_prefabs/m_namedPrefabs in . + + + + + Register a single prefab to the current .
+ Checks for existence of the object via GetStableHashCode() and adds the prefab if it is not already added. +
+ +
+ + + Safely invoke the event + + + + + + Global cache of Unity Objects by asset name.
+ Built on first access of every type and is cleared on scene change. +
+
+ + + Get an instance of an Unity Object from the current scene with the given name. + + to search for. + Name of the actual object to search for. + + + + + Get an instance of an Unity Object from the current scene by name. + + + + + + + + Get all instances of an Unity Object from the current scene by type. + + to search for. + + + + + Determines the best matching asset for a given name. + Only one asset can be associated with a name, this ties to find the best match if there is already a cached one present. + + + + + + + + + Clears the entire cache, resulting in a rebuilt on the next access.
+ This can be useful if an asset is loaded late after a scene change and might be missing in the cache. + Rebuilding can be an expensive operation, so use with caution. +
+
+ + + Clears the cache for a specific type, resulting in a rebuilt on the next access.
+ This can be useful if an asset is loaded late after a scene change and might be missing in the cache. + Rebuilding can be an expensive operation, so use with caution. +
+ The type of object to clear the cache for +
+ + + Manager for rendering Sprites of GameObjects + + + + + Rotation of the prefab that will result in an isometric view + + + + + Appended string to file names to force a cache recreation, if changed + + + + + Singleton instance + + + + + Hide .ctor + + + + + Arbitrary unused Layer in the game + + + + + Initialize the manager + + + + + Create a of the + + GameObject to render + Callback for the generated + If no active visual component is attached to the target or any child, this method invokes the callback with null immediately and returns false. + + + + Enqueue a render of the + + + Callback for the generated + If no active visual component is attached to the target or any child, this method invokes the callback with null immediately and returns false. + + + + Queues a new prefab to be rendered. The resulting will be ready at the next frame. + If there is no active visual Mesh attached to the target, this method invokes the callback with null immediately. + + Object to be rendered. A copy of the provided GameObject will be created for rendering + Action that gets called when the rendering is complete + Width of the resulting + Height of the resulting + Only true if the target was queued for rendering + + + + Create a of the + + Can be a prefab or any existing GameObject in the world + If no active visual component is attached to the target or any child, this method returns null. + + + + Create a of the + + Can be a prefab or any existing GameObject in the world + Rotation while rendering of the GameObject. See RenderManager.IsometricRotation for example/> + If no active visual component is attached to the target or any child, this method returns null. + + + + Create a from a /> + + + If no active visual component is attached to the target or any child, this method returns null. + + + + Spawn a prefab without any Components except visuals. Also prevents calling Awake methods of the prefab. + + + + + + + Recursively remove all components not needed for rendering in order of their dependencies. + + + + false if components could not be removed, true otherwise + + + + Topological sort (regarding dependencies between components) of all components of this transforms gameobject + + + A topologically sorted list of types. Null if cycles have been detected. + + + + Wrapper to create and set a short-lived RenderTexture to a Camera, which is cleaned up afterwards + + + + + Queues a new prefab to be rendered. The resulting will be ready at the next frame. + + Only true if the target was queued for rendering + + + + Target GameObject to create a from + + + + + Pixel width of the generated + + + + + Pixel height of the generated + + + + + Rotation of the prefab to capture + + + + + Field of view of the camera used to create the . Default is small to simulate orthographic view. An orthographic camera is not possible because of shaders + + + + + Distance multiplier, should not be required with the default + + + + + Callback for the generated + + + + + Optional, Used for to determine a unique name-version combination + + + + + Save the render on the disc and reuse when called again. This reduces the time to re-render drastically. + When the game version changes, a new render will be made. When a is set, the version and name + will be used to determine if a new render should be made + + + + + Create a new RenderRequest + + Object to be rendered. A copy of the provided GameObject will be created for rendering + + + + Simulates the particle effects for this amount of seconds. Less than 0 for no particles. + + + + + Manager for handling custom skills added to the game. + + + + + Global singleton instance of the manager. + + + + + Hide .ctor + + + + + Initialize the manager + + + + + Add a new skill with given SkillConfig object. + + SkillConfig object representing new skill to register + The SkillType of the newly added skill + + + + Register a new skill with given parameters, and registers translations for it in the current localization. + + Unique identifier of the new skill, ex: "com.jotunn.testmod.testskill" + Name of the new skill + Description of the new skill + + Icon for the skill + The SkillType of the newly registered skill + + + + Adds skills defined in a JSON file at given path, relative to BepInEx/plugins + + JSON file path, relative to BepInEx/plugins folder + + + + Gets a custom skill with given SkillType. + + SkillType to look for + Custom skill with given SkillType + + + + Gets a custom skill with given skill identifier. + + String indentifer of SkillType to look for + Custom skill with given SkillType + + + + Manager for handling synchronisation between client and server instances. + + + + + Event triggered after configuration has been synced on either the server or client + + + + + Event triggered before syncing configuration on either the server or client + + + + + Event triggered after a clients admin status changed on the server + + + + + Event triggered after the in-game configuration manager window is closed + + + + + Singleton instance + + + + + Hide .ctor + + + + + Clientside indicator if the current player has admin status on + the current world, always true on local games + + + + + Manager's main init + + + + + Registers a non default config file for possible synchronisation with all clients. + Entries still need the IsAdminOnly attribute in order to be synchronized.
+ The file path must be saved under the executing BepInEx config folder, see . + This guarantees the same relative path for all clients. +
+ the file to synchronize + The config file is not saved under the BepInEx config folder + The config file is already registered + The config file is a default mod config and is already implicitly synchronized +
+ + + Add a and a method for generating a to the manager.
+ The RPC will be initiated on the server side after login to sync arbitrary data to the connecting client. + The package is guaranteed to be received before the client's connection is fully established and the player loads into the world. +
+ RPC to be called + Method generating the ZPackage payload, takes the client peer as its argument +
+ + + Add a and a method for generating a to the manager.
+ The RPC will be initiated on the server side after login to sync arbitrary data to the connecting client. + The package is guaranteed to be received before the client's connection is fully established and the player loads into the world. +
+ RPC to be called + Method generating the ZPackage payload +
+ + + Harmony patch BepInEx to ensure locked values are not overwritten. + Return the cached local value of a bep config thats locked + + + + + Harmony patch BepInEx to ensure locked values are not overwritten. + Prevent overwriting bep config value when the setting is locked on config file reload. + + + + + Cache local config values for synced entries. + + + + + Reset configs which may have been overwritten with server values to the local value + if this machine is not the server. + + + + + Hook to start a watchdog Coroutine which monitors the admin list. + + + + + + Hook to synchronize the admin status to the clients + + + + + + Hook to synchronize the admin status to the clients + + + + + + Checks the ZNet.m_instance.m_adminList against the cached list and send any + changes to the corresponding clients. + + + + + Sends the current admin state of a player on a server to the client + + Socket host name of the peer + Admin state to send to the client + + + + Safely invoke the event + + + + + Gets an IEnumerable of all default and custom config files that associated with plugins that have Jotunn as a dependency. + + + + + + Checks if AdminOnly config entries should be locked based the AdminOnlyStrictness value for the plugin that the + config file is attached to (including custom config files) and whether the plugin is installed on the server or not. + + + + + + + Checks if AdminOnly config entries should be locked based the AdminOnlyStrictness value for the plugin + and whether the plugin is installed on the server or not. + + + + + + + Gets the corresponding Plugin GUID for a config file (works for custom config files) + and returns a boolean indicating success or failure. + + + + + + + Gets the corresponding Plugin GUID for a config file identifier (works for custom config files) + and returns a boolean indicating success or failure. + + + + + + + Unlock configuration entries. + + + + + Lock configuration entries. + + + + + Hook to unlock cursor properly and disable camera rotation + + + + + + + Window display state changed event. + + + + + + + Safely invoke the event + + + + + Register ourself to config reload events to trigger synchronizing configs + + + + + Un-Register ourself to config reload events to trigger synchronizing configs + + + + + Sync the local bep config on reload + + + + + + + Return the cached local value of a bep config thats locked + + + + + Prevent overwriting bep config value when the setting is locked on config file reload + + + + + Cache the current synchronizable configuration values for comparison + + + + + Get syncable configuration values as tuples + + + + + + Syncs the changed configuration of a client to the server + + + + + Safely invoke the event + + + + + Safely invoke the event + + + + + Apply received configuration values locally and regenerate the cache + + Package of config tuples + Indicator if this was an initial config package + Indicator if this was an initial config package + + + + Generate ZPackage from configuration tuples + + Indicator if this is the initial config package + List of config tuples to include in the package + + + + + Holds up and preserves PeerInfo or RoutedRPC packages until + the finished member is set to true. All other packages get sent. This will + stop the client from completing the login handshake with the server until ready. + + + + + Manager for handling undo and redo actions in mods. Can handle multiple undo queues.
+ Mods can make their own UndoActions using the provided interface + or use the default ones Jötunn provides in .
+ Undo queues get automatically reset on every login and logout. +
+
+ + + Interface for actions which can be added to the undo queue. + + + + + Description of this action to show on the queue's history. + + + + + Code to revert whatever was executed. + + + + + Code to replay whatever was executed. + + + + + Message being displayed after a successful undo. + + + + + Message being displayed after a successful redo. + + + + + The singleton instance of this manager. + + + + + Hide .ctor + + + + + Container to hold all Queues. + + + + + Registers all hooks. + + + + + Add a message to the console or in the player HUD + + + + + + + Manually create a new queue by name and return it. If the queue already exists + no new queue is created but the existing is returned. + + Global name of the queue + Optionally define the max history capacity of a newly generated queue + The with the given name + + + + Get a list of all current undo queues. + + List of all registered queue names + + + + Get a queue by name. Creates a new queue if it does not exist. + + Global name of the queue + The with the given name + + + + Add a new action to a queue.
+ If a queue with the provided name does not exist it is automatically created. +
+ Global name of the queue + Mod provided action which can undo and redo whatever was executed +
+ + + Execute the undo action of the item at the queue's current position and decrease the position pointer.
+ If a queue with the provided name does not exist it is automatically created. +
+ Global name of the queue + true if an action was undone, false if no actions exist or the action failed +
+ + + Execute the redo action of the item after the queue's current position and increase the position pointer.
+ If a queue with the provided name does not exist it is automatically created. +
+ Global name of the queue + true if an action was redone, false if no actions exist or the action failed +
+ + + Undo queue implementation. + + + + + Add a new action to this queue. + + Mod provided action which can undo and redo whatever was executed + + + + Execute the undo action of the item at the queue's current position and decrease the position pointer. + + true if an action was undone, false if no actions exist or the action failed + + + + Execute the redo action of the item after the queue's current position and increase the position pointer. + + true if an action was redone, false if no actions exist or the action failed + + + + Reset the queue's history and position pointer to its initial state. + + + + + Get this queue's current position index, -1 when empty. + + + + + Get a string array of this queue's current history. + + + + + + + + Manager for adding custom Locations, Vegetation and Clutter. + + + + + The singleton instance of this manager. + + + + + Hide .ctor + + + + + Event that gets fired after the vanilla locations are in memory and available for cloning or editing. + Your code will execute every time a new is available. + If you want to execute just once you will need to unregister from the event after execution. + + + + + Event that gets fired after all are registered in the . + Your code will execute every time a new is available. + If you want to execute just once you will need to unregister from the event after execution. + + + + + Event that gets fired after the vanilla clutter is in memory and available obtain. + Your code will execute every time a new is available. + If you want to execute just once you will need to unregister from the event after execution. + + + + + Event that gets fired after all are registered in the . + Your code will execute every time a new is available. + If you want to execute just once you will need to unregister from the event after execution. + + + + + Event that gets fired after the vanilla vegetation is in memory and available obtain. + Your code will execute every time a new is available. + If you want to execute just once you will need to unregister from the event after execution. + + + + + Event that gets fired after all are registered in the . + Your code will execute every time a new is available. + If you want to execute just once you will need to unregister from the event after execution. + + + + + Container for custom locations in the DontDestroyOnLoad scene. + + + + + Initialize the manager + + + + + Return a that matches any of the provided Biomes + + Biomes that should match + + + + Returns a list of all that match + + + + + + + Create an empty GameObject that is disabled, so any Components in instantiated GameObjects will not start their lifecycle. + + Name of the location + Empty and hierarchy disabled GameObject + + + + Create a copy that is disabled, so any Components in instantiated child GameObjects will not start their lifecycle.
+ Use this if you plan to alter your location prefab in code after importing it.
+ Don't create a separate container if you won't alter the prefab afterwards as it creates a new instance for the container. +
+ Instantiated and hierarchy disabled location prefab +
+ + + Loads and spawns a GameObject from an AssetBundle as a location container.
+ The copy is disabled, so any Components in instantiated child GameObjects will not start their lifecycle.
+ Use this if you plan to alter your location prefab in code after importing it.
+ Don't create a separate container if you won't alter the prefab afterwards as it creates a new instance for the container. +
+ A preloaded + Name of the prefab in the bundle to be instantiated as the location cotainer +
+ + + Create a copy that is disabled, so any Components in instantiated GameObjects will not start their lifecycle + + Prefab to copy + Replace JVLmock GameObjects with a copy of their real prefab + + + + + Register a CustomLocation to be added to the ZoneSystem + + + true if the custom location could be added to the manager + + + + Get a custom location by name. + + Name of the location (normally the prefab name) + The object with the given name if found + + + + Get a ZoneLocation by its name.

+ Search hierarchy: + + Custom Location with the exact name + Vanilla Location with the exact name from + +
+ Name of the ZoneLocation to search for. + The existing ZoneLocation, or null if none exists with given name +
+ + + Create a CustomLocation that is a deep copy of the original.
+ Changes will not affect the original. The CustomLocation is already registered in the manager. +
+ name of the custom location + name of the existing location to copy + A CustomLocation object with the cloned location prefab +
+ + + Remove a CustomLocation by its name.
+ Removes the CustomLocation from the manager. + Does not remove the location from any current ZoneSystem instance. +
+ Name of the CustomLocation to search for. +
+ + + Destroy a CustomLocation by its name.
+ Removes the CustomLocation from the manager and from the if instantiated. +
+ Name of the CustomLocation to search for. +
+ + + Register a CustomVegetation to be added to the ZoneSystem + + + + + + + Get a ZoneVegetation by its name.

+ Search hierarchy: + + Custom Vegetation with the exact name + Vanilla Vegetation with the exact name from + +
+ Name of the ZoneVegetation to search for. + The existing ZoneVegetation, or null if none exists with given name +
+ + + Remove a CustomVegetation from this manager by its name.
+ Does not remove it from any current ZoneSystem instance. +
+ Name of the CustomVegetation to search for. +
+ + + Register a CustomClutter to be added to the ClutterSystem + + + + + + + Get a Clutter by its name.

+ Search hierarchy: + + Custom Clutter with the exact name + Vanilla Clutter with the exact name from + +
+ Name of the Clutter to search for. + The existing Clutter, or null if none exists with given name +
+ + + Remove a CustomClutter from this manager by its name.
+ Does not remove it from any current ClutterSystem instance. +
+ Name of the CustomClutter to search for. +
+ + + Register a single ZoneLocaton in the current ZoneSystem. + Also adds the location prefabs to the and if necessary.
+ No mock references are fixed. +
+ to add to the +
+ + + Failure that is tracked for a mock prefab which could not be resolved to a real prefab or other type. + + + + + Accumulated list of the tracked MockResolveFailure. + + + + + Creates a new instance of the class. + + + + + Creates a new instance of the class. + + + + + Additional message to display when printing warnings. + + + + + Name of the type that could not be resolved. Mock prefix is already removed. + + + + + Path within the prefab that could not be resolved. + + + + + Type of the prefab that could not be resolved. + + + + + Prints warning messages for all the tracked MockResolveFailure. + + + + + Custom MonoBehaviour for the ColorPicker + + + + + Event that gets called by the ColorPicker + + received Color + + + + Singeleton instance + + + + + True when the ColorPicker is closed + + + + + OnColorChanged event + + + + + OnColorSelected event + + + + + Color before editing + + + + + Current Color + + + + + UseAlpha bool + + + + + Interact bool + + + + + Component ref + + + + + Component ref + + + + + Component ref + + + + + Component ref + + + + + Component ref + + + + + Component ref + + + + + Component ref + + + + + Component ref + + + + + Creates a new Colorpicker + + Color before editing + Display message + Event that gets called when the color gets modified + Event that gets called when one of the buttons done or cancel get pressed + When set to false the colors used don't have an alpha channel + + False if the instance is already running + + + + + Called when color is modified, to update other UI components + + + + + + Used by EventTrigger to calculate the chosen value in color box + + + + + Gets main Slider value + + + + + + Gets r Slider value + + + + + + Gets r InputField value + + + + + + Gets g Slider value + + + + + + Gets g InputField value + + + + + + Gets b Slider value + + + + + + Gets b InputField value + + + + + + Gets a Slider value + + + + + + Gets a InputField value + + + + + + Gets hexa InputField value + + + + + + Cancel button call + + + + + Manually cancel the ColorPicker and recover the default value + + + + + Done button call + + + + + Manually close the ColorPicker and apply the selected color + + + + + HSV helper class + + + + + Simple dragging + + + + + Add this MonoBehaviour to a GameObject + + + + + + BeginDrag event trigger + + + + + Drag event trigger + + + + + Custom MonoBehaviour for the GradientPicker + + + + + Event that gets called by the GradientPicker. + + received Gradient + + + + Singeleton instance + + + + + True when the GradientPicker is closed + + + + + OnGradientChanged Event + + + + + OnGradientSelected Event + + + + + Gradient before editing + + + + + Current Gradient + + + + + Key template + + + + + Interact bool + + + + + Creates a new GradiantPicker + + Color before editing + Display message + Event that gets called when the gradient gets modified + Event that gets called when one of the buttons done or cancel gets pressed + False if the instance is already running + + + + Setup new GradientPicker + + + + + Creates a ColorKey UI object + + + + + + Checks if new ColorKey should be created + + + + + + Creates a AlphaKey UI object + + + + + + Checks if new AlphaKey should be created + + + + + + Accessed by alpha Slider + + + + + + Accessed by alpha InputField + + + + + + Checks if Key can be deleted + + + + + + Changes Selected Key + + + + + Accessed by position Slider + + + + + + Accessed by position InputField + + + + + + Choose color button call + + + + + Cancel button call + + + + + Manually cancel the GradientPicker and recovers the default value + + + + + Done button call + + + + + Manually close the GradientPicker and apply the selected color + + + + + Panel for displaying and toggling custom map overlays + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Toggle the overlay list + + + + + Add a new toggle for a map overlay + + + + + + + + Util functions related to loading assets at runtime. + + + + + Path separator for AssetBundles + + + + + Method reference to . + Workaround for compiling a net 4.x mod against the nestandard 2.1 method reference. + + + + + Loads a from file at runtime. + + Texture path relative to "plugins" BepInEx folder + Is the given path relative + Texture2D loaded, or null if invalid path + + + + Wrapper for https://docs.unity3d.com/ScriptReference/ImageConversion.LoadImage.html, + creates a new . + + The byte array containing the image data to load. + A new texture with the loaded image if the data can be loaded, null otherwise + + + + Wrapper for https://docs.unity3d.com/ScriptReference/ImageConversion.LoadImage.html. + + The texture to load the image into. + The byte array containing the image data to load. + true if the data can be loaded, false otherwise + + + + Creates a readable copy of a rectangular region from a . + + Source texture. + Region of the texture to copy. + A readable of the specified region, or null if the texture is null. + + + + Creates a readable copy of a . + + Source texture. + A readable copy of the texture, or null if the texture is null. + + + + Creates a readable copy of a 's texture region. + If the sprite is part of an atlas, only its texture rectangle is copied.
+ Use AssetUtils.DuplicateTexture(sprite.texture) to copy the full texture. +
+ Source sprite. + A readable of the sprite’s texture region, or null if the texture is null. +
+ + + Creates a readable copy of a . + + Source sprite. + A new with a readable copy of its texture region, or null if the texture is null. + + + + Loads a from file at runtime. + + Texture path relative to "plugins" BepInEx folder + Texture2D loaded, or null if invalid path + + + + Loads a from file at runtime. + + Texture path relative to "plugins" BepInEx folder + The pivot to use in the resulting Sprite + Texture2D loaded, or null if invalid path + + + + Loads a mesh from a .obj file at runtime. + + Mesh path relative to "plugins" BepInEx folder + Texture2D loaded, or null if invalid path + + + + Loads an asset bundle at runtime. + + Asset bundle path relative to "plugins" BepInEx folder + AssetBundle loaded, or null if invalid path + + + + Load an assembly-embedded . Use this if the automatic detection of the assembly fails. + + Name of the bundle. Folders are point-seperated e.g. folder/bundle becomes folder.bundle + Executing assembly + + + + + Load an assembly-embedded . The calling assembly is automatically detected. + + Name of the bundle. Folders are point-seperated e.g. folder/bundle becomes folder.bundle + + + + + Load an assembly-embedded file as a . Use this if the automatic detection of the assembly fails. + + Name of the file. Folders are point-seperated e.g. folder/file.json becomes folder.file.json + Executing assembly + + + + + Load an assembly-embedded file as a . The calling assembly is automatically detected. + + Name of the file. Folders are point-seperated e.g. folder/file.json becomes folder.file.json + + + + + Loads the contents of a file as a char string + + + + + + + Loads a from a file path or an asset bundle (separated by ) + + + + + + + Helper methods to access BepInEx plugin information + + + + + Cached plugin list + + + + + Cache loaded plugins which depend on Jotunn. + + + + + + Get a dictionary of loaded plugins which depend on Jotunn. + + Dictionary of plugin GUID and + + + + Get a dictionary of all plugins loaded by BepInEx + + Dictionary of plugin GUID and + + + + Get from a + + of the plugin main class + + + + + Get from an + + of the plugin + + + + + Get from a path, also matches subfolder paths + + object of the plugin path + + + + + Get metadata information from the current calling mod + + + + + + Original code from https://github.com/GoldenJude. + + + + + Corrects any bone disorder caused by unity incorrectly importing ripped assets. + Once enabled, bone reordering will occur whenever the equipment changes. + If one plug-in requests application of reordering, it will be applied globally for all EquipmentChanged events. + + + + + The state of reordering bones OnEquipmentChanged. + + Returns true when bone reordering is enabled. + + + + Reorders bone ordering caused by importing ripped assets into unity. + It effectively matches the bone ordering from the ItemPrefab (itemPrefabHash parameter). + + + + GameObjects that need to match the ordering from the ItemPrefab (itemPrefabHash parameter) + + + + Reorders incorrect bone ordering caused by importing ripped assets into unity. + + + + + + + + Returns a list of bone names, given a SkinnedMeshRenderer. + + + + + + + Returns a transform matching the given name within the transforms children. + + + + + + + + Watches a for changes and raises events when the configuration file is modified. + + + + + Create a file watcher to trigger reloads of the config file when it is changed, created, or renamed. + + + Time in milliseconds before another event can be fired. + + + + Event triggered after the file watcher reloads the configuration file. + + + + + Safely invoke the event + + + + + Reloads config file if and only if the last write time differs from the last read time. + + + + + + + Utility class for the BepInEx ConfigurationManager plugin, without requiring a hard dependency + + + + + The ConfigurationManager plugin instance if installed, otherwise null + + + + + Is the config manager main window displayed on screen
+ Safe to use even if ConfigurationManager is not installed. +
+
+ + + Rebuild the setting list. Use to update the config manager window if config settings were removed or added while it was open.
+ Safe to call even if ConfigurationManager is not installed. +
+
+ + + Event args class for configuration synchronization event + + + + + Is this the initial synchronization? + + + + + GUID for each Plugin that received configuration data. + + + + + Helper class for identifying the theme of custom rooms. + + + + + Name of a dungeon theme, used when matching generators with custom rooms. + + + + + Get non-vanilla variant indices from the ZDO + + + + + Check for variant changes and pass the variant to AttachItem + + + + + Check for variant changes and pass the variant to AttachBackItem + + + + + Check for variant changes and pass the variant to AttachArmor + + + + + Store the variant index of the right hand item to the ZDO if the variant has changed + + + + + Store the variant index of the right back item to the ZDO if the variant has changed + + + + + Store the variant index of the chest item to the ZDO if the variant has changed + + + + + Constants of hardcoded strings used in-game + + + + + GlobalKey strings + + + + + In-game value: "" + + + + + In-game value: "defeated_bonemass" + + + + + In-game value: "defeated_gdking" + + + + + In-game value: "defeated_goblinking" + + + + + In-game value: "defeated_dragon" + + + + + In-game value: "defeated_eikthyr" + + + + + In-game value: "KilledTroll" + + + + + In-game value: "killed_surtling" + + + + + Weather strings + + + + + In-game value: "Clear" + + + + + In-game value: "Heath_clear" + + + + + In-game value: "LightRain" + + + + + In-game value: "Rain" + + + + + In-game value: "ThunderStorm" + + + + + In-game value: "nofogts" + + + + + In-game value: "SwampRain" + + + + + In-game value: "Darklands_dark" + + + + + In-game value: "Ashrain" + + + + + In-game value: "Snow" + + + + + In-game value: "SnowStorm" + + + + + In-game value: "DeepForest Mist" + + + + + In-game value: "Misty" + + + + + In-game value: "Twilight_Snow" + + + + + In-game value: "Twilight_SnowStorm" + + + + + In-game value: "Twilight_Clear" + + + + + In-game value: "Eikthyr" + + + + + In-game value: "GDKing" + + + + + In-game value: "Bonemass" + + + + + In-game value: "Moder" + + + + + In-game value: "GoblinKing" + + + + + In-game value: "Crypt" + + + + + In-game value: "SunkenCrypt" + + + + + Utility class for getting game versions + + + + + The semantic version of the running Valheim game + + + + + The network version of the running Valheim game, determining compatibility with other clients + + + + + A util class for computing various hashes + + + + + Compute a SHA256 hash from a given string + + + + + + + Interface to match a prefab to the mod that has created it. + + + + + The target prefab. + + + + + Reference to the which added this prefab. + + + + + Utility class for converting inputs to different formats + + + + + Translates a Unity KeyCode to a InputSystem + + + The matching Key or Key.None, if not assignable + + + + Tries to convert a KeyCode to a InputSystem + + + + + + + + Translates a to its value + + + + + Translates a to its axis string value + + + + + Translates a to its printable string value + + + + + Translates an axis string to its value + + + + + Translate an axis string to its value + + + + + Translate an axis string to its UnityEngine.InputSystem.InputBinding.path value + + + + + + + Translate a to its + UnityEngine.InputSystem.InputBinding.path value + + + + + + + Translates a to its value + + + + + Implementation of the mod compatibility features. + + + + + Stores the last server message. + + + + + Check if a mod is installed and loaded on the server.
+ Can be called from both client and server. +
+ BepInEx mod to check + true if the mod is loaded on the server.
false if the mod is not loaded on the server or no server connection is established
+
+ + + Check if a mod is installed and loaded on the server.
+ Can be called from both client and server. +
+ BepInEx mod GUID to check + true if the mod is loaded on the server.
false if the mod is not loaded on the server or no server connection is established
+
+ + + Check if Jotunn is installed and loaded on the server.
+ Can be called from both client and server. +
+ true if Jotunn is loaded on the server.
false if Jotunn is not loaded on the server or no server connection is established
+
+ + + Store server's message. + + + + + + + Compares version data on server and client. + + + + + + + + Create and show mod compatibility error message + + + + + Create the error message(s) from the server and client message data + + server data + client data + + + + + Get module. + + + + + + DataLayoutVersion indicates the version layout of data within the ZPkg. If equal to 0 then it is a legacy format. + + + + + Identifier for mod based on DataLayoutVersion. + For legacy layout returns mod name, otherwise returns mod GUID. + + + + + Friendly version of mod name. + + + + + Version data for mod. + + + + + Compatibility level of the mod. + + + + + Version strictness level of the mod. + + + + + Whether the data layout is a legacy format or not. + + + + + Write to ZPkg + + + + + + + Module must at least be loaded on the server + + + + + + Module must at least be loaded on the client + + + + + + Module is not enforced by the server or client + + + + + + Module is not enforced, only version check if both client and server have it + + + + + + Module is formatted as in one of the supported data layout versions. + Should return false is data was received from a newer version of Jotunn. + + + + + + Checks if the compare module has a lower version then the other base module + + + + + + + + + Deserialize version string into a usable format. + + + + + Valheim version + + + + + Module data + + + + + Whether all the ModModule instances were formatted in a supported + data layout and all instances had the same data layout. + + + + + Create from module data + + + + + + Create from ZPackage + + + + + + Create ZPackage + + ZPackage + + + + + + + Determines the level of compatibility of a mod which is enforced by Jötunn. + Servers disconnect clients with mods which enforce their compatibility when + the version does not match as defined by the VersionStrictness attribute. + + + + + Mod is not checked at all, VersionsStrictness does not apply. + + + + + Mod is checked only if the client and server have loaded it and ignores if just one side has it. + + + + + Mod must be loaded on server and client. Version checking depends on the VersionStrictness. + + + + + If mod is installed on the server, every client has to have it. VersionStrictness does apply when both sides have it. + + + + + If mod is installed on the client, the server has to have it. VersionStrictness does apply when both sides have it. + + + + + Version check is performed when both server and client have the mod, no check if the mod is actually installed. + + + + + Mod is not checked at all, VersionsStrictness does not apply. + + + + + Enum used for telling whether or not the same mod version should be used by both the server and the clients. + This enum is only useful with certain CompatibilityLevel values. + + + + + No version check is done + + + + + Mod must have the same Major version + + + + + Mods must have the same Minor version + + + + + Mods must have the same Patch version + + + + + Mod compatibility attribute
+
+ If your mod adds its own RPCs, EnforceModOnClients is likely a must (otherwise clients would just discard the messages from the server), same version you do have to determine, if your sent data changed.
+ If your mod adds items, you always should enforce mods on client and same version (there could be nasty side effects with different versions of an item).
+ If your mod is just GUI changes (for example bigger inventory, additional equip slots) there is no need to set this attribute +
+
+ + + Compatibility Level + + + + + Version Strictness + + + + + Network Compatibility Attribute + + + + + + + Create empty ServerData + + + + + Create from module data + + + + + + Create from ZPackage + + + + + + Enum used for telling whether AdminOnly settings for Config Entries should always be enforced + or if they should only be enforced when the mod is installed on the server. + + + + + AdminOnly is always enforced for Config Entries even if the mod is not installed on the server. + This means that AdminOnly configs cannot be edited in multiplayer if the mod is not on the server. + + + + + AdminOnly is only enforced for Config Entries if the mod is installed on the server. + + + + + This attribute is used to determine how Jotunn should enforce synchronization of Config Entries.
+ Only relevant for Config Entries that have the applied. +
+
+ + + AdminOnly ConfigEntry Strictness + + + + + Synchronization mode Attribute + + + + + + Check if AdminOnly Config Entries should always be locked if player is not an admin. + + + + + + Utility class to query metadata about added content of any loaded mod, including non-Jötunn ones. + It is disabled by default, as it unnecessary increases the loading time when not used.
+ has to be called anytime before FejdStartup.Awake, meaning in your plugin's Awake or Start. +
+
+ + + Enables the collection of mod metadata. + It is disabled by default, as it unnecessary increases the loading time when not used.
+ This method has to be called anytime before FejdStartup.Awake, meaning in your plugin's Awake or Start. +
+
+ + + Get all prefabs that were added by mods. Does not include Vanilla prefabs. + + + + + + Get all prefabs that were added by a specific mod + + + + + + + Get an prefab by its name. + Does not include Vanilla prefabs, see PrefabManager.GetPrefab(string) + for those. + + + + + + + Utility class to query metadata about loaded Jötunn mods and their added content + + + + + Get all loaded mod's metadata which are depending on Jötunn + + An of for all loaded mods + + + + Get all added CustomPrefabs + + An of from all loaded mods + + + + Get all added CustomPrefabs of a mod by GUID + + GUID of the mod + An of from a specific mod + + + + Get all added CustomItems + + An of from all loaded mods + + + + Get all added CustomItems of a mod by GUID + + GUID of the mod + An of from a specific mod + + + + Get all added CustomRecipes + + An of from all loaded mods + + + + Get all added CustomRecipes of a mod by GUID + + GUID of the mod + An of from a specific mod + + + + Get all added CustomItemConversions + + An of from all loaded mods + + + + Get all added CustomItemConversions of a mod by GUID + + GUID of the mod + An of from a specific mod + + + + Get all added CustomStatusEffects + + An of from all loaded mods + + + + Get all added CustomStatusEffects of a mod by GUID + + GUID of the mod + An of from a specific mod + + + + Get all added CustomPieceTables + + An of from all loaded mods + + + + Get all added CustomPieceTables of a mod by GUID + + GUID of the mod + An of from a specific mod + + + + Get all added CustomPieces + + An of from all loaded mods + + + + Get all added CustomPieces of a mod by GUID + + GUID of the mod + An of from a specific mod + + + + Get all added CustomLocations + + An of from all loaded mods + + + + Get all added CustomLocations of a mod by GUID + + GUID of the mod + An of from a specific mod + + + + Get all added CustomVegetations + + An of from all loaded mods + + + + Get all added CustomVegetations of a mod by GUID + + GUID of the mod + An of from a specific mod + + + + Get all added CustomClutter + + An of from all loaded mods + + + + Get all added CustomClutter of a mod by GUID + + GUID of the mod + An of from a specific mod + + + + Get all added CustomCreatures + + An of from all loaded mods + + + + Get all added CustomCreatures of a mod by GUID + + GUID of the mod + An of from a specific mod + + + + Get all added ConsoleCommands + + An of from all loaded mods + + + + Get all added ConsoleCommands of a mod by GUID + + GUID of the mod + An of from a specific mod + + + + Get all added CustomLocalizations + + An of from all loaded mods + + + + Get all added CustomLocalizations of a mod by GUID + + GUID of the mod + An of from a specific mod + + + + Model class holding metadata of Jötunn mods. + + + + + The mod GUID + + + + + Human readable name + + + + + Current version + + + + + Custom prefabs added by that mod + + + + + Custom items added by that mod + + + + + Custom recipes added by that mod + + + + + Custom item conversions added by that mod + + + + + Custom status effects added by that mod + + + + + Custom piece tables added by that mod + + + + + Custom pieces added by that mod + + + + + Custom locations added by that mod + + + + + Custom Vegetation added by that mod + + + + + Custom Clutter added by that mod + + + + + Custom Creatures added by that mod + + + + + Custom commands added by that mod + + + + + Custom commands added by that mod + + + + + Invoke patch initialization methods for all loaded mods. + + + + + Priority attribute for PatchInitalizer. + + + + + The patch priority. + + negative - early +
+ zero - neutral +
+ positive - late +
+
+
+ + + Patch Init Attribute + + + + + + Various Path constants used in Jötunn + + + + + Path to the game's save path + + + + + Path to the custom item folder + + + + + Path to the global translation folder + + + + + Path to cached icons. See + + + + + Parses an array of human readable piece usage tag names into a combined value. + Invalid or unknown names are logged and skipped. + + Array of usage tag names, see for valid values + The combined for all recognized names + + + + Various utility methods aiding Reflection tasks. + + + + + All possible binding flags + + + + + Determines whether this type is the same or a subclass of another type + + this type + Type against the type is checked + true if this type is the same or a subtype + + + + Determine whether the specified type is a subtype of the specified generic type or implements the specified generic interface. + + the type to be tested. + generic interface type, passing in typeof (IXxx<>) + returns true if it is a subtype of the generic interface, or false. + + + + Determines if this type inherits from + + this type + + + + + Get the generic type of this type.
+ https://stackoverflow.com/a/21995826 +
+ this type + +
+ + + Get the of the first caller outside of this assembly + + The reflected type of the first caller outside of this assembly + + + + Get the of the first caller outside of this assembly + + The assembly of the first caller outside of this assembly + + + + Invoke a private method of any class instance + + Instance of the class + Name of the method + Argument values (if any) of the method + The return of the method as an + + + + Get the value of a private property of any class instance + + Generic property type + Instance of the class + Name of the property + The value of the property + + + + Get the value of a private field of any class instance + + Generic field type + Instance of the class + Name of the field + The value of the field + + + + Get the value of a private static field of any class + + Generic field type + Type of the class + Name of the field + The value of the field + + + + Set a value of a private field of any class instance + + Instance of the class + Name of the field + New value of the field + + + + Cache for Reflection tasks. + + + + + of + + + + + of + + + + + of + + + + + Various static utility methods for working with Shaders + + + + + Get a list of all and in this GameObject and its childs. + + Parent GameObject + List of and + + + + Get a list of all renderer of a GameObject and its childs + + Parent GameObject + List of + + + + Get a list of all shared renderer of a GameObject and its childs + + Parent GameObject + List of + + + + Get a list of all normal and shared renderer of a GameObject and its childs + + Parent GameObject + List of + + + + Create a new, scaled texture from a given texture. + + Source texture to scale + New width of the scaled texture + + + + + Scale a texture to a certain width, aspect ratio is preserved. + + Texture to scale + New width of the scaled texture + + + + Dumps all shader information of a GameObject and its childs onto debug log + + + + + + Event args class for syncing configuration event + + + + + Pre-defined actions to use with the . + + + + Helper to check object validity. + + + Helper to check object validity. + + + + "Create" action for the . Can undo and redo ZDO creation. + + + + + Current ZDO data of this action. + + + + + Create new undo data for ZDO creation operations. Clones all ZDO data to prevent NREs. + + Enumerable of ZDOs which were created. + + + + Description of the executed action. + + + + + Remove stored ZDOs again. + + + + + Success message. + + + + + Recreate stored ZDOs again. + + + + + Success message. + + + + + "Remove" action for the . Can undo and redo ZDO removal. + + + + + Current ZDO data of this action. + + + + + Create new undo data for ZDO removal operations. Clones all ZDO data to prevent NREs. + + Enumerable of ZDOs which were removed. + + + + Description of the executed action. + + + + + Recreate stored ZDOs again. + + + + + Success message. + + + + + Remove stored ZDOs again. + + + + + Success message. + + + + + Heightmap data wrapper + + + + + "Smooth" member of the heightmap + + + + + "Level" member of the heightmap + + + + + "Index" member of the heightmap + + + + + "HeightModified" member of the heightmap + + + + + Paint data wrapper + + + + + "PaintModified" member of the heightmap paint + + + + + "Paint" member of the heightmap paint + + + + + "Index" member of the heightmap paint + + + + + Heightmap and Paint data collection + + + + + Collection of + + + + + Collection of + + + + + "Terrain" action for the . Can undo and redo terrain modifications. + + + + + Create new undo data for terrain modifications. + + Terrain state before modification + Terrain state after modification + Position of the terrain modification center + Radius of the terrain modification + + + + Description of the executed action. + + + + + Sets terrain data to the stored values of the "before" state. + + + + + Success message. + + + + + Sets terrain data to the stored values of the "after" state. + + + + + Success message. + + + + + Like a list but stores elements in the order specified by the weight. + + + + + + + Weighted item used in + + + + + + Class that specifies how a setting should be displayed inside the ConfigurationManager settings window. + + Usage: + This class template has to be copied inside the plugin's project and referenced by its code directly. + make a new instance, assign any fields that you want to override, and pass it as a tag for your setting. + + If a field is null (default), it will be ignored and won't change how the setting is displayed. + If a field is non-null (you assigned a value to it), it will override default behavior. + + + + Here's an example of overriding order of settings and marking one of the settings as advanced: + + // Override IsAdvanced and Order + Config.Bind("X", "1", 1, new ConfigDescription("", null, new ConfigurationManagerAttributes { IsAdvanced = true, Order = 3 })); + // Override only Order, IsAdvanced stays as the default value assigned by ConfigManager + Config.Bind("X", "2", 2, new ConfigDescription("", null, new ConfigurationManagerAttributes { Order = 1 })); + Config.Bind("X", "3", 3, new ConfigDescription("", null, new ConfigurationManagerAttributes { Order = 2 })); + + + + + You can read more and see examples in the readme at https://github.com/BepInEx/BepInEx.ConfigurationManager + You can optionally remove fields that you won't use from this class, it's the same as leaving them null. + + + + + ctor + + + + + Should the setting be shown as a percentage (only use with value range settings). + + + + + Custom setting editor (OnGUI code that replaces the default editor provided by ConfigurationManager). + See below for a deeper explanation. Using a custom drawer will cause many of the other fields to do nothing. + + + + + Show this setting in the settings screen at all? If false, don't show. + + + + + Category the setting is under. Null to be directly under the plugin. + + + + + If set, a "Default" button will be shown next to the setting to allow resetting to default. + + + + + Force the "Reset" button to not be displayed, even if a valid DefaultValue is available. + + + + + Force the setting name to not be displayed. Should only be used with a to get more space. + Can be used together with to gain even more space. + + + + + Optional description shown when hovering over the setting. + Not recommended, provide the description when creating the setting instead. + + + + + Name of the setting. + + + + + Order of the setting on the settings list relative to other settings in a category. + 0 by default, higher number is higher on the list. + + + + + Only show the value, don't allow editing it. + + + + + If true, don't show the setting by default. User has to turn on showing advanced settings or search for it. + + + + + Custom converter from setting type to string for the built-in editor textboxes. + + + + + Custom converter from string to setting type for the built-in editor textboxes. + + + + + Whether a config is only writable by admins and gets overwritten on connecting clients + + + + + Color of the entry text + + + + + Color of the description text + + + + + Whether a config is locked for direct writing + + + + + Set config values from an attribute array + + Array of attribute values + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The implementation to use when comparing keys, or null to use the default for the type of the key. + + + + Gets the at the specified index. + + + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Gets the keys. + + The keys. + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + +
+
diff --git a/plugins/Jotunn/README.md b/plugins/Jotunn/README.md new file mode 100644 index 0000000..3fde0ef --- /dev/null +++ b/plugins/Jotunn/README.md @@ -0,0 +1,119 @@ +# Jötunn, the Valheim Library +![Banner](https://raw.github.com/Valheim-Modding/Jotunn/prod/JotunnLib/Documentation/images/banner.png) + +Jötunn (/ˈjɔːtʊn/, "giant"), the Valheim Library was created with the intent to facilitate developer creativity, unify the communities problem solving efforts, and enhance developer productivity by curating a library of common helper utilities. Additionally, it supplies specific interfaces and abstractions which aid with mod interoperability, networked gameplay consistency, and remove the need to maintain valheim version specific code by acting as an interface between the developer and the games changing internals. + +This project was originally derived from the base structure of [JötunnLib](https://github.com/jotunnlib/jotunnlib), and had many entity abstractions and features from [ValheimLib](https://github.com/Valheim-Modding/ValheimLib) merged into it before we proceeded with further implementations. We have lots of features planned for the future, and we hope the community has many feature requests to suggest. I hope the features we have implemented thus far prove to be a useful base and provide an idea of the consistency we aim to deliver moving forwards. + +#### Usage +Please refer to our [documentation](https://valheim-modding.github.io/Jotunn/). We have gone to great lengths to ensure there is ample documentation to facilitate the developer's learning experience. + +#### Installation +_If you're using a mod installer, you can likely ignore this section._ +For a more in-depth installation guide, please check out the [manual installation guide](https://valheim-modding.github.io/Jotunn/guides/installation.html) in our documentation. +However, here is a quick run-down: + +1. **Install BepInEx:**\ +Download [BepInEx](https://thunderstore.io/c/valheim/p/denikson/BepInExPack_Valheim/), extract everything inside `BepInEx_Valheim` into your Valheim folder (typically `C:\\steamapps\common\Valheim`). + +2. **Install Jötunn:**\ +Download from either [Nexus](https://www.nexusmods.com/valheim/mods/1138) / [Thunderstore](https://thunderstore.io/c/valheim/p/ValheimModding/Jotunn), extract the ZIP and place all content into `BepInEx/plugins/Jotunn` of your Valheim install. + +That's it, launch the game and mod away! + +## Features +JVL provides three distinct groups of features. Entities, which abstract the game's own entities into easy-to-use interfaces. Managers, which act as interfaces between the entities and native collections or subsystems. Utilities, which are there to aid in generic/common functions that can span many different areas. + +#### Entities +- **CustomCreature** - Represents custom animals, enemies and NPCs. +- **CustomItem** - Represents ingame items such as weapons, tools and consumables. +- **CustomItemConversion** - Represents ingame item conversions for the CookingStation, Fermenter, Smelter and Incinerator in one abstraction. +- **CustomLocalization** - Represents custom localizations for your mod. +- **CustomLocation** - Represents custom locations from simple stone circles to complete villages. +- **CustomPiece** - Represent ingame building pieces. +- **CustomPieceTable** - Represent ingame building tables. Support for custom categories included. +- **CustomRecipe** - Represents ingame recipes for managing crafting and upgrading of items. +- **CustomStatusEffect** - Represents ingame status effects from weapon hit effects to guardian powers. +- **CustomVegetation** - Represents vegetation spread throughout biomes from pickables to cosmetics. +- **KitbashObject** - Represents a custom object assembled from various other prefabs' components. +- **Mocks** - Fake any vanilla prefab and use it in your custom assets - Jötunn resolves the references to the vanilla objects at runtime. +- **Config classes** - There are many more abstractions beside the main entities which allow for easy creation of things like key bindings, custom commands, skills and more. + +#### Managers +- **Command Manager** - Facilitates implementation of methods which can be registered as executable console commands. +- **CreatureManager** - Add new creatures or copy and modify vanilla ones. +- **GUI Manager** - Allows invocation of UI prefabs on the fly via code. +- **Input Manager** - Provides an interface for binding keys via ZInput in a consistent manner, facilitating custom keybind hints. +- **Item Manager** - Abstracts away implementation details of configurations applied to items/recipes to provide a consistent developer experience in adding new items. tl;dr items are easy! +- **Kitbash Manager** - Create custom assets with individual pieces from vanilla prefabs. +- **KeyHint Manager** - Create custom key hints for your weapons and tools, even down to the selected piece. +- **Localization Manager** - Provides multiple methods of loading localization data into the game, as well as exposing an interface for adding additional languages to provide localizations to unsupported languages. +- **Minimap Manager** - Alter map data or create overlays for the map. +- **Piece Manager** - Very similar to the Item Manager, abstracting implementation details of configurations for pieces/recipe's. +- **Prefab Manager** - Provides a cache of prefabs registered through other managers, mostly developers will only query the cache for prefabs added via other managers. +- **Render Manager** - Provides a custom render queue to render visual GameObjects into a Sprite - Useful to generate icons for your custom items. +- **Skill Manager** - Facilitates additional custom skills. +- **Undo Manager** - Provides global undo/redo queues for mods to revert and replay any actions in the game. +- **Zone Manager** - Create custom locations and vegetation to add in the world generation. + +#### Utilities +- **Asset Helpers** - Methods to facilitate referencing and loading of assets. +- **Bone Reorderer** - Fixes bone ordering issues on `SkinnedMeshRenderer`'s that have been ripped and imported into unity. +- **Network Compatibility** - Allows plugins to define their own version requirements for clients connected to the server. Ensures a customisable level of interoperability with clients of differing mod configurations on a plugin-by-plugin basis. +- **Config Synchronisation** - Allows administrators to adjust configuration values via an in game menu. Config setting is synced to connected clients. +- **Mod Registry** - Query added content per Mod. +- **SimpleJSON** - We have imported SimpleJSON into our library at the request of developers who would simply prefer to have this dependency taken care of already. We use the MIT Licensed [SimpleJSON](https://simplejson.readthedocs.io/en/latest/) + +## Bugs, Support, Contributions +Please refer to our [documentation](https://valheim-modding.github.io/Jotunn/) before requesting [support via discord](https://discord.gg/DdUt6g7gyA). If there are any mod interoperability issues developers experience (not just exclusive JVL issues), we would like to hear from you! If we can facilitate better mod interoperability by providing a common interface, or exposing native valheim objects, including a utility which you have created, then please feel free to create a new [feature request](https://github.com/Valheim-Modding/Jotunn/issues/new?assignees=&labels=&template=feature_request.md&title=%5BFEATURE%5D) or [pull request](https://github.com/Valheim-Modding/Jotunn/pulls). + +## Roadmap +Check our [projects](https://github.com/Valheim-Modding/Jotunn/projects) for a more up to date list of features currently in development, or suggest your own features for inclusion by creating a new [feature request](https://github.com/Valheim-Modding/Jotunn/issues/new?assignees=&labels=&template=feature_request.md&title=%5BFEATURE%5D) + +## Changelog + +See the full [Changelog](https://github.com/Valheim-Modding/Jotunn/blob/prod/CHANGELOG.md). + +## Contributors to Jötunn, the Valheim Library + +These people have been integral to pushing JVL out of the door, and without them we could not have achieved nearly as much. Please give them some love on github, thunderstore, and nexus. + +#### Core: + +*Jules#7950*: [github](https://github.com/sirskunkalot) + +*Margmas#9562*: [github](https://github.com/MSchmoecker), [thunderstore](https://thunderstore.io/c/valheim/p/MSchmoecker/), [nexus](https://www.nexusmods.com/users/111418768) + +*iDeathHD#7866*: [github](https://github.com/xiaoxiao921), [thunderstore](https://thunderstore.io/c/valheim/p/xiaoxiao921/) + +*Algorithman#6741*: [github](https://github.com/Algorithman) + +*Quaesar#5604*: [github](https://github.com/RatikKapoor) + +*radu#0571*: [github](https://github.com/raduschirliu), [thunderstore](https://thunderstore.io/c/valheim/p/radu/), [nexus](https://www.nexusmods.com/users/112072898) + +*paddy#1337*: [github](https://github.com/paddywaan), [thunderstore](https://thunderstore.io/c/valheim/p/paddywan/) + +#### Contributors: + +*Cinnabun#0451*: [github](https://github.com/capnbubs) + +*GoldenJude#8965*: [github](https://github.com/GoldenJude), [nexus](https://www.nexusmods.com/users/48864143?tab=user+files) + +*zarboz#7828*: [github](https://github.com/sbtoonz), [thunderstore](https://thunderstore.io/c/valheim/p/sbtoonz/), [nexus](https://www.nexusmods.com/users/4057483) + +*MarcoPogo#6095*: [github](https://github.com/MathiasDecrock), [nexus](https://www.nexusmods.com/users/3030830?tab=user+files) + +*blaxxun#9098*: [github](https://github.com/blaxxun-boop) + +*Tekla#1012*: [github](https://github.com/T3kla/ValMods/wiki) + +*JoeyParrish#8644*: [github](https://github.com/joeyparrish), [thunderstore](https://thunderstore.io/c/valheim/p/joeyparrish/), [nexus](https://www.nexusmods.com/users/128211453) + +*Nosirrom#2626*: [github](https://github.com/donchad) + +*Jere#0989*: [github](https://github.com/JereKuusela), [thunderstore](https://thunderstore.io/c/valheim/p/JereKuusela/), [nexus](https://www.nexusmods.com/valheim/users/117845818) + +*Searica*: [github](https://github.com/searica), [thunderstore](https://thunderstore.io/c/valheim/p/Searica/) + +*OrianaVenture*: [github](https://github.com/OrianaVenture), [thunderstore](https://thunderstore.io/c/valheim/p/VentureValheim/) diff --git a/plugins/MassFarming/MassFarming.dll b/plugins/MassFarming/MassFarming.dll new file mode 100644 index 0000000..59510ed Binary files /dev/null and b/plugins/MassFarming/MassFarming.dll differ diff --git a/plugins/MultiUserChest/MultiUserChest.dll b/plugins/MultiUserChest/MultiUserChest.dll new file mode 100644 index 0000000..7a2fa1e Binary files /dev/null and b/plugins/MultiUserChest/MultiUserChest.dll differ diff --git a/plugins/MultiUserChest/MultiUserChest.dll.mdb b/plugins/MultiUserChest/MultiUserChest.dll.mdb new file mode 100644 index 0000000..dcba221 Binary files /dev/null and b/plugins/MultiUserChest/MultiUserChest.dll.mdb differ diff --git a/plugins/Quartermaster/Quartermaster.dll b/plugins/Quartermaster/Quartermaster.dll new file mode 100644 index 0000000..6d65d2c Binary files /dev/null and b/plugins/Quartermaster/Quartermaster.dll differ diff --git a/plugins/ValheimNpc/README.txt b/plugins/ValheimNpc/README.txt new file mode 100644 index 0000000..4cdce42 --- /dev/null +++ b/plugins/ValheimNpc/README.txt @@ -0,0 +1,140 @@ +Vikings for Hire (Valheim NPC) +============================== + +1.3.0: навигация в поселениях переписана с нуля (на неё ушла большая часть работы). Старая шла по сетке путей + игры, а та сделана для монстров на открытой местности: не связывает лестницы через проём в полу и стремянки + (второй этаж недоступен), считает двери стенами (застревали в комнатах), даёт резкие углы (кружились) и не + всегда перестраивается после стройки (лезли по убранной лестнице). Своя «карта поселения»: всё поселение прощупывается лучами (земля, полы всех + этажей, лестницы, дверные проёмы), викинги ищут путь по ней и идут ровно, без кружения; поставил или сломал + постройку — кусок перемеряется сразу. Лестницы (и крутые стремянки) связывают этажи; на высокую ступень + викинг подпрыгивает. Тропы: где прошёл ты, там проход точно есть — викинги охотнее ходят по натоптанному + (тропы хранятся между запусками). Вне поселения и если путь по карте не нашёлся — как раньше, с переносом. + Отладка: ShowNavMap в «8 - Отладка» — карта вокруг тебя и пути викингов прямо в мире. + Фермер сеет на вскопанном и лён с ячменём из сундуков без запаса (сколько оставлять — FarmSeedReserve); + пока сеять нечем, так и пишет, а не «нечего делать». + Двери: закрытая — проход (викинг открывает её, даже если сам недавно открывал), открытая створка — препятствие + (раньше шёл прямо в неё); при открытии и закрытии карта у двери перемеряется. Поставил или убрал постройку — + карта перемеряется по всему её размеру, а тропы через это место забываются (раньше убранная лестница оставалась). + Ночью рабочие, застывшие вне загруженного мира, переносятся к кроватям. Проснувшись, викинг встаёт с кровати на пол. + Фермер засевает вскопанное на всей территории базы: круг знамени, а если знамя держит мир загруженным дальше — + весь этот радиус; поле, выходящее за край, — целиком. Статус работы называет, чего не хватает («нечего + загрузить: лён», «нечем топить: уголь», «не может дойти до сундука»). Викинг, застрявший в позе сидя, встаёт, + прежде чем идти. На выделенном сервере больше нет тысяч предупреждений Unity «kinematic body» в логе. +1.3.0: settlement navigation rewritten from scratch (most of the work went into it). The old one used the game's + navmesh, which is made for monsters on open terrain: it does not connect stairs through a floor opening or + stepladders (no second floor), treats doors as walls (stuck in rooms), makes sharp corners (spinning) and is + not always rebuilt after building (climbing a removed ladder). A "settlement map": the whole settlement is probed with raycasts (ground, every + floor, stairs, doorways); Vikings path over it and walk smoothly, no spinning; building or removing a piece + re-measures that spot at once. Stairs (even steep stepladders) connect floors; Vikings hop onto high steps. + Trails: wherever you walked is surely passable, and Vikings prefer trodden ways (trails are saved). + Outside settlements, or if no map path is found, it works as before, teleport included. + Debug: ShowNavMap in "8 - Debug" draws the map around you and the Vikings' paths. + Farmers sow tilled ground with flax and barley from chests with no reserve (setting FarmSeedReserve); + while there is nothing to sow they say so instead of "nothing to do". + Doors: a closed door is passable (the Viking opens it, even if it opened it a minute ago), an open door leaf is an + obstacle (they used to walk into it); toggling a door re-measures the map there. Building or removing a piece + re-measures its whole size and forgets trails through it (a removed ladder used to linger). + At night, workers frozen outside the loaded world are moved to their beds. Waking up, a Viking steps off the bed. + Farmers sow tilled ground over the whole base: the banner ring, or the banner's keep-alive radius if larger; a + field running past the edge is sown whole. Work status names what is missing ("nothing to load: flax", + "nothing to burn: coal", "can't get to the chest"). A Viking stuck sitting stands up before walking. + Dedicated servers no longer log thousands of Unity "kinematic body" warnings. +1.2.5 (хотфикс): профессия над именем стоит ровно по центру имени (была сдвинута вправо). + Окно «Торговать»/«Заказать» больше не закрывается сразу, если торговец стоит выше или ниже тебя (помост, + этаж): закрывается только если отойти дальше 8 м. + Стража ночью больше не крутится на месте: стражник шарахался от собственного факела в руке (обход костров + считал его огнём). Смены — строго день/ночь (раньше «сова» в дневной смене спала днём, и днём спали оба); + смена видна в разговоре со стражником. Ночная смена пьёт свой мёд ночью (раньше не пила никогда и ворчала). + Викинг, который топчется у кровати и не может подойти вплотную, ложится через 4 с. + Стража быстрее реагирует на врагов: раз в секунду оглядывает поселение и гонится за врагом по всему кругу + обхода (раньше бросала врага дальше 20 м от своей кровати и пробегала мимо). На крик рабочего бежит туда, + где враг сейчас, а не к месту прошлой драки. + Двое на одной кровати: после загрузки мира кровать могла казаться свободной (игра перенумеровывает объекты), + и её занимал второй. Теперь свободна только та кровать, что ни у кого не записана домом, а из двух хозяев + одной кровати второй уступает и ищет другую. + Фермер засевает вскопанную землю: сам находит в поселении вскопанные клетки и сажает семена из сумки или из + сундука (как у соседей по грядке; ячмень и лён берёт, только если их в сундуках больше 20). Нечего сеять — скажет. + Лесоруб берёт семена деревьев (шишки, семена бука и берёзы, жёлуди) из сундуков и сажает лес за поселением. + Собиратель не собирает смолу (список — настройка GathererSkip). +1.2.5 (hotfix): the job tag is centered above the name (it was shifted to the right). + The Trade/Order window no longer closes right away when the trader stands above or below you (a platform, + another floor): it closes only beyond 8 m. + Night guards no longer spin in place: a guard kept fleeing from the torch in his own hand (fire avoidance + treated it as a campfire). Shifts are strictly day/night (a night-owl guard on the day shift used to sleep by day, + so both slept); the shift is shown in the guard's dialog. The night shift drinks its mead at night. + A Viking lingering beside the bed who cannot step right up to it lies down after 4 s. + Guards react faster: they scan the settlement every second and chase enemies across the whole patrol ring + (they used to drop any enemy farther than 20 m from their bed and run past it). When a worker calls for help, + they run to where the enemy is now, not to the spot of the previous fight. + Two Vikings on one bed: after loading the world a bed could look free (the game renumbers objects) and a + second Viking took it. Now only a bed that is nobody's home counts as free, and of two owners of one bed the + second gives it up and finds another. + Farmers sow tilled ground: they find tilled cells in the settlement and plant seeds from the bag or a chest + (matching the neighbours in the bed; barley and flax only if chests hold more than 20). No seeds - they say so. + Woodcutters take tree seeds (cones, beech and birch seeds, acorns) from chests and plant forest outside. + Gatherers leave tar alone (list: setting GathererSkip). +1.2.4: награда за убитых изгоев — монеты с тела (5 за уровень, у вожака втрое) и доверие: бонды благодарны. + Только если убил ты или твой викинг. Размер — настройки OutlawBounty и OutlawBountyTrust. + Стража: в свою смену сна стражник снова идёт к кровати и спит (раньше стоял и крутился на месте ночью, + и оба стражника будто работали круглые сутки). + Над именем рабочего — значок и название профессии, у торговца — монета (настройка JobOverName). + Окна «Торговать» и «Заказать» больше не закрываются сами сразу после открытия (запас по дальности); + если окно закрылось, игра говорит почему. +1.2.4: bounty for killed outlaws — coins dropped on the body (5 per level, chiefs triple) and trust from the freeholders. + Only when you or your Viking killed it. Settings: OutlawBounty, OutlawBountyTrust. + Guards: on their sleep shift they walk to bed and sleep again (they used to stand and spin at night, + so both guards seemed to work around the clock). + Workers show their job (icon and title) above the name, traders a coin (setting JobOverName). + The Trade and Order windows no longer close right after opening (more distance slack); if a window closes, + the game tells you why. +1.2.3: убраны регулярные подёргивания игры: списки викингов и знамён по всему миру собираются понемногу, а не разом. + Стража больше не крутится на месте и не телепортируется по поселению. Шахтёры не лезут за камнями на дно. + Совместимость с Path of Valheiman: он больше не делает викингов «редкими монстрами» (прыжки за спину, ядовитая + аура, отражение урона). + Новая профессия «Рыбак»: с удочкой в сумке ловит рыбу с ближайшего берега (наживка — чаще клюёт). + «Живых» поселений по умолчанию до 4 (лимит только на «живые», обычных — сколько угодно; на знамени это видно). +1.2.3: removed periodic stutters (world-wide lists of Vikings and banners are built gradually, not in one frame); + guards no longer spin in place or teleport around the settlement; miners ignore rocks on the sea floor. + Path of Valheiman compatibility: it no longer turns Vikings into "rare monsters" (blink, poison aura, reflect). + New job "Fisher": with a fishing rod in the bag, fishes from the nearest shore (matching bait bites more often). + Up to 4 live settlements by default (the limit counts only live ones; ordinary settlements are unlimited). +1.2.2: исправлена физика посадки спутников — пассажиры не толкают корпус и не «плывут» на палубе. +1.2.2: fixed companion boarding physics — passengers no longer push the hull or swim on deck. + +Установка: распакуй архив в BepInEx\plugins (получится папка ValheimNpc). Обновление — просто распакуй поверх +старой версии. Нужны BepInEx и Jotunn. + +ValheimNpc.dll — ЯДРО, нужно всегда: сами викинги, найм, характеры, настроение, уровни, реестр (J), окна. + +Модули — ставь только нужные, остальные удали из папки. Работают независимо друг от друга, в любом наборе. +Если модулей нет совсем (лежит одно ядро), работает всё сразу — как раньше, одной DLL. + + ValheimNpc.Companions.dll Спутники: викинги идут с тобой и дерутся рядом, приказы и колесо (Y), панель отряда, + корабли и порталы, роли в бою. + ValheimNpc.Settlement.dll Своё поселение: знамя в молоте, профессии и работа, дома и кровати, жизнь поселения + («живёт без тебя», пиры, стража, просьбы жителей). + ValheimNpc.Factions.dll Чужие поселения: хутора вольных бондов и стоянки изгоев, фракции, сдача изгоев, + разбойники на дорогах. + ValheimNpc.Traders.dll Торговцы: бродячие и в поселении, торговля, заказы, долги. + ValheimNpc.World.dll События мира: охотники за головами, поручения, отшельник, поединки, беженцы, + кузнец-странник, северное сияние. + +Без «Спутников» новые наёмники сразу становятся рабочими; без «Поселения» — только спутниками; +без обоих нанимать некуда (найм выключен). +В мультиплеере набор модулей должен совпадать у сервера и всех игроков. + +-------------------------------------------------------------------------------------------------------------- + +ValheimNpc.dll is the CORE and is always required: the vikings themselves, hiring, traits, mood, levels, roster (J). + +Modules are optional and independent — keep only the ones you want. With no modules at all, everything is enabled. + + ValheimNpc.Companions.dll Companions: vikings follow and fight with you, orders and the Y wheel, squad panel, + ships and portals, combat roles. + ValheimNpc.Settlement.dll Your settlement: the banner, jobs and work, homes and beds, settlement life. + ValheimNpc.Factions.dll Foreign settlements: freeholder farmsteads, outlaw camps, factions, bandits. + ValheimNpc.Traders.dll Traders: wandering and settled traders, trading, orders, debts. + ValheimNpc.World.dll World events: bounty hunters, quests, the hermit, duels, refugees, the wandering smith, + the aurora. + +In multiplayer the server and all players must have the same set of modules. diff --git a/plugins/ValheimNpc/ValheimNpc.Companions.dll b/plugins/ValheimNpc/ValheimNpc.Companions.dll new file mode 100644 index 0000000..b2d61df Binary files /dev/null and b/plugins/ValheimNpc/ValheimNpc.Companions.dll differ diff --git a/plugins/ValheimNpc/ValheimNpc.Factions.dll b/plugins/ValheimNpc/ValheimNpc.Factions.dll new file mode 100644 index 0000000..f99436d Binary files /dev/null and b/plugins/ValheimNpc/ValheimNpc.Factions.dll differ diff --git a/plugins/ValheimNpc/ValheimNpc.Settlement.dll b/plugins/ValheimNpc/ValheimNpc.Settlement.dll new file mode 100644 index 0000000..32072f1 Binary files /dev/null and b/plugins/ValheimNpc/ValheimNpc.Settlement.dll differ diff --git a/plugins/ValheimNpc/ValheimNpc.Traders.dll b/plugins/ValheimNpc/ValheimNpc.Traders.dll new file mode 100644 index 0000000..33b9694 Binary files /dev/null and b/plugins/ValheimNpc/ValheimNpc.Traders.dll differ diff --git a/plugins/ValheimNpc/ValheimNpc.World.dll b/plugins/ValheimNpc/ValheimNpc.World.dll new file mode 100644 index 0000000..c1db3b3 Binary files /dev/null and b/plugins/ValheimNpc/ValheimNpc.World.dll differ diff --git a/plugins/ValheimNpc/ValheimNpc.dll b/plugins/ValheimNpc/ValheimNpc.dll new file mode 100644 index 0000000..41a2a26 Binary files /dev/null and b/plugins/ValheimNpc/ValheimNpc.dll differ