From 3517e3150bef5c7ce940edcb2d41ffadc454d574 Mon Sep 17 00:00:00 2001 From: Sollace Date: Fri, 22 Nov 2024 15:19:13 +0000 Subject: [PATCH] Cleanup mixins --- .../client/mixin/IResizeable.java | 12 --- .../client/mixin/MixinCamera.java | 21 ++-- .../client/mixin/MixinDefaultSkinHelper.java | 22 ++--- .../client/mixin/MixinEntityRenderers.java | 17 ---- .../client/mixin/MixinHeldItemRenderer.java | 23 +++-- .../client/mixin/MixinPlayerEntity.java | 3 +- .../mixin/MixinSkullBlockEntityRenderer.java | 23 ++--- .../client/render/LevitatingItemRenderer.java | 97 ++++++++++--------- src/main/resources/minelp.mixin.json | 2 - 9 files changed, 87 insertions(+), 133 deletions(-) delete mode 100644 src/main/java/com/minelittlepony/client/mixin/IResizeable.java delete mode 100644 src/main/java/com/minelittlepony/client/mixin/MixinEntityRenderers.java diff --git a/src/main/java/com/minelittlepony/client/mixin/IResizeable.java b/src/main/java/com/minelittlepony/client/mixin/IResizeable.java deleted file mode 100644 index ccfb37a1..00000000 --- a/src/main/java/com/minelittlepony/client/mixin/IResizeable.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.minelittlepony.client.mixin; - -import net.minecraft.entity.Entity; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(Entity.class) -public interface IResizeable { - @Accessor - void setStandingEyeHeight(float height); -} diff --git a/src/main/java/com/minelittlepony/client/mixin/MixinCamera.java b/src/main/java/com/minelittlepony/client/mixin/MixinCamera.java index 1a2e7f23..feb5efc7 100644 --- a/src/main/java/com/minelittlepony/client/mixin/MixinCamera.java +++ b/src/main/java/com/minelittlepony/client/mixin/MixinCamera.java @@ -2,9 +2,9 @@ package com.minelittlepony.client.mixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.minelittlepony.api.pony.Pony; import net.minecraft.client.MinecraftClient; @@ -12,18 +12,15 @@ import net.minecraft.client.render.Camera; @Mixin(Camera.class) abstract class MixinCamera { - @Inject(method = "clipToSpace(F)F", - at = @At("RETURN"), - cancellable = true) - private void redirectCameraDistance(float initial, CallbackInfoReturnable info) { - float value = info.getReturnValueF(); + @ModifyReturnValue(method = "clipToSpace(F)F", at = @At("RETURN")) + private float redirectCameraDistance(float value, float initial, CallbackInfoReturnable info) { + if (MinecraftClient.getInstance().player != null) { + Pony pony = Pony.getManager().getPony(MinecraftClient.getInstance().player); - Pony pony = Pony.getManager().getPony(MinecraftClient.getInstance().player); - - if (!pony.race().isHuman()) { - value *= pony.size().eyeDistanceFactor(); + if (!pony.race().isHuman()) { + value *= pony.size().eyeDistanceFactor(); + } } - - info.setReturnValue(value); + return value; } } diff --git a/src/main/java/com/minelittlepony/client/mixin/MixinDefaultSkinHelper.java b/src/main/java/com/minelittlepony/client/mixin/MixinDefaultSkinHelper.java index 1f7f49cb..11eadf77 100644 --- a/src/main/java/com/minelittlepony/client/mixin/MixinDefaultSkinHelper.java +++ b/src/main/java/com/minelittlepony/client/mixin/MixinDefaultSkinHelper.java @@ -1,5 +1,6 @@ package com.minelittlepony.client.mixin; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.minelittlepony.api.config.PonyConfig; import com.minelittlepony.api.config.PonyLevel; import com.minelittlepony.api.pony.DefaultPonySkinHelper; @@ -10,28 +11,19 @@ import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.UUID; @Mixin(DefaultSkinHelper.class) abstract class MixinDefaultSkinHelper { - @Inject(method = "getTexture()Lnet/minecraft/util/Identifier;", - at = @At("RETURN"), - cancellable = true) - private static void onGetTexture(CallbackInfoReturnable cir) { - if (PonyConfig.getInstance().ponyLevel.get() == PonyLevel.PONIES) { - cir.setReturnValue(DefaultPonySkinHelper.STEVE); - } + @ModifyReturnValue(method = "getTexture()Lnet/minecraft/util/Identifier;", at = @At("RETURN")) + private static Identifier replaceDefaultSteveTexture(Identifier returnValue) { + return PonyConfig.getInstance().ponyLevel.get() == PonyLevel.PONIES ? DefaultPonySkinHelper.STEVE : returnValue; } - @Inject(method = "getSkinTextures(Ljava/util/UUID;)Lnet/minecraft/client/util/SkinTextures;", - at = @At("RETURN"), - cancellable = true) - private static void onGetTexture(UUID uuid, CallbackInfoReturnable cir) { - if (PonyConfig.getInstance().ponyLevel.get() == PonyLevel.PONIES) { - cir.setReturnValue(DefaultPonySkinHelper.getTextures(cir.getReturnValue())); - } + @ModifyReturnValue(method = "getSkinTextures(Ljava/util/UUID;)Lnet/minecraft/client/util/SkinTextures;", at = @At("RETURN")) + private static SkinTextures onGetTexture(SkinTextures returnValue, UUID uuid, CallbackInfoReturnable cir) { + return PonyConfig.getInstance().ponyLevel.get() == PonyLevel.PONIES ? DefaultPonySkinHelper.getTextures(returnValue) : returnValue; } } diff --git a/src/main/java/com/minelittlepony/client/mixin/MixinEntityRenderers.java b/src/main/java/com/minelittlepony/client/mixin/MixinEntityRenderers.java deleted file mode 100644 index b364f411..00000000 --- a/src/main/java/com/minelittlepony/client/mixin/MixinEntityRenderers.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.minelittlepony.client.mixin; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; -import java.util.Map; - -import net.minecraft.client.render.entity.EntityRendererFactory; -import net.minecraft.client.render.entity.EntityRenderers; -import net.minecraft.entity.EntityType; - -@Mixin(EntityRenderers.class) -public interface MixinEntityRenderers { - @Accessor("RENDERER_FACTORIES") - public static Map, EntityRendererFactory> getRendererFactories() { - return null; - } -} diff --git a/src/main/java/com/minelittlepony/client/mixin/MixinHeldItemRenderer.java b/src/main/java/com/minelittlepony/client/mixin/MixinHeldItemRenderer.java index e4036f16..b04fa592 100644 --- a/src/main/java/com/minelittlepony/client/mixin/MixinHeldItemRenderer.java +++ b/src/main/java/com/minelittlepony/client/mixin/MixinHeldItemRenderer.java @@ -2,8 +2,9 @@ package com.minelittlepony.client.mixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.minelittlepony.client.MineLittlePony; import org.jetbrains.annotations.Nullable; @@ -22,7 +23,7 @@ abstract class MixinHeldItemRenderer { private static final String LivingEntity = "Lnet/minecraft/entity/LivingEntity;"; private static final String MatrixStack = "Lnet/minecraft/client/util/math/MatrixStack;"; private static final String ItemStack = "Lnet/minecraft/item/ItemStack;"; - private static final String Mode = "Lnet/minecraft/client/render/model/json/ModelTransformationMode;"; + private static final String Mode = "Lnet/minecraft/item/ModelTransformationMode;"; private static final String VertexConsumerProvider = "Lnet/minecraft/client/render/VertexConsumerProvider;"; private static final String World = "Lnet/minecraft/world/World;"; private static final String ItemRenderer = "Lnet/minecraft/client/render/item/ItemRenderer;"; @@ -30,18 +31,20 @@ abstract class MixinHeldItemRenderer { private static final String Boolean = "Z"; private static final String Int = "I"; - @Redirect(method = "renderItem(" + LivingEntity + ItemStack + Mode + Boolean + MatrixStack + VertexConsumerProvider + Int + ")V", + @WrapOperation(method = "renderItem(" + LivingEntity + ItemStack + Mode + Boolean + MatrixStack + VertexConsumerProvider + Int + ")V", at = @At(value = "INVOKE", target = ItemRenderer + "renderItem(" + LivingEntity + ItemStack + Mode + Boolean + MatrixStack + VertexConsumerProvider + World + Int + Int + Int + ")V")) - private void redirectRenderItem(ItemRenderer target, + private void wrapRenderItem(ItemRenderer target, @Nullable LivingEntity entity, - ItemStack item, - ModelTransformationMode transform, + ItemStack stack, + ModelTransformationMode mode, boolean left, - MatrixStack stack, - VertexConsumerProvider renderContext, + MatrixStack matrices, + VertexConsumerProvider vertices, @Nullable World world, - int lightUv, int overlayUv, int posLong) { - MineLittlePony.getInstance().getRenderDispatcher().getMagicRenderer().renderItem(target, entity, item, transform, left, stack, renderContext, world, lightUv, posLong); + int light, int overlay, int seed, Operation operation) { + if (!MineLittlePony.getInstance().getRenderDispatcher().getMagicRenderer().renderItem(target, entity, stack, mode, left, matrices, vertices, world, light, overlay, seed, operation)) { + operation.call(entity, stack, mode, left, matrices, vertices, world, light, overlay, seed); + } } } diff --git a/src/main/java/com/minelittlepony/client/mixin/MixinPlayerEntity.java b/src/main/java/com/minelittlepony/client/mixin/MixinPlayerEntity.java index 5e7eb444..443d95c7 100644 --- a/src/main/java/com/minelittlepony/client/mixin/MixinPlayerEntity.java +++ b/src/main/java/com/minelittlepony/client/mixin/MixinPlayerEntity.java @@ -21,8 +21,7 @@ abstract class MixinPlayerEntity implements RegistrationHandler { return syncedPony; } - @ModifyReturnValue(method = "getBaseDimensions(Lnet/minecraft/entity/EntityPose;)Lnet/minecraft/entity/EntityDimensions;", - at = @At("RETURN")) + @ModifyReturnValue(method = "getBaseDimensions(Lnet/minecraft/entity/EntityPose;)Lnet/minecraft/entity/EntityDimensions;", at = @At("RETURN")) private EntityDimensions modifyEyeHeight(EntityDimensions dimensions, EntityPose pose) { float factor = syncedPony.getCachedPonyData().size().eyeHeightFactor(); return factor == 1 ? dimensions : dimensions.withEyeHeight(dimensions.eyeHeight() * factor); diff --git a/src/main/java/com/minelittlepony/client/mixin/MixinSkullBlockEntityRenderer.java b/src/main/java/com/minelittlepony/client/mixin/MixinSkullBlockEntityRenderer.java index 6bc60ca1..1e8e5772 100644 --- a/src/main/java/com/minelittlepony/client/mixin/MixinSkullBlockEntityRenderer.java +++ b/src/main/java/com/minelittlepony/client/mixin/MixinSkullBlockEntityRenderer.java @@ -23,31 +23,20 @@ import org.jetbrains.annotations.Nullable; @Mixin(SkullBlockEntityRenderer.class) abstract class MixinSkullBlockEntityRenderer implements BlockEntityRenderer { - @Inject(method = "renderSkull(" - + "Lnet/minecraft/util/math/Direction;" - + "F" - + "F" - + "Lnet/minecraft/client/util/math/MatrixStack;" - + "Lnet/minecraft/client/render/VertexConsumerProvider;" - + "I" - + "Lnet/minecraft/client/render/block/entity/SkullBlockEntityModel;" - + "Lnet/minecraft/client/render/RenderLayer;" - + ")V", at = @At("HEAD"), cancellable = true) + @Inject(method = "renderSkull", at = @At("HEAD"), cancellable = true) private static void onRenderSkull(@Nullable Direction direction, - float angle, float poweredTicks, - MatrixStack stack, VertexConsumerProvider renderContext, int lightUv, + float yaw, float animationProgress, + MatrixStack matrices, VertexConsumerProvider vertices, + int light, SkullBlockEntityModel model, RenderLayer layer, CallbackInfo info) { - if (!info.isCancelled() && PonySkullRenderer.INSTANCE.renderSkull(direction, angle, poweredTicks, stack, renderContext, layer, lightUv)) { + if (!info.isCancelled() && PonySkullRenderer.INSTANCE.renderSkull(direction, yaw, animationProgress, matrices, vertices, layer, light)) { info.cancel(); } } - @Inject(method = "getRenderLayer(" - + "Lnet/minecraft/block/SkullBlock$SkullType;" - + "Lnet/minecraft/component/type/ProfileComponent;" - + ")Lnet/minecraft/client/render/RenderLayer;", at = @At("HEAD"), cancellable = true) + @Inject(method = "getRenderLayer", at = @At("HEAD"), cancellable = true) private static void onGetRenderLayer(SkullBlock.SkullType skullType, @Nullable ProfileComponent profile, CallbackInfoReturnable info) { if (!info.isCancelled()) { RenderLayer result = PonySkullRenderer.INSTANCE.getSkullRenderLayer(skullType, profile); diff --git a/src/main/java/com/minelittlepony/client/render/LevitatingItemRenderer.java b/src/main/java/com/minelittlepony/client/render/LevitatingItemRenderer.java index e9f8c1ac..7feaf6fb 100644 --- a/src/main/java/com/minelittlepony/client/render/LevitatingItemRenderer.java +++ b/src/main/java/com/minelittlepony/client/render/LevitatingItemRenderer.java @@ -1,5 +1,6 @@ package com.minelittlepony.client.render; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.minelittlepony.api.config.PonyConfig; import com.minelittlepony.api.pony.Pony; import com.minelittlepony.client.MineLittlePony; @@ -35,63 +36,67 @@ public class LevitatingItemRenderer { /** * Renders an item with a magical overlay. */ - public void renderItem(ItemRenderer itemRenderer, @Nullable LivingEntity entity, ItemStack stack, ModelTransformationMode mode, boolean left, MatrixStack matrix, VertexConsumerProvider renderContext, @Nullable World world, int lightUv, int posLong) { + public boolean renderItem(ItemRenderer itemRenderer, @Nullable LivingEntity entity, ItemStack stack, ModelTransformationMode mode, boolean left, + MatrixStack matrix, VertexConsumerProvider renderContext, @Nullable World world, + int lightUv, int overlay, int seed, Operation original) { - if (entity != null && (mode.isFirstPerson() + if (entity == null || !(mode.isFirstPerson() || mode == ModelTransformationMode.THIRD_PERSON_LEFT_HAND || mode == ModelTransformationMode.THIRD_PERSON_RIGHT_HAND) ) { - var context = MineLittlePony.getInstance().getRenderDispatcher().getPonyRenderer(entity); - if (context != null) { - var state = context.getAndUpdateRenderState(entity, MinecraftClient.getInstance().getRenderTickCounter().getTickDelta(false)); - - matrix.push(); - - boolean doMagic = (mode.isFirstPerson() ? PonyConfig.getInstance().fpsmagic : PonyConfig.getInstance().tpsmagic).get() && state.hasMagicGlow(); - - if (doMagic && mode.isFirstPerson()) { - setupPerspective(itemRenderer, entity, stack, left, matrix); - } - - itemRenderer.renderItem(entity, stack, mode, left, matrix, renderContext, world, lightUv, OverlayTexture.DEFAULT_UV, posLong); - - if (doMagic) { - VertexConsumerProvider interceptedContext = getProvider(state.pony, renderContext); - - if (stack.hasGlint()) { - stack = stack.copy(); - stack.set(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, false); - } - - float tickDelta = MinecraftClient.getInstance().getRenderTickCounter().getTickDelta(false) + entity.age; - - - float driftStrength = 0.002F; - float xDrift = MathHelper.sin(tickDelta / 20F) * driftStrength; - float zDrift = MathHelper.cos((tickDelta + 20) / 20F) * driftStrength; - - float scale = 1.1F + (MathHelper.sin(tickDelta / 20F) + 1) * driftStrength; - matrix.scale(scale, scale, scale); - matrix.translate(0.015F + xDrift, 0.01F, 0.01F + zDrift); - - itemRenderer.renderItem(entity, stack, mode, left, matrix, interceptedContext, world, lightUv, OverlayTexture.DEFAULT_UV, posLong); - matrix.scale(scale, scale, scale); - matrix.translate(-0.03F - xDrift, -0.02F, -0.02F - zDrift); - itemRenderer.renderItem(entity, stack, mode, left, matrix, interceptedContext, world, lightUv, OverlayTexture.DEFAULT_UV, posLong); - } - - matrix.pop(); - return; - } + return false; } - itemRenderer.renderItem(entity, stack, mode, left, matrix, renderContext, world, lightUv, OverlayTexture.DEFAULT_UV, posLong); + var context = MineLittlePony.getInstance().getRenderDispatcher().getPonyRenderer(entity); + if (context == null) { + return false; + } + + var state = context.getAndUpdateRenderState(entity, MinecraftClient.getInstance().getRenderTickCounter().getTickDelta(false)); + + matrix.push(); + + boolean doMagic = (mode.isFirstPerson() ? PonyConfig.getInstance().fpsmagic : PonyConfig.getInstance().tpsmagic).get() && state.hasMagicGlow(); + + if (doMagic && mode.isFirstPerson()) { + setupPerspective(entity, stack, left, matrix); + } + + original.call(entity, stack, mode, left, matrix, renderContext, world, lightUv, overlay, seed); + + if (doMagic) { + VertexConsumerProvider interceptedContext = getProvider(state.pony, renderContext); + + if (stack.hasGlint()) { + stack = stack.copy(); + stack.set(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, false); + } + + float tickDelta = MinecraftClient.getInstance().getRenderTickCounter().getTickDelta(false) + entity.age; + + + float driftStrength = 0.002F; + float xDrift = MathHelper.sin(tickDelta / 20F) * driftStrength; + float zDrift = MathHelper.cos((tickDelta + 20) / 20F) * driftStrength; + + float scale = 1.1F + (MathHelper.sin(tickDelta / 20F) + 1) * driftStrength; + matrix.scale(scale, scale, scale); + matrix.translate(0.015F + xDrift, 0.01F, 0.01F + zDrift); + + original.call(entity, stack, mode, left, matrix, interceptedContext, world, lightUv, OverlayTexture.DEFAULT_UV, seed); + matrix.scale(scale, scale, scale); + matrix.translate(-0.03F - xDrift, -0.02F, -0.02F - zDrift); + original.call(entity, stack, mode, left, matrix, interceptedContext, world, lightUv, OverlayTexture.DEFAULT_UV, seed); + } + + matrix.pop(); + return true; } /** * Moves held items to look like they're floating in the player's field. */ - private void setupPerspective(ItemRenderer renderer, LivingEntity entity, ItemStack item, boolean left, MatrixStack stack) { + private void setupPerspective(LivingEntity entity, ItemStack item, boolean left, MatrixStack stack) { UseAction action = item.getUseAction(); boolean doNormal = entity.getItemUseTime() <= 0 || action == UseAction.NONE || (action == UseAction.CROSSBOW && CrossbowItem.isCharged(item)); diff --git a/src/main/resources/minelp.mixin.json b/src/main/resources/minelp.mixin.json index efeb588d..b7edac06 100644 --- a/src/main/resources/minelp.mixin.json +++ b/src/main/resources/minelp.mixin.json @@ -5,10 +5,8 @@ "refmap": "minelp.mixin.refmap.json", "compatibilityLevel": "JAVA_16", "client": [ - "IResizeable", "MixinCamera", "MixinDefaultSkinHelper", - "MixinEntityRenderers", "MixinSkullBlockEntityRenderer", "MixinHeldItemRenderer", "MixinPlayerEntity",