Skip to content

Commit

Permalink
Fixed shadow (#31)
Browse files Browse the repository at this point in the history
  • Loading branch information
KosmX authored Aug 7, 2020
1 parent 7579ff4 commit f196571
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 2 deletions.
2 changes: 2 additions & 0 deletions src/main/java/de/tr7zw/firstperson/StaticMixinMethods.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ public static boolean isThirdPerson(boolean thirdPerson) {
return true;
}

public static Vec3d offset;

public static Vec3d getPositionOffset(AbstractClientPlayerEntity var1, Vec3d defValue, MatrixStack matrices) {
if(var1 == MinecraftClient.getInstance().getCameraEntity() && MinecraftClient.getInstance().player.isSleeping() || FirstPersonModelMod.fixBodyShadow(matrices))return defValue;
double x,y,z = x = y = z = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,42 @@
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.Entity;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.WorldView;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.Redirect;

@Mixin(EntityRenderDispatcher.class)
public class RenderDispatcherMixin {
public abstract class RenderDispatcherMixin {
@Shadow
protected static void renderShadow(MatrixStack matrices, VertexConsumerProvider vertexConsumers, Entity entity, float opacity, float tickDelta, WorldView world, float radius) {
}

@Redirect(method = "render", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/render/entity/EntityRenderer;getPositionOffset(Lnet/minecraft/entity/Entity;F)Lnet/minecraft/util/math/Vec3d;"
))
private Vec3d getPosRedirect(EntityRenderer entityRenderer, Entity entity, float tickDelta, Entity entity_1, double x, double y, double z, float yaw, float tickDelta_1, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light){
if(entity instanceof AbstractClientPlayerEntity) {
return StaticMixinMethods.getPositionOffset((AbstractClientPlayerEntity) entity, entityRenderer.getPositionOffset(entity, tickDelta), matrices);
StaticMixinMethods.offset = StaticMixinMethods.getPositionOffset((AbstractClientPlayerEntity) entity, entityRenderer.getPositionOffset(entity, tickDelta), matrices);
return StaticMixinMethods.offset;
}
else {
return entityRenderer.getPositionOffset(entity, tickDelta);
}
}

@Redirect(method = "render", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/render/entity/EntityRenderDispatcher;renderShadow(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/entity/Entity;FFLnet/minecraft/world/WorldView;F)V"
))
private void renderRedirect(MatrixStack matrices, VertexConsumerProvider vertexConsumers, Entity entity, float opacity, float tickDelta, WorldView world, float radius){
if(entity instanceof AbstractClientPlayerEntity){
matrices.translate(StaticMixinMethods.offset.x, StaticMixinMethods.offset.y, StaticMixinMethods.offset.z);
renderShadow(matrices, vertexConsumers, entity, opacity, tickDelta, world, radius);
matrices.translate(-StaticMixinMethods.offset.x, -StaticMixinMethods.offset.y, -StaticMixinMethods.offset.z);
}
}
}

0 comments on commit f196571

Please sign in to comment.