You are viewing a potentially older version of this package. View all versions.
MidnightMods-RecipeManager-0.6.1 icon

RecipeManager

A very lightweight recipe and piece modification framework

Date uploaded 3 hours ago
Version 0.6.1
Download link MidnightMods-RecipeManager-0.6.1.zip
Downloads 62
Dependency string MidnightMods-RecipeManager-0.6.1

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2332 icon
denikson-BepInExPack_Valheim

BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.

Preferred version: 5.4.2332
ValheimModding-Jotunn-2.26.1 icon
ValheimModding-Jotunn

Jötunn (/ˈjɔːtʊn/, 'giant'), the Valheim Library was created with the goal of making the lives of mod developers easier. It enables you to create mods for Valheim using an abstracted API so you can focus on the actual content creation.

Preferred version: 2.26.1
ValheimModding-YamlDotNet-16.3.0 icon
ValheimModding-YamlDotNet

Shared version 16.3.0 of YamlDotNet from Antoine Aubry and contributors, net47 package for use in Valheim mods. Maintained by the ValheimModding team.

Preferred version: 16.3.0

README

RecipeManager

This is a lightweight recipe modification tool. You can define recipes to Add, Modify, Delete etc. It does not use any patches, and does not run constantly.

If you want to do more than modify recipes and pieces check out WackysDB

In Valheim a recipe is something that is crafting at a crafting station, or cooking station etc. For example, to make wood arrows you use a crafting recipe from the workbench. Building pieces (built with the hammer) are not recipes, furnace conversions (1 ore for 1 ingot etc) are not recipes.

Pieces are almost anything that is placed. Everything built with the hammer, plants placed with the cultivator, placable food etc.

Features

  • Add recipes
  • Modify recipes
  • Delete recipes
  • Disable Pieces
  • Enable Pieces
  • Modify Pieces
  • Add new items by cloning an existing item, with their own name, stats, icon and textures
  • Modify the stats of items that already exist, including vanilla weapons and armor
  • Dump any prefab's icons and textures to disk so you can repaint them

Recipes can be manipulated and added through yaml. All of the existing recipes can also be dumped to a file, in the same format to help you find and understand existing recipes.

Its recommended to use a syntax highlighting yaml editor when modifying recipes to help ensure that your yaml is valid. yamlChecker is a free online linter you can use to validate also.

Recipe modifications are stored at \BepInEx\config\RecipeManager\Recipes.yaml. This file will be generated on the first run if it does not already exist.

Yaml configuration example
#################################################
# Recipe Manipulation Config
#################################################
recipeModifications:                     # <- This is the top level key, all modifications live under this, it is required.
  DisableWoodArrow:                      # <- This is the modification name, its primarily for you to understand what this modification does SHOULD BE UNIQUE
    action: Disable                      # <- This is the action it should be one of [Disable, Delete, Modify, Add, Enable]
    prefab: ArrowWood                    # <- This is the prefab that the modification will target
  AddNewWoodArrowRecipe:
    action: Add
    prefab: ArrowWood
    recipeName: Recipe_ArrowWood         # <- optional, specifying the recipe name allows matching and mutating multiple recipes targeting the same prefab
    craftedAt: Workbench                 # <- The crafting station that should craft this recipe, leave it empty or invalid for handcrafting
    minStationLevel: 2                   # <- This is the required crafting station level for discovery AND crafting
    recipe:                              # <- When performing [Modify] or [Add] you should define a recipe
      anyOneResource: false              # <- This makes the recipe only require one ingrediant, first from the top will be used.
      ingredients:                       # <- Ingrediants in the recipe, is an array
        - prefab: Wood                   # <- Prefab that this ingrediant requires
          craftCost: 2                   # <- The amount of this ingrediant it takes to craft the recipe  
          upgradeCost: 0                 # <- The amount of this ingrediant it takes to upgrade the item 
        - prefab: Feathers
          craftCost: 2
          upgradeCost: 0
  DeleteTrollHideArmorRecipe:
    action: Delete
    prefab: CapeTrollHide
  ModifyTrollHideChestRecipe:
    action: Modify
    prefab: ArmorTrollLeatherChest
    craftedAt: Workbench
    minStationLevel: 1
    recipe:
      anyOneResource: false
      ingredients:
        - prefab: TrollHide
          craftCost: 4
          upgradeCost: 2

