Files
TiedUp-/docs/plans/D01-branch-C-consumer-migration.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.4 KiB

D-01 Branch C : Consumer Migration (~97 fichiers)

Prérequis : Branch A + B mergées. Branche : feature/d01-branch-c-migration Objectif : Remplacer TOUTES les références V1 (instanceof ItemBind, ItemCollar.isOwner(), BindVariant.ROPES, etc.) par les helpers/composants V2. Les classes V1 existent encore mais ne sont plus référencées. À la fin, grep -r "instanceof ItemBind\|instanceof ItemGag\|instanceof ItemCollar\|instanceof ItemBlindfold\|instanceof ItemEarplugs\|instanceof ItemMittens\|BindVariant\|GagVariant" src/ retourne ZÉRO résultats (hors items/ lui-même).


Pattern migration

V1 V2 Notes
instanceof ItemBind BindModeHelper.isBindItem(stack) Ou instanceof IV2BondageItem si on a juste besoin de savoir que c'est un bondage item
ItemBind.hasArmsBound(stack) BindModeHelper.hasArmsBound(stack) Mêmes NBT keys
ItemBind.hasLegsBound(stack) BindModeHelper.hasLegsBound(stack)
ItemBind.getBindModeId(stack) BindModeHelper.getBindModeId(stack)
itemBind.getPoseType() PoseTypeHelper.getPoseType(stack)
BindVariant.ROPES / ModItems.getBind(variant) DataDrivenBondageItem.createStack(rl("tiedup:ropes")) LAZY ! Ne pas appeler dans des static initializers
instanceof ItemCollar + methods CollarHelper.isCollar(stack) + CollarHelper.method(stack)
instanceof ItemShockCollar CollarHelper.canShock(stack)
instanceof ItemGpsCollar CollarHelper.hasGPS(stack)
instanceof ItemChokeCollar CollarHelper.isChokeCollar(stack)
instanceof IHasGaggingEffect DataDrivenBondageItem.getComponent(stack, GAGGING, GaggingComponent.class) != null Pour V2 items. V1 items gardent l'interface pendant la transition.
instanceof IHasBlindingEffect DataDrivenBondageItem.getComponent(stack, BLINDING, BlindingComponent.class) != null Idem
instanceof ItemGag + getGagMaterial() GaggingComponent comp = getComponent(stack, GAGGING, ...) + comp.getMaterial()
PoseType enum direct Inchangé — l'enum est conservé
IHasResistance methods Inchangé — l'interface est conservée
ILockable methods Inchangé — l'interface est conservée

Ordre de migration (critique d'abord)

Phase 1 : State core (12 fichiers)

Ces fichiers sont la fondation — les migrer d'abord assure que le reste fonctionne.

Fichier Changements
state/IBondageState.java hasArmsBound()/hasLegsBound()BindModeHelper
state/PlayerBindState.java instanceof ItemCollarCollarHelper, instanceof ItemBindBindModeHelper
state/PlayerCaptorManager.java instanceof ItemCollarCollarHelper.isCollar() + CollarHelper.getOwners()
state/HumanChairHelper.java PoseType import OK (conservé)
state/components/PlayerEquipment.java Garder equipInRegion() V1 fallback (migre en Branch D). Remplacer instanceof ItemBind/ItemCollar dans resistance methods.
state/components/PlayerDataRetrieval.java instanceof ItemCollarCollarHelper.getNickname()
state/components/PlayerLifecycle.java imports V1 → V2 helpers
state/components/PlayerShockCollar.java instanceof ItemShockCollarCollarHelper.canShock()
state/struggle/StruggleBinds.java Déjà migré en Branch A9 — vérifier
state/struggle/StruggleCollar.java Déjà migré en Branch A9 — vérifier
state/struggle/StruggleAccessory.java Vérifier

Phase 2 : Client animation/render (12 fichiers)

Fichier Changements
client/animation/tick/AnimationTickHandler.java instanceof ItemBindPoseTypeHelper.getPoseType() + BindModeHelper
client/animation/tick/NpcAnimationTickHandler.java Idem
client/animation/render/PlayerArmHideEventHandler.java instanceof ItemBindPoseTypeHelper
client/animation/render/DogPoseRenderHandler.java Idem
client/animation/render/PetBedRenderHandler.java Idem
client/animation/util/AnimationIdBuilder.java PoseType import OK (conservé)
client/animation/StaticPoseApplier.java PoseType import OK
client/model/DamselModel.java PoseType + instanceof ItemBind → helpers
client/FirstPersonMittensRenderer.java BindVariant.ROPES → lazy createStack
mixin/client/MixinPlayerModel.java instanceof ItemBindPoseTypeHelper
mixin/client/MixinCamera.java Idem
mixin/client/MixinVillagerEntityBaseModelMCA.java Idem

Phase 3 : Entity AI goals (15 fichiers)

Principalement instanceof ItemBindBindModeHelper, ModItems.getBind(variant)createStack(rl), instanceof ItemCollarCollarHelper.

Phase 4 : Network packets (14 fichiers)

PacketSelfBondage déjà migré en A11. Reste : PacketSlaveAction, PacketMasterEquip, PacketAssignCellToCollar, PacketNpcCommand, etc. → CollarHelper.

Phase 5 : Events (8 fichiers)

BondageItemRestrictionHandler, RestraintTaskTickHandler, PlayerEnslavementHandler, ChatEventHandler, etc.

Phase 6 : Commands (6 fichiers)

BondageSubCommand (1232 lignes) — le plus gros. BindVariantcreateStack(). NPCCommand, CollarCommand, KidnapSetCommand.

Phase 7 : Entity classes (15 fichiers)

EntityKidnapper, KidnapperCaptureEquipment, KidnapperTheme, KidnapperItemSelector, KidnapperCollarConfig, etc.

Phase 8 : Compat MCA (5 fichiers)

MCAKidnappedAdapter (907 lignes) — instanceof IHasGaggingEffect/IHasBlindingEffect → component checks. instanceof ItemCollarCollarHelper.

Phase 9 : Autres (10 fichiers)

Dialogue (GagTalkManager, PetRequestManager), worldgen (HangingCagePiece), util (RestraintApplicator), blocks (BondageItemBlockEntity), dispenser, creative tab.


Vérification

  • make build — clean
  • grep -r "instanceof ItemBind\b" src/ --include="*.java" | grep -v "items/" → 0 résultats
  • grep -r "instanceof ItemGag\b" src/ --include="*.java" | grep -v "items/" → 0 résultats
  • grep -r "instanceof ItemCollar\b" src/ --include="*.java" | grep -v "items/" → 0 résultats
  • grep -r "BindVariant\b" src/ --include="*.java" | grep -v "items/" → 0 résultats
  • grep -r "GagVariant\b" src/ --include="*.java" | grep -v "items/" → 0 résultats
  • make run — le mod fonctionne normalement