WIP 1.15 and ReplayStudio v2 update

This commit is contained in:
Jonas Herzig
2020-03-13 14:18:19 +01:00
parent 8bc0b0a4df
commit af8803d6b5
65 changed files with 874 additions and 1303 deletions

View File

@@ -1,4 +1,4 @@
//#if MC>=10800
//#if MC>=10800 && MC<11500
package com.replaymod.render.mixin;
import net.minecraft.client.render.chunk.ChunkBatcher;

View File

@@ -1,12 +1,10 @@
package com.replaymod.render.mixin;
import com.replaymod.render.RenderSettings;
import com.replaymod.render.capturer.CubicOpenGlFrameCapturer;
import com.replaymod.render.hooks.EntityRendererHandler;
import com.replaymod.replay.camera.CameraEntity;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import org.lwjgl.opengl.GL11;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
@@ -134,51 +132,4 @@ public abstract class MixinCamera {
}
}
}
//#if MC>=11400
@Inject(method = "update", at = @At("HEAD"))
//#else
//$$ @Inject(method = "orientCamera", at = @At("HEAD"))
//#endif
private void replayModRender_setupCubicFrameRotation(
//#if MC>=11400
BlockView blockView,
Entity entity,
boolean thirdPerson,
boolean inverseView,
//#endif
float partialTicks,
CallbackInfo ci
) {
if (getHandler() != null && getHandler().data instanceof CubicOpenGlFrameCapturer.Data) {
switch ((CubicOpenGlFrameCapturer.Data) getHandler().data) {
case FRONT:
GL11.glRotatef(0, 0.0F, 1.0F, 0.0F);
break;
case RIGHT:
GL11.glRotatef(90, 0.0F, 1.0F, 0.0F);
break;
case BACK:
GL11.glRotatef(180, 0.0F, 1.0F, 0.0F);
break;
case LEFT:
GL11.glRotatef(-90, 0.0F, 1.0F, 0.0F);
break;
case BOTTOM:
GL11.glRotatef(90, 1.0F, 0.0F, 0.0F);
break;
case TOP:
GL11.glRotatef(-90, 1.0F, 0.0F, 0.0F);
break;
}
}
if (getHandler() != null && getHandler().omnidirectional) {
// Minecraft goes back a little so we have to revert that
//#if MC>=11300
GL11.glTranslatef(0.0F, 0.0F, -0.05F);
//#else
//$$ GL11.glTranslatef(0.0F, 0.0F, 0.1F);
//#endif
}
}
}

View File

@@ -1,6 +1,6 @@
package com.replaymod.render.mixin;
//#if MC>=10800
//#if MC>=10800 && MC<11500
import com.replaymod.core.versions.MCVer;
import net.minecraft.client.render.chunk.ChunkRenderTask;

View File

