diff --git a/src/main/java/one/devos/nautical/up_and_away/framework/ext/HumanoidModelExt.java b/src/main/java/one/devos/nautical/up_and_away/framework/ext/HumanoidModelExt.java new file mode 100644 index 0000000..3bf0454 --- /dev/null +++ b/src/main/java/one/devos/nautical/up_and_away/framework/ext/HumanoidModelExt.java @@ -0,0 +1,5 @@ +package one.devos.nautical.up_and_away.framework.ext; + +public interface HumanoidModelExt { + boolean up_and_away$holdingBalloonCart(); +} diff --git a/src/main/java/one/devos/nautical/up_and_away/mixin/client/CapeLayerMixin.java b/src/main/java/one/devos/nautical/up_and_away/mixin/client/CapeLayerMixin.java new file mode 100644 index 0000000..77466cc --- /dev/null +++ b/src/main/java/one/devos/nautical/up_and_away/mixin/client/CapeLayerMixin.java @@ -0,0 +1,33 @@ +package one.devos.nautical.up_and_away.mixin.client; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; + +import net.minecraft.client.model.PlayerModel; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.CapeLayer; + +import net.minecraft.client.renderer.entity.layers.RenderLayer; + +import one.devos.nautical.up_and_away.framework.ext.HumanoidModelExt; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(CapeLayer.class) +public abstract class CapeLayerMixin extends RenderLayer> { + private CapeLayerMixin(RenderLayerParent> context) { + super(context); + } + + @ModifyExpressionValue( + method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/client/player/AbstractClientPlayer;FFFFFF)V", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/player/AbstractClientPlayer;isCrouching()Z" + ) + ) + private boolean balloonCartExtraCrouch(boolean original) { + return original || ((HumanoidModelExt) this.getParentModel()).up_and_away$holdingBalloonCart(); + } +} diff --git a/src/main/java/one/devos/nautical/up_and_away/mixin/client/HumanoidModelMixin.java b/src/main/java/one/devos/nautical/up_and_away/mixin/client/HumanoidModelMixin.java index 3c4cf13..3bd7bcd 100644 --- a/src/main/java/one/devos/nautical/up_and_away/mixin/client/HumanoidModelMixin.java +++ b/src/main/java/one/devos/nautical/up_and_away/mixin/client/HumanoidModelMixin.java @@ -10,6 +10,8 @@ import one.devos.nautical.up_and_away.content.UpAndAwayItems; +import one.devos.nautical.up_and_away.framework.ext.HumanoidModelExt; + import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -19,7 +21,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(HumanoidModel.class) -public class HumanoidModelMixin { +public class HumanoidModelMixin implements HumanoidModelExt { @Shadow @Final public ModelPart rightArm; @@ -34,6 +36,11 @@ public class HumanoidModelMixin { @Unique private boolean holdingBalloonCart; + @Override + public boolean up_and_away$holdingBalloonCart() { + return this.holdingBalloonCart; + } + @Inject(method = "setupAnim(Lnet/minecraft/world/entity/LivingEntity;FFFFF)V", at = @At("HEAD")) private void balloonCartHoldingAnim( LivingEntity entity, diff --git a/src/main/resources/up_and_away.mixins.json b/src/main/resources/up_and_away.mixins.json index c9d7582..1536b72 100644 --- a/src/main/resources/up_and_away.mixins.json +++ b/src/main/resources/up_and_away.mixins.json @@ -13,6 +13,7 @@ "ShulkerBulletAccessor" ], "client": [ + "client.CapeLayerMixin", "client.HumanoidModelMixin", "client.ItemInHandLayerMixin", "client.ItemInHandRendererMixin"