Cleanup mixins

This commit is contained in:
Sollace 2024-11-22 15:19:13 +00:00
parent 088175a862
commit 3517e3150b
No known key found for this signature in database
GPG key ID: E52FACE7B5C773DB
9 changed files with 87 additions and 133 deletions

View file

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

View file

@ -2,9 +2,9 @@ package com.minelittlepony.client.mixin;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
import com.minelittlepony.api.pony.Pony; import com.minelittlepony.api.pony.Pony;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
@ -12,18 +12,15 @@ import net.minecraft.client.render.Camera;
@Mixin(Camera.class) @Mixin(Camera.class)
abstract class MixinCamera { abstract class MixinCamera {
@Inject(method = "clipToSpace(F)F", @ModifyReturnValue(method = "clipToSpace(F)F", at = @At("RETURN"))
at = @At("RETURN"), private float redirectCameraDistance(float value, float initial, CallbackInfoReturnable<Float> info) {
cancellable = true) if (MinecraftClient.getInstance().player != null) {
private void redirectCameraDistance(float initial, CallbackInfoReturnable<Float> info) { Pony pony = Pony.getManager().getPony(MinecraftClient.getInstance().player);
float value = info.getReturnValueF();
Pony pony = Pony.getManager().getPony(MinecraftClient.getInstance().player); if (!pony.race().isHuman()) {
value *= pony.size().eyeDistanceFactor();
if (!pony.race().isHuman()) { }
value *= pony.size().eyeDistanceFactor();
} }
return value;
info.setReturnValue(value);
} }
} }

View file

@ -1,5 +1,6 @@
package com.minelittlepony.client.mixin; package com.minelittlepony.client.mixin;
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
import com.minelittlepony.api.config.PonyConfig; import com.minelittlepony.api.config.PonyConfig;
import com.minelittlepony.api.config.PonyLevel; import com.minelittlepony.api.config.PonyLevel;
import com.minelittlepony.api.pony.DefaultPonySkinHelper; 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.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.UUID; import java.util.UUID;
@Mixin(DefaultSkinHelper.class) @Mixin(DefaultSkinHelper.class)
abstract class MixinDefaultSkinHelper { abstract class MixinDefaultSkinHelper {
@Inject(method = "getTexture()Lnet/minecraft/util/Identifier;", @ModifyReturnValue(method = "getTexture()Lnet/minecraft/util/Identifier;", at = @At("RETURN"))
at = @At("RETURN"), private static Identifier replaceDefaultSteveTexture(Identifier returnValue) {
cancellable = true) return PonyConfig.getInstance().ponyLevel.get() == PonyLevel.PONIES ? DefaultPonySkinHelper.STEVE : returnValue;
private static void onGetTexture(CallbackInfoReturnable<Identifier> cir) {
if (PonyConfig.getInstance().ponyLevel.get() == PonyLevel.PONIES) {
cir.setReturnValue(DefaultPonySkinHelper.STEVE);
}
} }
@Inject(method = "getSkinTextures(Ljava/util/UUID;)Lnet/minecraft/client/util/SkinTextures;", @ModifyReturnValue(method = "getSkinTextures(Ljava/util/UUID;)Lnet/minecraft/client/util/SkinTextures;", at = @At("RETURN"))
at = @At("RETURN"), private static SkinTextures onGetTexture(SkinTextures returnValue, UUID uuid, CallbackInfoReturnable<SkinTextures> cir) {
cancellable = true) return PonyConfig.getInstance().ponyLevel.get() == PonyLevel.PONIES ? DefaultPonySkinHelper.getTextures(returnValue) : returnValue;
private static void onGetTexture(UUID uuid, CallbackInfoReturnable<SkinTextures> cir) {
if (PonyConfig.getInstance().ponyLevel.get() == PonyLevel.PONIES) {
cir.setReturnValue(DefaultPonySkinHelper.getTextures(cir.getReturnValue()));
}
} }
} }

View file

@ -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<EntityType<?>, EntityRendererFactory<?>> getRendererFactories() {
return null;
}
}

View file

@ -2,8 +2,9 @@ package com.minelittlepony.client.mixin;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; 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 com.minelittlepony.client.MineLittlePony;
import org.jetbrains.annotations.Nullable; 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 LivingEntity = "Lnet/minecraft/entity/LivingEntity;";
private static final String MatrixStack = "Lnet/minecraft/client/util/math/MatrixStack;"; private static final String MatrixStack = "Lnet/minecraft/client/util/math/MatrixStack;";
private static final String ItemStack = "Lnet/minecraft/item/ItemStack;"; 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 VertexConsumerProvider = "Lnet/minecraft/client/render/VertexConsumerProvider;";
private static final String World = "Lnet/minecraft/world/World;"; private static final String World = "Lnet/minecraft/world/World;";
private static final String ItemRenderer = "Lnet/minecraft/client/render/item/ItemRenderer;"; 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 Boolean = "Z";
private static final String Int = "I"; 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", at = @At(value = "INVOKE",
target = ItemRenderer + "renderItem(" + LivingEntity + ItemStack + Mode + Boolean + MatrixStack + VertexConsumerProvider + World + Int + Int + Int + ")V")) 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, @Nullable LivingEntity entity,
ItemStack item, ItemStack stack,
ModelTransformationMode transform, ModelTransformationMode mode,
boolean left, boolean left,
MatrixStack stack, MatrixStack matrices,
VertexConsumerProvider renderContext, VertexConsumerProvider vertices,
@Nullable World world, @Nullable World world,
int lightUv, int overlayUv, int posLong) { int light, int overlay, int seed, Operation<Void> operation) {
MineLittlePony.getInstance().getRenderDispatcher().getMagicRenderer().renderItem(target, entity, item, transform, left, stack, renderContext, world, lightUv, posLong); 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);
}
} }
} }

