Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Blasted Swimming Tarred Bug Fix
Fixes stale swimming/tar states, ZNetScene cleanup errors, LiquidVolume lifetime, Character and StatusEffect teardown, EnemyHud cleanup, plus optional MagicPlugin projectile, summon teleport, registry safety, and peer-owned cosmetic ZDO reduction.
| Date uploaded | a month ago |
| Version | 1.2.3 |
| Download link | sighsorry-Blasted_Swimming_Tarred_Bug_Fix-1.2.3.zip |
| Downloads | 316 |
| Dependency string | sighsorry-Blasted_Swimming_Tarred_Bug_Fix-1.2.3 |
This mod requires the following mods to function
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.2350README
BlastedSwimmingTarredBugFix
Defensive runtime fixes for stale liquid state, scene and Character lifecycle cleanup, and optional MagicPlugin interoperability.
What It Fixes
- Random swimming while nowhere near water.
- Random tarred state after leaving a Plains tar pit.
- Portal, dungeon, or scene transitions leaving old liquid state behind.
- Carts or floating objects keeping water/tar state after a missed trigger exit.
- Long-lived
LiquidVolumeraycast arrays using a short-lived allocator. - Scene cleanup failing on missing, destroyed, or mismatched
ZNetViewdata. - Malformed StatusEffect start effects interrupting Character destruction.
- Character registry and EnemyHud entries surviving incomplete destruction.
- MagicPlugin projectile patches repeatedly registering configuration handlers.
- MagicPlugin summon teleport and Character registry patches reading destroyed or incomplete objects.
- MagicPlugin Flame, Thunder, and Arctic staff launch cosmetics, Thunder/Arctic projectile impacts, and shared iceblock destruction creating short-lived peer-owned ZDOs.
- MagicPlugin Ice Scepter Nova rings leaving cosmetic network objects without a destruction path.
How It Works
Liquid and scene protection
- Rejects stale positive liquid updates when the source no longer overlaps the target.
- Removes stale entries from
WaterVolumeandLiquidSurfacebefore floater updates. - Clamps water/tar counters so missed exits cannot drive them below zero.
- Clears purged state only when no current liquid trigger overlaps the target.
- Clears player liquid state after a teleport successfully starts.
- Keeps
LiquidVolumeraycast arrays valid for their full lifetime. - Cleans invalid or mismatched
ZNetSceneentries without dereferencing destroyed views.
Character lifecycle protection
- Safely tears down StatusEffect start effects with missing or invalid
ZNetViewcomponents. - Repairs Character registry and EnemyHud bookkeeping when
Character.OnDestroyis incomplete or throws. - Prunes tracked creature-removal state after scene teardown.
Optional MagicPlugin interoperability
When MagicPlugin is installed, each compatible fix is enabled independently only after its expected types, methods, fields, Harmony patch, and cosmetic prefab graph are validated:
- Replaces the affected
Attack.FireProjectileBurstprefix with a guarded implementation. - Moves valid followed summons only after a player teleport succeeds.
- Removes destroyed Characters before MagicPlugin reads the global registry.
- On MagicPlugin 2.1.9 and later, probes each supported prefab graph once per scene and enables only the cosmetic paths whose full suppression/replay structure still matches.
- Keeps gameplay projectiles, Nova AOE, and Arctic iceblocks networked while replaying compatible Flame/Thunder/Arctic launch and impact cosmetics locally.
- Tags existing Staff projectile ZDOs so Flame and Lightning Wands that share those projectile prefabs do not receive Staff-only launch effects.
- Replays Ice Scepter Nova rings locally from the networked Nova AOE and gives each ring the same explicit lifetime as that AOE.
MagicPlugin is optional and is not a Thunderstore package dependency.
Automatic Compatibility
- MyPitsDontLeak disables the integrated
LiquidVolumelifetime module. - Scenic disables the integrated scene cleanup module.
- MagicPlugin support stays inactive when the expected plugin or patch structure is absent.
- MagicPlugin versions older than 2.1.9, and individual future-version cosmetic graphs that fail validation, keep their original cosmetic ZDO behavior.
Configuration
[Synchronization]
LockConfiguration = true
[Liquid]
Enabled = true
BoundsPadding = 0.75
Only the liquid settings are synchronized. Character lifecycle and compatibility modules are automatic and have no configuration switches.
The 1.2.0 configuration layout is not migrated from older layouts. Delete
BepInEx/config/sighsorry.blastedswimmingtarredbugfix.cfg once if you want to
remove obsolete entries and regenerate a clean file.
Building
The plugin targets netstandard2.1 and uses C# 12. Build against the Valheim
managed assemblies and BepInEx core files using VALHEIM_MANAGED and
BEPINEX_CORE; the project also detects the default Windows Steam paths.
For development on Windows, run dotnet build -c Debug -p:DeployToGame=true.
After ServerSync merging succeeds, the final DLL is copied to the default Steam
Valheim BepInEx/plugins folder. Use DeployToGame=false to skip copying, or
set ValheimPluginDirectory to override the destination.
For an explicitly requested release, dotnet build -c Release merges ServerSync into the plugin and
creates Thunderstore/BlastedSwimmingTarredBugFix-<version>.zip. The packaged
manifest version comes from the built assembly and must have a matching row in
Thunderstore/CHANGELOG.md. Version synchronization only updates the staging
copy under obj/; it does not rewrite Thunderstore/manifest.json.
If Mod Release Manager watches that folder with automatic publishing enabled,
creating the Release ZIP can upload it to the project's selected sites.
Credits
- MyPitsDontLeak by AzumattDev (MIT-0)
- Scenic by ComfyMods (GPL-3.0)
GitHub
https://github.com/sighsorry1029/BlastedSwimmingTarredBugFix
CHANGELOG
Version |
Update Notes |
|---|---|
| 1.2.6 | - Apply the F2 player-name compatibility fix to the actual ConnectPanel row template instead of the unrelated SessionPlayerListEntry UI- Append Valheim's bundled dynamic Hangul font after the existing fallback order so TMP can generate missing glyphs while retaining the source font's Latin appearance - Remove the previous glyph preflight and cloned-font ownership, avoiding false rejection of dynamic fonts and destruction of shared game materials or atlases - Install the fallback once outside the per-frame F2 update path, skip headless graphics, and remove only the mod-owned fallback on teardown while preserving other mods' changes - Keep the package description focused on the mod's general runtime fixes |
| 1.2.5 | - Target Valheim 1.0.12 after checking the mod's Harmony targets and direct client/dedicated-server contracts against the original assemblies - Add a guarded Korean TMP fallback for F2 player-list character names when the assigned font lacks Hangul glyphs - Keep the font module inactive on headless graphics paths, cache fallback copies by source font, and restore/destroy generated assets during plugin teardown - Verify the optional integration contract against MagicPlugin 2.2.0, including its GUID, patch signatures, 17 configuration fields, and seven supported cosmetic prefab graphs |
| 1.2.4 | - Add Valheim 1.0.7 compatibility using the original client and dedicated-server game assemblies - Remove the obsolete LiquidVolume.Awake allocator rewrite now that Valheim uses Allocator.Persistent, while retaining guarded array disposal- Update MagicPlugin cosmetic integration for the six-argument EffectList.Create contract and preserve player-specific gamepad effects and piercing-projectile impact behavior- Adopt the reviewed valheim-1.0.7-r1 ServerSync build, including the ZRoutedRpc.Everybody constant fix, public administrator checks, and connection-message buffering updates- Require BepInExPack Valheim 5.4.2350 |
| 1.2.3 | - Verify restored MagicPlugin patches against Harmony's patch inventory and retain failed restoration records for retry without duplicating restored patches - Remove redundant projectile and teleport installation flags - Reuse exact cosmetic effect-pair checks, safely reject null entries, and skip parent ownership lookups for unrelated effects - Check the local-player recovery timer before reading liquid state through reflection while preserving the recovery interval - Synchronize the packaged manifest in staging without rewriting the source manifest - Add opt-in Debug DLL deployment to the Valheim plugins folder after ServerSync merging |
| 1.2.2 | - Separate MagicPlugin cosmetic ZDO prevention from projectile, teleport, and registry compatibility to reduce change scope without changing supported behavior - Remove redundant cosmetic prefab probes and derive stable hashes from their names - Simplify stale-liquid clearing paths and saturate corrupted liquid counters at integer bounds - Consolidate lifecycle patch rollback and remove forwarding-only Harmony patch classes - Isolate module initialization failures so one unavailable compatibility path does not block the remaining fixes - Pin the C# language version and require a matching changelog row before creating a release package |
| 1.2.1 | - Prevent structurally compatible MagicPlugin 2.1.9+ Flame/Thunder/Arctic launch, Thunder/Arctic impact, and shared iceblock-destruction cosmetics from creating short-lived peer-owned ZDOs - Prevent Ice Scepter Nova rings from leaving cosmetic network objects without a destruction path - Probe each known prefab graph once per scene and keep original behavior for independently incompatible features - Tag existing Staff projectile ZDOs so shared Flame/Lightning Wand projectiles do not receive Staff-only launch replay - Replay compatible cosmetics locally while preserving gameplay projectiles, AOE, and iceblocks - Remove the Diagnostics.DebugLogging option and its diagnostic-only instrumentation- Require matching 1.2.1 server and client builds to avoid mixed cosmetic behavior |
| 1.2.0 | - Fold RuntimeFixes and InteropFixes functionality into the existing BlastedSwimmingTarredBugFix package - Add guarded Character and StatusEffect teardown, registry, and EnemyHud cleanup - Add optional MagicPlugin projectile, successful summon teleport, and Character registry compatibility - Keep the existing Blasted GUID, DLL, Thunderstore package, and server-required policy - Replace the old configuration layout without migration; remove retired InteropFixes.dll or RuntimeFixes.dll copies |
| 1.1.1 | - Preserve ZDO recreation and prevent partial scene cleanup reprocessing - Harden mixed-liquid validation and automate versioned Thunderstore packaging |
| 1.1.0 | - Add integrated LiquidVolume lifetime and ZNetScene cleanup protections- Harden liquid source validation, mixed-liquid recovery, and release packaging |
| 1.0.3 | - Fix random swimming regression in Plains and Mistlands - Add throttled local-player stale liquid recovery |
| 1.0.2 | - Refactoring and optimizations - Restore guarded local-player stale liquid recovery |
| 1.0.0 | - Initial Release |