Commands

This mod adds two new commands which can be used to speed up recipe modification.

RM_Recipes_Reload - This reloads all recipe modifications that are found.

RM_Recipes_PrintAll - This prints all recipes currently stored in the object DB (including modifications), this file is ignored.

RM_Pieces_Reload - This reloads all piece modifications that are found.

RM_Pieces_PrintAll - This prints all pieces to a debug file (including modifications), this file is ignored.

RM_Conversion_Reload - This reloads all conversion modifications that are found.

RM_Conversion_PrintAll - This prints all conversions to a debug file, this file is ignored.

RM_Items_Reload - This reloads item additions and modifications. Stats, names, icons and textures are re-applied straight away; adding or removing an item needs a restart.

RM_Items_PrintAll - This prints the items in the object DB, with the stats they currently have, to a reference file, this file is ignored. RM_Items_PrintAll <text> only prints the items whose prefab name contains <text>.

RM_Textures_Dump <prefabName> - This dumps a prefab's icons and material textures to \BepInEx\config\RecipeManager\Textures\<prefabName>\ as PNGs.

Commands require enabling the in-game console.

If you are using Thunderstore Mod Manager or R2 Modmanager, you can enabled the console by selecting your valheim profile, going to settings (on the far left), debugging tab, set launch parameters and add --console

It is not recommended to use Vortex mod manager, however using vortex hardlink or copy deployments you can launch from steam using BepinEx with a --console launch parameter. To do so right click on the game in your library, manage, general, at the bottom add --console to the launch options.

Multiple Config files

All files which contain Recipes.yaml in \BepInEx\config\RecipeManager\ will be considered recipe files (except ObjectDBRecipes.yaml). For example this means that:

  • Forge_Recipes.yaml is valid
  • SoupStationStuff.yaml is not valid and will not be loaded but SoupStationStuffRecipes.yaml is.

All files which contain Pieces.yaml in \BepInEx\config\RecipeManager\ will be considered piece modifications and loaded. For example this means that:

  • CultivatorPieces.yaml is valid
  • Cultivator.yaml is not valid and will not be loaded

All files which contain Items.yaml in \BepInEx\config\RecipeManager\ will be considered item additions and loaded (except ObjectDBItems.yaml). For example this means that:

  • Food_Items.yaml is valid
  • Food.yaml is not valid and will not be loaded

Recipe Examples

The mod ships with a default example recipe file which will provide you similar explanations to what is listed above. You can find the recipe file after starting up your game with the mod installed in you BepInEx\config\RecipeManager folder.

R2modman or Thunderstore mod manager will also detect this file as an editable config file and it can be edited or opened directly from the "Edit Config" menu, search for Recipes.yaml.

The only file that is will be used to load recipes is Recipes.yaml other yaml files in that directory will not be loaded.

Add a craftable chain (replace Chain-Manager)

Yaml example
recipeModifications:
  CraftableChainRecipe:
    action: Add
    prefab: Chain
    craftedAt: forge
    minStationLevel: 4
    craftAmount: 1
    recipe:
      anyOneResource: false
      ingredients:
      - prefab: Iron
        craftCost: 2
        upgradeCost: 0

Disable recipes you don't want from vanilla or other mods (disable recipes from Southsil Armors)

Yaml example
recipeModifications:
  DisableNeckHelm:
    action: Disable
    prefab: neckhelm
  DisableNeckChest:
    action: Disable
    prefab: neckchest
  DisableNeckLegs:
    action: Disable
    prefab: necklegs

