Skip to content

Server & client config (TOML)

✅ Available This page is for server owners and pack admins, not add-on authors. The mod ships two Forge config files — tiedup-server.toml and tiedup-client.toml — exposing roughly 120 tunables (struggle pacing, per-material bind resistances, gag balance, NPC spawn rates, economy tiers, combat-tool numbers, plus client switches). Every key below was verified field-by-field against ModConfig (the ForgeConfigSpec builders).

The two specs are registered as a Forge SERVER config and a CLIENT config (ModConfig.SERVER_SPEC / ModConfig.CLIENT_SPEC). That registration type decides where the file is written and who owns it:

FileForge typeLocationScope
tiedup-server.tomlSERVERper-world: <world save>/serverconfig/tiedup-server.toml (dedicated server: world/serverconfig/)Gameplay balance. Lives inside the save, synced to clients on join.
tiedup-client.tomlCLIENTglobal: .minecraft/config/tiedup-client.tomlEach player’s own machine. Never synced; purely local.
  1. Stop the server (or quit to title in singleplayer). Forge reads these TOMLs at load.
  2. Open the file in a text editor. Keys are grouped under [Section] / [Section.Subsection] headers (TOML tables) — the same nesting shown in the tables below.
  3. Change a value, keeping it inside the documented range (e.g. struggleProbability is 0..100). An out-of-range or wrong-typed value is rejected and Forge restores that key’s default.
  4. Save and restart. There is no in-game /reload for TOML config.

GameRules can override the server TOML ⚠️ Partial

Section titled “GameRules can override the server TOML ”

This is the single most important thing to understand before you touch tiedup-server.toml. About two dozen of the server settings are also registered as vanilla GameRules, and game code resolves settings in three tiers (SettingsAccessor):

  1. GameRule (per-world, set with /gamerule) — wins if the world is loaded.
  2. tiedup-server.toml — the default used when no GameRule applies.
  3. Hard-coded fallback — only during early load, before the config exists.

Settings with a GameRule twin (name on each side differs — GameRule name in the right column):

TOML key (tiedup-server.toml)GameRule (/gamerule …)
tyingTimetyingPlayerTime
untyingTimeuntyingPlayerTime
struggleEnabledstruggle
struggleProbabilityprobabilityStruggle
struggleTimerstruggleTimer
struggleMinDecrease / struggleMaxDecreasestruggleMinDecrease / struggleMaxDecrease
struggleCollarRandomShockstruggleCollarRandomShock
shockerControllerRadiusshockerControllerBaseRadius
enslavementEnabledenslavementEnabled
gagTalkProximitygagTalkProximity
damselsSpawn / kidnappersSpawndamselsSpawn / kidnappersSpawn
damselSpawnRate, kidnapperSpawnRate, kidnapperArcherSpawnRate, kidnapperEliteSpawnRate, kidnapperMerchantSpawnRate, masterSpawnRatesame names

Everything else in tiedup-server.toml (resistances, gags, economy, the whole KidnapperAdvanced tree…) has no GameRule twin — for those, the TOML is the only place to tune them.


Grouped by the TOML tables the config builds. Defaults shown are the shipped values; the parenthetical is the allowed range Forge enforces.

The core capture/escape pacing.

KeyDefaultRangeMeaning
tyingTime51–60Seconds to tie a player.
untyingTime101–60Seconds to untie.
struggleEnabledtrueboolMaster switch for the struggle mechanic.
struggleProbability400–100% chance an RNG struggle attempt succeeds.
struggleTimer801–200Cooldown (ticks) between attempts.
struggleMinDecrease / struggleMaxDecrease1 / 101–100Resistance removed per successful struggle (random in this band).
struggleCollarRandomShock200–100% chance of a random shock while struggling against a collar.
KeyDefaultMeaning
struggleMiniGameEnabledtrueUse the QTE struggle mini-game instead of pure RNG.
lockpickMiniGameEnabledtrueUse the “sweet spot” lockpick mini-game instead of RNG.
exhaustionCooldownSeconds30 (5–120)⚠️ Partial Cooldown after mini-game exhaustion. Written to the TOML but not yet acted on.
KeyDefaultRangeMeaning
tiedSwimSpeedMultiplier0.50.0–1.0Swim speed when legs are bound.
messageCooldown20000–10000⚠️ Partial Cooldown (ms) for restriction chat spam. Written to the TOML but not yet acted on.

[Resistances] — per-material bind difficulty ✅ Available

Section titled “[Resistances] — per-material bind difficulty ”

The escape “HP” each bind type contributes. Higher = harder/longer to struggle free. Every key is an int in 1–1000. These are the fallback resistances by material name; an individual item can still override via its resistance component, and a worn item with no component uses its escape_difficulty.

