feat(D-01/C): consumer migration — 85 files migrated to V2 helpers
Phase 1 (state): PlayerBindState, PlayerCaptorManager, PlayerEquipment, PlayerDataRetrieval, PlayerLifecycle, PlayerShockCollar, StruggleAccessory Phase 2 (client): AnimationTickHandler, NpcAnimationTickHandler, 5 render handlers, DamselModel, 3 client mixins, SelfBondageInputHandler, SlaveManagementScreen, ActionPanel, SlaveEntryWidget, ModKeybindings Phase 3 (entities): 28 entity/AI files migrated to CollarHelper, BindModeHelper, PoseTypeHelper, createStack() Phase 4 (network): PacketSlaveAction, PacketMasterEquip, PacketAssignCellToCollar, PacketNpcCommand, PacketFurnitureForcemount Phase 5 (events): RestraintTaskTickHandler, PetPlayRestrictionHandler, PlayerEnslavementHandler, ChatEventHandler, LaborAttackPunishmentHandler Phase 6 (commands): BondageSubCommand, CollarCommand, NPCCommand, KidnapSetCommand Phase 7 (compat): MCAKidnappedAdapter, MCA mixins Phase 8 (misc): GagTalkManager, PetRequestManager, HangingCagePiece, BondageItemBlockEntity, TrappedChestBlockEntity, DispenserBehaviors, BondageItemLoaderUtility, RestraintApplicator, StruggleSessionManager, MovementStyleResolver, CampLifecycleManager Some files retain dual V1/V2 checks (instanceof V1 || V2Helper) for coexistence — V1-only branches removed in Branch D.
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