Increase the bronze yield (replace triple bronze)

Yaml example
recipeModifications:
  Recipe_Bronze:
    action: Modify
    prefab: Bronze
    recipeName: Recipe_Bronze
    craftedAt: forge
    minStationLevel: 1
    craftAmount: 3
    recipe:
      anyOneResource: false
      ingredients:
      - prefab: Copper
        craftCost: 2
        upgradeCost: 1
      - prefab: Tin
        craftCost: 1
        upgradeCost: 1
  Recipe_Bronze5:
    action: Modify
    prefab: Bronze
    recipeName: Recipe_Bronze5
    craftedAt: forge
    minStationLevel: 1
    craftAmount: 15
    recipe:
      anyOneResource: false
      ingredients:
      - prefab: Copper
        craftCost: 10
        upgradeCost: 1
      - prefab: Tin
        craftCost: 5
        upgradeCost: 1

Move a recipe from one crafting station to another (Custom mead from Honey+)

Yaml example
recipeModifications:
  custom_item_meadbase_damage:
    action: Modify
    prefab: HoneyMeadBaseDamage
    recipeName: $custom_item_meadbase_damage
    craftedAt: piece_cauldron

Piece Examples

Enables all of the holiday building pieces

Yaml example
pieceModifications:
  enable_mistletoe:
    action: Enable
    prefab: piece_mistletoe
  enable_jackoturnip:
    action: Enable
    prefab: piece_jackoturnip
  enable_yuletree:
    action: Enable
    prefab: piece_xmastree
  enable_yulecrown:
    action: Enable
    prefab: piece_xmascrown
  enable_yulegarland:
    action: Enable
    prefab: piece_xmasgarland
  enable_gift1:
    action: Enable
    prefab: piece_gift1
  enable_gift2:
    action: Enable
    prefab: piece_gift2
  enable_maypole:
    action: Enable
    prefab: piece_maypole

Makes the kiln cost 100 stone, but only 1 surtling core

Yaml example
pieceModifications:
  expensive_kiln:
    action: Modify
    prefab: charcoal_kiln
    requirements:
    - prefab: Stone
      amount: 100
    - prefab: SurtlingCore
      amount: 1

Removes the stonecutter as a buildable piece

Yaml example
pieceModifications:
  remove_stonecutter:
    action: Disable
    prefab: piece_stonecutter

Conversion Examples

Makes the charcoal kiln take wood, finewood and corewood

Yaml example
conversionModifications:
  charcoal_kiln:
    action: modify
    prefab: charcoal_kiln
    conversions:
    - fromPrefab: Wood
      toPrefab: Coal
      amount: 2
    - fromPrefab: FineWood
      toPrefab: Coal
      amount: 2
    - fromPrefab: RoundLog
      toPrefab: Coal
      amount: 2
    maxOres: 50
    conversionTime: 3

Makes the blast furnance take all ores, increases its holding size, and changes the time it takes to smelt an item.

Yaml example
conversionModifications:
  blastfurnace:
    prefab: blastfurnace
    action: modify
    conversions:
    - fromPrefab: FlametalOreNew
      toPrefab: FlametalNew
      amount: 1
    - fromPrefab: BlackMetalScrap
      toPrefab: BlackMetal
      amount: 1
    - fromPrefab: CopperOre
      toPrefab: Copper
      amount: 1
    - fromPrefab: IronOre
      toPrefab: Iron
      amount: 1
    - fromPrefab: IronScrap
      toPrefab: Iron
      amount: 1
    - fromPrefab: BronzeScrap
      toPrefab: Bronze
      amount: 1
    - fromPrefab: TinOre
      toPrefab: Tin
      amount: 1
    - fromPrefab: SilverOre
      toPrefab: Silver
      amount: 1
    - fromPrefab: CopperScrap
      toPrefab: Copper
      amount: 1
    maxOres: 20
    maxFuel: 50
    fuelPerProduct: 2
    conversionTime: 15

