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.
6.4 KiB
D-01 Branch C : Consumer Migration (~97 fichiers)
Prérequis : Branch A + B mergées. Branche :
feature/d01-branch-c-migrationObjectif : 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 ItemCollar → CollarHelper, instanceof ItemBind → BindModeHelper |
state/PlayerCaptorManager.java |
instanceof ItemCollar → CollarHelper.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 ItemCollar → CollarHelper.getNickname() |
state/components/PlayerLifecycle.java |
imports V1 → V2 helpers |
state/components/PlayerShockCollar.java |
instanceof ItemShockCollar → CollarHelper.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 ItemBind → PoseTypeHelper.getPoseType() + BindModeHelper |
client/animation/tick/NpcAnimationTickHandler.java |
Idem |
client/animation/render/PlayerArmHideEventHandler.java |
instanceof ItemBind → PoseTypeHelper |
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 ItemBind → PoseTypeHelper |
mixin/client/MixinCamera.java |
Idem |
mixin/client/MixinVillagerEntityBaseModelMCA.java |
Idem |
Phase 3 : Entity AI goals (15 fichiers)
Principalement instanceof ItemBind → BindModeHelper, ModItems.getBind(variant) → createStack(rl), instanceof ItemCollar → CollarHelper.
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. BindVariant → createStack(). 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 ItemCollar → CollarHelper.
Phase 9 : Autres (10 fichiers)
Dialogue (GagTalkManager, PetRequestManager), worldgen (HangingCagePiece), util (RestraintApplicator), blocks (BondageItemBlockEntity), dispenser, creative tab.
Vérification
make build— cleangrep -r "instanceof ItemBind\b" src/ --include="*.java" | grep -v "items/"→ 0 résultatsgrep -r "instanceof ItemGag\b" src/ --include="*.java" | grep -v "items/"→ 0 résultatsgrep -r "instanceof ItemCollar\b" src/ --include="*.java" | grep -v "items/"→ 0 résultatsgrep -r "BindVariant\b" src/ --include="*.java" | grep -v "items/"→ 0 résultatsgrep -r "GagVariant\b" src/ --include="*.java" | grep -v "items/"→ 0 résultatsmake run— le mod fonctionne normalement