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.
This commit is contained in:
128
docs/plans/D01-branch-B-json-definitions.md
Normal file
128
docs/plans/D01-branch-B-json-definitions.md
Normal file
@@ -0,0 +1,128 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user