diff --git a/src/main/java/com/tiedup/remake/rig/patch/PlayerPatch.java b/src/main/java/com/tiedup/remake/rig/patch/PlayerPatch.java index 38fbded..ef6f4ab 100644 --- a/src/main/java/com/tiedup/remake/rig/patch/PlayerPatch.java +++ b/src/main/java/com/tiedup/remake/rig/patch/PlayerPatch.java @@ -90,9 +90,12 @@ public abstract class PlayerPatch extends LivingEntityPatch *
  • walk seul → {@link LivingMotions#WALK}
  • * * - *
  • Défaut (idle) → {@link LivingMotions#IDLE} vanilla — les items - * bondage bindent leurs poses spécifiques ailleurs (Option B du - * design doc, §5.1 BONDAGE_ANIMATION_DESIGN.md).
  • + *
  • Défaut (idle) → {@link LivingMotions#IDLE} vanilla. Les items + * bondage peuvent binder IDLE via deux paths : + * BASE layer override (écrase vanilla IDLE dans {@code livingAnimations}) + * ou COMPOSITE overlay avec JointMask (vanilla IDLE joue sur le corps, + * overlay masque seulement certains joints). Voir §5.1 + * BONDAGE_ANIMATION_DESIGN.md.
  • * * *

    Pattern EF : {@code EntityState.inaction()} gate la transition diff --git a/src/main/java/com/tiedup/remake/v2/bondage/datadriven/DataDrivenItemParser.java b/src/main/java/com/tiedup/remake/v2/bondage/datadriven/DataDrivenItemParser.java index 5a219ff..bdf4595 100644 --- a/src/main/java/com/tiedup/remake/v2/bondage/datadriven/DataDrivenItemParser.java +++ b/src/main/java/com/tiedup/remake/v2/bondage/datadriven/DataDrivenItemParser.java @@ -717,24 +717,16 @@ public final class DataDrivenItemParser { ); continue; } - // P3 Wave α — Option B convention warn : binding IDLE fonctionne - // techniquement mais écrase silencieusement le default EF re-injecté - // par ClientAnimator.resetLivingAnimations() post-rebuild. Design - // BONDAGE_ANIMATION_DESIGN.md §5.1 recommande d'utiliser des motions - // custom (POSE_KNEEL_BOUND / STRUGGLE_BOUND / WALK_BOUND) plutôt que - // d'écraser IDLE. On accepte le binding quand même (rétrocompat + - // cas légitimes rares), juste on pointe le modder vers la convention. - if (motion == LivingMotions.IDLE) { - LOGGER.warn( - "[DataDrivenItemParser] Item {} binds IDLE motion. Convention design Option B " - + "(BONDAGE_ANIMATION_DESIGN.md §5.1) recommends not binding IDLE — " - + "ClientAnimator.resetLivingAnimations() restores default EF IDLE after " - + "rebuild, so binding IDLE overwrites the default silently. Prefer custom " - + "motions like POSE_KNEEL_BOUND / STRUGGLE_BOUND / WALK_BOUND. The binding " - + "will still work but may cause surprises.", - itemId - ); - } + // IDLE bindings are first-class citizens (user decision 2026-04-24). + // Two paths supported natively by EF's 2-map ClientAnimator structure : + // - BASE layer override : anim LayerType=BASE_LAYER → written into + // livingAnimations, overrides vanilla IDLE after reset (last-put-wins). + // Use case : armbinder forcing "arms behind back" full-body pose. + // - COMPOSITE overlay : anim LayerType=COMPOSITE_LAYER + JointMask → + // written into compositeLivingAnimations (separate map). Vanilla IDLE + // still plays on base body, overlay masks specified joints only. + // Use case : cuffs posing only the arms while rest stays vanilla. + // No WARN — the parser accepts IDLE bindings without any log noise. ResourceLocation animId = tryParseAnimationRL( entry.getValue(), "living_motions['" + motionName + "']", diff --git a/src/main/java/com/tiedup/remake/v2/client/ClientRigEquipmentHandler.java b/src/main/java/com/tiedup/remake/v2/client/ClientRigEquipmentHandler.java index bbaa14b..79f899c 100644 --- a/src/main/java/com/tiedup/remake/v2/client/ClientRigEquipmentHandler.java +++ b/src/main/java/com/tiedup/remake/v2/client/ClientRigEquipmentHandler.java @@ -85,11 +85,24 @@ import com.tiedup.remake.v2.bondage.datadriven.DataDrivenItemRegistry; * *

    Préconditions

    *