Files
TiedUp-/docs/plans/D01-branch-D-v1-cleanup.md
NotEvil 099cd0d984 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.
2026-04-15 01:55:16 +02:00

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-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 :

// 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 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