
Dragged's Simulated Tree Chopper
Trees fall over with real physics when you chop them. Drag trunks around with shift-right-click. Pick up a whole fallen tree in one swing. Built for NeoForge 1.21.1 with Sable, HT TreeChop, and an optional integration with Immersive Weathering.
1.0.4
Compatibility
Required content
Changes
1.0.4
- Configuration migrated to owo-lib. The config is now an annotation-driven model (
SableConfigModel) with a compile-time-generated wrapper and an in-game screen at Mods → Sable Tree Chopper → Config. owo-lib is now a required dependency. The oldconfig/draggeds_treechopper-common.tomlis obsolete and ignored; settings live in owo's JSON config. - Config is curated. Only the options most players touch are exposed; the granular 1.0.3 leaf-contact tuning keys (
treeLeafContactBreaksPerTick,treeLeafContactScanEveryNPhysicsTicks,treeLeafContactMinBodyTranslationBlocks,treeLeafContactMinBodyRotationDegrees,treeLeafContactGracePhysicsTicks,treeAnchorLeafCleanupRadius, etc.) are now fixed internal defaults. - Felling is topple-only. Mass-break and the large-tree velocity-gate path are removed; TreeChop never mass-breaks a standing tree. Every chop assembles a physics body and topples it, and logs are harvested off the downed trunk by hand. The old "break any log and the whole body drops at once" behaviour is now opt-in via
wholeTreeHarvestOnBreak(default off, so logs come off one at a time for easier horizontal mining). - Canopy stays on the rigid body and breaks on contact (
keepCanopyAttached, default on; replaces the IW pre-strip as the default path).LeavesThinSubLevelCollisionMixingives leaf voxels a centered 0.25-block sub-level collider so leaf-only remnants still hit the world (no tunneling) while the trunk topples nearly flat.TreeLeafContactBreakershatters canopy on the slightest contact with any non-air, non-tree block regardless of body velocity, and passes through other foliage so felling in a forest ploughs through neighbouring canopies instead of phasing through them or hanging up. Per-body leaf positions are cached and refreshed every 60 physics ticks to keep large modded canopies cheap. - New
chopBaseModeenum controls where the TreeChop counter sits when the bottom log is buried:LOWEST_VISIBLE(default — counter on the lowest log with an exposed face, buried logs left as an untouched stump),LOWEST_ANY(counter on the true bottom log, legacy behaviour), orLOWEST_VISIBLE_BREAK_BURIED(counter on true bottom; buried logs below the visible base break with drops on fell). Backed by a newTreeLogVisibility(face-occlusion visibility test) andTreeChopChopVisualConsolidator. separateTouchingTreeSpeciesis on by default: when two different wood species touch, only the species you cut is gathered and felled.- Fall-feel options moved under a
fallFeelnest:toppleTowardPlayer(small directional push so the trunk commits to falling toward you) andtoppleStrength.naturalDissolveEnablednow defaults to off and lives here too — fallen trees no longer self-dissolve after you walk away; they stay put until harvested. Flip it on to restore at-rest dissolve with log drops. - Drag is now config-exposed:
dragEnabled(shift + right-click a fallen tree to drag it) anddragSlowsPlayer(movement slowdown while dragging). - Fixed: autosave and shutdown could NPE the server in
SubLevelSerializeronce every log had been mined off a fallen tree. Those zero-mass bodies have a nullgetSelfMassTracker().getCenterOfMass()and cannot be serialized. AddedServerLevelSaveGuardMixin(purges unpersistable sub-levels beforesaveLevelData) andSubLevelHoldingChunkMapSaveGuardMixin(purges atsaveAllHEAD and cancelsmoveAndSaveSubLevelfor bodies that failhasPersistableMass), both routed throughTreeAssemblyRuntimeHandler.purgeUnpersistableSubLevelsForSave. Saving never hits that path now. - Config keys:
enabled,onlyFellNaturalTrees,onlyFellOnPlayerBreak,separateTouchingTreeSpecies,maxTreeSize,wholeTreeHarvestOnBreak,dragEnabled,dragSlowsPlayer,chopBaseMode,keepCanopyAttached,useImmersiveWeatheringLeafPiles,fallFeel.toppleTowardPlayer,fallFeel.toppleStrength,fallFeel.naturalDissolveEnabled,debug.debugLogging.
If you're updating from 1.0.3, install owo-lib and delete config/draggeds_treechopper-common.toml — it is no longer read; settings regenerate in owo's JSON config.
Optional dependencies
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:lqr9MrOI:4aAI1shW"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:lqr9MrOI:4aAI1shW"
}




