WIP 1.15 and ReplayStudio v2 update
This commit is contained in:
@@ -174,7 +174,12 @@ public class RenderSettings {
|
||||
|
||||
private static String findFFmpeg() {
|
||||
switch (SystemUtil.getOperatingSystem()) {
|
||||
// TODO not sure why remap fails to remap this (even when manually added to mappings)
|
||||
//#if MC>=11500
|
||||
//$$ case WINDOWS:
|
||||
//#else
|
||||
case field_1133:
|
||||
//#endif
|
||||
// Allow windows users to unpack the ffmpeg archive into a sub-folder of their .minecraft folder
|
||||
File inDotMinecraft = new File(MCVer.getMinecraft().runDirectory, "ffmpeg/bin/ffmpeg.exe");
|
||||
if (inDotMinecraft.exists()) {
|
||||
@@ -182,7 +187,12 @@ public class RenderSettings {
|
||||
return inDotMinecraft.getAbsolutePath();
|
||||
}
|
||||
break;
|
||||
// TODO not sure why remap fails to remap this (even when manually added to mappings)
|
||||
//#if MC>=11500
|
||||
//$$ case OSX:
|
||||
//#else
|
||||
case field_1137:
|
||||
//#endif
|
||||
// The PATH doesn't seem to be set as expected on OSX, therefore we check some common locations ourselves
|
||||
for (String path : new String[]{"/usr/local/bin/ffmpeg", "/usr/bin/ffmpeg"}) {
|
||||
File file = new File(path);
|
||||
|
||||
@@ -11,6 +11,10 @@ import net.minecraft.client.render.VertexFormat;
|
||||
import net.minecraft.client.render.VertexFormatElement;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import com.mojang.datafixers.util.Pair;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
//#if MC>=11200
|
||||
import net.minecraft.client.render.BufferBuilder;
|
||||
@@ -135,7 +139,12 @@ public class BlendMeshBuilder
|
||||
//#else
|
||||
//$$ public static DMesh addBufferToMesh(WorldRenderer bufferBuilder, DMesh mesh, Vector3f vertOffset) {
|
||||
//#endif
|
||||
//#if MC>=11500
|
||||
//$$ Pair<DrawArrayParameters, ByteBuffer> data = bufferBuilder.popData();
|
||||
//$$ return addBufferToMesh(data.getSecond(), data.getFirst().getMode(), data.getFirst().getVertexFormat(), mesh, vertOffset);
|
||||
//#else
|
||||
return addBufferToMesh(bufferBuilder.getByteBuffer(), bufferBuilder.getDrawMode(), bufferBuilder.getVertexFormat(), mesh, vertOffset);
|
||||
//#endif
|
||||
}
|
||||
|
||||
public static DMesh addBufferToMesh(ByteBuffer buffer, int mode, VertexFormat vertexFormat, DMesh mesh, ReadableVector3f vertOffset) {
|
||||
@@ -158,12 +167,20 @@ public class BlendMeshBuilder
|
||||
// Determine offset of vertex components
|
||||
int posOffset = -1, colorOffset = -1, uvOffset = -1;
|
||||
int index = 0;
|
||||
//#if MC>=11500
|
||||
int elementOffset = 0;
|
||||
//#endif
|
||||
for (VertexFormatElement element : getElements(vertexFormat)) {
|
||||
//#if MC>=11500
|
||||
//$$ int offset = elementOffset;
|
||||
//$$ elementOffset += element.getSize();
|
||||
//#else
|
||||
//#if MC>=10809
|
||||
int offset = vertexFormat.getElementOffset(index);
|
||||
//#else
|
||||
//$$ int offset = element.getOffset();
|
||||
//#endif
|
||||
//#endif
|
||||
switch (element.getType()) {
|
||||
case POSITION:
|
||||
//#if MC>=11400
|
||||
|
||||
@@ -3,7 +3,10 @@ package com.replaymod.render.blend;
|
||||
import com.replaymod.render.blend.data.DScene;
|
||||
import com.replaymod.render.blend.data.Serializer;
|
||||
//#if MC>=10800
|
||||
// FIXME 1.15
|
||||
//#if MC<11500
|
||||
import com.replaymod.render.blend.exporters.ChunkExporter;
|
||||
//#endif
|
||||
import com.replaymod.render.blend.exporters.EntityExporter;
|
||||
import com.replaymod.render.blend.exporters.ItemExporter;
|
||||
import com.replaymod.render.blend.exporters.ParticlesExporter;
|
||||
@@ -53,7 +56,10 @@ public class BlendState implements Exporter {
|
||||
//#if MC>=10800
|
||||
RenderState renderState = new RenderState(this);
|
||||
register(renderState);
|
||||
// FIXME 1.15
|
||||
//#if MC<11500
|
||||
register(new ChunkExporter());
|
||||
//#endif
|
||||
register(new EntityExporter(renderState));
|
||||
register(new TileEntityExporter(renderState));
|
||||
register(new ParticlesExporter(renderState));
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//#if MC>=10800
|
||||
// FIXME 1.15
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.exporters;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
|
||||
@@ -124,6 +124,9 @@ public class ItemExporter implements Exporter {
|
||||
//$$ ? stack.getItem().getColorFromItemStack(stack, quad.getTintIndex()) | 0xff000000
|
||||
//#endif
|
||||
: 0xffffffff;
|
||||
//#if MC>=11500
|
||||
//$$ // FIXME 1.15
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
buffer.putVertexData(quad.getVertexData());
|
||||
buffer.setQuadColor(color);
|
||||
@@ -132,6 +135,7 @@ public class ItemExporter implements Exporter {
|
||||
//#else
|
||||
//$$ LightUtil.renderQuadColor(buffer, quad, color);
|
||||
//#endif
|
||||
//#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -67,7 +67,11 @@ public class ModelRendererExporter implements Exporter {
|
||||
}
|
||||
if (object == null) {
|
||||
object = new ModelBasedDObject(model, scale);
|
||||
//#if MC>=11500
|
||||
//$$ object.id.name = "???"; // FIXME 1.15 can we somehow nicely derive this?
|
||||
//#else
|
||||
object.id.name = model.name;
|
||||
//#endif
|
||||
object.setParent(parent);
|
||||
}
|
||||
object.lastFrame = frame;
|
||||
@@ -78,7 +82,11 @@ public class ModelRendererExporter implements Exporter {
|
||||
DMesh mesh = new DMesh();
|
||||
BlendMeshBuilder builder = new BlendMeshBuilder(mesh);
|
||||
for (Box box : cubeList(model)) {
|
||||
//#if MC>=11500
|
||||
//$$ // FIXME 1.15
|
||||
//#else
|
||||
box.render(builder, scale);
|
||||
//#endif
|
||||
}
|
||||
builder.maybeFinishDrawing();
|
||||
return mesh;
|
||||
|
||||
@@ -113,9 +113,16 @@ public class ParticlesExporter implements Exporter {
|
||||
// Instead of actually translating, we just add the translation on the current model-view-matrix.
|
||||
Matrix4f modelView = getGlModelViewMatrix();
|
||||
ParticleAccessor acc = (ParticleAccessor) particle;
|
||||
double dx = acc.getPrevPosX() + (acc.getPosX() - acc.getPrevPosX()) * renderPartialTicks - Particle.cameraX;
|
||||
double dy = acc.getPrevPosY() + (acc.getPosY() - acc.getPrevPosY()) * renderPartialTicks - Particle.cameraY;
|
||||
double dz = acc.getPrevPosZ() + (acc.getPosZ() - acc.getPrevPosZ()) * renderPartialTicks - Particle.cameraZ;
|
||||
double dx = acc.getPrevPosX() + (acc.getPosX() - acc.getPrevPosX()) * renderPartialTicks;
|
||||
double dy = acc.getPrevPosY() + (acc.getPosY() - acc.getPrevPosY()) * renderPartialTicks;
|
||||
double dz = acc.getPrevPosZ() + (acc.getPosZ() - acc.getPrevPosZ()) * renderPartialTicks;
|
||||
//#if MC>=11500
|
||||
//$$ // FIXME 1.15 is this still required?
|
||||
//#else
|
||||
dx -= Particle.cameraX;
|
||||
dy -= Particle.cameraY;
|
||||
dz -= Particle.cameraZ;
|
||||
//#endif
|
||||
Vector3f offset = new Vector3f((float) dx, (float) dy, (float) dz);
|
||||
Matrix4f.translate(offset, modelView, modelView);
|
||||
renderState.pushModelView(modelView);
|
||||
@@ -173,7 +180,11 @@ public class ParticlesExporter implements Exporter {
|
||||
//#else
|
||||
//$$ MCVer.getMinecraft().getRenderViewEntity(),
|
||||
//#endif
|
||||
0, 1, 1, 0, 0, 0);
|
||||
0
|
||||
//#if MC<11500
|
||||
, 1, 1, 0, 0, 0
|
||||
//#endif
|
||||
);
|
||||
//#else
|
||||
//$$ particle.func_180434_a(builder, Minecraft.getMinecraft().getRenderViewEntity(), 0, 1, 1, 0, 0, 0);
|
||||
//#endif
|
||||
|
||||
@@ -15,11 +15,15 @@ import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
//#endif
|
||||
//#endif
|
||||
public interface ContainerLocalRenderInformationAccessor {
|
||||
//#if MC>=11500
|
||||
//$$ @Accessor("chunk")
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
@Accessor("renderer")
|
||||
//#else
|
||||
//$$ @Accessor
|
||||
//#endif
|
||||
//#endif
|
||||
ChunkRenderer getRenderChunk();
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//#if MC>=10800
|
||||
// FIXME 1.15
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.mixin;
|
||||
|
||||
import com.replaymod.render.blend.BlendState;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.mixin;
|
||||
|
||||
import com.replaymod.render.blend.BlendState;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//#if MC>=10800
|
||||
// FIXME 1.15
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.mixin;
|
||||
|
||||
import com.replaymod.render.blend.BlendState;
|
||||
|
||||
@@ -9,6 +9,11 @@ import org.spongepowered.asm.mixin.Mixin;
|
||||
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;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
//#else
|
||||
@@ -19,6 +24,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
public abstract class MixinRenderManager {
|
||||
|
||||
@Inject(
|
||||
//#if MC>=11500
|
||||
//$$ method = "render",
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V",
|
||||
//#else
|
||||
@@ -28,9 +36,17 @@ public abstract class MixinRenderManager {
|
||||
//$$ method = "doRenderEntity",
|
||||
//#endif
|
||||
//#endif
|
||||
//#endif
|
||||
at = @At(value = "INVOKE",
|
||||
target = "Lnet/minecraft/client/render/entity/EntityRenderer;render(Lnet/minecraft/entity/Entity;DDDFF)V"))
|
||||
public void preRender(Entity entity, double x, double y, double z, float yaw, float renderPartialTicks, boolean box,
|
||||
public void preRender(Entity entity, double x, double y, double z, float yaw, float renderPartialTicks,
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack,
|
||||
//$$ VertexConsumerProvider vertexConsumerProvider,
|
||||
//$$ int int_1,
|
||||
//#else
|
||||
boolean box,
|
||||
//#endif
|
||||
//#if MC>=10904
|
||||
CallbackInfo ci) {
|
||||
//#else
|
||||
@@ -43,6 +59,9 @@ public abstract class MixinRenderManager {
|
||||
}
|
||||
|
||||
@Inject(
|
||||
//#if MC>=11500
|
||||
//$$ method = "render",
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V",
|
||||
//#else
|
||||
@@ -52,10 +71,18 @@ public abstract class MixinRenderManager {
|
||||
//$$ method = "doRenderEntity",
|
||||
//#endif
|
||||
//#endif
|
||||
//#endif
|
||||
at = @At(value = "INVOKE",
|
||||
target = "Lnet/minecraft/client/render/entity/EntityRenderer;render(Lnet/minecraft/entity/Entity;DDDFF)V",
|
||||
shift = At.Shift.AFTER))
|
||||
public void postRender(Entity entity, double x, double y, double z, float yaw, float renderPartialTicks, boolean box,
|
||||
public void postRender(Entity entity, double x, double y, double z, float yaw, float renderPartialTicks,
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack,
|
||||
//$$ VertexConsumerProvider vertexConsumerProvider,
|
||||
//$$ int int_1,
|
||||
//#else
|
||||
boolean box,
|
||||
//#endif
|
||||
//#if MC>=10904
|
||||
CallbackInfo ci) {
|
||||
//#else
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//#if MC>=10800
|
||||
// FIXME 1.15
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.mixin;
|
||||
|
||||
import com.replaymod.render.blend.BlendState;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//#if MC>=10800
|
||||
// FIXME 1.15
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.mixin;
|
||||
|
||||
import net.minecraft.client.render.WorldRenderer;
|
||||
|
||||
@@ -18,6 +18,7 @@ import java.nio.ByteBuffer;
|
||||
|
||||
//#if MC>=11300
|
||||
import com.replaymod.render.mixin.MainWindowAccessor;
|
||||
import static com.replaymod.core.versions.MCVer.getWindow;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
@@ -125,7 +126,7 @@ public abstract class OpenGlFrameCapturer<F extends Frame, D extends CaptureData
|
||||
);
|
||||
}
|
||||
//noinspection ConstantConditions
|
||||
MainWindowAccessor mainWindow = (MainWindowAccessor) (Object) mc.window;
|
||||
MainWindowAccessor mainWindow = (MainWindowAccessor) (Object) getWindow(mc);
|
||||
mainWindow.setFramebufferWidth(width);
|
||||
mainWindow.setFramebufferHeight(height);
|
||||
//#else
|
||||
|
||||
@@ -244,7 +244,7 @@ public class GuiVideoRenderer extends GuiScreen implements Tickable {
|
||||
previewTextureDirty = false;
|
||||
}
|
||||
|
||||
guiRenderer.bindTexture(previewTexture);
|
||||
guiRenderer.bindTexture(previewTexture.getGlId());
|
||||
renderPreviewTexture(guiRenderer, size, videoWidth, videoHeight);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//#if MC>=10800
|
||||
// FIXME 1.15 chunk rendering has changed significantly, ignoring this feature for now
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.hooks;
|
||||
|
||||
import com.replaymod.render.mixin.ChunkRenderDispatcherAccessor;
|
||||
|
||||
@@ -8,6 +8,10 @@ import com.replaymod.render.capturer.WorldRenderer;
|
||||
import lombok.Getter;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
import com.replaymod.core.events.PostRenderCallback;
|
||||
import com.replaymod.core.events.PreRenderCallback;
|
||||
@@ -59,7 +63,13 @@ public class EntityRendererHandler implements WorldRenderer {
|
||||
//#endif
|
||||
|
||||
if (mc.world != null && mc.player != null) {
|
||||
mc.gameRenderer.renderWorld(partialTicks, finishTimeNano);
|
||||
mc.gameRenderer.renderWorld(
|
||||
partialTicks,
|
||||
finishTimeNano
|
||||
//#if MC>=11500
|
||||
//$$ , new MatrixStack()
|
||||
//#endif
|
||||
);
|
||||
}
|
||||
|
||||
//#if MC>=11400
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import net.minecraft.client.render.chunk.ChunkBatcher;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -18,6 +18,8 @@ import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.getWindow;
|
||||
|
||||
public class Pipeline<R extends Frame, P extends Frame> implements Runnable {
|
||||
|
||||
private final FrameCapturer<R> capturer;
|
||||
@@ -58,9 +60,9 @@ public class Pipeline<R extends Frame, P extends Frame> implements Runnable {
|
||||
MinecraftClient mc = MCVer.getMinecraft();
|
||||
while (!capturer.isDone() && !Thread.currentThread().isInterrupted()) {
|
||||
//#if MC>=11300
|
||||
if (GLFW.glfwWindowShouldClose(mc.window.getHandle()) || ((MinecraftAccessor) mc).hasCrashed()) {
|
||||
if (GLFW.glfwWindowShouldClose(getWindow(mc).getHandle()) || ((MinecraftAccessor) mc).getCrashReporter() != null) {
|
||||
//#else
|
||||
//$$ if (Display.isCloseRequested() || ((MinecraftAccessor) mc).hasCrashed()) {
|
||||
//$$ if (Display.isCloseRequested() || ((MinecraftAccessor) mc).getCrashReporter() != null) {
|
||||
//#endif
|
||||
Thread.currentThread().interrupt();
|
||||
return;
|
||||
|
||||
@@ -32,6 +32,12 @@ import net.minecraft.util.crash.CrashException;
|
||||
import net.minecraft.sound.SoundCategory;
|
||||
import net.minecraft.client.render.RenderTickCounter;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import com.mojang.blaze3d.systems.RenderSystem;
|
||||
//$$ import net.minecraft.client.util.Window;
|
||||
//$$ import org.lwjgl.opengl.GL11;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11300
|
||||
import com.replaymod.render.mixin.MainWindowAccessor;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
@@ -43,7 +49,9 @@ import org.lwjgl.glfw.GLFW;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
//#if MC<11500
|
||||
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
||||
//#endif
|
||||
import static com.mojang.blaze3d.platform.GlStateManager.*;
|
||||
//#else
|
||||
//$$ import com.replaymod.replay.gui.screen.GuiOpeningReplay;
|
||||
@@ -60,6 +68,7 @@ import java.util.concurrent.Future;
|
||||
import java.util.concurrent.FutureTask;
|
||||
|
||||
import static com.google.common.collect.Iterables.getLast;
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
import static com.replaymod.render.ReplayModRender.LOGGER;
|
||||
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||
@@ -79,7 +88,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
|
||||
private TimelinePlayer timelinePlayer;
|
||||
private Future<Void> timelinePlayerFuture;
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
private ChunkLoadingRenderGlobal chunkLoadingRenderGlobal;
|
||||
//#endif
|
||||
//#if MC<10800
|
||||
@@ -161,11 +170,13 @@ public class VideoRenderer implements RenderInfo {
|
||||
}
|
||||
}
|
||||
|
||||
//#if MC<11500
|
||||
((WorldRendererAccessor) mc.worldRenderer).setRenderEntitiesStartupCounter(0);
|
||||
//#endif
|
||||
|
||||
renderingPipeline.run();
|
||||
|
||||
if (((MinecraftAccessor) mc).hasCrashed()) {
|
||||
if (((MinecraftAccessor) mc).getCrashReporter() != null) {
|
||||
throw new CrashException(((MinecraftAccessor) mc).getCrashReporter());
|
||||
}
|
||||
|
||||
@@ -190,10 +201,10 @@ public class VideoRenderer implements RenderInfo {
|
||||
public float updateForNextFrame() {
|
||||
// because the jGui lib uses Minecraft's displayWidth and displayHeight values, update these temporarily
|
||||
//#if MC>=11300
|
||||
int displayWidthBefore = mc.window.getFramebufferWidth();
|
||||
int displayHeightBefore = mc.window.getFramebufferHeight();
|
||||
int displayWidthBefore = getWindow(mc).getFramebufferWidth();
|
||||
int displayHeightBefore = getWindow(mc).getFramebufferHeight();
|
||||
//noinspection ConstantConditions
|
||||
MainWindowAccessor acc = (MainWindowAccessor) (Object) mc.window;
|
||||
MainWindowAccessor acc = (MainWindowAccessor) (Object) getWindow(mc);
|
||||
acc.setFramebufferWidth(displayWidth);
|
||||
acc.setFramebufferHeight(displayHeight);
|
||||
//#else
|
||||
@@ -248,13 +259,16 @@ public class VideoRenderer implements RenderInfo {
|
||||
timelinePlayer = new TimelinePlayer(replayHandler);
|
||||
timelinePlayerFuture = timelinePlayer.start(timeline);
|
||||
|
||||
// FBOs are always used in 1.14+
|
||||
//#if MC<11400
|
||||
if (!GLX.isUsingFBOs()) {
|
||||
//#if MC>=11300
|
||||
GLFW.glfwSetWindowAttrib(mc.window.getHandle(), GLFW.GLFW_RESIZABLE, 1);
|
||||
GLFW.glfwSetWindowAttrib(getWindow(mc).getHandle(), GLFW.GLFW_RESIZABLE, 1);
|
||||
//#else
|
||||
//$$ Display.setResizable(false);
|
||||
//#endif
|
||||
}
|
||||
//#endif
|
||||
if (mc.options.debugEnabled) {
|
||||
debugInfoWasShown = true;
|
||||
mc.options.debugEnabled = false;
|
||||
@@ -304,7 +318,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
//$$ gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight());
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
chunkLoadingRenderGlobal = new ChunkLoadingRenderGlobal(mc.worldRenderer);
|
||||
//#endif
|
||||
|
||||
@@ -323,13 +337,16 @@ public class VideoRenderer implements RenderInfo {
|
||||
// Tear down of the timeline player might only happen the next tick after it was cancelled
|
||||
timelinePlayer.onTick();
|
||||
|
||||
// FBOs are always used in 1.14+
|
||||
//#if MC<11400
|
||||
if (!GLX.isUsingFBOs()) {
|
||||
//#if MC>=11300
|
||||
GLFW.glfwSetWindowAttrib(mc.window.getHandle(), GLFW.GLFW_RESIZABLE, 0);
|
||||
GLFW.glfwSetWindowAttrib(getWindow(mc).getHandle(), GLFW.GLFW_RESIZABLE, 0);
|
||||
//#else
|
||||
//$$ Display.setResizable(true);
|
||||
//#endif
|
||||
}
|
||||
//#endif
|
||||
mc.options.debugEnabled = debugInfoWasShown;
|
||||
if (mouseWasGrabbed) {
|
||||
//#if MC>=11300
|
||||
@@ -342,7 +359,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
mc.options.setSoundVolume(entry.getKey(), entry.getValue());
|
||||
}
|
||||
mc.openScreen(null);
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
if (chunkLoadingRenderGlobal != null) {
|
||||
chunkLoadingRenderGlobal.uninstall();
|
||||
}
|
||||
@@ -366,7 +383,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
//#endif
|
||||
);
|
||||
//noinspection ConstantConditions
|
||||
MainWindowAccessor acc = (MainWindowAccessor) (Object) mc.window;
|
||||
MainWindowAccessor acc = (MainWindowAccessor) (Object) getWindow(mc);
|
||||
acc.setFramebufferWidth(displayWidth);
|
||||
acc.setFramebufferHeight(displayHeight);
|
||||
//#else
|
||||
@@ -411,7 +428,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
if (!settings.isHighPerformance() && displaySizeChanged()) {
|
||||
updateDisplaySize();
|
||||
//#if MC>=11300
|
||||
guiFramebuffer.resize(mc.window.getFramebufferWidth(), mc.window.getFramebufferHeight()
|
||||
guiFramebuffer.resize(getWindow(mc).getFramebufferWidth(), getWindow(mc).getFramebufferHeight()
|
||||
//#if MC>=11400
|
||||
, false
|
||||
//#endif
|
||||
@@ -430,8 +447,18 @@ public class VideoRenderer implements RenderInfo {
|
||||
enableTexture();
|
||||
guiFramebuffer.beginWrite(true);
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ Window window = getWindow(mc);
|
||||
//$$ RenderSystem.clear(256, MinecraftClient.IS_SYSTEM_MAC);
|
||||
//$$ RenderSystem.matrixMode(GL11.GL_PROJECTION);
|
||||
//$$ RenderSystem.loadIdentity();
|
||||
//$$ RenderSystem.ortho(0, window.getFramebufferWidth() / window.getScaleFactor(), window.getFramebufferHeight() / window.getScaleFactor(), 0, 1000, 3000);
|
||||
//$$ RenderSystem.matrixMode(GL11.GL_MODELVIEW);
|
||||
//$$ RenderSystem.loadIdentity();
|
||||
//$$ RenderSystem.translatef(0, 0, -2000);
|
||||
//#else
|
||||
//#if MC>=11300
|
||||
mc.window.method_4493(
|
||||
getWindow(mc).method_4493(
|
||||
//#if MC>=11400
|
||||
false
|
||||
//#endif
|
||||
@@ -439,9 +466,10 @@ public class VideoRenderer implements RenderInfo {
|
||||
//#else
|
||||
//$$ mc.entityRenderer.setupOverlayRendering();
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
//#if MC>=11300
|
||||
gui.toMinecraft().init(mc, mc.window.getScaledWidth(), mc.window.getScaledHeight());
|
||||
gui.toMinecraft().init(mc, getWindow(mc).getScaledWidth(), getWindow(mc).getScaledHeight());
|
||||
//#else
|
||||
//$$ ScaledResolution scaled = newScaledResolution(mc);
|
||||
//$$ gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight());
|
||||
@@ -482,8 +510,11 @@ public class VideoRenderer implements RenderInfo {
|
||||
guiFramebuffer.draw(displayWidth, displayHeight);
|
||||
popMatrix();
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ getWindow(mc).swapBuffers();
|
||||
//#else
|
||||
//#if MC>=11300
|
||||
mc.window.setFullscreen(false);
|
||||
getWindow(mc).setFullscreen(false);
|
||||
//#else
|
||||
//$$ // if not in high performance mode, update the gui size if screen size changed
|
||||
//$$ // otherwise just swap the progress gui to screen
|
||||
@@ -497,6 +528,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
//#endif
|
||||
//$$ }
|
||||
//#endif
|
||||
//#endif
|
||||
//#if MC>=11300
|
||||
if (mc.mouse.isCursorLocked()) {
|
||||
mc.mouse.unlockCursor();
|
||||
@@ -519,7 +551,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
|
||||
private boolean displaySizeChanged() {
|
||||
//#if MC>=11300
|
||||
return displayWidth != mc.window.getWidth() || displayHeight != mc.window.getHeight();
|
||||
return displayWidth != getWindow(mc).getWidth() || displayHeight != getWindow(mc).getHeight();
|
||||
//#else
|
||||
//$$ return displayWidth != Display.getWidth() || displayHeight != Display.getHeight();
|
||||
//#endif
|
||||
@@ -527,8 +559,8 @@ public class VideoRenderer implements RenderInfo {
|
||||
|
||||
private void updateDisplaySize() {
|
||||
//#if MC>=11300
|
||||
displayWidth = mc.window.getWidth();
|
||||
displayHeight = mc.window.getHeight();
|
||||
displayWidth = getWindow(mc).getWidth();
|
||||
displayHeight = getWindow(mc).getHeight();
|
||||
//#else
|
||||
//$$ displayWidth = Display.getWidth();
|
||||
//$$ displayHeight = Display.getHeight();
|
||||
|
||||
Reference in New Issue
Block a user