# 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