# D-01 Branch D : V1 Cleanup > **Prérequis :** Branch A + B + C mergées. Zero références V1 hors du package `items/`. > **Branche :** `feature/d01-branch-d-cleanup` > **Objectif :** Supprimer toutes les classes V1 bondage. Migrer `equipInRegion()` vers le flow V2 complet. Réécrire le creative tab. À la fin, zéro classe V1 bondage dans le mod. --- ## Décisions - **Save compat :** Breaking change. Les items V1 dans les inventaires existants seront perdus. Mod en alpha. - **Pas de MissingMappingsEvent.** Simplement supprimer les registrations. --- ## Tâches ### D1. Migrer equipInRegion() → V2EquipmentHelper.equipItem() **Fichier :** `src/main/java/com/tiedup/remake/state/components/PlayerEquipment.java` Maintenant que tous les items sont `DataDrivenBondageItem` (qui implémente `IV2BondageItem`), le bypass direct `setInRegion()` n'est plus nécessaire. Remplacer `equipInRegion()` par un appel à `V2EquipmentHelper.equipItem()` qui fait la conflict resolution complète (swap, supersede, blocked regions). Vérifier que les méthodes `putBindOn()`, `putGagOn()`, `putCollarOn()`, etc. fonctionnent toujours via le nouveau path. --- ### D2. Supprimer les classes V1 (~30 fichiers) **À supprimer :** Abstract bases : - `items/base/ItemBind.java` (637 lignes) - `items/base/ItemGag.java` (93 lignes) - `items/base/ItemBlindfold.java` (89 lignes) - `items/base/ItemCollar.java` (1407 lignes) - `items/base/ItemEarplugs.java` (90 lignes) - `items/base/ItemMittens.java` (72 lignes) Interfaces V1-only : - `items/base/IBondageItem.java` (102 lignes) - `items/base/IHasGaggingEffect.java` (33 lignes) - `items/base/IHasBlindingEffect.java` (33 lignes) - `items/base/IAdjustable.java` (49 lignes) - `items/base/ItemOwnerTarget.java` - `items/base/ItemColor.java` Variant enums : - `items/base/BindVariant.java` (90 lignes) - `items/base/GagVariant.java` (163 lignes) - `items/base/BlindfoldVariant.java` (48 lignes) - `items/base/EarplugsVariant.java` (33 lignes) - `items/base/MittensVariant.java` (35 lignes) Factory classes : - `items/GenericBind.java` (68 lignes) - `items/GenericGag.java` (72 lignes) - `items/GenericBlindfold.java` (37 lignes) - `items/GenericEarplugs.java` (37 lignes) - `items/GenericMittens.java` (37 lignes) Collars : - `items/ItemClassicCollar.java` (21 lignes) - `items/ItemShockCollar.java` (133 lignes) - `items/ItemShockCollarAuto.java` (58 lignes) - `items/ItemGpsCollar.java` (369 lignes) - `items/ItemChokeCollar.java` (154 lignes) Combos : - `items/ItemHood.java` (35 lignes) - `items/ItemMedicalGag.java` (24 lignes) - `items/bondage3d/gags/ItemBallGag3D.java` (78 lignes) - `items/bondage3d/IHas3DModelConfig.java` - `items/bondage3d/Model3DConfig.java` **À CONSERVER :** - `items/base/ILockable.java` — utilisé par V2 (AbstractV2BondageItem) - `items/base/IHasResistance.java` — utilisé par V2 (DataDrivenBondageItem) - `items/base/IKnife.java` — utilisé par GenericKnife (tool) - `items/base/PoseType.java` — utilisé par animation system - `items/base/KnifeVariant.java` — utilisé par GenericKnife (tool) - `items/base/AdjustmentHelper.java` — utilisé par adjustment packets - `items/GenericKnife.java` — tool, pas bondage - `items/clothes/GenericClothes.java` — déjà V2 - `items/clothes/ClothesProperties.java` - `items/ModItems.java` — garde les tools, supprime les bondage - `items/ModCreativeTabs.java` — réécrit (voir D3) - Tous les tool items (whip, padlock, key, lockpick, taser, etc.) --- ### D3. Réécrire ModItems — retirer les registrations V1 **Fichier :** `src/main/java/com/tiedup/remake/items/ModItems.java` Supprimer : - `BINDS` map + `registerAllBinds()` - `GAGS` map + `registerAllGags()` - `BLINDFOLDS` map + `registerAllBlindfolds()` - `EARPLUGS` map + `registerAllEarplugs()` - `MITTENS` map + `registerAllMittens()` - `BALL_GAG_3D`, `MEDICAL_GAG`, `HOOD` - `CLASSIC_COLLAR`, `SHOCK_COLLAR`, `SHOCK_COLLAR_AUTO`, `GPS_COLLAR`, `CHOKE_COLLAR` - Les helper accessors `getBind()`, `getGag()`, etc. Garder : CLOTHES, tous les tools (WHIP, PADLOCK, KEY, etc.), KNIVES, spawn eggs. --- ### D4. Réécrire ModCreativeTabs **Fichier :** `src/main/java/com/tiedup/remake/items/ModCreativeTabs.java` Remplacer l'itération par variant enums par : ```java // Data-driven bondage items for (DataDrivenItemDefinition def : DataDrivenItemRegistry.getAll()) { output.accept(DataDrivenBondageItem.createStack(def.id())); } ``` Pour l'ordre : ajouter un champ optionnel `"creative_tab_order"` aux definitions JSON, ou trier par catégorie (regions) puis par nom. Pour les couleurs : si l'item a `supports_color`, ajouter les variantes colorées. Utiliser `tint_channels` du definition. --- ### D5. Cleanup PoseTypeHelper — retirer le fallback V1 **Fichier :** `src/main/java/com/tiedup/remake/v2/bondage/PoseTypeHelper.java` Supprimer le fallback `instanceof ItemBind` dans `getPoseType()`. Ne garder que le path data-driven. --- ### D6. Cleanup CollarHelper — retirer les fallbacks V1 **Fichier :** `src/main/java/com/tiedup/remake/v2/bondage/CollarHelper.java` Les méthodes comme `isCollar(stack)` checkent `instanceof ItemCollar` en fallback V1. Retirer ces checks. --- ### D7. Cleanup BindModeHelper — retirer le fallback V1 Idem — retirer `instanceof ItemBind` fallback dans `isBindItem()`. --- ### D8. Cleanup imports orphelins Faire un pass sur tout le projet pour retirer les imports V1 orphelins. ```bash grep -rn "import com.tiedup.remake.items.base.ItemBind" src/ --include="*.java" grep -rn "import com.tiedup.remake.items.base.ItemCollar" src/ --include="*.java" grep -rn "import com.tiedup.remake.items.base.IBondageItem" src/ --include="*.java" # etc. — tout doit retourner 0 ``` --- ## Vérification finale - [ ] `make build` — clean, zero errors - [ ] `make run` — le mod démarre, les items apparaissent dans le creative tab - [ ] `grep -r "items.base.ItemBind\|items.base.ItemGag\|items.base.ItemCollar\|items.base.ItemBlindfold\|items.base.ItemEarplugs\|items.base.ItemMittens\|items.base.IBondageItem\|BindVariant\|GagVariant\|BlindfoldVariant\|EarplugsVariant\|MittensVariant" src/main/java/ --include="*.java"` → **0 résultats** - [ ] Les items data-driven s'équipent/se déséquipent correctement - [ ] Le struggle fonctionne (binds + collars) - [ ] Le self-bondage fonctionne (routing par région) - [ ] Les collars gardent leur ownership/shock/GPS après equip/unequip - [ ] Les tooltips affichent toutes les infos composants - [ ] `equipInRegion()` utilise V2EquipmentManager (conflict resolution active) - [ ] MCP reindex final --- ## Résultat attendu - **~6500 lignes de code V1 supprimées** - **46 items = 46 fichiers JSON** (data-driven, extensible par resource packs) - **1 seul Item singleton** (`DataDrivenBondageItem`) - **8 composants** gèrent toute la logique gameplay - **3 helpers** (`BindModeHelper`, `PoseTypeHelper`, `CollarHelper`) remplacent les anciennes classes - **Zero couplage V1** dans le reste du mod