Forked repo to work on pull requests in
  • Java 99.6%
  • Python 0.2%
  • Makefile 0.2%
Find a file
TiedUp Team ff25b6e380 Stop kidnappers parking a block short of their target
Commit 30467ce shortened the re-path interval and made every capture stage press
forward. It was not enough, because the stall is not a cadence problem. Three
separate vanilla behaviours combine into it.

Pathing to an entity uses an accuracy of one block, and the search ends on the
first node within that distance, so the route is built to stop one block short.
Whether the target block makes it into the path at all depends on which
neighbour the search expanded first, which is why the stall came and went.

Worse, a finished path compares equal to its own replacement: Path.sameAs
compares node coordinates and never the cursor into them. Re-issuing a move
therefore keeps the exhausted path, bails out on it being done, and leaves
forward input at zero. No re-path frequency can break that, which is exactly
why the previous attempt failed.

Forge's MC-94054 patch also tests waypoint arrival against a point 0.3 blocks
away from the one the mob is steered to, so the accepted band sits off centre
and a mob travelling in -X or -Z is briefly driven backwards on a fresh path.
Upstream reports the same symptom stranding ravagers when the player walks
north or west.

PursuitGroundNavigation answers all three, and a createNavigation override on
EntityDamsel reaches every NPC family at once — nothing overrode it before. It
paths to the target block, discards a spent path before installing its
replacement, and re-centres the arrival test on the point the mob actually
steers toward.

It also drives the move control directly over the last few blocks, the way
vanilla's own WallClimberNavigation does, so a path that ran out behind a
target that kept walking does not leave the mob idle. That drive refuses to run
toward a target the pathfinder reported unreachable, and samples the ground
ahead through the node evaluator before pushing: line of sight ignores fluids
and never looks at the floor, so without those two gates a kidnapper would walk
a straight line into lava to reach someone across a moat.

The chasing goals share one ChasePathThrottle instead of each hand-rolling a
counter. Cadence and displacement gate follow vanilla melee pursuit; the
addition is that a re-path is not skipped when the mob has already run out of
path, which is the case vanilla gets wrong.

Timing constants are documented in goal ticks now. A goal without
requiresUpdateEveryTick runs every other game tick, so the chase timeout was
120 seconds rather than the 60 its comment claimed. Behaviour unchanged; only
the comments were wrong.
2026-08-06 22:53:49 +00:00
.forgejo/issue_template Add Forgejo issue templates for bugs and suggestions 2026-07-31 18:48:17 +02:00
gradle/wrapper [Foundation] Setup Forge 1.20.1 project - Phase 0 Complete 2025-12-26 14:33:55 +00:00
src Stop kidnappers parking a block short of their target 2026-08-06 22:53:49 +00:00
third-party Clean up repository for public release 2026-07-26 15:10:07 +00:00
tools Pet bed sleep animation, testanim command, and GeckoLib-to-Emotecraft converter 2026-02-07 16:37:05 +00:00
.gitattributes Clean up repository for public release 2026-07-26 15:10:07 +00:00
.gitignore Ignore internal design documentation 2026-07-26 21:18:09 +00:00
.prettierrc.yaml prettier & commands 2026-01-10 11:04:21 +00:00
build-with-java17.sh Clean up repository for public release 2026-07-26 15:10:07 +00:00
build.gradle Port the devious chest feature from Reforged 2026-07-27 17:35:44 +00:00
CHANGELOG.md Clean up repository for public release 2026-07-26 15:10:07 +00:00
gradle.properties Stop the Wildfire compat crashing on older Wildfire builds 2026-08-02 00:33:23 +00:00
gradlew [Foundation] Setup Forge 1.20.1 project - Phase 0 Complete 2025-12-26 14:33:55 +00:00
gradlew.bat Normalize line endings to LF 2026-07-26 15:10:57 +00:00
LICENSE Clean up repository for public release 2026-07-26 15:10:07 +00:00
Makefile Clean up repository for public release 2026-07-26 15:10:07 +00:00
Makefile.local.example Clean up repository for public release 2026-07-26 15:10:07 +00:00
package-lock.json prettier & commands 2026-01-10 11:04:21 +00:00
package.json Clean up repository for public release 2026-07-26 15:10:07 +00:00
README.md Clean up repository for public release 2026-07-26 15:10:07 +00:00
RELEASE-0.6.2.md Add the 0.6.2 release notes 2026-08-06 21:37:42 +00:00
RELEASE_INFO.txt clean doc 2026-01-05 05:22:41 +00:00
settings.gradle Clean up repository for public release 2026-07-26 15:10:07 +00:00

TiedUp! Remake

A community remake of TiedUp!, a Minecraft Forge mod adding bondage/restraint roleplay mechanics, NPCs (Damsel, Kidnapper and variants), and related systems, for Minecraft 1.20.1.

Current version: 0.5.6-ALPHA. This is an alpha release — expect bugs, balance changes, and incomplete features between updates.

Credit & Non-Affiliation

The original TiedUp! mod (Minecraft 1.12.2) was created by Yuti & Marl Velius. This project is an independent, community-driven remake for Minecraft 1.20.1 and is not affiliated with, endorsed by, or maintained by the original authors. It exists for preservation and continuation purposes; original assets carried over are used under fair use for preservation/educational purposes (see LICENSE, Part 3).

Requirements

  • Minecraft: 1.20.1
  • Forge: 47.4.10 or newer
  • PlayerAnimator (dev.kosmx.playerAnim) — hard dependency, required for the mod to load. Player and NPC poses are built on top of it.
  • bendy-lib (KosmX) — hard dependency, required for limb bending (elbows, knees) on bound players and NPCs.

Optional dependencies

These enable extra compatibility features but are not required to run the mod:

  • Patchouli (Vazkii) — powers the in-game guide book. Without it, the guide item is disabled.
  • Wildfire's Female Gender Mod — enables gender-aware rendering/physics compat for players using it.
  • Minecraft Comes Alive (MCA) — enables capturing, restraining, and imprisoning MCA villagers.
  • Architectury API — required by MCA; declared so Forge loads it before the MCA compat layer initializes.

Building

Requires a JDK 17 toolchain (Minecraft 1.20.1 / Forge target Java 17, and the Gradle 8.8 wrapper used here cannot run on a JVM newer than Java 22).

./gradlew build          # Build the mod jar
./gradlew runClient      # Run a Minecraft client with the mod loaded
./gradlew runServer      # Run a dedicated server with the mod loaded

There is no pinned JDK path in gradle.properties — point JAVA_HOME at a JDK 17 install yourself, or use ./build-with-java17.sh (or the provided Makefile), which both locate a JDK 17 install automatically and export JAVA_HOME for you.

License

Licensed under GPL-3.0 with Commons Clause plus additional no-sale/no-paywall restrictions — free to use, modify, and redistribute with source, but it may not be sold, paywalled, or monetized in any form. See LICENSE for the full terms, asset exclusions, and third-party attributions. Minecraft Forge's own license is preserved unmodified at third-party/FORGE-LICENSE.txt.