@@ -3,7 +3,6 @@ package com.replaymod.render.mixin;
import com.replaymod.core.versions.MCVer;
import com.replaymod.render.capturer.StereoscopicOpenGlFrameCapturer;
import com.replaymod.render.hooks.EntityRendererHandler;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor;
import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.player.PlayerEntity;
import org.lwjgl.opengl.GL11;
@@ -14,6 +13,11 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
//#if MC>=11500
//$$ import net.minecraft.client.util.math.MatrixStack;
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
//#endif
//#if MC>=11400
import net.minecraft.client.render.Camera;
import net.minecraft.util.hit.HitResult;
@@ -93,6 +97,9 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
@Inject(method = "renderHand", at = @At("HEAD"), cancellable = true)
private void replayModRender_renderSpectatorHand(
//#if MC>=11500
//$$ MatrixStack matrixStack,
//#endif
//#if MC>=11400
Camera camera,
//#endif
@@ -128,102 +135,27 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
//$$ public abstract void renderHand(float partialTicks, int renderPass);
//#endif
//#if MC>=11400
@Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;drawHighlightedBlockOutline(Lnet/minecraft/client/render/Camera;Lnet/minecraft/util/hit/HitResult;I)V"))
private void replayModRender_drawSelectionBox(WorldRenderer instance, Camera camera, HitResult hitResult, int something) {
if (replayModRender_handler == null) {
instance.drawHighlightedBlockOutline(camera, hitResult, something);
}
}
//#else
//#if MC>=11300
//$$ @Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/WorldRenderer;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/math/RayTraceResult;IF)V"))
//$$ private void replayModRender_drawSelectionBox(WorldRenderer instance, EntityPlayer player, RayTraceResult rtr, int alwaysZero, float partialTicks) {
//#else
//#if MC>=10904
//$$ @Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/math/RayTraceResult;IF)V"))
//$$ private void replayModRender_drawSelectionBox(RenderGlobal instance, EntityPlayer player, RayTraceResult rtr, int alwaysZero, float partialTicks) {
//#else
//#if MC>=10800
//$$ @Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/MovingObjectPosition;IF)V"))
//#else
//$$ @Redirect(method = "renderWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/MovingObjectPosition;IF)V"))
//#endif
//$$ private void replayModRender_drawSelectionBox(RenderGlobal instance, EntityPlayer player, MovingObjectPosition rtr, int alwaysZero, float partialTicks) {
//#endif
//#endif
//$$ if (replayModRender_handler == null) {
//$$ instance.drawSelectionBox(player, rtr, alwaysZero, partialTicks);
//$$ }
//$$ }
//#endif
private int orgRenderDistanceChunks;
//#if MC>=11300
//#if MC>=11400
@Inject(method = "renderCenter", at = @At(value = "JUMP", ordinal = 0))
//#else
//$$ @Inject(method = "updateCameraAndRender(FJ)V", at = @At(value = "JUMP", ordinal = 0))
//#endif
//#else
//#if MC>=10800
//$$ @Inject(method = "renderWorldPass", at = @At(value = "JUMP", ordinal = 0))
//#else
//$$ @Inject(method = "renderWorld", at = @At(value = "INVOKE", ordinal = 0, shift = At.Shift.AFTER,
//$$ target = "Lnet/minecraft/client/renderer/culling/ClippingHelperImpl;getInstance()Lnet/minecraft/client/renderer/culling/ClippingHelper;"))
//#endif
//#endif
private void replayModRender_beforeRenderSky(CallbackInfo ci) {
if (replayModRender_handler != null && replayModRender_handler.getSettings().getChromaKeyingColor() != null) {
GameOptions settings = MCVer.getMinecraft().options;
orgRenderDistanceChunks = settings.viewDistance;
settings.viewDistance = 5; // Set render distance to 5 so we're always rendering sky when chroma keying
}
}
//#if MC>=11300
//#if MC>=11400
@Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;renderSky(F)V"))
//#else
//$$ @Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/WorldRenderer;renderSky(F)V"))
//#endif
private void replayModRender_renderSky(WorldRenderer instance, float partialTicks) {
//#else
//#if MC>=10800
//$$ @Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;renderSky(FI)V"))
//$$ private void replayModRender_renderSky(RenderGlobal instance, float partialTicks, int renderPass) {
//#else
//$$ @Redirect(method = "renderWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;renderSky(F)V"))
//$$ private void replayModRender_renderSky(RenderGlobal instance, float partialTicks) {
//#endif
//#endif
if (replayModRender_handler != null && replayModRender_handler.getSettings().getChromaKeyingColor() != null) {
MCVer.getMinecraft().options.viewDistance = orgRenderDistanceChunks;
ReadableColor color = replayModRender_handler.getSettings().getChromaKeyingColor();
GlStateManager.clearColor(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, 1);
GlStateManager.clear(GL11.GL_COLOR_BUFFER_BIT
//#if MC>=11400
, false
//#endif
);
} else {
//#if MC>=11300
instance.renderSky(partialTicks);
//#else
//#if MC>=10800
//$$ instance.renderSky(partialTicks, renderPass);
//#else
//$$ instance.renderSky(partialTicks);
//#endif
//#endif
}
}
/*
* Stereoscopic Renderer
*/
//#if MC>=11500
//$$ @Inject(method = "method_22973", at = @At("RETURN"), cancellable = true)
//$$ private void replayModRender_setupStereoscopicProjection(CallbackInfoReturnable<Matrix4f> ci) {
//$$ if (replayModRender_getHandler() != null) {
//$$ Matrix4f offset;
//$$ if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
//$$ offset = Matrix4f.translate(0.07f, 0, 0);
//$$ } else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
//$$ offset = Matrix4f.translate(-0.07f, 0, 0);
//$$ } else {
//$$ return;
//$$ }
//$$ offset.multiply(ci.getReturnValue());
//$$ ci.setReturnValue(offset);
//$$ }
//$$ }
//#else
//#if MC>=10800
@Inject(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 0))
//#else
@@ -244,7 +176,20 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
}
}
}
//#endif
//#if MC>=11500
//$$ @Inject(method = "renderWorld", at = @At("HEAD"))
//$$ private void replayModRender_setupStereoscopicProjection(float partialTicks, long frameStartNano, MatrixStack matrixStack, CallbackInfo ci) {
//$$ if (replayModRender_getHandler() != null) {
//$$ if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
//$$ matrixStack.translate(0.1, 0, 0);
//$$ } else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
//$$ matrixStack.translate(-0.1, 0, 0);
//$$ }
//$$ }
//$$ }
//#else
//#if MC>=10800
@Inject(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 1))
//#else
@@ -265,6 +210,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
}
}
}
//#endif
/*
* Cubic Renderer
@@ -276,6 +222,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
return replayModRender_perspective((float) fovY, aspect, zNear, zFar);
}
//#if MC<11500
//#if MC>=11400
@Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;"))
//#else
@@ -289,6 +236,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
private Matrix4f replayModRender_perspective$2(double fovY, float aspect, float zNear, float zFar) {
return replayModRender_perspective((float) fovY, aspect, zNear, zFar);
}
//#endif
private Matrix4f replayModRender_perspective(float fovY, float aspect, float zNear, float zFar) {
if (replayModRender_getHandler() != null && replayModRender_getHandler().omnidirectional) {

View File

@@ -16,16 +16,11 @@ import net.minecraft.client.render.Camera;
@Mixin(BackgroundRenderer.class)
public abstract class MixinFogRenderer {
@Inject(method = "applyFog", at = @At("HEAD"), cancellable = true)
private void replayModRender_onSetupFog(
//#if MC>=11400
Camera camera,
int something,
//#else
//$$ int fogDistanceFlag,
//$$ float partialTicks,
//#endif
CallbackInfo ci
) {
private
//#if MC>=11500
//$$ static
//#endif
void replayModRender_onSetupFog(CallbackInfo ci) {
EntityRendererHandler handler =
((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler();
if (handler == null) return;

View File

@@ -1,6 +1,7 @@
package com.replaymod.render.mixin;
//#if MC>=10904
// FIXME 1.15 seems like the way orientation is passed to particles has changed significantly
//#if MC>=10904 && MC<11500
import com.replaymod.core.versions.MCVer;
import com.replaymod.render.blend.BlendState;
import com.replaymod.render.blend.exporters.ParticlesExporter;

View File

@@ -3,7 +3,6 @@ package com.replaymod.render.mixin;
import com.replaymod.core.versions.MCVer;
import com.replaymod.render.hooks.EntityRendererHandler;
import net.minecraft.client.render.entity.EntityRenderer;
import net.minecraft.entity.Entity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
@@ -11,12 +10,16 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(EntityRenderer.class)
public abstract class MixinRender {
//#if MC>=11500
//$$ @Inject(method = "renderLabelIfPresent", at = @At("HEAD"), cancellable = true)
//#else
//#if MC>=11400
@Inject(method = "renderLabel(Lnet/minecraft/entity/Entity;Ljava/lang/String;DDDI)V", at = @At("HEAD"), cancellable = true)
//#else
//$$ @Inject(method = "renderLivingLabel", at = @At("HEAD"), cancellable = true)
//#endif
private void replayModRender_areAllNamesHidden(Entity entityIn, String str, double x, double y, double z, int maxDistance, CallbackInfo ci) {
//#endif
private void replayModRender_areAllNamesHidden(CallbackInfo ci) {
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler();
if (handler != null && !handler.getSettings().isRenderNameTags()) {
ci.cancel();

View File

@@ -1,4 +1,4 @@
//#if MC>=10800
//#if MC>=10800 && MC<11500
package com.replaymod.render.mixin;
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;

View File

@@ -9,6 +9,13 @@ import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
//#if MC>=11500
//$$ import net.minecraft.client.render.VertexConsumerProvider;
//$$ import net.minecraft.client.util.math.MatrixStack;
//$$ import net.minecraft.client.util.math.Vector3f;
//$$ import net.minecraft.util.math.Quaternion;
//#endif
//#if MC>=10904
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
//#else
@@ -17,12 +24,16 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(EntityRenderDispatcher.class)
public abstract class MixinRenderManager {
@Shadow
private float cameraPitch;
@Shadow
private float cameraYaw;
//#if MC>=11500
//$$ @Shadow private Quaternion rotation;
//#else
@Shadow private float cameraPitch;
@Shadow private float cameraYaw;
//#endif
//#if MC>=11400
//$$ @Inject(method = "render", at = @At("HEAD"))
//#else
//#if MC>=11400
@Inject(method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V", at = @At("HEAD"))
//#else
@@ -32,8 +43,17 @@ public abstract class MixinRenderManager {
//$$ @Inject(method = "doRenderEntity", at = @At("HEAD"))
//#endif
//#endif
//#endif
//#if MC>=10904
private void replayModRender_reorientForCubicRendering(Entity entity, double dx, double dy, double dz, float iDoNotKnow, float partialTicks, boolean iDoNotCare, CallbackInfo ci) {
private void replayModRender_reorientForCubicRendering(Entity entity, double dx, double dy, double dz, float iDoNotKnow, float partialTicks,
//#if MC>=11500
//$$ MatrixStack matrixStack,
//$$ VertexConsumerProvider vertexConsumerProvider,
//$$ int int_1,
//#else
boolean iDoNotCare,
//#endif
CallbackInfo ci) {
//#else
//$$ private void replayModRender_reorientForCubicRendering(Entity entity, double dx, double dy, double dz, float iDoNotKnow, float partialTicks, boolean iDoNotCare, CallbackInfoReturnable<Boolean> ci) {
//#endif
@@ -41,8 +61,14 @@ public abstract class MixinRenderManager {
if (handler != null && handler.omnidirectional) {
double pitch = -Math.atan2(dy, Math.sqrt(dx * dx + dz * dz));
double yaw = -Math.atan2(dx, dz);
//#if MC>=11500
//$$ this.rotation = new Quaternion(0.0F, 0.0F, 0.0F, 1.0F);
//$$ this.rotation.hamiltonProduct(Vector3f.POSITIVE_Y.getDegreesQuaternion((float) -yaw));
//$$ this.rotation.hamiltonProduct(Vector3f.POSITIVE_X.getDegreesQuaternion((float) pitch));
//#else
this.cameraPitch = (float) Math.toDegrees(pitch);
this.cameraYaw = (float) Math.toDegrees(yaw);
//#endif
}
}
}

View File

@@ -0,0 +1,39 @@
package com.replaymod.render.mixin;
import com.mojang.blaze3d.platform.GlStateManager;
import com.replaymod.render.hooks.EntityRendererHandler;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.WorldRenderer;
import org.lwjgl.opengl.GL11;
import org.spongepowered.asm.mixin.Final;
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.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
/**
* Instead of rendering the normal sky, clears the screen with a uniform color for use with chroma keying.
*/
@Mixin(WorldRenderer.class)
public abstract class Mixin_ChromaKeyColorSky {
@Shadow @Final private MinecraftClient client;
@Inject(method = "renderSky", at = @At("HEAD"), cancellable = true)
private void chromaKeyingSky(CallbackInfo ci) {
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) client.gameRenderer).replayModRender_getHandler();
if (handler != null) {
ReadableColor color = handler.getSettings().getChromaKeyingColor();
if (color != null) {
GlStateManager.clearColor(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, 1);
GlStateManager.clear(GL11.GL_COLOR_BUFFER_BIT
//#if MC>=11400
, false
//#endif
);
ci.cancel();
}
}
}
}