View file

@ -21,8 +21,7 @@ abstract class MixinPlayerEntity implements RegistrationHandler {
return syncedPony; return syncedPony;
} }
@ModifyReturnValue(method = "getBaseDimensions(Lnet/minecraft/entity/EntityPose;)Lnet/minecraft/entity/EntityDimensions;", @ModifyReturnValue(method = "getBaseDimensions(Lnet/minecraft/entity/EntityPose;)Lnet/minecraft/entity/EntityDimensions;", at = @At("RETURN"))
at = @At("RETURN"))
private EntityDimensions modifyEyeHeight(EntityDimensions dimensions, EntityPose pose) { private EntityDimensions modifyEyeHeight(EntityDimensions dimensions, EntityPose pose) {
float factor = syncedPony.getCachedPonyData().size().eyeHeightFactor(); float factor = syncedPony.getCachedPonyData().size().eyeHeightFactor();
return factor == 1 ? dimensions : dimensions.withEyeHeight(dimensions.eyeHeight() * factor); return factor == 1 ? dimensions : dimensions.withEyeHeight(dimensions.eyeHeight() * factor);

View file

@ -23,31 +23,20 @@ import org.jetbrains.annotations.Nullable;
@Mixin(SkullBlockEntityRenderer.class) @Mixin(SkullBlockEntityRenderer.class)
abstract class MixinSkullBlockEntityRenderer implements BlockEntityRenderer<SkullBlockEntity> { abstract class MixinSkullBlockEntityRenderer implements BlockEntityRenderer<SkullBlockEntity> {
@Inject(method = "renderSkull(" @Inject(method = "renderSkull", at = @At("HEAD"), cancellable = true)
+ "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)
private static void onRenderSkull(@Nullable Direction direction, private static void onRenderSkull(@Nullable Direction direction,
float angle, float poweredTicks, float yaw, float animationProgress,
MatrixStack stack, VertexConsumerProvider renderContext, int lightUv, MatrixStack matrices, VertexConsumerProvider vertices,
int light,
SkullBlockEntityModel model, RenderLayer layer, SkullBlockEntityModel model, RenderLayer layer,
CallbackInfo info) { 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(); info.cancel();
} }
} }
@Inject(method = "getRenderLayer(" @Inject(method = "getRenderLayer", at = @At("HEAD"), cancellable = true)
+ "Lnet/minecraft/block/SkullBlock$SkullType;"
+ "Lnet/minecraft/component/type/ProfileComponent;"
+ ")Lnet/minecraft/client/render/RenderLayer;", at = @At("HEAD"), cancellable = true)
private static void onGetRenderLayer(SkullBlock.SkullType skullType, @Nullable ProfileComponent profile, CallbackInfoReturnable<RenderLayer> info) { private static void onGetRenderLayer(SkullBlock.SkullType skullType, @Nullable ProfileComponent profile, CallbackInfoReturnable<RenderLayer> info) {
if (!info.isCancelled()) { if (!info.isCancelled()) {
RenderLayer result = PonySkullRenderer.INSTANCE.getSkullRenderLayer(skullType, profile); RenderLayer result = PonySkullRenderer.INSTANCE.getSkullRenderLayer(skullType, profile);

View file

@ -1,5 +1,6 @@
package com.minelittlepony.client.render; package com.minelittlepony.client.render;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.minelittlepony.api.config.PonyConfig; import com.minelittlepony.api.config.PonyConfig;
import com.minelittlepony.api.pony.Pony; import com.minelittlepony.api.pony.Pony;
import com.minelittlepony.client.MineLittlePony; import com.minelittlepony.client.MineLittlePony;
@ -35,63 +36,67 @@ public class LevitatingItemRenderer {
/** /**
* Renders an item with a magical overlay. * 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<Void> original) {
if (entity != null && (mode.isFirstPerson() if (entity == null || !(mode.isFirstPerson()
|| mode == ModelTransformationMode.THIRD_PERSON_LEFT_HAND || mode == ModelTransformationMode.THIRD_PERSON_LEFT_HAND
|| mode == ModelTransformationMode.THIRD_PERSON_RIGHT_HAND) || mode == ModelTransformationMode.THIRD_PERSON_RIGHT_HAND)
) { ) {
var context = MineLittlePony.getInstance().getRenderDispatcher().getPonyRenderer(entity); return false;
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;
}
} }
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. * 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(); UseAction action = item.getUseAction();
boolean doNormal = entity.getItemUseTime() <= 0 || action == UseAction.NONE || (action == UseAction.CROSSBOW && CrossbowItem.isCharged(item)); boolean doNormal = entity.getItemUseTime() <= 0 || action == UseAction.NONE || (action == UseAction.CROSSBOW && CrossbowItem.isCharged(item));

View file

@ -5,10 +5,8 @@
"refmap": "minelp.mixin.refmap.json", "refmap": "minelp.mixin.refmap.json",
"compatibilityLevel": "JAVA_16", "compatibilityLevel": "JAVA_16",
"client": [ "client": [
"IResizeable",
"MixinCamera", "MixinCamera",
"MixinDefaultSkinHelper", "MixinDefaultSkinHelper",
"MixinEntityRenderers",
"MixinSkullBlockEntityRenderer", "MixinSkullBlockEntityRenderer",
"MixinHeldItemRenderer", "MixinHeldItemRenderer",
"MixinPlayerEntity", "MixinPlayerEntity",