Create Horse Power - CE 1.21.1-1.2.1 - NeoForge 1.21.1
Curse Maven Snippet
What's new
Create Horse Power CE 1.2.1 (NeoForge 1.21.1)
This maintenance release fixes persisted ghost leashes, TFC worker-profile precedence, unrealistic worker orbit speed, and field-debugging gaps.
Fixes
- Fixed ghost/orphan leash knots when a worker is detached, moved outside the cleanup scan, or unloaded when its crank is emptied.
- Preserved
detachWorker(false)across unload/save/reload so deferred recovery does not unexpectedly spawn a lead. - Made unloaded detach policy durable at level scope, so
detachWorker(false)still preserves no-drop semantics if the crank is destroyed or replaced before the worker reloads. - Bounded stale worker recovery to 1200 ticks; the recovery clock is persisted on the worker so unload/reload cannot reset the timeout.
- A successful new attachment now cancels stale durable/legacy detach intent and any pending orphan-recovery clock for that worker.
- Fixed a NeoForge 1.21.1 ghost assignment where the crank could keep
HAS_WORKER=trueafter the real leash/worker assignment was gone, causing a re-leashed TFC horse to be rejected with “This horse crank already has a worker.” Loaded stale assignments are repaired on the attach click, while genuinely unloaded assigned workers remain reserved. - Deferred recovery runs after vanilla 1.21.1 resolves delayed BlockPos leash data, preventing the old knot from being recreated permanently.
- Recovery now discards the exact vanilla-recreated leash knot once it becomes unused, without inspecting or force-loading the old crank chunk; a knot still used by another loaded mob is preserved.
- Added persistent attachment ownership independent of temporary AI suppression, while retaining CE.2 legacy-marker recovery.
- Hardened knot cleanup so stale recovery cannot detach or destroy a worker/knot now owned by a replacement crank.
- Crank activity and attachment ownership now uses the complete
(block position, instance UUID)identity, so vanilla/clone, structure copies, or NBT tooling cannot let a duplicated crank UUID impersonate another crank during stale cleanup. - Deferred detach records are now consumed only by their owning crank instance during cleanup, preventing an unrelated crank from erasing another crank's recovery intent.
- Fixed pre-existing
NoAI=trueworkers repeatedly reacquiring/relogging CHP activity control; marker ownership is now tracked separately from NoAI-transition ownership and cleaned on stop/detach without changing the original NoAI state. - Timeout recovery now requires actual serialized vanilla leash data before using the synthetic-holder cleanup path, so a stale CHP marker on an already-unleashed worker cannot manufacture a free lead.
- Server shutdown now clears process-local recovery queue references while leaving the worker's persisted recovery clock intact, preventing integrated-server worlds from being retained after returning to the menu.
TerraFirmaCraft compatibility
- Added optional exact Data Map defaults for TFC horse, donkey, mule, cow, pig, sheep, dromedary camel and bactrian camel.
- Exact TFC species entries replace CHP's built-in generic tier-tag default, so horse/donkey/mule/camel/etc. receive their matching species profiles.
- TFC entries are guarded by NeoForge's
mod_loadedcondition, so TFC is not a hard dependency and missing registry IDs are never resolved when TFC is absent. - Exact defaults remain ordinary Data Map entries, so later datapacks can override or remove them.
- Added built-in path defaults for TFC soil and rock families, so ordinary TFC grass/dirt/gravel/cobble/smooth/brick rings can power a crank without manual path config.
Movement
- Decoupled mechanical output RPM from the animal's visible orbit gait. High-output/path multipliers no longer make workers sprint unrealistically fast.
- Visual motion now uses a bounded blocks-per-second speed derived from the mob movement-speed attribute.
- Angular movement is derived from
linearSpeed / radius, keeping ground speed consistent across custom crank radii. - Added
workerGroundSpeedScale,minWorkerGroundSpeed, andmaxWorkerGroundSpeedserver settings.
Diagnostics
- Added
diagnostics.debugLoggingfor transition-based attach, detach, leash cleanup, recovery, AI-control, work-state and path-state diagnostics. - Deferred recovery diagnostics are rate-limited; normal worker movement is never logged every tick.
- Repeated
beforeWorkStartscript veto retries now log immediately once and then at most once per 1200 ticks per crank/worker instead of once per retry. - Replaced the previous per-entry INFO config dump with one compact startup summary.
- Expanded
/createhorsepower inspectwith worker UUID/type, visual gait vs mechanical RPM, leash holder, marker state and recovery anchor information.
Verification
- Added loaded and save/unload/reload ghost-leash GameTests, including the
dropLead=falsecontract. - Added NeoForge Data Map precedence coverage for optional TFC species profiles.
- Added lifecycle GameTests for durable no-drop detach across crank replacement and bounded NoAI recovery without old-chunk force-loading.
- Added a 600-tick + unload/reload + 600-tick regression proving recovery timeout age cannot restart on chunk churn.
- Added stale-assignment recovery coverage proving cleanup clears ghost
HAS_WORKERstate while preserving a worker's new foreign leash. - Added a regression proving successful reattachment consumes obsolete durable detach intent and cancels queued recovery.
- Added regressions proving recovered workers remove unused recreated knots, preserve a shared knot still used by another loaded mob, and cannot consume another crank's durable detach intent.
- Added TFC runtime coverage proving both the
tfc:horseprofile and TFC terrain defaults resolve in the dev environment. - Added an engine-level GameTest covering pre-existing
NoAI=truemarker stability, persisted marker/transition ownership separation, and detach cleanup. - Added duplicate-UUID collision regressions proving two cranks at different positions cannot clear or inherit each other's activity/attachment ownership, matching vanilla
/cloneblock-entity NBT behavior. - Added timeout-without-leash coverage proving stale marker cleanup cannot create a lead, plus transient queue cleanup coverage proving server-stop cleanup preserves the durable timeout clock.
- Added radius-independent gait/clamp unit tests.
This mod has no additional files