Makes the fermenter brew very quickly, and makes every mead base produce 10 potions instead of less.

Yaml example
conversionModifications:
  fermenter:
    prefab: fermenter
    action: modify
    conversions:
    - fromPrefab: MeadBaseHealthMinor
      toPrefab: MeadHealthMinor
      amount: 10
    - fromPrefab: MeadBaseHealthMedium
      toPrefab: MeadHealthMedium
      amount: 10
    - fromPrefab: MeadBaseStaminaMinor
      toPrefab: MeadStaminaMinor
      amount: 10
    - fromPrefab: MeadBaseStaminaMedium
      toPrefab: MeadStaminaMedium
      amount: 10
    - fromPrefab: MeadBasePoisonResist
      toPrefab: MeadPoisonResist
      amount: 10
    - fromPrefab: MeadBaseFrostResist
      toPrefab: MeadFrostResist
      amount: 10
    - fromPrefab: BarleyWineBase
      toPrefab: BarleyWine
      amount: 10
    - fromPrefab: MeadBaseTasty
      toPrefab: MeadTasty
      amount: 10
    - fromPrefab: MeadBaseHealthMajor
      toPrefab: MeadHealthMajor
      amount: 10
    - fromPrefab: MeadBaseStaminaLingering
      toPrefab: MeadStaminaLingering
      amount: 10
    - fromPrefab: MeadBaseEitrMinor
      toPrefab: MeadEitrMinor
      amount: 10
    - fromPrefab: MeadBaseEitrLingering
      toPrefab: MeadEitrLingering
      amount: 10
    - fromPrefab: MeadBaseHealthLingering
      toPrefab: MeadHealthLingering
      amount: 10
    - fromPrefab: MeadBaseBzerker
      toPrefab: MeadBzerker
      amount: 10
    - fromPrefab: MeadBaseStrength
      toPrefab: MeadStrength
      amount: 10
    - fromPrefab: MeadBaseHasty
      toPrefab: MeadHasty
      amount: 10
    - fromPrefab: MeadBaseLightFoot
      toPrefab: MeadLightfoot
      amount: 10
    - fromPrefab: MeadBaseSwimmer
      toPrefab: MeadSwimmer
      amount: 10
    - fromPrefab: MeadBaseTamer
      toPrefab: MeadTamer
      amount: 10
    - fromPrefab: MeadBaseBugRepellent
      toPrefab: MeadBugRepellent
      amount: 10
    conversionTime: 10

Makes the cooking station cook faster.

Yaml example
conversionModifications:
  piece_cookingstation:
    action: modify
    prefab: piece_cookingstation
    conversions:
    - fromPrefab: RawMeat
      toPrefab: CookedMeat
      cookTime: 10
    - fromPrefab: NeckTail
      toPrefab: NeckTailGrilled
      cookTime: 10
    - fromPrefab: FishRaw
      toPrefab: FishCooked
      cookTime: 10
    - fromPrefab: DeerMeat
      toPrefab: CookedDeerMeat
      cookTime: 10
    - fromPrefab: WolfMeat
      toPrefab: CookedWolfMeat
      cookTime: 10
    - fromPrefab: ChickenMeat
      toPrefab: CookedChickenMeat
      cookTime: 10
    - fromPrefab: HareMeat
      toPrefab: CookedHareMeat
      cookTime: 10

Makes the oven cook faster, and fuel last longer.