KeyDefaultKeyDefault
rope100latex_sack300
chain150ribbon50
armbinder180vine60
wrap200web70
straitjacket250slime80
gag / blindfold / collar100 eachtape90

Plus one standalone key:

KeyDefaultRangeMeaning
padlockResistance2500–1000Extra resistance a padlock/lock adds on top of the bind.
[Resistances]
rope = 100
chain = 150
armbinder = 180
# ...raise to make a material harder to escape
straitjacket = 400
padlockResistance = 250

[Gags] — gagged-chat balance ✅ Available

Section titled “[Gags] — gagged-chat balance ”
KeyDefaultMeaning
gagTalkProximitytrueWhether gagged players’ garbled speech is heard by nearby players only.

Each gag material has its own subtable with two doubles: how much speech a listener can make out, and how far it carries.

FieldRangeMeaning
comprehension0.0–1.0Fraction of the message left legible (0.0 = fully garbled, 1.0 = clear).
range0.0–100.0Blocks the gagged speech reaches.

Shipped values:

MaterialcomprehensionrangeMaterialcomprehensionrange
cloth0.415.0latex0.16.0
ball0.210.0ring0.512.0
tape0.055.0bite0.310.0
stuffed0.03.0sponge0.02.0
panel0.054.0baguette0.258.0
[Gags.Properties.ball]
comprehension = 0.2
range = 10.0
KeyDefaultMeaning
damselsSpawntrueNatural Damsel spawning. (GameRule twin)
kidnappersSpawntrueNatural Kidnapper spawning — includes Elite/Archer/Merchant. (GameRule twin)
merchantHostileDuration6000 (0–72000)Ticks a Merchant stays hostile after being hit.

[NPCs.Spawning] first carries one enum key:

KeyDefaultMeaning
spawnGenderModeBOTHWhich genders spawn — BOTH / FEMALE_ONLY / MALE_ONLY.

The remaining keys are all a 0–100 percentage of the base spawn weight (GameRule twins):

KeyDefaultKeyDefault
damselSpawnRate60kidnapperEliteSpawnRate70
kidnapperSpawnRate70kidnapperMerchantSpawnRate70
kidnapperArcherSpawnRate70masterSpawnRate100

[Dialogue] — NPC dialogue broadcast ✅ Available

Section titled “[Dialogue] — NPC dialogue broadcast ”

Controls how NPC barks reach nearby players.

KeyDefaultRangeMeaning
dialogueRadius201–100Radius for NPC dialogue broadcast.
dialogueCooldown10020–1200Cooldown in ticks between same-type dialogues.
KeyDefaultRangeMeaning
merchantMinTrades / merchantMaxTrades8 / 121–20Trade-offer count band for Merchants.

[Economy.TierPrices] — prices in nuggets, each 1–640. Four tiers, min/max each:

Tiermin / maxTiermin / max
tier1Min / tier1Max9 / 18tier3Min / tier3Max54 / 90
tier2Min / tier2Max27 / 45tier4Min / tier4Max90 / 180
KeyDefaultRangeMeaning
whipDamage2.00.0–20.0Damage per whip hit.
whipResistanceDecrease150–100Resistance removed per whip hit.
ragWetTime6000100–72000Ticks before a wet (chloroform) rag dries.
chloroformEffectDuration20020–6000Ticks the knockout effect lasts.
ropeArrowBindChance500–100% chance a Rope Arrow binds its target.
archerArrowBindChanceBase100–100Archer NPC base bind chance.
archerArrowBindChancePerHit100–100Cumulative bind-chance increase per Archer hit.
shockerControllerRadius501–200Shocker controller radius. (GameRule twin)
taserStunDuration1000–600Ticks a Taser stun lasts.
lockpickSuccessChance250–100% to pick a lock (when the mini-game is off).
lockpickBreakChance150–100% the lockpick breaks on a failed pick.
lockpickJamChance2.50.0–100.0% the lock jams on a failed pick.

[Kidnapping] & the [KidnapperAdvanced] tree

Section titled “[Kidnapping] & the [KidnapperAdvanced] tree”

[Kidnapping] holds the high-level toggles:

KeyDefaultRangeMeaning
enslavementEnabledtrueboolMaster/Slave system. (GameRule twin)
forcedSeatingEnabledtruebool⚠️ Partial Written to the TOML but not yet acted on.
maxBountiesPerPlayer51–50Active bounty cap per player.
bountyDuration1440060–86400Bounty lifetime (seconds; default 4 h).
bountyDeliveryRadius51–20Delivery detection radius (blocks).
kidnapBombRadius / kidnapBombFuse5 / 801–20 / 20–600Kidnap-bomb blast (blocks) / fuse (ticks).

[KidnapperAdvanced] is a large subtree governing the AI capture loop. The grouping (each is its own TOML subtable):

