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.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<Float> info) {
float value = info.getReturnValueF();
@ModifyReturnValue(method = "clipToSpace(F)F", at = @At("RETURN"))
private float redirectCameraDistance(float value, float initial, CallbackInfoReturnable<Float> 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;
}
}

View file

@ -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<Identifier> 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<SkinTextures> 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<SkinTextures> cir) {
return PonyConfig.getInstance().ponyLevel.get() == PonyLevel.PONIES ? DefaultPonySkinHelper.getTextures(returnValue) : returnValue;
}
}

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.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<Void> 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);
}
}
}

View file

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

View file

@ -23,31 +23,20 @@ import org.jetbrains.annotations.Nullable;
@Mixin(SkullBlockEntityRenderer.class)
abstract class MixinSkullBlockEntityRenderer implements BlockEntityRenderer<SkullBlockEntity> {
@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<RenderLayer> info) {
if (!info.isCancelled()) {
RenderLayer result = PonySkullRenderer.INSTANCE.getSkullRenderLayer(skullType, profile);

View file

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

View file

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