Yaml example
conversionModifications:
  piece_oven:
    action: modify
    prefab: piece_oven
    conversions:
    - fromPrefab: LoxPieUncooked
      toPrefab: LoxPie
      cookTime: 10
    - fromPrefab: BreadDough
      toPrefab: Bread
      cookTime: 10
    - fromPrefab: FishAndBreadUncooked
      toPrefab: FishAndBread
      cookTime: 10
    - fromPrefab: MeatPlatterUncooked
      toPrefab: MeatPlatter
      cookTime: 10
    - fromPrefab: HoneyGlazedChickenUncooked
      toPrefab: HoneyGlazedChicken
      cookTime: 10
    - fromPrefab: MisthareSupremeUncooked
      toPrefab: MisthareSupreme
      cookTime: 10
    - fromPrefab: MagicallyStuffedShroomUncooked
      toPrefab: MagicallyStuffedShroom
      cookTime: 10
    - fromPrefab: RoastedCrustPieUncooked
      toPrefab: RoastedCrustPie
      cookTime: 10
    - fromPrefab: PiquantPieUncooked
      toPrefab: PiquantPie
      cookTime: 10
    maxFuel: 10
    fuelItem: Wood
    secPerFuel: 2000

Makes the spinning wheel work faster and take up to 50 flax.

Yaml example
conversionModifications:
  piece_spinningwheel:
    action: Modify
    prefab: piece_spinningwheel
    conversions:
    - fromPrefab: Flax
      toPrefab: LinenThread
    maxOres: 50
    conversionTime: 3

Items

\BepInEx\config\RecipeManager\Items.yaml does two things:

  • action: Add creates a brand new item by cloning an existing one. The clone keeps the model and every stat of the item it was copied from, and anything you set in the config is applied on top.
  • action: Modify changes an item that already exists, vanilla weapons and armor included. Only the fields you set are changed, and taking a field back out of the yaml puts the original value back.

Adding or removing an item needs a game restart (or a trip back to the main menu). This is a hard requirement of how Valheim identifies items on the network, not something the mod can work around. Everything else, including every modification of an existing item, works live with RM_Items_Reload.

Adding a new item

Add a "Honey bread" food, made from bread and honey at the cauldron

Yaml example
itemAdditions:
  HoneyBread:                              # <- The name of this addition, it is for your information but SHOULD BE UNIQUE
    action: Add                            # <- REQUIRED This is the action applied, can be [Add, Remove]
    prefab: HoneyBread                     # <- REQUIRED The prefab name of the NEW item, must be globally unique
    clonedFrom: Bread                      # <- REQUIRED The existing prefab to copy
    name: Honey Bread                      # <- The display name. Start it with '$' to use your own localization token
    description: Sweet, sticky and filling. # <- The tooltip description
    weight: 0.5                            # <- Leave unset to keep the cloned item's weight
    maxStackSize: 20                       # <- Leave unset to keep the cloned item's stack size
    value: 12                              # <- The trader value of this item
    teleportable: true                     # <- Whether this item can go through a portal
    food:                                  # <- Only set this for food and drinks, leave it out otherwise
      health: 50                           # <- The max health this food grants
      stamina: 60                          # <- The max stamina this food grants
      eitr: 0                              # <- The max eitr this food grants
      duration: 1800                       # <- How long the food lasts, in seconds
      regen: 2                             # <- Health regenerated per tick while this food is active
      eatAnimTime: 1                       # <- How long the eating animation takes
      isDrink: false                       # <- Whether this is drunk rather than eaten
      consumeStatusEffect: ''              # <- The name of an EXISTING status effect to apply when consumed
    recipe:                                # <- Optional, leave it out for an item that is not crafted
      craftedAt: piece_cauldron            # <- The crafting station, leave it empty for handcrafting
      repairAt: ''                         # <- Defaults to craftedAt
      minStationLevel: 1                   # <- The required crafting station level
      craftAmount: 1                       # <- How many of the item one craft produces
      anyOneResource: false                # <- Only require one of the ingredients below
      ingredients:
      - prefab: Bread                      # <- Prefab that this ingredient requires
        craftCost: 1                       # <- The amount of this ingredient it takes to craft
        upgradeCost: 0                     # <- The amount of this ingredient it takes to upgrade
      - prefab: Honey
        craftCost: 2
        upgradeCost: 0

Run RM_Items_PrintAll to dump the items in the game with their real stat values. That file is never loaded, it is there so you can copy an entry and see what the numbers should look like. It is a big file, so RM_Items_PrintAll sword will only dump the items whose prefab name contains "sword".

