diff --git a/src/main/java/eu/midnightdust/swordblocking/ducks/ArmedItemStackData.java b/src/main/java/eu/midnightdust/swordblocking/ducks/ArmedItemStackData.java index 17e71ec..09e3dcf 100644 --- a/src/main/java/eu/midnightdust/swordblocking/ducks/ArmedItemStackData.java +++ b/src/main/java/eu/midnightdust/swordblocking/ducks/ArmedItemStackData.java @@ -6,5 +6,11 @@ import net.minecraft.world.item.ItemStack; public interface ArmedItemStackData { ItemStack swordblocking$getItemHeldByArm(HumanoidArm humanoidArm); - void swordblocking$setItemHeldByArm(HumanoidArm arm, ItemStack itemStack); + ItemStack swordblocking$getOffHandItem(); + + void swordblocking$setOffHandItem(ItemStack stack); + + ItemStack swordblocking$getMainHandItem(); + + void swordblocking$setMainHandItem(ItemStack stack); } diff --git a/src/main/java/eu/midnightdust/swordblocking/mixins/MixinArmedEntityRenderState.java b/src/main/java/eu/midnightdust/swordblocking/mixins/MixinArmedEntityRenderState.java index 7f1b8c9..020086d 100644 --- a/src/main/java/eu/midnightdust/swordblocking/mixins/MixinArmedEntityRenderState.java +++ b/src/main/java/eu/midnightdust/swordblocking/mixins/MixinArmedEntityRenderState.java @@ -15,37 +15,46 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ArmedEntityRenderState.class) public abstract class MixinArmedEntityRenderState implements ArmedItemStackData { @Unique - private ItemStack swordblocking$leftStack = ItemStack.EMPTY; + private ItemStack swordblocking$offHandStack = ItemStack.EMPTY; @Unique - private ItemStack swordblocking$rightStack = ItemStack.EMPTY; + private ItemStack swordblocking$mainHandStack = ItemStack.EMPTY; @Inject(method = "extractArmedEntityRenderState", at = @At("TAIL")) private static void swordBlocking$storeRequiredData(LivingEntity livingEntity, ArmedEntityRenderState armedEntityRenderState, ItemModelResolver itemModelResolver, CallbackInfo ci) { ArmedItemStackData armedItemStackData = (ArmedItemStackData) armedEntityRenderState; - armedItemStackData.swordblocking$setItemHeldByArm(HumanoidArm.LEFT, livingEntity.getItemHeldByArm(HumanoidArm.LEFT)); - armedItemStackData.swordblocking$setItemHeldByArm(HumanoidArm.RIGHT, livingEntity.getItemHeldByArm(HumanoidArm.RIGHT)); + armedItemStackData.swordblocking$setOffHandItem(livingEntity.getOffhandItem()); + armedItemStackData.swordblocking$setMainHandItem(livingEntity.getMainHandItem()); } @Override public ItemStack swordblocking$getItemHeldByArm(HumanoidArm arm) { if (arm == HumanoidArm.LEFT) { - return swordblocking$leftStack; + return swordblocking$offHandStack; } else if (arm == HumanoidArm.RIGHT) { - return swordblocking$rightStack; + return swordblocking$mainHandStack; } else { throw new UnsupportedOperationException(); } } @Override - public void swordblocking$setItemHeldByArm(HumanoidArm arm, ItemStack itemStack) { - if (arm == HumanoidArm.LEFT) { - swordblocking$leftStack = itemStack; - } else if (arm == HumanoidArm.RIGHT) { - swordblocking$rightStack = itemStack; - } else { - throw new UnsupportedOperationException(); - } + public ItemStack swordblocking$getOffHandItem() { + return this.swordblocking$offHandStack; + } + + @Override + public void swordblocking$setOffHandItem(ItemStack stack) { + this.swordblocking$offHandStack = stack; + } + + @Override + public ItemStack swordblocking$getMainHandItem() { + return this.swordblocking$mainHandStack; + } + + @Override + public void swordblocking$setMainHandItem(ItemStack stack) { + this.swordblocking$mainHandStack = stack; } } diff --git a/src/main/java/eu/midnightdust/swordblocking/mixins/MixinHumanoidModel.java b/src/main/java/eu/midnightdust/swordblocking/mixins/MixinHumanoidModel.java index 1004b09..4cdd53a 100644 --- a/src/main/java/eu/midnightdust/swordblocking/mixins/MixinHumanoidModel.java +++ b/src/main/java/eu/midnightdust/swordblocking/mixins/MixinHumanoidModel.java @@ -26,8 +26,8 @@ public abstract class MixinHumanoidModel { @Inject(method = "setupAnim(Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/model/HumanoidModel;setupAttackAnimation(Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;F)V", shift = At.Shift.BEFORE)) private void swordBlocking$setBlockingAngles(HumanoidRenderState renderState, CallbackInfo ci) { final ArmedItemStackData armedItemStackData = (ArmedItemStackData) renderState; - final ItemStack offHandStack = armedItemStackData.swordblocking$getItemHeldByArm(HumanoidArm.LEFT); - final ItemStack mainHandStack = armedItemStackData.swordblocking$getItemHeldByArm(HumanoidArm.RIGHT); + final ItemStack offHandStack = armedItemStackData.swordblocking$getOffHandItem(); + final ItemStack mainHandStack = armedItemStackData.swordblocking$getMainHandItem(); if (renderState.isUsingItem && SwordBlockingClient.canEntityBlock(mainHandStack, offHandStack)) { if (offHandStack.getItem() instanceof ShieldItem) { this.poseRightArm(renderState, HumanoidModel.ArmPose.BLOCK); diff --git a/src/main/java/eu/midnightdust/swordblocking/mixins/MixinItemInHandLayer.java b/src/main/java/eu/midnightdust/swordblocking/mixins/MixinItemInHandLayer.java index 7a467c7..f8fe0c2 100644 --- a/src/main/java/eu/midnightdust/swordblocking/mixins/MixinItemInHandLayer.java +++ b/src/main/java/eu/midnightdust/swordblocking/mixins/MixinItemInHandLayer.java @@ -27,7 +27,7 @@ public abstract class MixinItemInHandLayer