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:
188
docs/plans/D01-branch-D-v1-cleanup.md
Normal file
188
docs/plans/D01-branch-D-v1-cleanup.md
Normal file
@@ -0,0 +1,188 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user