SmarterHoe
Comprehensive Hoe overhaul: Cultivator & crop grid on Hoe, Undo/Redo, Altitude Lock, Instant Plateau, Spline Roads, Measure mode, Live stone cost, Soften/Restore, Clear Debris, Harvest & Replant, CraftyBoxes compat, ServerSync, and 9 languages.Changelog
1.2.2 (2026-10-05)
Fixed — Reported Bugs & Stability
- Vanilla Cultivator Seed Consumption (Freebuild Bleed-Through): Fixed an issue where planting with a vanilla Cultivator consumed no seeds when the Hoe had been toggled to Freebuild cost mode while
EnableCultivatorFeatures = false/EnableCultivatorOnHoe = false.Player_ConsumeResources_Patchnow bails out to vanilla consumption whenever the equipped tool is not managed by SmarterHoe, so unmanaged cultivators always keep 100% vanilla behavior. - Double Seed Usage with AzuCraftyBoxes: Fixed every crop planted with the Cultivator costing 2 seeds instead of 1 when SmarterHoe and AzuCraftyBoxes were both installed. When AzuCraftyBoxes is detected, SmarterHoe no longer performs its own manual seed pull for single-plant placement and defers to the vanilla + AzuCraftyBoxes consumption pipeline, eliminating the duplicate deduction.
- Hoe FPS Drop (Farming Grid Sorting): Eliminated a per-frame
List.Sortover up to 625 grid points inFarmingGridVisualizerthat caused severe frame drops (reported 120 → 15–10 FPS) for some users in 1.2.0/1.2.1. Points are now re-sorted only when the grid is actually regenerated (dirty flag), not every rendered frame. - Multiplayer Terrain Desync & "Ground Locked" Zones: Fixed terrain modifications being visible only to the modifying player and areas becoming unmodifiable (by hoe or pickaxe) after relog on multiplayer servers. All
TerrainCompZNetView ownership claims (SafeClaimOwnership,TerrainOp.Awakepatch,UndoManager, Clear Debris) are now gated to run only when the local player is the server/host, preventing clients from stealing ownership of shared terrain chunks and breaking ZDO sync for everyone else. - Hold-to-Level Survival Costs: The continuous hold-to-level sweep now correctly enforces stamina and tool durability checks per tick in Balanced Survival mode (previously ticks could fire while out of stamina or with a broken tool).
- Undo/Redo History Integrity:
- A failed undo/redo (all target chunks unloaded) no longer silently loses the history entry — the step is pushed back onto its original stack so it can be retried after moving closer.
FindTerrainCompAtno longer falls back to a neighboring heightmap's compiler when the exact chunk is unloaded, which could write chunk A's deltas into chunk B and corrupt terrain.HasChunkChangednow safely handles mismatched snapshot array lengths and null asymmetry instead of only comparing element-wise.
- Texture Leak in Icon Loader: Failed
ImageConversion.LoadImagecalls now destroy the orphanedTexture2D, preventing GPU texture leaks when loading custom/modded piece icons. - Custom Piece Prefab Null Guard:
CustomPieceManager.CreatePrefabsOnceno longer callsGetComponent<Piece>()before its null check, fixing a potentialNullReferenceExceptionwith missing base prefabs. - Stale Tooltip Reference:
BuildHudTooltipPatchcache invalidation now handles destroyed pieces (_lastPiece == null), preventing stale Unity object references from suppressing tooltip updates. - Batch Plant Suppression Windows Gated: The 0.25s stamina/durability/requirement suppression windows after farming grid batch planting now only apply when a hoe or cultivator is equipped, preventing unintended bypasses for other tools/actions.
- Ground Height Cache LRU Eviction:
GetGroundYCachedinFarmingGridVisualizernow evicts the least recently used entry when the cache is full, instead of always overwriting slot 0. - ComfyGizmo Transpile Warning:
SafeGizmoTranspilenow logs a warning if neither the PerfectPlacement nor vanilla Quaternion.Euler IL patterns are found, making compatibility issues easier to diagnose. - Redo Planted Entry Preservation:
UndoManager.Redo()now re-pushes planted-batch entries onto the redo stack when redo is not supported, preventing history loss. - Stone Cost Estimate Cache Leak:
EstimateLevelStoneCostnow clears_cachedHeightmapListbefore callingHeightmap.FindHeightmap, preventing unbounded list growth and inflated cost estimates from duplicate heightmap entries. - AzuCraftyBoxes Cache Invalidation:
PullFromNearbyContainersnow callsInvalidateCache()after pulling from AzuCraftyBoxes containers, preventing stale item counts from causing over-spending in subsequent operations. - Duplicate Replant Spots: Area harvest first sweep now gates
replantSpots.Addonpickables.Add(p)returning true, preventing duplicate replant spots and extra seed consumption when a Pickable overlaps multiple colliders. - Smooth Terrain Resource Timing:
ExecuteSmoothTerrainnow consumes stamina and durability only after confirming there are vertices to smooth, preventing resource drain on already-flat terrain. - Dead Player Hoe Reach:
Plugin.Updatenow callsRestorePlaceDistance()before early-returning when the player is dead/null/in cutscene, preventing extended placement reach from persisting through death. - Plant Piece Cache Invalidation:
_grownNameToPlantPiecedictionary is now cleared on world unload (Game.OnDestroy), preventing stale GameObject references across world changes. - Null Player Container Query:
GetNearbyNativeContainers(null)now returns an empty list instead of the shared cached list, preventing aliasing hazards.
Fixed & Performance Overhaul
- Zero-Allocation Container Registry & Nearby Chest Overhaul:
- Dynamic Container Registry (
_allActiveContainers): Completely eliminated expensive iterations overPiece.m_allPieces(thousands of world pieces) and recursiveGetComponentInChildren<Container>searches on all building pieces in player bases. Containers now register and unregister via lightweightContainer.AwakeandContainer.OnDestroyedHarmony patches, making nearby chest detection instantaneous. - Short-Circuited Seed & Stone Scans: Added
neededShortCircuittoNearbyChestsCompat.CountTotalSeedsacross all operations (farming grid planting, replanting, ramp carving, plateau leveling). If the player's inventory already contains enough seeds or stone, nearby containers are never queried. - Expanded Container Cache Thresholds: Increased
NearbyChestsCompatspatial movement threshold to 5m (25m² sqr magnitude) and temporal cache to 2.0s, reducing nearby container queries to a fraction of their previous frequency. - Cached OnGUI Seed Display:
Plugin.OnGUInow reads pre-cachedInventorySeedsandChestSeedsdirectly fromFarmingGridVisualizer.Instancerather than running full container and inventory queries across 2–3 Unity GUI passes per frame.
- Dynamic Container Registry (
- Cultivator & Plant Mode FPS Optimization:
- Snapping Spatial/Temporal Caching: Implemented a smart 0.08m cursor delta and 0.15s TTL cache in
GetSnappedGridCenter. Grid snapping now reuses candidate calculations when the player's aim is steady, avoiding continuous 256-collider physics overlap queries every frame. - Zero-Allocation Collider Classification: Added a cached lookup table (
_cropColliderCache) with integer layer filtering (GhostLayer) forIsPlantOrCrop. Replaced expensive per-frame string allocations (col.gameObject.name), transform hierarchy traversals (IsChildOf), andGetComponentInParent<Plant>calls on up to 256 colliders per frame. - Ghost Visual Pooling & Renderer Caching: Wrapped ghost previews in
GhostVisualpooling objects with pre-cachedRenderer[]arrays. Eliminated per-frameGetComponentsInChildren<Renderer>(true)allocations (1,500+ garbage arrays/sec) and guardedSetPropertyBlockto only execute when ghost validity/seed state changes. - Point Validation Optimization: Pre-checks ward access once for the entire grid bounding sphere via
WardProtectionManager.CheckAccess, bypassing individual point ward checks when safe; cached biome queries with 4m spatial cells (GetCachedBiome), eliminating Simplex noise evaluations; cached activeHeightmapinstance; optimized plant growth space checks with direct layer checks (GhostLayer) and root comparisons; pooledGridPlantPointinstances (_pointPool) and used a static comparison delegate. - Boundary Line Caching: Added position, rotation, and dimension dirty-checking to
RenderBoundaryto skip line vertex updates when the cursor hasn't moved, and pre-cachedGroundRaycastMask. - Synchronized Seed State: Streamlined
UpdateFarmingGridWithCostCheckto consume cached seed availability directly fromFarmingGridVisualizer, eliminating duplicate inventory and container checks per frame.
- Snapping Spatial/Temporal Caching: Implemented a smart 0.08m cursor delta and 0.15s TTL cache in
- Base Hitching & Component Storm Elimination:
- Sprinting Component Storm Elimination: In
Plugin.Update, gatedIsLookingAtHarvestable(player)behindInput.GetKeyDown(AreaHarvestKey). This prevents 7GetComponentInParentqueries (Container,Door,Bed,CraftingStation,Sign,Pickable,PickableItem) from firing 60 times per second while holding Shift to sprint. - Build Hammer Exemption Guard: Guarded
CustomPieceManager.RemoveCustomPiecesFromwith_tablesWithCustomPieces. WheneverPieceTable.UpdateAvailableruns for non-hoe tools (e.g., Hammer), it immediately returns without iterating hundreds of vanilla building pieces. - Direct Root Component Checks: Replaced recursive
GetComponentInChildren<Plant>()traversals inPlayer_HaveRequirements_Patch,Player_ConsumeResources_Patch, andSyncPlantPieceRequirementswith directGetComponent<Plant>()calls. - Physics Buffer Management: Pre-cached
HarvestMask,HarvestFilterMask, andItemMask, and ensured_harvestColliderBufferis cleared withArray.Clearafter overlap checks to prevent GameObject reference retention. - Equip Lag & Multiplayer Desync: Cached reflection members for
ComfyGizmoandPerfectPlacement, prevented TextMeshPro canvas rebuilds inBuildHudTooltipPatch, throttledEstimateLevelStoneCost, cachedHoeLocalization.GetActiveLanguage(), and added remote player guards inPieceTable_UpdateAvailable_Patch,Player_UpdateKnownRecipesList_Patch, andPlayer_SetPlaceMode_Patch.
- Sprinting Component Storm Elimination: In
Fixed & Balanced
- Accurate Dynamic Stone Cost Calculation:
- Fixed baseline raise dimensions in
GetTerrainPieceStoneCost: Replaced the 3.4m level ground radius baseline with vanilla Valheim's true 2.0m raise radius (TerrainOp.m_raiseRadius = 2.0m, delta = 0.5m, baseline volume = $\sim6.28\text{ m}^3$ per 2 stone). - Raised terrain volume now scales proportionally with both brush area and raise height. For example, a 1.5m square brush raised by 1.50m (volume $13.5\text{ m}^3$) now costs 4 stone instead of being locked at 2 or undercounted at 1.
- Enabled
ScaleStoneCostWithBrush = trueby default in configuration. - Added in-game hotkey toggle (
Shift + B) to quickly alternate between Dynamic Stone Cost Scaling and Flat Vanilla Cost (2 Stone) on the fly with live HUD feedback. - Fixed
SyncTerrainPieceRequirementsto refreshHud.SetupPieceInfowhenever piece resource costs change, immediately updating the in-game build requirement HUD ("Stone 736/4") upon adjusting brush radius, shape, or raise height. - Added live status strip indicator
FLAT (2 Stone) [Shift+B]/BALANCED [Shift+B]and updated controls tooltip inBuildTooltipHelper.
- Fixed baseline raise dimensions in
1.2.1
Fixed & Optimized
- Equip Stutter & Massive Frame Drop Fix:
- Eliminated severe frame rate drops when equipping the Hoe or Cultivator by adding high-efficiency spatial (2m movement threshold) and temporal (0.35s - 0.5s TTL) caching in
NearbyChestsCompat. - Replaced un-cached per-frame
Piece.GetAllPiecesInRadiusandContainerscans fromUpdatePlacementGhost,Update,OnGUI, andHaveRequirements. - Replaced expensive heightmap compiler instantiation (
hm.GetAndCreateTerrainCompiler()) during preview hover with non-allocating compiler lookups (TerrainComp.FindTerrainCompiler) and smart spatial caching.
- Eliminated severe frame rate drops when equipping the Hoe or Cultivator by adding high-efficiency spatial (2m movement threshold) and temporal (0.35s - 0.5s TTL) caching in
- Game Crash / UI Exception Fix:
- Fixed an
ArgumentOutOfRangeExceptioncrash inHud.UpdatePieceListcaused by unmatched category label counts when custom categories were injected intoPieceTable. Added automatic padding guard ensuringm_categoryLabelsalways matchesm_categories.Count.
- Fixed an
Added & Changed
- Configurable Cultivator Integration & Pure Terraforming Mode:
- Added
EnableCultivatorOnHoe(default:false): Keeps the Hoe strictly focused on terraforming without crowding the build menu with cultivator tools, plants, seeds, and farming categories. Players who prefer having cultivator tools on their hoe can enable this option. - Added
EnableCultivatorFeatures(default:false): Controls whether SmarterHoe features (farming grid, mass harvest, multi-planting) hook into the Cultivator tool. When disabled, the Cultivator remains 100% vanilla. EnableFarmingGrid&EnableAreaHarvest(defaults:false): All agricultural and cultivator tools are now disabled by default, ensuring SmarterHoe operates strictly as a focused terraforming mod out-of-the-box.- Dynamic runtime update: Changing
EnableCultivatorOnHoein Configuration Manager instantly updates the active build menu without needing a game restart.
- Added
- Predictable & Vanilla-Friendly Resource Cost Scaling:
- Added
ScaleStoneCostWithBrush(default:false): When disabled, terrain raising and paved road placement use flat vanilla costs (2 stone per raise, 1 stone per paved road) regardless of brush radius or height. When enabled, stone costs scale dynamically based on brush area and volume raised.
- Added
- Intuitive Ground Lowering / Excavation Tool:
- Unlocked negative raise heights:
MinRaisedefault changed from0.05fto-8.0f(and up to-MaxTerrainDeltawhenAllowBeyondGameLimitis enabled). - Players can now easily lower/dig ground directly using the Raise Ground tool: hold E and scroll down past
0mto enter negative depth (Lower Ground / Excavate). - Excavation / lowering ground costs 0 stone (digging dirt does not require carrying stone in survival).
- Updated 3D visualizer: when height is negative, the preview cylinder/box projects downwards into the ground with an amber/orange excavation indicator.
- Updated HUD, crosshair labels, status bar, and build menu tooltips to clearly display
Lower Depth: -X.XXm (Excavate)and explain how to lower terrain with both Raise Ground and Altitude Lock (PageDown).
- Unlocked negative raise heights:
1.2.0
Added
- Full Cultivator Integration on the Hoe:
- All cultivator abilities and plantables are integrated directly into the Hoe, eliminating the need to carry both tools!
- Tilling & Replanting: Added
Cultivate(tills fertile soil for farming) andReplant(restores lush grass to dirt or cultivated ground) straight to the Hoe's build menu. - All Vanilla & Modded Crops: Seamlessly plant carrots, seed carrots, turnips, seed turnips, onions, seed onions, barley, flax, Jotun puffs, Magecaps, Smoke puffs, Fiddleheads, Vineberries, and tree saplings (Beech, Birch, Oak, Pine, Fir, Ash). Also dynamically discovers and supports crops from farming mods (e.g., PlantEverything, OdinCrops, SeedTotem).
- Authentic Build Menu Icons: Directly pulls piece prefabs and metadata from the Cultivator's
PieceTable, preserving authentic icons, display names, localized descriptions, seed costs, and category tabs. - Strict Progression & Discovery Gating: Crops only appear in the Hoe build menu once the player has discovered their respective seeds/items.
- Intelligent Farming Grid Engine for Crops and Saplings:
- Plant crops, vegetables, and tree saplings in a neat, organized grid with a single click, eliminating tedious one-by-one crop placement.
- Dynamic Healthy Spacing: Automatically calculates the exact safe growth spacing dynamically from each crop's
Plant.m_growRadius(formula:Mathf.Max(0.85f, growRadius * 2f + 0.15f)). Crops planted in the grid will never fail to mature or complain that they need more space. - Adjustable Grid Radius Using Existing Controls: Adjust grid size using Q then scroll, hold Alt + scroll, or press bracket keys ([ / ]).
- Live Visual Grid & Boundary Preview: Color-coded ghost crop previews (🟢 Green = valid and affordable, 🟡 Yellow = valid but need seeds, 🔴 Red = blocked/invalid) with a cyan perimeter contour line.
- Proximity Row Snapping: Automatically detects nearby existing crops and snaps the entire grid to align flush with existing crop rows. Hold Shift to bypass snapping for freeform placement.
- Square vs. Circle Grid Geometry (G): Toggle between clean rectangular grids and radial circular planting patterns. Rotate square grids with mouse wheel or arrow keys (Left / Right).
- Survival Balance & Multi-Step Crop Undo (Ctrl+Z): Deducts exact seed count, stamina, and durability. Pressing Ctrl+Z destroys the batch and refunds all consumed seeds directly back to inventory.
- Mass Area Harvesting (Shift + E):
- Mass harvest all mature crops and pickable items within a configurable radius with a single keypress!
- Simply hold Shift and tap E (or configurable
AreaHarvestKeyor gamepad interact) while looking at harvestable crops. - Contextual
[Shift+E] Harvest in Range (Xm)tooltip prompt appears on hover. - Comprehensive Crop & Pickable Support: Harvests carrots, turnips, onions, barley, flax, Jotun puffs, Magecaps, Smoke puffs, seed crops, mushrooms, berries, and all modded farming crops.
- Smart Structure Safety Filter: Automatically ignores chests, doors, beds, crafting stations, and signs.
- Automated Collection & Vacuum (
AreaHarvestAutoPickup): Harvested items are pulled directly into player inventory if weight and space permit.
- Area Harvest Crop Filter Cycling (C):
- Press C (configurable
HarvestFilterCycleKey) while Hoe or Cultivator is equipped to cycle the area harvest filter between All Pickables, Replantable Crops only, or cycle through specific detected crop types nearby.
- Press C (configurable
- Shift+E Area Harvest Auto-Replant:
- Added
EnableHarvestReplantconfig toggle: when harvesting with Shift + E, immediately replants the same crops in place using seeds/vegetables from your inventory or nearby chests.
- Added
- Seamless Nearby Chest & AzuCraftyBoxes Integration:
- Full native compatibility with AzuCraftyBoxes and vanilla chests within range (
NearbyChestRange, default 20m, or AzuCraftyBoxes'mRange). - Farming & Agriculture: Farming Grid batch planting, Shift+E Area Harvest Auto-Replant, and single-crop placement seamlessly pull required seeds and vegetables from nearby chests.
- Terrain & Stone Operations: Raise Ground, Paved Road, Smooth Ramp road carving, and Instant Plateau altitude leveling all pull stone directly from nearby chests and CraftyBoxes. Placement ghost validity and 3D translucent raise cylinder preview accurately recognize stone in nearby containers.
- Full native compatibility with AzuCraftyBoxes and vanilla chests within range (
- Measure Mode (Ruler / Laser Tape) (N):
- With the Hoe or Cultivator equipped, press N (configurable
MeasureKey) to measure distances, elevation difference ($\Delta h$), slope angle (°), and road grade percentage between any two points in the world. - First press sets Point A at your aim point with a cyan 3D marker ring; second press sets Point B and locks the measurement; third press (or Esc) clears the points.
- Live 3D line connects Point A to your cursor or Point B in real-time.
- Dedicated on-screen HUD panel displays real-time 3D distance, horizontal distance, height delta, slope angle, and grade percentage.
- With the Hoe or Cultivator equipped, press N (configurable
- Live Stone Cost Estimation HUD:
- Dynamically calculates and displays live estimated stone cost in the HUD before clicking when using Level Ground (instant flatten / altitude lock) or Raise Ground.
- Dynamic Build Menu Control Tooltips:
- Direct in-game tooltips added to every tool description in the Hoe and Cultivator build menus, explaining what buttons do what for each tool.
- 100% Dynamic Keybinds: Button names are dynamically read in real time from the active BepInEx configuration. Changing hotkeys updates the build menu tooltips immediately with zero restart needed.
- Tailored controls displayed for Level Ground, Raise Ground, Instant Plateau, Level (Locked Altitude), Smooth Ramp, Soften Terrain, Restore Terrain, Clear Debris, Paved Road, Cultivate, Replant, and all crops/saplings.
- Multi-language support across 9 languages (English, German, French, Spanish, Russian, Chinese, Portuguese, Polish, Swedish).
- Ward-Aware Protection (Anti-Grief, Server-Enforced):
- All SmarterHoe terrain, carving, debris, farming, and harvest operations respect Valheim's Ward (PrivateArea) system.
- When
ProtectWardedAreasis enabled (default:true, synchronized from server), modifications inside another player's Ward are blocked. - Visual grid preview ghosts inside unauthorized wards are highlighted red (
Ward protection).
- Language Dropdown in Plugin Configurator:
- In Configuration Manager (F1), language selection is presented as a clean dropdown menu (
Auto,English,German,French,Spanish,Russian,Chinese,Portuguese,Polish,Swedish) that updates instantly without restarting.
- In Configuration Manager (F1), language selection is presented as a clean dropdown menu (
- Comprehensive Debug Action Logging & Diagnostics (
EnableDebugLogging):- Added
EnableDebugLoggingtoggle (default:false) in the0 - Generalconfiguration group for real-time diagnostic output across all mod actions.
- Added
Fixed
- Complete Overhaul of Clear Debris Resource Drops (
DropResourcesOnClear):- Fixed an issue where destroying trees, rocks, stumps, and bushes with
DropResourcesOnClear = trueproduced zero resource drops. - Recursively traverses tree log prefabs (
TreeBase.m_logPrefab,m_subLogPrefab, andm_stubPrefab) to yield full wood drops. - Correctly fires
DropOnDestroyedacross all root entities, sub-prefabs, and destructibles. - Accurately scales rock and ore drops across all remaining intact hit areas in
MineRock5boulders. - Spawns dropped items safely above terrain level with natural pop velocity and network registration.
- Fixed an issue where destroying trees, rocks, stumps, and bushes with
- Raise Height Delta Propagation Fix:
- Fixed an issue where changing
SelectedRaiseHeightwas ignored duringTerrainComp.DoOperation. It now explicitly appliesPlugin.SelectedRaiseHeightwhenevers.m_raiseis active.
- Fixed an issue where changing
- Multiplayer TerrainComp Ownership Pre-Claim:
- Added an automatic ownership claim for touching
TerrainCompinstances before operations are invoked, ensuring custom radius, square shape, and raise height settings are processed locally.
- Added an automatic ownership claim for touching
- Undo/Redo TerrainComp Precision Matching:
- Updated chunk matching in
UndoManagerto iterate and match the exact nearest chunk center using spatial distance comparison, preventing coordinate ambiguity across adjacent 64m heightmap borders.
- Updated chunk matching in
1.1.4
Fixed
- Soften Terrain Full Overhaul & Spatial Neighborhood Filter: Resolved an issue where using the "Soften Terrain" tool on raised ground or steep terrain flattened/lowered the ground toward the cursor altitude while leaving sharp, jagged stepped edges intact.
- True Multi-Pass Spatial Smoothing Engine: SmarterHoe now implements an authentic heightmap relaxation algorithm (Laplacian / Gaussian spatial diffusion):
- Iterates neighboring vertices in the grid (cardinals at weight 1.0, diagonals at weight 0.7071) across all touching chunk boundaries.
- Relaxes sharp spikes, stepped cliff corners, creases, and jagged terraformed edges towards their local neighboring surface average.
- Uniform elevated ground (such as raised plateaus) and level ground have equal neighbor heights and are never lowered or flattened.
- Applies a smooth radial cosine falloff from brush center to edge, blending smoothly into untouched surrounding terrain.
- Saves the resulting heights directly into
comp.m_levelDelta(clearingcomp.m_smoothDelta), allowing softening and rounding of cliffs of any height (even 10m-50m with beyond game limit enabled).
- New Configuration Options:
SoftenStrength: Smoothing intensity per click or sweep pass (default:0.5, range0.05to1.0).SoftenPasses: Number of filter iterations per click/sweep (default:2, range1to5).
1.1.3
Fixed
- Dedicated Server Height Limit Protection & Terrain Desync Fix: Resolved a critical issue where players connecting with SmarterHoe as a client to a dedicated server without the mod installed experienced massive terrain corruption (ground stretching into 100m spires or plunging into bottomless abysses, causing basement carpets and structures to collapse).
- Client-Side Dedicated Server Auto-Clamp: SmarterHoe now automatically checks whether the connected remote server is running SmarterHoe via
ServerSync. If the server does not have the mod installed,AllowBeyondGameLimitis strictly disabled on the client, enforcing vanilla Valheim's ±8m limit to guarantee 100% sync and zero physics anomalies. - Safe Out-of-the-Box Defaults: Changed
AllowBeyondGameLimitdefault fromtruetofalsein config. Extreme height modifications (>8m) are now opt-in for dedicated server owners and singleplayer worlds. - Native TerrainComp Passthrough:
RaiseTerrain,LevelTerrain, andSmoothTerrainnow immediately yield to vanilla Valheim methods when using circular brushes within standard game limits, ensuring full performance and zero behavior deviations.
1.1.2
Fixed
- Build Hammer Object Rotation & Menu Isolation: Fixed an issue where structures placed with the build hammer that include terrain modifiers or terrain operations (such as campsite tents from Odin's Campsite or class altars from Almanac Classes) were erroneously detected as hoe terrain tools. This prevented rotating those structures and caused the SmarterHoe HUD menu to appear while using the hammer.
- SmarterHoe now strictly verifies that the player is actively holding a hoe before rendering any HUD elements, intercepting mouse scroll wheel or adjustment keys, or modifying placement rotation.
- Removed unwanted prefab rotation mutation so build hammer pieces permanently retain their proper rotational controls.
1.1.1
Fixed
- ComfyGizmo + PerfectPlacement Compatibility: Resolved a conflict where loading both ComfyGizmo and PerfectPlacement alongside SmarterHoe would cause Harmony to fail patching
Player.UpdatePlacementGhost, disabling the mod entirely. SmarterHoe now uses a resilient transpiler that handles both the vanilla and PerfectPlacement-modified IL sequences correctly. - Added soft
BepInDependencydeclarations for ComfyGizmo and PerfectPlacement so load order is handled gracefully. - Hoe tools now correctly suppress ComfyGizmo's 3D gizmo axis rings during terrain operations.
- Terrain tool rotations are clamped to the horizontal plane when PerfectPlacement is active.
1.1.0
Added
-
Dedicated Server Support & ServerSync Integration (
ModRequired = false):- Integrated official
ServerSyncsystem with server-authoritative configuration enforcement. - Server owners can install SmarterHoe on dedicated servers and enforce balanced settings across all connected players:
- Resource Cost Mode Enforcement: Server owners can enforce
CostMode = BalancedSurvivalto prevent clients from toggling freebuild creative mode ([B]key is locked on clients with on-screen notice). - Synced Balance & Limits: Stone costs (
StonePerCubicMeter,StonePerPavedSquare), stamina and durability costs, station requirements (RequireCraftingStation), debris requirements (RequireToolsForDebris), reach distance (HoeReach), maximum brush radius (MaxBrushRadius), and maximum terrain elevation deltas (MaxTerrainDelta,AllowBeyondGameLimit).
- Resource Cost Mode Enforcement: Server owners can enforce
- Client-Optional & Vanilla Server Compatibility (
ModRequired = false):- SmarterHoe is completely optional on both client and server!
- Players with SmarterHoe can connect to vanilla or non-modded servers without being kicked, disconnected, or declined. Local client settings apply seamlessly.
- Vanilla players without SmarterHoe can connect to dedicated servers running SmarterHoe without being rejected.
- In-Game Lock Enforcement & HUD Indicators:
- Non-admin players connecting to a locked dedicated server cannot toggle cost mode using
[B](displays HUD notice:Cost mode is locked by the server). - Top HUD panel clearly displays
<color=#FF6666>[Locked by Server]</color>when server settings are enforced. - Server admins listed in
adminlist.txtare automatically exempt (lockexempt = true) and can modify settings in real-time with instant synchronization to all connected clients.
- Non-admin players connecting to a locked dedicated server cannot toggle cost mode using
- Headless Dedicated Server Optimizations:
- Visualizers, line renderers, crosshairs, and icon texture loaders cleanly bypass headless dedicated server environments (
GraphicsDeviceType.Null).
- Visualizers, line renderers, crosshairs, and icon texture loaders cleanly bypass headless dedicated server environments (
- Integrated official
-
Multi-Step Undo & Redo System (
[Alt+Z]or[Ctrl+Z],[Alt+Y]or[Ctrl+Y]):- Deep chunk-level undo/redo support across all terrain actions: Leveling, Instant Plateau, Soften, Restore, Smooth Ramp auto-carving, Vanilla Raise Ground, Mud Road, Paved Stone Road, and Cultivate.
- Continuous sweep grouping: holding left-click to drag-level or pave groups the entire sweep into a single atomic undo entry rather than cluttering history.
- Multi-heightmap boundary handling: ramps and large brushes touching multiple terrain chunks snapshot and restore across all affected chunks cleanly.
- Waypoint step-back integration: pressing the Undo key when ramp waypoints are active automatically steps back the most recent waypoint first before undoing terrain changes.
-
Extended Hoe Reach (20m default, configurable 5m–50m):
- Dramatically improves terraforming ergonomics by extending hoe placement reach while the tool is equipped. Automatically restores vanilla reach upon unequipping or character death.
-
Dedicated Keyboard Rotation Hotkeys & Configurable Step Size:
- Rotate the square brush smoothly using dedicated keyboard hotkeys or mouse scroll wheel:
RotateSquareLeftKey(default:LeftArrow): Rotates square counter-clockwise.RotateSquareRightKey(default:RightArrow): Rotates square clockwise.ResetSquareRotationKey(default:Home): Snaps square rotation back to 0° (North).
SquareRotationMode: Choose betweenScrollWheelAndButtons(default),ButtonsOnly(keyboard only), orScrollWheelOnly.SquareRotationDegrees: Configure degrees to rotate per click/step (default:22.5°, configurable from5.0°to90.0°).
- Rotate the square brush smoothly using dedicated keyboard hotkeys or mouse scroll wheel:
-
Expanded Multi-Language Localization (9 Languages + Auto-Detection):
- Built-in localization covering the top 9 languages played in Valheim: English, German, French, Spanish, Russian, Simplified Chinese, Portuguese (Brazilian), Polish, and Swedish.
- Auto-Detection (
Language = "Auto"): Automatically detects the active game language from Valheim's language settings with zero manual configuration needed. - Native Tool & Menu Translation: Patched Valheim's native
Localization.Localizeengine to dynamically localize custom tool names, descriptions, cart slope friendliness ratings (Cart Friendly (✓),Steep for Carts (!),Too Steep for Carts (✗)), brush shapes, cost modes, and HUD notifications.
-
Hold-to-Repeat Altitude Fine-Tuning with Initial Delay:
- Holding down PageUp or PageDown now smoothly and continuously raises or lowers the locked altitude without requiring dozens of individual button presses.
- Features an initial delay (
AltitudeHoldDelay, default:0.35s) before continuous movement begins to prevent accidental overshooting on single taps. - Smooth rapid elevation adjustment (
AltitudeRepeatRate, default:0.05s) with real-time HUD notification updates. - Hold
Shiftwhile tapping or holding PageUp/PageDown for a 5x elevation speed multiplier.
-
Camera-Zoom Suppression While Adjusting:
- Eliminates jarring camera zoom in/out while adjusting brush radius or raise height with the mouse wheel. Configurable mode:
WhileAdjusting(suppresses only during active adjustment),AlwaysWithHoe, orDisabled.
- Eliminates jarring camera zoom in/out while adjusting brush radius or raise height with the mouse wheel. Configurable mode:
-
Bypass Valheim's 8m Terrain Height Limit (
AllowBeyondGameLimit = true):- Removes the engine's hardcoded ±8m ceiling and floor clamps in
TerrainComp.ApplyToHeightmap,LevelTerrain,RaiseTerrain, and custom SmarterHoe tools. Allows raising towering earthen bastions or excavating deep moats/canals up to a configurable limit (default: 50m).
- Removes the engine's hardcoded ±8m ceiling and floor clamps in
-
Adjustable Raise Height & Q / E Mode Switch:
- Press
[E]to select Height adjustment mode, or[Q]to select Area adjustment mode. - Mouse wheel dynamically adjusts raise delta (0.05m to 8.0m per click) when Height mode is selected or when holding
Alt+Shift+Scroll. - Vanilla
raiseground now scales cleanly with the selected raise height and radius, with proportional stone consumption in Survival mode.
- Press
-
3D Translucent Raise Cylinder Preview:
- Live 3D volumetric cylinder preview showing the exact raise height and radius at the crosshair hit point, color-coded by reach (customizable valid and invalid colors and opacities).
-
Dedicated Console Commands:
resetterrain [radius]: Reverts terrain modifications within a specified radius back to natural world-gen state (undoable!).remove_forestry [radius]: Clears trees, logs, stumps, and vegetation within the radius.cleardebris [radius]: Clears all rocks, boulders, vegetation, and obstacles within the radius.smarterhoe_undo&smarterhoe_redo: Terminal commands to step backward and forward through history.
-
Memory Safety & Clean Session Transitions:
- History automatically clears on world exit (
Game.OnDestroy) to ensure zero memory leaks across worlds and server hops.
- History automatically clears on world exit (
-
HUD Undo / Redo Counter & Real-Time Feedback:
- All 6 hoe mode HUD panels now display current undo/redo step availability in real time:
[Alt+Z] Undo (N) | [Alt+Y] Redo (M). - Real-time rotation angle and active control bindings displayed on square brush HUD, accompanied by instant on-screen toast notification banners.
- Active adjustment badge beside the crosshair dynamically indicates current Area / Height values when modified.
- All 6 hoe mode HUD panels now display current undo/redo step availability in real time:
-
True Freebuild Creative Mode (Zero Resources, Zero Stations, Zero Durability, Zero Stamina):
- Fixed an issue where Freebuild mode (
[B]) still required stone in inventory, consumed stone on click, required a nearby Workbench or Stonecutter, and drained stamina and tool durability. - Patched
Player.HaveRequirements,Player.ConsumeResources,Character.HaveStamina,Player.GetBuildStamina, andPlayer.GetPlaceDurabilityso all terrain operations in Freebuild mode require zero materials, consume zero resources, bypass crafting stations completely, and never drain stamina or tool durability. - The HUD requirement bar automatically hides stone requirements in Freebuild mode for a clean creative experience.
- Fixed an issue where Freebuild mode (
-
Dynamic Raise Ground & Paved Road Resource Scaling (Height & Area):
- Fixed vanilla Raise Ground only requiring 2 stone regardless of how high or large the terrain being raised was.
- Stone cost in BalancedSurvival mode now dynamically scales with physical volume: proportional to both brush Area (radius and Circle vs Square geometry) and Height (SelectedRaiseHeight relative to vanilla's 0.5m baseline).
- Dynamic HUD requirement sync: the bottom HUD requirement bar immediately displays the exact calculated stone requirement (e.g.
24 Stone) and flashes red if inventory is insufficient. - Placement ghost and 3D Translucent Raise Cylinder automatically turn red when stone is insufficient.
- Real-time stone cost display in the top-middle HUD panel and crosshair adjustment badge as radius, height, or shape is modified.
- Server-authoritative balance: scales with
StonePerCubicMeterandStonePerPavedSquareconfigs synced from dedicated servers.
Fixed & Improved
- ComfyGizmo & PerfectPlacement Third-Party Mod Interoperability:
- Fixed a critical incompatibility where loading both ComfyGizmo and PerfectPlacement alongside SmarterHoe caused a Harmony transpiler collision on
Player.UpdatePlacementGhost, resulting in SmarterHoe's patch chain failing and disabling the mod. - Implemented
ModCompatibilityManagerwith a universal transpiler interceptor that seamlessly chains ComfyGizmo's rotation delegate after PerfectPlacement's rotation method without throwing IL matching exceptions. - Added soft dependency registration (
[BepInDependency]) and post-patch repair hooks to restore broken transpiler chains automatically on startup. - Registered all custom terrain tool prefabs (
SmarterHoe_*) into ComfyGizmo'sIgnoredPrefabNamesand suppressed 3D rotation gizmos when holding hoe tools, preventing unwanted pitch and roll on 2D terrain brushes. - Added an automatic fallback in
Player.UpdatePlacementensuring placement ghost updates, altitude lock, and square visualizers remain 100% active even if third-party mods interfere withUpdatePlacementGhost. - Added resilient per-class try-catch blocks around Harmony patch registration to prevent any single third-party hook failure from halting mod initialization.
- Fixed a critical incompatibility where loading both ComfyGizmo and PerfectPlacement alongside SmarterHoe caused a Harmony transpiler collision on
1.0.1
Fixed & Improved
- Store Icon Transparency: Replaced icon with true 32-bit ARGB alpha transparency, fixing the gray checkerboard background on dark sites like Hexium and Thunderstore.
- Hotkey-Only Altitude Lock: Eliminated unwanted auto-locking on tool selection, hover, or clicks. Altitude locking only engages when explicitly pressing
[L]or Middle-Click piece snapping. Automatically turns off when unequipping the hoe. - Recipe Unlocking Safeguards: Added internal prefab names to known recipes list to guarantee all 6 custom hoe tools unlock properly across game restarts.
- Zero-Allocation Performance: Added spatial caching to boundary visualizers and zero-allocation capsule queries for debris clearing.
1.0.0
Added
- Altitude Lock (
[L]orMiddle-Click) — laser-flat terrain leveling locked to a fixed elevation. Activates strictly upon hotkey use (never auto-locks). Middle-click any building piece to snap the lock to its floor height. - Instant Plateau — dedicated hoe build-menu tool that razor-flattens the entire brush area in a single click.
- Smooth Ramp Auto-Carver (
[K]+[H]) — place waypoints and auto-carve smooth graded roads using Catmull-Rom spline interpolation. Supports curved switchbacks and multi-waypoint paths. - Dynamic Slope Coloring — ramp guide spine changes color in real time by slope angle: green ≤20° (cart-friendly), yellow 20–25° (steep), red >25° (too steep for carts).
- Soften Terrain — gently blend rough terrain without hard edges.
- Restore Terrain — reset terrain within the brush to original world-gen state.
- Clear Debris — instantly remove trees, logs, stumps, rocks, and ore deposits within the brush radius.
- Circle / Square Brush Toggle (
[G]) — switch between circular and square brush geometry; square brush rotates with player direction. - Adjustable Brush Radius —
Alt + Scrollor[Alt] + [/]resizes 0.5m–15m. Vanilla paving pieces scale to match. - Balanced Survival Mode — stone consumption, stamina drain, tool durability wear, crafting station proximity checks, and tool requirements for debris clearing. Press
[B]to toggle between Balanced and Freebuild.
