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.
6.9 KiB
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-cleanupObjectif : Supprimer toutes les classes V1 bondage. MigrerequipInRegion()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.javaitems/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.javaitems/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 systemitems/base/KnifeVariant.java— utilisé par GenericKnife (tool)items/base/AdjustmentHelper.java— utilisé par adjustment packetsitems/GenericKnife.java— tool, pas bondageitems/clothes/GenericClothes.java— déjà V2items/clothes/ClothesProperties.javaitems/ModItems.java— garde les tools, supprime les bondageitems/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 :
BINDSmap +registerAllBinds()GAGSmap +registerAllGags()BLINDFOLDSmap +registerAllBlindfolds()EARPLUGSmap +registerAllEarplugs()MITTENSmap +registerAllMittens()BALL_GAG_3D,MEDICAL_GAG,HOODCLASSIC_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 :
// 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.
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 errorsmake run— le mod démarre, les items apparaissent dans le creative tabgrep -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