SubtableNotable keys (defaults)
[KidnapperAdvanced.Lairs]⚠️ Partial enableLairs (true), lairDensity (1.0, 0.1–5.0) — written to the TOML but not yet acted on.
[KidnapperAdvanced.Capture]⚠️ Partial transportToLair (true), confiscateInventory (true) — written to the TOML but not yet acted on.
[KidnapperAdvanced.Ransom]⚠️ Partial enableRansom (true), ransomAmount (16, 1–64), ransomItem (minecraft:iron_ingot), ransomTimeoutMinutes (30, 5–120) — written to the TOML but not yet acted on.
[KidnapperAdvanced.Timeout]laborRestSeconds (120, 10–600); ⚠️ Partial maxCaptivityMinutes (45, 0–240, 0=unlimited) and releaseWithInventory (true) are written to the TOML but not yet acted on.
[KidnapperAdvanced.Struggle]⚠️ Partial struggleMakesNoise (true) — written to the TOML but not yet acted on.
[KidnapperAdvanced.AI]⚠️ Partial enablePunishment (true) — tighter binds / blindfold on recapture; written to the TOML but not yet acted on.
[KidnapperAdvanced.Abandon]abandonKeepsBlindfold (true), abandonKeepsBinds (true); ⚠️ Partial abandonTeleportRadius (1000, 100–5000) is written to the TOML but not yet acted on.
[KidnapperAdvanced.SoloMode]enableSoloFallback (true), soloKeepChance (0.6), soloAbandonChance (0.4), soloTimeoutSeconds (120, 30–600)
[KidnapperAdvanced.MasterNPC]enableMasterSpawn (true), petCollarResistance (250, 50–1000), slaveDamageMultiplier (0.25), distraction interval/duration tick bands ⚠️ Partial (the distraction interval/duration bands are written to the TOML but not yet acted on)

[Cells] ⚠️ Partial

Section titled “[Cells] ”

All four keys are written to the TOML but not yet acted on.

KeyDefaultRangeMeaning
maxWallDistance328–64Max distance from a cell centre to its wall markers.
maxPrisonersPerCell11–4Prisoner cap per cell.
deleteMarkerOnCellDeletetrueboolRemove marker blocks when a cell is deleted.
autoRemoveDestroyedWallstrueboolDrop wall references when wall blocks break.

tiedup-client.toml — per-player, local 🖥️ Client / singleplayer only

Section titled “tiedup-client.toml — per-player, local ”

These are client-only and never synced — each player tunes their own. They affect rendering, local audio, and the dynamic-texture security gate. A dedicated server’s copy is irrelevant; what matters is the file on each connecting client.

SectionKeyDefaultRangeMeaning
[Audio]earplugVolumeMultiplier0.150.0–1.0Volume while wearing earplugs (0.0 = silent).
[Visuals]blindfoldOverlayOpacity1.00.0–1.0✅ Available Alpha of the blindfold overlay — 1.0 is fully opaque, lower values let some of the world show through.
[Visuals]hardcoreBlindfoldtrueboolWhen ON, the blindfold covers everything incl. menus. OFF hides it whenever a GUI is open.
[Visuals]enablePreviewToolfalseboolShow a “RIG Previewer” button on the main menu (dev/artist tool).

[DynamicTextures] — the “clothes” URL system

Section titled “[DynamicTextures] — the “clothes” URL system”

The clothes system can load textures from a URL. The whitelist is a security control — keep it on for public servers.

KeyDefaultMeaning
enableDynamicTexturestrueMaster switch for loading clothes textures from URLs.
useTextureHostWhitelisttrueOnly allow URLs from whitelisted hosts. Leave on unless you fully trust every texture URL.
additionalWhitelistedHosts[] (list of strings)Extra allowed hosts on top of the built-in defaults (imgur, the Discord CDN, GitHub raw).
[DynamicTextures]
enableDynamicTextures = true
useTextureHostWhitelist = true
additionalWhitelistedHosts = ["cdn.example.com", "media.mysite.net"]
KeyDefaultRangeMeaning
showCellHighlightstrueboolShow cell-boundary highlights while holding the cell wand.
highlightRenderDistance328–64Max highlight render distance (blocks).
KeyDefaultMeaning
enableClothPhysicstrue🖥️ Client / singleplayer only Verlet cloth simulation for bondage items that declare a cloth block (capes, dangling straps). Client-side, players only. Turn OFF to skip all cloth sim + rendering — the go-to lever for clients with performance issues.

Bones & regions

Joint/region names used throughout item and animation JSON.

Bones & regions

Item JSON

Per-item resistance, escape difficulty and movement — the content side of the same balance the [Resistances] table backs.

Item JSON

Components

The resistance / gagging components an item carries, which these defaults back-stop.

Components

Planned / not yet

Honest list of what isn’t tunable or authorable yet.

Planned