mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2025-02-13 08:14:23 +01:00
Cleanup mixins
This commit is contained in:
parent
088175a862
commit
3517e3150b
9 changed files with 87 additions and 133 deletions
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
|
||||
if (!pony.race().isHuman()) {
|
||||
value *= pony.size().eyeDistanceFactor();
|
||||
}
|
||||
|
||||
info.setReturnValue(value);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,14 +36,22 @@ 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)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var context = MineLittlePony.getInstance().getRenderDispatcher().getPonyRenderer(entity);
|
||||
if (context != null) {
|
||||
if (context == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var state = context.getAndUpdateRenderState(entity, MinecraftClient.getInstance().getRenderTickCounter().getTickDelta(false));
|
||||
|
||||
matrix.push();
|
||||
|
@ -50,10 +59,10 @@ public class LevitatingItemRenderer {
|
|||
boolean doMagic = (mode.isFirstPerson() ? PonyConfig.getInstance().fpsmagic : PonyConfig.getInstance().tpsmagic).get() && state.hasMagicGlow();
|
||||
|
||||
if (doMagic && mode.isFirstPerson()) {
|
||||
setupPerspective(itemRenderer, entity, stack, left, matrix);
|
||||
setupPerspective(entity, stack, left, matrix);
|
||||
}
|
||||
|
||||
itemRenderer.renderItem(entity, stack, mode, left, matrix, renderContext, world, lightUv, OverlayTexture.DEFAULT_UV, posLong);
|
||||
original.call(entity, stack, mode, left, matrix, renderContext, world, lightUv, overlay, seed);
|
||||
|
||||
if (doMagic) {
|
||||
VertexConsumerProvider interceptedContext = getProvider(state.pony, renderContext);
|
||||
|
@ -74,24 +83,20 @@ public class LevitatingItemRenderer {
|
|||
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);
|
||||
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);
|
||||
itemRenderer.renderItem(entity, stack, mode, left, matrix, interceptedContext, world, lightUv, OverlayTexture.DEFAULT_UV, posLong);
|
||||
original.call(entity, stack, mode, left, matrix, interceptedContext, world, lightUv, OverlayTexture.DEFAULT_UV, seed);
|
||||
}
|
||||
|
||||
matrix.pop();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
itemRenderer.renderItem(entity, stack, mode, left, matrix, renderContext, world, lightUv, OverlayTexture.DEFAULT_UV, posLong);
|
||||
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));
|
||||
|
|
|
@ -5,10 +5,8 @@
|
|||
"refmap": "minelp.mixin.refmap.json",
|
||||
"compatibilityLevel": "JAVA_16",
|
||||
"client": [
|
||||
"IResizeable",
|
||||
"MixinCamera",
|
||||
"MixinDefaultSkinHelper",
|
||||
"MixinEntityRenderers",
|
||||
"MixinSkullBlockEntityRenderer",
|
||||
"MixinHeldItemRenderer",
|
||||
"MixinPlayerEntity",
|
||||
|
|
Loading…
Reference in a new issue