Files
TiedUp-/docs/plans/D01-branch-B-json-definitions.md
NotEvil 2504b7d657 feat(D-01/D): V1 cleanup — delete 28 files, ~5400 lines removed
D1: ThreadLocal alert suppression moved from ItemCollar to CollarHelper.
    onCollarRemoved() logic (kidnapper alert) moved to CollarHelper.

D2+D3: Deleted 17 V1 item classes + 4 V1-only interfaces:
  ItemBind, ItemGag, ItemBlindfold, ItemCollar, ItemEarplugs, ItemMittens,
  ItemColor, ItemClassicCollar, ItemShockCollar, ItemShockCollarAuto,
  ItemGpsCollar, ItemChokeCollar, ItemHood, ItemMedicalGag,
  IBondageItem, IHasGaggingEffect, IHasBlindingEffect, IAdjustable

D4: KidnapperTheme/KidnapperItemSelector/DispenserBehaviors migrated
    from variant enums to string-based DataDrivenItemRegistry IDs.

D5: Deleted 11 variant enums + Generic* factories + ItemBallGag3D:
  BindVariant, GagVariant, BlindfoldVariant, EarplugsVariant, MittensVariant,
  GenericBind, GenericGag, GenericBlindfold, GenericEarplugs, GenericMittens

D6: ModItems cleaned — all V1 bondage registrations removed.
D7: ModCreativeTabs rewritten — iterates DataDrivenItemRegistry.
D8+D9: All V2 helpers cleaned (V1 fallbacks removed), orphan imports removed.

Zero V1 bondage code references remain (only Javadoc comments).
All bondage items are now data-driven via 47 JSON definitions.
2026-04-15 01:55:16 +02:00

5.8 KiB

D-01 Branch B : 46 JSON Item Definitions

Prérequis : Branch A (bridge utilities) mergée. Branche : feature/d01-branch-b-definitions Objectif : Créer les définitions JSON data-driven pour les 46 items V1. Chaque item V1 a un équivalent JSON. Les valeurs sont config-driven (pas hardcodées). À la fin, les 46 items V2 existent en parallèle des V1.


Extensions parser nécessaires

Avant de créer les JSON, vérifier que le parser supporte :

  • pose_type (string, optionnel) — ajouté en Branch A4
  • can_attach_padlock (boolean, default true) — à ajouter si pas fait en A
  • GaggingComponent material — ajouté en Branch A2
  • ResistanceComponent id — ajouté en Branch A1

Fichiers : DataDrivenItemParser.java, DataDrivenItemDefinition.java


Items à créer

Tous dans src/main/resources/data/tiedup/tiedup_items/.

Binds (16 fichiers)

Fichier display_name resistance id pose_type Notes
ropes.json Ropes rope STANDARD supports_color: true
armbinder.json Armbinder armbinder STANDARD
dogbinder.json Dogbinder armbinder DOG movement_style: crawl
chain.json Chains chain STANDARD
ribbon.json Ribbon ribbon STANDARD supports_color: true
slime.json Slime Bind slime STANDARD can_attach_padlock: false
vine_seed.json Vine Bind vine STANDARD can_attach_padlock: false
web_bind.json Web Bind web STANDARD can_attach_padlock: false
shibari.json Shibari rope STANDARD supports_color: true
leather_straps.json Leather Straps armbinder STANDARD
medical_straps.json Medical Straps armbinder STANDARD
beam_cuffs.json Beam Cuffs chain STANDARD
duct_tape.json Duct Tape tape STANDARD can_attach_padlock: false
straitjacket.json Straitjacket straitjacket STRAITJACKET
wrap.json Wrap wrap WRAP
latex_sack.json Latex Sack latex_sack LATEX_SACK

Tous ont : regions ["ARMS"], lockable component (sauf organiques), resistance component avec id.

Référence : BindVariant.java pour les registry names, pose types, supports_color. ModConfig.ServerConfig pour les resistance IDs (lignes 413-428).

Gags (19 fichiers)

Fichier display_name gag material Notes
cloth_gag.json Cloth Gag cloth
ropes_gag.json Rope Gag cloth
cleave_gag.json Cleave Gag cloth
ribbon_gag.json Ribbon Gag cloth supports_color: true
ball_gag.json Ball Gag ball supports_color: true
ball_gag_strap.json Ball Gag (Strap) ball
tape_gag.json Tape Gag tape can_attach_padlock: false
wrap_gag.json Wrap Gag tape
slime_gag.json Slime Gag tape can_attach_padlock: false
vine_gag.json Vine Gag tape can_attach_padlock: false
web_gag.json Web Gag tape can_attach_padlock: false
panel_gag.json Panel Gag panel
beam_panel_gag.json Beam Panel Gag panel
chain_panel_gag.json Chain Panel Gag panel
latex_gag.json Latex Gag latex
tube_gag.json Tube Gag stuffed
bite_gag.json Bite Gag bite
sponge_gag.json Sponge Gag sponge
baguette_gag.json Baguette Gag baguette

Tous ont : regions ["MOUTH"], gagging component avec material, lockable, resistance {"id": "gag"}, adjustable.

Référence : GagVariant.java pour les materials et registry names. ModConfig.ServerConfig.gagComprehension/gagRange pour les valeurs runtime.

Blindfolds (2 fichiers)

Fichier display_name
classic_blindfold.json Blindfold
blindfold_mask.json Blindfold Mask

Regions ["EYES"], components : blinding, lockable, resistance {"id": "blindfold"}, adjustable.

Earplugs (1 fichier)

classic_earplugs.json — regions ["EARS"], lockable, resistance {"id": "blindfold"} (partage la résistance blindfold dans V1).

Mittens (1 fichier)

leather_mittens.json — regions ["HANDS"], lockable.

Collars (5 fichiers)

Fichier display_name Components spécifiques
classic_collar.json Classic Collar ownership, lockable, resistance {"id": "collar"}
shock_collar.json Shock Collar + shock {"damage": 2.0}
shock_collar_auto.json Auto Shock Collar + shock {"damage": 2.0, "auto_interval": 200}
gps_collar.json GPS Collar + gps {"safe_zone_radius": 50}
choke_collar.json Choke Collar + choking

Combos (3 fichiers)

Fichier display_name Regions Components
hood.json Hood ["EYES"] blinding, gagging {"material": "cloth"}, lockable, blocked_regions: ["EYES", "EARS"]
medical_gag.json Medical Gag ["MOUTH"] gagging {"material": "stuffed"}, blinding, lockable
ball_gag_3d.json Ball Gag 3D ["MOUTH"] gagging {"material": "ball"}, lockable, adjustable. Model 3D spécifique.

Supprimer le fichier test

Supprimer src/main/resources/data/tiedup/tiedup_items/test_component_gag.json (fichier de test Phase 1, plus nécessaire).


Vérification

  • make build — clean
  • make run — les 46 items data-driven apparaissent (via /tiedup give ou creative tab section data-driven)
  • Résistance = valeur config (changer dans config, vérifier que la résistance change)
  • Gag comprehension = valeur config (changer dans config, vérifier)
  • Collars ownership fonctionne via le nouveau OwnershipComponent
  • Items organiques (slime, vine, web, tape) ne peuvent pas recevoir de padlock