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 {
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)
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;
}
}

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))
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);

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) {
if (SwordBlockingConfig.enabled) {
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();