New items are visible to the rest of the mod by their prefab name, so you can also refer to them from Recipes.yaml or Conversions.yaml. For example, to cook your new item in the oven instead of crafting it at the cauldron, leave out the recipe: block and add a conversion from an uncooked item to it.

Modifying an existing item

Set action: Modify and point prefab at the item you want to change. There is no clonedFrom, nothing new is created, and the change reaches every copy of that item that already exists, including the ones sitting in chests and inventories.

Anything you leave out keeps its current value, so a modification only has to list what actually differs. The reverse is true too: deleting a line and running RM_Items_Reload restores that item's original value rather than leaving the last number you set.

Make the iron sword hit harder and set things on fire

Yaml example
itemAdditions:
  BurningIronSword:
    action: Modify
    prefab: SwordIron                        # <- The existing item to change
    weapon:
      damage:                                # <- Only the damage types listed here are touched
        slash: 60
        fire: 20
      damagePerLevel:
        slash: 5
      backstabBonus: 4
    statusEffects:
      onHit: Burning                         # <- Applied to whatever the sword hits
      onHitChance: 0.5

Give the troll armor set fire resistance and a real set bonus

Yaml example
itemAdditions:
  FireproofTrollChest:
    action: Modify
    prefab: ArmorTrollLeatherChest
    armor:
      armor: 20
      armorPerLevel: 4
      movementModifier: 0.05                 # <- 5% faster while worn
    resistances:                             # <- Replaces the item's whole resistance list
    - type: Fire
      modifier: VeryResistant
    - type: Frost
      modifier: Resistant
    setBonus:
      name: TrollLeather                     # <- Every piece of the set has to use the same name
      size: 3
      statusEffect: SetEffect_TrollArmor

Weapon, armor and set stats

These blocks work exactly the same on an item you added and on one you are modifying, so a cloned sword can be given its own damage profile the same way a vanilla one can.

weapon: - damage and tool stats.

Field Meaning
damage Base damage. Takes any of damage, blunt, slash, pierce, chop, pickaxe, fire, frost, lightning, poison, spirit. Types you leave out are not touched.
damagePerLevel Damage added by each upgrade level, same fields as damage.
attackForce Knockback.
backstabBonus Sneak attack damage multiplier.
toolTier What a tool is able to harvest. 0 is wood and stone, 2 is black metal.

armor: - armor, shield and equip stats.

Field Meaning
armor / armorPerLevel Armor value, and how much each upgrade level adds.
blockPower / blockPowerPerLevel How much damage a block absorbs, shields and weapons that block.
deflectionForce / deflectionForcePerLevel How far a blocked attacker is pushed back.
movementModifier Speed change while equipped, as a fraction. -0.05 is 5% slower.
eitrRegenModifier Eitr regeneration change while equipped.

resistances: - a list of type and modifier pairs. This replaces the item's whole resistance list, so include every resistance you want it to end up with, and use resistances: [] to remove them all.

  • type is one of Blunt, Slash, Pierce, Chop, Pickaxe, Fire, Frost, Lightning, Poison, Spirit.
  • modifier is one of Normal, SlightlyResistant, Resistant, VeryResistant, SlightlyWeak, Weak, VeryWeak, Immune, Ignore.

statusEffects: - effects the item provides.

Field Meaning
equipped Applied for as long as the item is equipped.
onHit Applied to whatever the weapon hits.
onHitChance Chance for onHit to land, from 0 to 1.

setBonus: - the armor set the item belongs to.

Field Meaning
name Grouping key. Every piece of the same set has to use the same value.
size How many pieces have to be worn. The game ignores set bonuses with a size of 1 or less.
statusEffect The effect that wearing the full set grants.

Status effects are referenced by name and have to already exist, this mod cannot create new ones. SetEffect_TrollArmor, Burning and Frost are examples of names that work. To empty a status effect slot rather than set one, use the value None.

Custom icons and textures

Icons and textures are read from \BepInEx\config\RecipeManager\Textures\<prefab>\, where <prefab> is the prefab: value of your new item. Any file that is present replaces that texture, and anything missing keeps whatever the cloned item had.

The workflow is:

  1. Run RM_Textures_Dump Bread in the console. This writes Bread's icon and material textures to \BepInEx\config\RecipeManager\Textures\Bread\, along with a _dump_info.txt describing what each file is.
  2. Copy that whole folder and rename the copy to your new item's prefab name, for example Textures\HoneyBread\.
  3. Repaint the PNGs you care about and delete the ones you did not change.
  4. Restart the game, or run RM_Items_Reload.

The file names are what tie a PNG to a texture slot, so do not rename them:

  • icon_0.png is the inventory icon (icon.png also works if there is only one). This is the one most people want.
  • <renderer>__<material>__<slot>.png is a model texture, for example attach__0___MainTex.png. _MainTex is the colour texture, _BumpMap is the normal map, _MetallicGlossMap and _EmissionMap are the metallic and glow maps.

Textures are only ever applied to a copy of the material, so repainting an item you added never changes the vanilla item it was cloned from.

This works for action: Modify too, where <prefab> is the existing item you are changing. Retexturing an item that already exists does change how that item looks everywhere, and unlike its stats it is not undone by RM_Items_Reload - remove the folder and restart to get the original artwork back.

On a server, item definitions are synced to clients but the PNGs are not. A client that does not have the image files still gets the item with the correct stats and recipe, it just shows the original artwork.

FAQ

  • Q: Why is my recipe not showing up? A. Ensure that the recipe uses the action 'Modify' or 'Add', by default recipes dumped from the object DB will not, they will use Enable. Which if the recipe already exists and is not disabled, does nothing.

  • Q: My yaml has an error about the refund key A. The refund key was removed in 0.4.1. If you need to remove the key from an existing yaml you can use the following regex ( +refund: \w+\n?) and replace with nothing. This can be done from most text editors find and replace.

  • Q: My new item has the same food bar as the item I cloned it from A. Set name on the item addition. The display name is what the game uses to tell foods apart, so without one your item shares a food slot with its original.

  • Q: Why does adding an item need a restart? A. An item's prefab name is its network identity, and Valheim builds that lookup once when the world loads. Items therefore have to exist before then. Editing an item you already have does not need a restart, only adding or removing one does.

  • Q: I changed a vanilla item and now I want it back to normal A. Delete the modification and run RM_Items_Reload. The mod keeps the original values of anything it touches and puts them back. Custom icons and textures are the exception, those need a restart.

  • Q: My status effect is not being applied A. Status effects have to already exist, this mod cannot create them. Check the log, an effect that could not be found is reported by name. RM_Items_PrintAll shows the names used by items that already have one.

  • Q: I set a resistance and the item lost the resistances it already had A. resistances replaces the whole list rather than adding to it. List every resistance you want the item to end up with.

Planned Features

  • More recipe validation
  • Conversion modifications (like ores for ingots) (added in 0.5.0)
  • Stat editing for weapons, armor and tools (added in 0.6.0)
  • Custom status effects for added items
  • Export to WackyDB

Installation (manual)

Ensure the downloaded .dll is placed inside your /bepinex/plugins folder.

Please note this mod does nothing until configured.

CHANGELOG

0.6.1

- Deep North update

0.6.0

- Adds item additions, a new Items.yaml config which creates brand new items by cloning an existing one.
  Supports a custom name, description, weight, stack size, value, teleportability, food stats and recipe.
  Adding or removing an item requires a restart, editing one does not.
- Adds item modifications, 'action: Modify' in Items.yaml, which changes items that already exist
  including vanilla weapons and armor. Original values are restored when a modification is removed.
