Skip to content

Components reference

Components live in the components{…} object of an item definition. Each one attaches a behaviour to the worn item: a lock, struggle resistance, a gag, a collar, and so on.

{
"type": "tiedup:bondage_item",
"display_name": "Ball Gag",
"model": "tiedup:models/gltf/gags/ball_gag.glb",
"regions": ["MOUTH"],
"components": {
"lockable": {},
"resistance": { "id": "gag" },
"gagging": { "material": "ball" },
"adjustable": {}
}
}
ComponentWhat it doesStatus
lockablePer-item lock resistance (worn-item lock gate is elsewhere)✅ Available
resistanceStruggle resistance from a config preset✅ Available
gaggingMuffles chat by gag material✅ Available
blindingNo-op marker; blackout comes from the EYES region❌ Planned
shockShock collar (manual + auto interval)✅ Available
gpsGPS tracking + safe zone✅ Available
chokingChoke collar (air drain)⚠️ Partial
adjustableY-offset adjustment slider✅ Available
ownershipCollar registration + owner tooltips✅ Available
built_in_lockPermanently locked, no padlock✅ Available

✅ Available

Stores a per-item lock resistance — how hard a padlock on this item is to break by struggling. Almost every shipped item declares it as an empty object and inherits the global default.

"lockable": {}
"lockable": { "lock_resistance": 300 }
  • lock_resistance (int, default 250, clamped ≥ 0) — added to the struggle cost when a padlock is attached. Shows up on the advanced (F3+H) tooltip.

✅ Available

Sets the base struggle resistance for escaping the item. The normal, shipped way is to point at a named config preset with id — the actual number is then taken from the server config at runtime, so server owners can retune it.

"resistance": { "id": "gag" }

id resolves through the server config’s bind-resistance table. Built-in preset keys you can reference:

rope chain armbinder wrap straitjacket latex_sack
ribbon vine web slime tape gag
blindfold collar

An id that doesn’t match a configured key falls back to 100 at runtime (no crash). A few item names are aliased to a shared preset (e.g. shibarirope, beam_cuffschain, leather_straps/medical_straps/dogbinderarmbinder) — reference the preset key, not the item name.


✅ Available

Muffles the wearer’s chat. The real lever is material, which selects a gag profile (comprehension + how far the muffled text carries).

"gagging": { "material": "ball" }

Valid material values (case-insensitive):

cloth ball tape stuffed panel latex
ring bite sponge baguette

An unknown material is logged with a WARN and the item falls back to default muffling (stuffed is the typical heavy gag; ball is a common medium one). The material also drives the gag tooltip line.


❌ Planned

Nominally “marks the item as a blindfold” — but the component does nothing functional. The blackout is driven entirely by the EYES body region, not by this component. You can write it as an empty marker, but it changes no behaviour:

"blinding": {}

✅ Available

Turns a collar into a shock collar. The working lever is auto_interval — the number of ticks between automatic shocks (20 ticks = 1 second). 0 (the default) means manual-only, triggered through a controller.

"shock": {}
"shock": { "auto_interval": 200 }
  • auto_interval (int, default 0, clamped ≥ 0) — 0 = manual shock only; any positive value auto-shocks on that cadence. With auto enabled, the tooltip shows the interval in seconds.

A real shock collar pairs shock with ownership so the wearer is registered and the owner can trigger it:

"components": {
"ownership": {},
"lockable": {},
"resistance": { "id": "collar" },
"shock": { "auto_interval": 200 }
}

✅ Available

Tracks the wearer and defines a safe zone.

"gps": { "safe_zone_radius": 50 }
  • safe_zone_radius (int, default 50, clamped ≥ 0) — radius in blocks. 0 = tracking only, no safe zone. This value works (it drives the safe-zone / GPS-shock logic) and adds a tooltip line.

⚠️ Partial

Turns a collar into a choke collar that drains air. Present it as an empty marker:

"choking": {}

✅ Available

Lets the wearer (or owner) nudge the item’s vertical position with an in-GUI slider — useful for gags and blindfolds that need to sit a little higher or lower per body shape.

"adjustable": {}
"adjustable": { "default": 0.5 }
  • default (float) — the starting Y-offset used as the fallback before the player adjusts it. Clamped into the working slider range.

✅ Available

Marks the item as a collar with an owner. This is a real, non-trivial component (omitted from older guides) used by the five shipped collars. On equip it registers the wearer in the collar registry against the NBT owner list; on removal it fires the owner-alert / unregister flow. It also drives the nickname and owner-count tooltip lines.

"ownership": {}

It takes no config — just the empty marker. Combine it with the collar capability components:

"components": {
"ownership": {},
"lockable": {},
"resistance": { "id": "collar" },
"gps": { "safe_zone_radius": 50 }
}

✅ Available

The “permanently locked, no padlock” mechanic for organic restraints — slime, vine, web, tape. Used by eight shipped items. While worn, the item always blocks unequip (it behaves as if locked), and a padlock cannot be attached to it.

"built_in_lock": {}

It takes no config. A built_in_lock item should declare "can_attach_padlock": false to match its behaviour, and typically omits the lockable component (there is no padlock to resist):

{
"type": "tiedup:bondage_item",
"display_name": "Web Bind",
"model": "tiedup:models/gltf/binds/web_bind.glb",
"regions": ["ARMS"],
"can_attach_padlock": false,
"components": {
"resistance": { "id": "web" },
"built_in_lock": {}
}
}

A gag

gagging (material) + resistance (id: "gag") + adjustable, plus lockable if it can be padlocked.

A collar

ownership + resistance (id: "collar") + a capability: shock, gps, or choking.

An organic bind

resistance + built_in_lock, with can_attach_padlock: false. No lockable.

A blindfold

regions: ["EYES"] does the blackout; add blinding as a marker, adjustable to fine-tune fit.

For the surrounding item fields (regions, pose_priority, can_attach_padlock, icon, animations…) see The item JSON.