InventoryChangedCompat
Restores the Inventory.Changed() overload removed in Valheim 1.0. Fixes mods that silently stop consuming crafting materials.
About this mod Author’s original text
InventoryChangedCompat
발헤임 1.0에서 제거된 Inventory.Changed() 오버로드를 메모리상에서 복원하는 BepInEx 프리로더 패치입니다.
문제
발헤임 1.0에서 시그니처가 바뀌었습니다.
1.0 이전: void Inventory.Changed()
1.0.12: void Inventory.Changed(bool success, bool cheatedStateChanged)
무인자 버전이 삭제되면서, 이를 호출하는 구버전 모드들이 MissingMethodException을 던집니다.
Method not found: void.Inventory.Changed()
AzuCraftyBoxes에서는 이것이 재료 무한 복사로 이어집니다. 이 모드는 Player.ConsumeResources에
Prefix를 걸어 바닐라 차감을 막고 자체 로직으로 상자에서 재료를 빼는데, 그 과정에서 위 예외가 발생하면
catch 블록으로 빠진 뒤 false를 반환합니다. 결과적으로 바닐라 차감도 막히고 자체 차감도 실패해서
아이템만 생기고 재료는 그대로 남습니다.
동작
프리로더 단계에서 assembly_valheim의 Inventory 타입에 무인자 Changed()를 주입하고,
내부에서 Changed(false, false)를 호출하도록 연결합니다.
ldarg.0
ldc.i4.0 // success = false
ldc.i4.0 // cheatedStateChanged = false
call void Inventory::Changed(bool, bool)
ret
인자값은 바닐라의 아이템 제거 경로(Inventory.RemoveItem, RemoveOneItem, StackAll,
MoveAll, MoveItemToThis)가 모두 Changed(false, false)로 호출하는 것과 동일하게 맞췄습니다.
- DLL을 수정하지 않습니다. 메모리상에서만 동작하므로 모드 업데이트에 영향을 주지 않습니다.
- 이미 무인자 Changed()가 존재하면 아무것도 하지 않습니다. 제작자가 정식 대응하면 자동으로 비켜섭니다.
- AzuModsValheim1Compat과 함께 써도 됩니다. 서로 다른 멤버를 다룹니다.
영향받는 것으로 확인된 호출부 (AzuCraftyBoxes 1.8.15)
VanillaContainer.ProcessContainerInventory.Save, BackpackContainer ×2,
GemBagContainer ×3, FireplaceInteractPatch.Prefix, Turret_UseItem_Patch.Prefix — 총 9곳.
화로에 장작 넣기, 발리스타 탄약 장전도 같은 예외로 실패합니다.
주의
제작자(Azumatt)의 정식 대응이 나오면 그것을 쓰는 것이 좋습니다. GitHub master에는 1.8.19까지
커밋되어 있으나 아직 에 배포되지 않았습니다. 이 패치는 그때까지의 임시 대응입니다.
Install & use Install: BepInEx plugin
- The archive from playbuff is the mod itself — usually a BepInEx plugin (a .dll or a plugin folder once unzipped).
- Recommended: use a community mod manager (such as r2modman) — pick this game, import the mod, and the manager sets up BepInEx and its dependencies for you.
- Manual route: install the BepInEx loader in the game folder, then drop the unzipped .dll or plugin folder into BepInEx/plugins/.
- Launch the game — the BepInEx console logs every plugin it loads; seeing this mod in the log means it is installed.
Mods with listed dependencies need those installed too, or they will not load. Options are usually changed in-game or in the plugin's config file. In multiplayer, the host and every client need the same mods installed.
Install these first, or the mod will not work: