About NullReferenceFix
From ThunderstoreFixes recurring NullReferenceException/log spam (ZNetScene.RemoveObjects, AzuCraftyBoxes, EnemyHud conflicts, TMP missing glyphs), and KeenCombat skill text on non-weapons.
NullReferenceFix
A small collection of independent Harmony patches, each fixing one specific recurring bug — mostly NullReferenceExceptions that repeat every single frame for the rest of your play session once triggered (spamming the log and wasting CPU), plus the occasional leaked-resource bug that quietly accumulates until it causes lag or a freeze. Every patch targets a different root cause and can trigger (or not) completely independently of the others.
한국어 설명 보기 | English Description
🇰🇷 한국어 (Korean)
개요
NullReferenceFix는 서로 독립적인 여러 개의 작은 Harmony 패치를 모아둔 모드입니다. 대부분은 한 번 터지면 세션이 끝날 때까지 매 프레임 반복해서 터지는 NullReferenceException 버그를 담당하고, 일부는 조용히 누적되다가 렉이나 프리징을 유발하는 리소스 누수를 담당합니다. 패치마다 원인이 다르고, 서로 완전히 독립적으로 발동합니다 — 즉 설치된 다른 모드 구성에 따라 일부 패치는 평생 한 번도 발동하지 않을 수도 있습니다.
현재 5가지 버그를 고칩니다:
- 바닐라 발헤임 자체 버그 (
ZNetScene.RemoveObjects) - AzuCraftyBoxes 모드 버그 (제작함 근처 재료 확인)
- EnemyHud를 건드리는 모드 간 충돌 (EpicMMOSystem 등)
- 바닐라 발헤임 TMP 폰트의 비라틴 스크립트(한글/일본어/중국어/아랍어 등) 글리프 누락 경고 (닉네임/길드명 등이 공백으로 표시됨)
- KeenCombat의 무기 스킬 툴팁("BLINK STRIKE" 등)이 무기가 아닌 아이템에도 표시되는 문제 (비무기 아이템에서만 제거)
📦 필수 모드 (Dependencies)
| 모드 | 버전 | 필수 여부 | |------|------|----------| | BepInExPack_Valheim | 5.4.2200+ | 필수 | | AzuCraftyBoxes | 아무 버전 | 선택 — 설치되어 있을 때만 해당 패치가 활성화됩니다 | | EpicMMOSystem | 아무 버전 | 선택 — 설치되어 있지 않아도 다른 두 패치는 정상 작동합니다 |
이 모드는 어떤 조합으로 설치해도 안전합니다. 위 모드들이 없어도 해당 패치만 조용히 비활성화될 뿐, 나머지 패치는 그대로 작동합니다.
🐛 버그 1 — ZNetScene.RemoveObjects (바닐라 발헤임)
같은 프레임 안에서 어떤 ZNetView의 GameObject가 다른 경로로 먼저 파괴되면, 바닐라 ZNetScene.RemoveObjects가 그 오브젝트를 내부 추적 딕셔너리(m_instances)에서 제거하기도 전에 NullReferenceException을 던집니다. 이 예외 때문에 문제의 entry가 딕셔너리에서 끝내 제거되지 못하고 남아버리고, 그 결과 다음 프레임에도 똑같은 예외가 또 발생 — 이 과정이 세션이 끝날 때까지 매 프레임 무한 반복됩니다.
이건 특정 모드가 만든 버그가 아니라 발헤임 엔진 자체의 오래된 결함입니다. 모드를 하나도 설치하지 않아도 발생할 수 있으며, 몬스터 스폰/디스폰이 잦은 상황(전투, 대규모 소환 등)일수록 더 쉽게 걸립니다.
이 모드가 하는 일: ZNetScene.RemoveObjects에 Harmony Finalizer 패치를 추가해 해당 예외만 정확히 잡아내고, 이미 파괴된(fake-null) ZNetView entry를 m_instances에서 직접 제거합니다.
🐛 버그 2 — AzuCraftyBoxes 제작함 조건 확인
AzuCraftyBoxes는 근처에서 본 모든 제작함을 HashSet<Container>에 정적으로 계속 쌓아둡니다. 상자가 철거될 때는 Container.OnDestroyed 패치로 항목을 지우지만, 일부 파괴 경로(구역/청크 언로드 등)는 이 메서드를 거치지 않고 GameObject를 바로 파괴해버려서, 이미 죽은(fake-null) Container가 세트에 그대로 남습니다. 이후 제작 메뉴가 열려 있는 동안 매 프레임 실행되는 재료 확인 로직이 이 죽은 항목의 GetPrefabName()을 호출하면서 NullReferenceException이 반복 발생합니다 — 제작 메뉴를 닫기 전까지 계속됩니다.
이 모드가 하는 일: AzuCraftyBoxes가 설치되어 있을 때만 활성화되는 패치로, 해당 예외를 잡아내고 파괴된 Container 항목들을 세트에서 직접 제거합니다.
🐛 버그 3 — EnemyHud를 건드리는 모드 간 충돌 (EpicMMOSystem 등)
일부 팩션/마켓플레이스 계열 모드는 자체 EnemyHud.LateUpdate 패치 안에서 EnemyHud.ShowHud를 직접 강제로 재호출해 HUD를 즉시 새로고침하려 합니다. 그런데 이 재호출이 이미 로그아웃했거나 디스폰된 캐릭터를 대상으로 발생하면, 그 캐릭터의 HUD 항목(m_huds)이 아직 정리되지 않은 채 남아있을 수 있고, 이걸 전제로 동작하는 다른 모드의 ShowHud 패치(예: EpicMMOSystem의 PvP 플레이어 이름 색상 표시 패치 DataMonsters.MonsterColorTexts)가 죽은 참조를 건드리면서 NullReferenceException이 반복 발생합니다.
이 모드가 하는 일: EpicMMOSystem이나 특정 모드를 콕 집어 패치하지 않고, 발헤임 기본 EnemyHud.ShowHud에 Finalizer를 걸어서 어떤 모드의 postfix에서 터지든 잡아내고, 문제의 오래된 m_huds 항목과 남은 HUD GameObject를 직접 정리합니다. 그러면 다음 프레임에 정상적인 새 항목이 만들어집니다.
🐛 버그 4 — TMP 비라틴 스크립트 글리프 누락 경고
발헤임 바닐라·TMP 내장 폰트(예: Valheim-Prstartk, LiberationSans SDF)는 라틴 문자만 커버하고, 한글·일본어·중국어·아랍어·히브리어·태국어 등 비라틴 스크립트 글리프는 자체 글리프 테이블과 폴백 체인에 포함하지 않습니다. 플레이어 닉네임·길드명처럼 사용자가 직접 입력한 비라틴 텍스트가 이런 폰트로 렌더링되는 TMP_Text 오브젝트(예: EpicMMOSystem의 네임플레이트/ 길드명/정보 패널)를 통해 표시될 때마다 "The character with Unicode value ... was not found in the [...] font asset..." 경고가 반복 출력되고, 해당 글자는 공백이나 네모(□)로 대체됩니다. 발헤임은 자체 다국어 로컬라이제이션을 위해 스크립트별 Noto 계열 폰트(NotoSansKR, NotoSansJP, NotoSansSC, NotoSansArabic 등 11개 스크립트 + 이모지)를 이미 게임 파일에 내장하고 있지만, 플레이어가 직접 입력하는 텍스트용 TMP 전역 폴백 목록에는 연결되어 있지 않습니다.
이 모드가 하는 일: 발헤임이 지원하는 각 언어의 폰트를 찾아 세션당 한 번 TMP의 전역 폴백 목록(TMP_Settings.fallbackFontAssets)에 전부 등록합니다. 새 폰트를 번들링하지 않고 발헤임이 이미 갖고 있는 리소스만 사용하며, 어떤 모드가 만든 TMP 텍스트든 상관없이 어떤 언어의 텍스트든 공백/네모 대신 정상적으로 표시되도록 합니다.
🐛 버그 5 — KeenCombat 스킬 툴팁이 비무기 아이템에 표시됨
KeenCombat은 ItemDrop.ItemData.GetTooltip의 모든 오버로드 끝에 무기 스킬 설명(예: "BLINK STRIKE", 설명, 쿨타임)을 덧붙입니다. 다른 모드가 재료·음식·모드 추가 아이템에 무기용 스킬 타입을 지정해 두면 무기가 아닌 아이템에도 같은 스킬 툴팁이 붙습니다. KeenCombat에는 이 툴팁을 끄는 설정이 없습니다.
이 모드가 하는 일: KeenCombat의 패치 뒤에 실행되는 Postfix로, 무기(한손/양손/활·석궁)가 아닌 아이템에서만 덧붙은 스킬 블록을 제거합니다. 실제 무기의 스킬 툴팁은 그대로 유지됩니다. KeenCombat이 설치되어 있지 않으면 아무 일도 하지 않습니다.
> 회피(무시)가 아니라 청소입니다. 예외를 잡는 패치들은 예외 자체가 처음 한 번은 그대로 > 발생하고, 이 모드가 그걸 잡아낸 뒤 원인이 된 깨진 상태(딕셔너리/세트의 죽은 항목)를 실제로 > 지웁니다. 그래서 같은 entry로는 다시 터지지 않습니다 — 단순히 로그만 숨기고 깨진 상태를 > 계속 방치하는 방식이 아닙니다. 각 패치는 오직 대상 메서드(또는 없으면 아무 일도 하지 않는 선택적 대상)만 건드리며, 다른 > 모드의 코드를 수정하지는 않습니다.
📥 설치 방법
- 권장: r2modman/Thunderstore에서 자동 설치
- 수동:
NullReferenceFix.dll을BepInEx/plugins/폴더에 복사
이 버그들은 네트워크로 동기화되지 않는 로컬 상태 문제라서, 서버와 각 클라이언트가 각자 독립적으로 겪을 수 있습니다. 한쪽에만 설치하면 그쪽만 고쳐집니다 — 멀티플레이 환경이라면 서버 + 접속하는 모든 클라이언트에 설치하는 것을 권장합니다.
🏴 English
Overview
NullReferenceFix is a collection of independent, small Harmony patches. Most fix a specific bug where a NullReferenceException, once triggered, repeats every single frame for the rest of the session; a few fix a leaked-resource bug that quietly accumulates until it causes lag or a freeze. Every patch has a different root cause and triggers (or doesn't) completely independently — depending on your mod list, some patches may never activate at all.
Highlights
From source dataLoaders
Runs on BepInEx.
Footprint
Rated a light load on a server.
Dependencies
Needs 1 other project installed alongside it.
NullReferenceFix on Nxeon
From our catalogue- One-click install
- Supported on Nxeon Valheim servers, for BepInEx servers. We download it from Thunderstore, place it, and restart the server.
- Server side
- Optional on the server
- Server type needed
- BepInEx
- Server load
- light
- Smallest plan we suggest
- Valheim — 4 GB (4 GB RAM). This follows our own load rating above, not a benchmark.
- Latest build
- 1.0.44, released 2026-11-02
Game versions by loader
| Loader | Game versions | Newest |
|---|---|---|
| BepInEx |
From 21 recorded builds of NullReferenceFix.
Recent builds
| Build | Released | Game versions | Loaders |
|---|---|---|---|
| 1.0.44 | 2026-11-02 | n/a | BepInEx |
| 1.0.37 | 2026-11-01 | n/a | BepInEx |
| 1.0.35 | 2026-10-31 | n/a | BepInEx |
| 1.0.34 | 2026-10-31 | n/a | BepInEx |
| 1.0.33 | 2026-10-31 | n/a | BepInEx |
| 1.0.32 | 2026-10-31 | n/a | BepInEx |
Dependencies
- Required: BepInExPack Valheim
Declared by the newest build that lists any. Required ones are installed with it on one-click installs.
Run NullReferenceFix on a Valheim server
Pick a server or deploy a new one above; it is installed in one click.
What kind of mod it is
From the catalogLibraries & compatibility
Foundations and fixes other mods build on. Usually installed because something else needs it.
Works on a server
From source side supportThunderstore lists server-side support for NullReferenceFix as optional: it can run on a server, but isn’t required there.
Compatibility
- Game
- Valheim
- Loaders
- BepInEx
- Runs on
- Serveroptional on the server
- Requires
- One-click install needs a BepInEx server. 1 other project installed alongside it.
Verified at the source
- ✓ThunderstoreOfficial listing, checked 2026-11-03Open ↗
- ✓AuthorkorCaptain, as published on Thunderstore
- ✓LicenseNot published by the sourceFree



