Small changes

This commit is contained in:
lowercasebtw
2025-11-23 20:28:15 -05:00
parent 8764c2a251
commit e8d42e5033
4 changed files with 33 additions and 18 deletions

View File

@@ -6,5 +6,11 @@ import net.minecraft.world.item.ItemStack;
public interface ArmedItemStackData { public interface ArmedItemStackData {
ItemStack swordblocking$getItemHeldByArm(HumanoidArm humanoidArm); 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);
} }

View File

@@ -15,37 +15,46 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(ArmedEntityRenderState.class) @Mixin(ArmedEntityRenderState.class)
public abstract class MixinArmedEntityRenderState implements ArmedItemStackData { public abstract class MixinArmedEntityRenderState implements ArmedItemStackData {
@Unique @Unique
private ItemStack swordblocking$leftStack = ItemStack.EMPTY; private ItemStack swordblocking$offHandStack = ItemStack.EMPTY;
@Unique @Unique
private ItemStack swordblocking$rightStack = ItemStack.EMPTY; private ItemStack swordblocking$mainHandStack = ItemStack.EMPTY;
@Inject(method = "extractArmedEntityRenderState", at = @At("TAIL")) @Inject(method = "extractArmedEntityRenderState", at = @At("TAIL"))
private static void swordBlocking$storeRequiredData(LivingEntity livingEntity, ArmedEntityRenderState armedEntityRenderState, ItemModelResolver itemModelResolver, CallbackInfo ci) { private static void swordBlocking$storeRequiredData(LivingEntity livingEntity, ArmedEntityRenderState armedEntityRenderState, ItemModelResolver itemModelResolver, CallbackInfo ci) {
ArmedItemStackData armedItemStackData = (ArmedItemStackData) armedEntityRenderState; ArmedItemStackData armedItemStackData = (ArmedItemStackData) armedEntityRenderState;
armedItemStackData.swordblocking$setItemHeldByArm(HumanoidArm.LEFT, livingEntity.getItemHeldByArm(HumanoidArm.LEFT)); armedItemStackData.swordblocking$setOffHandItem(livingEntity.getOffhandItem());
armedItemStackData.swordblocking$setItemHeldByArm(HumanoidArm.RIGHT, livingEntity.getItemHeldByArm(HumanoidArm.RIGHT)); armedItemStackData.swordblocking$setMainHandItem(livingEntity.getMainHandItem());
} }
@Override @Override
public ItemStack swordblocking$getItemHeldByArm(HumanoidArm arm) { public ItemStack swordblocking$getItemHeldByArm(HumanoidArm arm) {
if (arm == HumanoidArm.LEFT) { if (arm == HumanoidArm.LEFT) {
return swordblocking$leftStack; return swordblocking$offHandStack;
} else if (arm == HumanoidArm.RIGHT) { } else if (arm == HumanoidArm.RIGHT) {
return swordblocking$rightStack; return swordblocking$mainHandStack;
} else { } else {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
} }
@Override @Override
public void swordblocking$setItemHeldByArm(HumanoidArm arm, ItemStack itemStack) { public ItemStack swordblocking$getOffHandItem() {
if (arm == HumanoidArm.LEFT) { return this.swordblocking$offHandStack;
swordblocking$leftStack = itemStack;
} else if (arm == HumanoidArm.RIGHT) {
swordblocking$rightStack = itemStack;
} else {
throw new UnsupportedOperationException();
} }
@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;
} }
} }

View File

@@ -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)) @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) { private void swordBlocking$setBlockingAngles(HumanoidRenderState renderState, CallbackInfo ci) {
final ArmedItemStackData armedItemStackData = (ArmedItemStackData) renderState; final ArmedItemStackData armedItemStackData = (ArmedItemStackData) renderState;
final ItemStack offHandStack = armedItemStackData.swordblocking$getItemHeldByArm(HumanoidArm.LEFT); final ItemStack offHandStack = armedItemStackData.swordblocking$getOffHandItem();
final ItemStack mainHandStack = armedItemStackData.swordblocking$getItemHeldByArm(HumanoidArm.RIGHT); final ItemStack mainHandStack = armedItemStackData.swordblocking$getMainHandItem();
if (renderState.isUsingItem && SwordBlockingClient.canEntityBlock(mainHandStack, offHandStack)) { if (renderState.isUsingItem && SwordBlockingClient.canEntityBlock(mainHandStack, offHandStack)) {
if (offHandStack.getItem() instanceof ShieldItem) { if (offHandStack.getItem() instanceof ShieldItem) {
this.poseRightArm(renderState, HumanoidModel.ArmPose.BLOCK); this.poseRightArm(renderState, HumanoidModel.ArmPose.BLOCK);

View File

@@ -27,7 +27,7 @@ public abstract class MixinItemInHandLayer<S extends ArmedEntityRenderState, M e
private boolean swordBlocking$hideShield(ItemStackRenderState instance, @Local(argsOnly = true) S renderState, @Local(argsOnly = true) HumanoidArm arm) { private boolean swordBlocking$hideShield(ItemStackRenderState instance, @Local(argsOnly = true) S renderState, @Local(argsOnly = true) HumanoidArm arm) {
if (SwordBlockingConfig.enabled) { if (SwordBlockingConfig.enabled) {
final ArmedItemStackData armedItemStackData = (ArmedItemStackData) renderState; final ArmedItemStackData armedItemStackData = (ArmedItemStackData) renderState;
return SwordBlockingClient.shouldHideShield(armedItemStackData.swordblocking$getItemHeldByArm(HumanoidArm.RIGHT), armedItemStackData.swordblocking$getItemHeldByArm(HumanoidArm.LEFT), armedItemStackData.swordblocking$getItemHeldByArm(arm)); return SwordBlockingClient.shouldHideShield(armedItemStackData.swordblocking$getMainHandItem(), armedItemStackData.swordblocking$getOffHandItem(), armedItemStackData.swordblocking$getItemHeldByArm(arm));
} }
return instance.isEmpty(); return instance.isEmpty();