- Adds weapon, armor, resistance, status effect and set bonus stats, usable on both added and modified
  items. Covers per damage type damage and damage per level, attack force, backstab bonus, tool tier,
  armor, block power, deflection force, movement and eitr modifiers, damage resistances, equipped and
  on hit status effects, and the set name, size and bonus effect.
- Adds custom icons and textures for added items, loaded from BepInEx\config\RecipeManager\Textures\<prefab>\
- Adds RM_Textures_Dump <prefabName> which dumps a prefab's icons and material textures to disk as PNGs
- Adds RM_Items_Reload and RM_Items_PrintAll
- Fixes conversion configs being read from the piece config files instead of the conversion config files
- Fixes piece and conversion updates being sent to clients over the wrong RPC
- Fixes conversion configs never being sent to clients when they join

0.5.5

- Adds late running synchronization for Pieces, fixes modification consistency issues with late updating pieces (thanks JacoboNeuro!)

0.5.4

- Improves recipe validation for invalid prefabs
- Reducing client/server requirements to version check only if both contain the mod.
  This allows clients or servers to support people who can't run mods, or choose not to playe with mods.
  While still allowing users to run the mod if they desire.
  Warning: Recipes are still server synced. Which means if a server synchronization occurs, you will use the servers configs.

0.5.3

- Fixed possible path NPE

0.5.2

WARNING: This Thunderstore version was incorrect, please use 5.3 or 5.1
- Adds recovery option (deconstruct returns resources) for piece configurations

0.5.1

- Fixes default to level key generation for conversion pieces

0.5.0

- Adds support for conversions
	- Modify conversions for the smelter, kiln, spinning wheel, fermenter, oven, smelter and blast furnace
	- Add conversions (smelter accepts all ores)
	- Modify conversions (faster, longer, more resources/less produced)
	- Remove conversions
	- Examples in the Readme/mod page!
- Updated dependency requirements

0.4.5

- Ensures RPC synchronization when an admin reloads pieces/recipes
- Fixes piece categories not being mutated correctly

0.4.4

- Fixes filepath detection not working on linux
- Removes embedded yaml.net, now requires yaml.net to be installed via the mod loader
- Fixes server synced piece modifications not being applied in some cases
- Defaults 'GroundPlacement' for piece modifications to false

0.4.3

- Fixes recipe requires any ingredient not being set correctly

0.4.2

- Fixes duplicate recipes when recipes are modified, and modified again. Primarily during multiple world initializations or character swapping worlds.
- Fixes items with no crafting station being unrepairable in specific cases

0.4.1

- Adds support for nocost recipes
- Adds separate repair station configuration for recipes, if unset defaults to the crafting station
- Removed recipe refund setting as it was not working as intended

0.4.0

- Add support for piece modifications
	- Details about pieces can now be modified
	- Piece modifications are separated from item modifications
- Added support for multiple config files of each type
- Unified synchronization for multiple files & piece or recipe types
- Virtualized piece and recipe synchronization, files are no longer created or mirrored from the host/server
- Some improvements to recipe modification synchronization

0.3.4

- Added guards to do nothing if recipe reload is called when you have no recipes set to modify

0.3.3

- Simplified item add during server handshake post config received

0.3.2

- More eventual consistency checks
- Add ensures that the recipe does not already exist

0.3.1

- Modify ensures the target recipe does not already exist

0.3.0

- Added more error reporting for common recipe issues
- Updated example docs
- Server sync'd recipes are now virtual

0.2.0

- Improves ways to reference a recipe as handcrafted
- Added recipe state sychronization on config file server sync

0.1.3

- Fixed server sync'd configurations trying to write out to a temp address

0.1.2

- Fixed customRPC naming to not collide with ValheimFortress

0.1.1

- Added support for targeting recipe names. Allows mutation of multiple recipes that target the same prefab (eg craft x5)
- Added recipe reversion which is applied right before reloading recipes to ensure previous recipe modifications are removed before reapplying

0.1.0

- Initial release, I'm sure I forgot something