


Tiny mod that fixes two annoyances when placing modded vegetation / decorative props with the hammer:
m_clipGround and m_clipEverything are forced to true. The ghost snaps cleanly to terrain / surfaces instead of bouncing around or refusing to place.RandomPieceRotation.Awake() (the vanilla component that randomizes rotation on world-position seed) is suppressed during player placement, so the rotation you aim with the hammer actually sticks. Naturally-spawned vegetation in the world still rotates normally — only the placement path is gated.If you've ever hammer-selected a modded plant / decoration / shrub and watched it either refuse to hover-place or land at the wrong rotation — Clippy fixes both, for every prefab, with zero per-prefab config and no list maintenance.
Need help, found a bug, want a feature? https://discord.gg/H9uKGcAujs
| Feature | What you get |
|---|---|
| Auto-clip on selection | Whenever your hammer has a piece selected (vanilla menu or any selection mod like InfinityHammer / Gizmo Reloaded / MoreVanillaBuildPrefabs), Clippy flips m_clipGround = true and m_clipEverything = true on the placement ghost every frame. The ghost then takes the direct-snap-to-raycast-hit code path vanilla pieces with the flag already set use. |
| RandomPieceRotation suppress | Some modded prefabs (a lot of Balrond's nature assets, for example) carry vanilla's RandomPieceRotation MonoBehaviour. When the player places the piece, that component's Awake() overrides the rotation you aimed with the hammer. Clippy gates the component's Awake with a static suppress counter that's bumped around Player.SetupPlacementGhost and Player.PlacePiece, so player-placed instances keep your rotation. Naturally-spawned world vegetation is unaffected — only the placement path is gated. |
| Runtime toggle | Default keybind F8 flips both features on/off together. State persists across sessions. A center-screen Hud message tells you which mode you're in (silenceable in config). The two features have separate config bools so you can run one without the other by editing the cfg directly. |
| No prefab pollution | Clippy only touches the placement ghost's Piece component, never the source prefab. Toggle off and the next selection returns to vanilla behavior; the original flag values are restored live without needing to re-select. Once a piece is actually placed in the world the flags don't matter anyway — they only affect the hover preview. |
| Works with everything | Vanilla hammer, InfinityHammer, MVBP, Gizmo, any mod that goes through Player.UpdatePlacementGhost / Player.PlacePiece. No mod-specific hooks. |
Vanilla's Player.UpdatePlacementGhost branches on the selected piece's m_clipGround and m_clipEverything bools:
Collider.ClosestPoint to slide back to the hover position. Works well for closed-mesh building pieces. Fails on anything with sparse / no colliders — which is most modded vegetation and decorative props.Clippy runs a Harmony prefix on UpdatePlacementGhost that toggles those bools on the ghost (not the source prefab) before vanilla reads them. Cost is two bool writes per frame in build mode. Out of build mode, zero cost.
Clippy.dll into BepInEx/plugins/.BepInEx/config/com.Fire.Clippy.cfg with the three settings below.Client-side mod. Server doesn't need it. Other players don't need it.
| Key | Default | What it does |
|---|---|---|
AutoClipEnabled |
true |
Force m_clipGround / m_clipEverything to true on the placement ghost every frame. When false, ghost reverts to prefab defaults (vanilla behavior). |
SuppressRandomRotationEnabled |
true |
Skip RandomPieceRotation.Awake during player placement so the rotation you aimed with the hammer survives. Doesn't affect natural world spawns. |
ToggleKey |
F8 |
Keybind toggle. Flips BOTH AutoClipEnabled and SuppressRandomRotationEnabled to the opposite of their current AutoClipEnabled state, then writes them to config so they persist across sessions. Modifier keys (Shift / Ctrl / Alt) supported through the in-game config UI. To run the two features independently, edit the bools above instead of using the keybind. |
ToggleMessage |
true |
Show a center-screen "Clippy: ON / OFF" message when the toggle is flipped. Disable for silent operation. |
Player.UpdatePlacementGhost, so Clippy works without any mod-specific integration.Born out of a Discord conversation about how clunky modded vegetation is to place when MVBP only adds piece components.
MIT — see LICENSE.