View File

@@ -0,0 +1,45 @@
package com.replaymod.render.mixin;
import com.replaymod.render.hooks.EntityRendererHandler;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor;
import net.minecraft.client.MinecraftClient;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.ModifyConstant;
//#if MC>=11500
//$$ import net.minecraft.client.render.WorldRenderer;
//#else
import net.minecraft.client.render.GameRenderer;
//#endif
/**
* Forces the sky to always render when chroma keying is active. Ordinarily it only renders when the render distance is
* at 4 or greater.
*/
//#if MC>=11500
//$$ @Mixin(WorldRenderer.class)
//#else
@Mixin(GameRenderer.class)
//#endif
public abstract class Mixin_ChromaKeyForceSky {
@Shadow @Final private MinecraftClient client;
//#if MC>=11500
//$$ @ModifyConstant(method = "render", constant = @Constant(intValue = 4))
//#else
@ModifyConstant(method = "renderCenter", constant = @Constant(intValue = 4))
//#endif
private int forceSkyWhenChromaKeying(int value) {
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) client.gameRenderer).replayModRender_getHandler();
if (handler != null) {
ReadableColor color = handler.getSettings().getChromaKeyingColor();
if (color != null) {
return 0;
}
}
return value;
}
}

View File

@@ -0,0 +1,98 @@
package com.replaymod.render.mixin;
import com.replaymod.render.capturer.CubicOpenGlFrameCapturer;
import com.replaymod.render.hooks.EntityRendererHandler;
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.CallbackInfo;
//#if MC>=11500
//$$ import net.minecraft.client.util.math.MatrixStack;
//$$ import net.minecraft.client.util.math.Vector3f;
//#else
import org.lwjgl.opengl.GL11;
//#endif
import static com.replaymod.core.versions.MCVer.getMinecraft;
//#if MC>=11500
//$$ @Mixin(value = net.minecraft.client.render.GameRenderer.class)
//#else
//#if MC>=11400
@Mixin(value = net.minecraft.client.render.Camera.class)
//#else
//$$ @Mixin(value = net.minecraft.client.renderer.EntityRenderer.class)
//#endif
//#endif
public abstract class Mixin_CubicRotation {
private EntityRendererHandler getHandler() {
return ((EntityRendererHandler.IEntityRenderer) getMinecraft().gameRenderer).replayModRender_getHandler();
}
//#if MC>=11500
//$$ @Inject(method = "renderWorld", at = @At("HEAD"))
//#else
//#if MC>=11400
@Inject(method = "update", at = @At("HEAD"))
//#else
//$$ @Inject(method = "orientCamera", at = @At("HEAD"))
//#endif
//#endif
private void replayModRender_setupCubicFrameRotation(
//#if MC>=11500
//$$ float partialTicks,
//$$ long frameStartNano,
//$$ MatrixStack matrixStack,
//#endif
CallbackInfo ci
) {
if (getHandler() != null && getHandler().data instanceof CubicOpenGlFrameCapturer.Data) {
CubicOpenGlFrameCapturer.Data data = (CubicOpenGlFrameCapturer.Data) getHandler().data;
float angle = 0;
float x = 0;
float y = 0;
switch (data) {
case FRONT:
angle = 0;
x = 1;
break;
case RIGHT:
angle = 90;
x = 1;
break;
case BACK:
angle = 180;
x = 1;
break;
case LEFT:
angle = -90;
x = 1;
break;
case TOP:
angle = -90;
y = 1;
break;
case BOTTOM:
angle = 90;
y = 1;
break;
}
//#if MC>=11400
//$$ matrixStack.multiply(new Vector3f(x, y, 0).getDegreesQuaternion(angle));
//#else
GL11.glRotatef(angle, x, y, 0);
//#endif
}
//#if MC<11500
if (getHandler() != null && getHandler().omnidirectional) {
// Minecraft goes back a little so we have to revert that
//#if MC>=11300
GL11.glTranslatef(0.0F, 0.0F, -0.05F);
//#else
//$$ GL11.glTranslatef(0.0F, 0.0F, 0.1F);
//#endif
}
//#endif
}
}

View File

@@ -0,0 +1,23 @@
package com.replaymod.render.mixin;
import com.replaymod.render.hooks.EntityRendererHandler;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.WorldRenderer;
import org.spongepowered.asm.mixin.Final;
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.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(WorldRenderer.class)
public abstract class Mixin_SkipBlockOutlinesDuringRender {
@Shadow @Final private MinecraftClient client;
@Inject(method = "drawHighlightedBlockOutline", at = @At("HEAD"), cancellable = true)
private void replayModRender_drawSelectionBox(CallbackInfo ci) {
if (((EntityRendererHandler.IEntityRenderer) client.gameRenderer).replayModRender_getHandler() != null) {
ci.cancel();
}
}
}

View File

@@ -13,6 +13,7 @@ import net.minecraft.client.render.chunk.ChunkRenderer;
@Mixin(WorldRenderer.class)
public interface WorldRendererAccessor {
//#if MC<11500
@Accessor("field_4076")
void setRenderEntitiesStartupCounter(int value);
@@ -26,4 +27,5 @@ public interface WorldRendererAccessor {
@Accessor("chunkRenderers")
Set<ChunkRenderer> getChunksToUpdate();
//#endif
//#endif
}