fix(P1+P2): swarm review — UX fixes + V1 dead code cleanup
P1 — UX visible: - Add 4 missing translations (leather_mittens, ball_gag_3d, taser, debug_wand) - Fix earplugs resistance bucket: "blindfold" → "earplug" - Split mixin config: core (require=1) + compat MCA (require=0) - Bump PROTOCOL_VERSION from "1" to "2" - Add debug_wand item model (no texture — debug only) - Fix 3 display_name inconsistencies (chain, vine_seed, shock_collar_auto) P2 — Dead code cleanup: - Delete IHas3DModelConfig + Model3DConfig (zero imports) - Remove MovementStyleResolver.resolveV1Fallback() + V1Fallback record + V1 constants - Remove AnimationTickHandler V1 fallback block + buildAnimationId() - Document PlayerEquipment.equipInRegion() bypass as intentional (force-equip paths)
This commit is contained in:
@@ -424,7 +424,14 @@ public class PlayerEquipment {
|
||||
|
||||
/**
|
||||
* Low-level equip: writes to V2 capability, calls IBondageItem lifecycle hooks, syncs.
|
||||
* Uses setInRegion directly because V1 items do not implement IV2BondageItem.
|
||||
*
|
||||
* <p>INTENTIONALLY bypasses V2EquipmentManager.tryEquip() because:
|
||||
* <ul>
|
||||
* <li>V1 items (IBondageItem) do not implement IV2BondageItem, so tryEquip() rejects them</li>
|
||||
* <li>All callers (commands, NPC AI, NBT restore) are force-equip paths that should not
|
||||
* be subject to V2 conflict resolution (SMELL-003 reviewed — bypass is by design)</li>
|
||||
* </ul>
|
||||
* <p>Basic safety (isRegionOccupied, canEquip) is still checked here.</p>
|
||||
*/
|
||||
private void equipInRegion(BodyRegionV2 region, ItemStack stack) {
|
||||
Player player = host.getPlayer();
|
||||
|
||||
Reference in New Issue
Block a user