diff --git a/src/main/java/com/replaymod/online/PlainFileAuthData.java b/src/main/java/com/replaymod/online/PlainFileAuthData.java index b237d2a4..4ff020ae 100644 --- a/src/main/java/com/replaymod/online/PlainFileAuthData.java +++ b/src/main/java/com/replaymod/online/PlainFileAuthData.java @@ -8,6 +8,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.NoSuchFileException; import java.nio.file.Path; import java.nio.file.StandardOpenOption; @@ -32,7 +33,7 @@ public class PlainFileAuthData implements AuthData { String authKey; try { authKey = new String(Files.readAllBytes(path), StandardCharsets.UTF_8); - } catch (FileNotFoundException ignored) { + } catch (NoSuchFileException | FileNotFoundException ignored) { return; } AuthConfirmation result = apiClient.checkAuthkey(authKey); diff --git a/src/main/java/com/replaymod/render/capturer/OpenGlFrameCapturer.java b/src/main/java/com/replaymod/render/capturer/OpenGlFrameCapturer.java index 2f65b566..3af26f93 100644 --- a/src/main/java/com/replaymod/render/capturer/OpenGlFrameCapturer.java +++ b/src/main/java/com/replaymod/render/capturer/OpenGlFrameCapturer.java @@ -119,6 +119,8 @@ public abstract class OpenGlFrameCapturer=11300 NativeImage data = previewTexture.getTextureData(); assert data != null; - for (int x = 0; x < data.getWidth(); x++) { - for (int y = 0; y < data.getHeight(); y++) { - int value = 0xff << 24 | (buffer.get() & 0xff) << 16 | (buffer.get() & 0xff) << 8 | (buffer.get() & 0xff); - data.setPixelRGBA(x, y, value); + for (int y = 0; y < data.getHeight(); y++) { + for (int x = 0; x < data.getWidth(); x++) { + int r = buffer.get() & 0xff; + int g = buffer.get() & 0xff; + int b = buffer.get() & 0xff; + int value = 0xff << 24 | b << 16 | g << 8 | r; + data.setPixelRGBA(x, y, value); // actually takes ABGR, not RGBA } } //#else diff --git a/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java b/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java index 9566662f..fe6ef9fa 100644 --- a/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java +++ b/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java @@ -88,10 +88,6 @@ public class EntityRendererHandler implements WorldRenderer { this.omnidirectional = omnidirectional; } - public interface GluPerspective { - void replayModRender_gluPerspective(float fovY, float aspect, float zNear, float zFar); - } - public interface IEntityRenderer { void replayModRender_setHandler(EntityRendererHandler handler); EntityRendererHandler replayModRender_getHandler(); diff --git a/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java b/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java index a32a2dcf..aca1cea1 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java +++ b/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java @@ -50,7 +50,7 @@ import static com.replaymod.core.versions.MCVer.*; //#else //$$ @Mixin(value = EntityRenderer.class) //#endif -public abstract class MixinEntityRenderer implements EntityRendererHandler.IEntityRenderer, EntityRendererHandler.GluPerspective { +public abstract class MixinEntityRenderer implements EntityRendererHandler.IEntityRenderer { @Shadow public Minecraft mc; @@ -77,13 +77,16 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti //$$ } //#endif - @Inject(method = "setupFog", at = @At("HEAD"), cancellable = true) - private void replayModRender_onSetupFog(int fogDistanceFlag, float partialTicks, CallbackInfo ci) { - if (replayModRender_handler == null) return; - if (replayModRender_handler.getSettings().getChromaKeyingColor() != null) { - ci.cancel(); - } - } + // Moved to MixinFogRenderer in 1.13 + //#if MC<11300 + //$$ @Inject(method = "setupFog", at = @At("HEAD"), cancellable = true) + //$$ private void replayModRender_onSetupFog(int fogDistanceFlag, float partialTicks, CallbackInfo ci) { + //$$ if (replayModRender_handler == null) return; + //$$ if (replayModRender_handler.getSettings().getChromaKeyingColor() != null) { + //$$ ci.cancel(); + //$$ } + //$$ } + //#endif @Inject(method = "orientCamera", at = @At("HEAD")) private void replayModRender_resetRotationIfNeeded(float partialTicks, CallbackInfo ci) { @@ -109,7 +112,13 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti private float orgRoll; @Inject(method = "setupCameraTransform", at = @At("HEAD")) - private void replayModRender_beforeSetupCameraTransform(float partialTicks, int renderPass, CallbackInfo ci) { + private void replayModRender_beforeSetupCameraTransform( + float partialTicks, + //#if MC<11300 + //$$ int renderPass, + //#endif + CallbackInfo ci + ) { if (replayModRender_handler != null) { Entity entity = getRenderViewEntity(MCVer.getMinecraft()); orgYaw = entity.rotationYaw; @@ -121,7 +130,13 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti } @Inject(method = "setupCameraTransform", at = @At("RETURN")) - private void replayModRender_afterSetupCameraTransform(float partialTicks, int renderPass, CallbackInfo ci) { + private void replayModRender_afterSetupCameraTransform( + float partialTicks, + //#if MC<11300 + //$$ int renderPass, + //#endif + CallbackInfo ci + ) { if (replayModRender_handler != null) { Entity entity = getRenderViewEntity(MCVer.getMinecraft()); entity.rotationYaw = orgYaw; @@ -135,28 +150,41 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti } @Inject(method = "renderHand", at = @At("HEAD"), cancellable = true) - private void replayModRender_renderSpectatorHand(float partialTicks, int renderPass, CallbackInfo ci) { + private void replayModRender_renderSpectatorHand( + float partialTicks, + //#if MC<11300 + //$$ int renderPass, + //#endif + CallbackInfo ci + ) { if (replayModRender_handler != null) { if (replayModRender_handler.omnidirectional) { + // No spectator hands during 360° view, we wouldn't even know where to put it ci.cancel(); - return; // No spectator hands during 360° view, we wouldn't even know where to put it - } - Entity currentEntity = getRenderViewEntity(MCVer.getMinecraft()); - if (currentEntity instanceof EntityPlayer && !(currentEntity instanceof CameraEntity)) { - if (renderPass == 2) { // Need to update render pass - renderPass = replayModRender_handler.data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE ? 1 : 0; - renderHand(partialTicks, renderPass); - ci.cancel(); - } // else, render normally + //#if MC>=11300 } + //#else + //$$ } else { + //$$ Entity currentEntity = getRenderViewEntity(MCVer.getMinecraft()); + //$$ if (currentEntity instanceof EntityPlayer && !(currentEntity instanceof CameraEntity)) { + //$$ if (renderPass == 2) { // Need to update render pass + //$$ renderPass = replayModRender_handler.data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE ? 1 : 0; + //$$ renderHand(partialTicks, renderPass); + //$$ ci.cancel(); + //$$ } // else, render normally + //$$ } + //$$ } + //#endif } } - @Shadow - public abstract void renderHand(float partialTicks, int renderPass); + //#if MC<11300 + //$$ @Shadow + //$$ public abstract void renderHand(float partialTicks, int renderPass); + //#endif //#if MC>=11300 - @Redirect(method = "updateCameraAndRender", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/WorldRenderer;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/math/RayTraceResult;IF)V")) + @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 @@ -179,7 +207,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti private int orgRenderDistanceChunks; //#if MC>=11300 - @Inject(method = "updateCameraAndRender", at = @At(value = "JUMP", ordinal = 0)) + @Inject(method = "updateCameraAndRender(FJ)V", at = @At(value = "JUMP", ordinal = 0)) //#else //#if MC>=10800 //$$ @Inject(method = "renderWorldPass", at = @At(value = "JUMP", ordinal = 0)) @@ -197,7 +225,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti } //#if MC>=11300 - @Redirect(method = "updateCameraAndRender", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/WorldRenderer;renderSky(F)V")) + @Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/WorldRenderer;renderSky(F)V")) private void replayModRender_renderSky(WorldRenderer instance, float partialTicks) { //#else //#if MC>=10800 @@ -235,7 +263,13 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti //#else //$$ @Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glLoadIdentity()V", shift = At.Shift.AFTER, ordinal = 0, remap = false)) //#endif - private void replayModRender_setupStereoscopicProjection(float partialTicks, int renderPass, CallbackInfo ci) { + private void replayModRender_setupStereoscopicProjection( + float partialTicks, + //#if MC<11300 + //$$ int renderPass, + //#endif + CallbackInfo ci + ) { if (replayModRender_getHandler() != null) { if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) { GL11.glTranslatef(0.07f, 0, 0); @@ -250,7 +284,13 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti //#else //$$ @Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glLoadIdentity()V", shift = At.Shift.AFTER, ordinal = 1, remap = false)) //#endif - private void replayModRender_setupStereoscopicModelView(float partialTicks, int renderPass, CallbackInfo ci) { + private void replayModRender_setupStereoscopicModelView( + float partialTicks, + //#if MC<11300 + //$$ int renderPass, + //#endif + CallbackInfo ci + ) { if (replayModRender_getHandler() != null) { if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) { GL11.glTranslatef(0.1f, 0, 0); @@ -265,23 +305,22 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti */ //#if MC>=11300 - @Redirect(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/Matrix4f;perspective(DFFF)V")) - private void replayModRender_gluPerspective$0(double fovY, float aspect, float zNear, float zFar) { - replayModRender_gluPerspective((float) fovY, aspect, zNear, zFar); + @Redirect(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/Matrix4f;perspective(DFFF)Lnet/minecraft/client/renderer/Matrix4f;")) + private Matrix4f replayModRender_perspective$0(double fovY, float aspect, float zNear, float zFar) { + return replayModRender_perspective((float) fovY, aspect, zNear, zFar); } - @Redirect(method = "updateCameraAndRender", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/Matrix4f;perspective(DFFF)V")) - private void replayModRender_gluPerspective$1(double fovY, float aspect, float zNear, float zFar) { - replayModRender_gluPerspective((float) fovY, aspect, zNear, zFar); + @Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/Matrix4f;perspective(DFFF)Lnet/minecraft/client/renderer/Matrix4f;")) + private Matrix4f replayModRender_perspective$1(double fovY, float aspect, float zNear, float zFar) { + return replayModRender_perspective((float) fovY, aspect, zNear, zFar); } - @Override - public void replayModRender_gluPerspective(float fovY, float aspect, float zNear, float zFar) { + private Matrix4f replayModRender_perspective(float fovY, float aspect, float zNear, float zFar) { if (replayModRender_getHandler() != null && replayModRender_getHandler().omnidirectional) { fovY = 90; aspect = 1; } - Matrix4f.perspective(fovY, aspect, zNear, zFar); + return Matrix4f.perspective(fovY, aspect, zNear, zFar); } //#else //$$ @Redirect(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false)) @@ -305,8 +344,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti //$$ } //#endif //$$ - //$$ @Override - //$$ public void replayModRender_gluPerspective(float fovY, float aspect, float zNear, float zFar) { + //$$ private void replayModRender_gluPerspective(float fovY, float aspect, float zNear, float zFar) { //$$ if (replayModRender_getHandler() != null && replayModRender_getHandler().omnidirectional) { //$$ fovY = 90; //$$ aspect = 1; diff --git a/src/main/java/com/replaymod/render/mixin/MixinFogRenderer.java b/src/main/java/com/replaymod/render/mixin/MixinFogRenderer.java new file mode 100644 index 00000000..5f51e5a5 --- /dev/null +++ b/src/main/java/com/replaymod/render/mixin/MixinFogRenderer.java @@ -0,0 +1,24 @@ +//#if MC>=11300 +package com.replaymod.render.mixin; + +import com.replaymod.core.versions.MCVer; +import com.replaymod.render.hooks.EntityRendererHandler; +import net.minecraft.client.renderer.FogRenderer; +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; + +@Mixin(FogRenderer.class) +public abstract class MixinFogRenderer { + @Inject(method = "setupFog", at = @At("HEAD"), cancellable = true) + private void replayModRender_onSetupFog(int fogDistanceFlag, float partialTicks, CallbackInfo ci) { + EntityRendererHandler handler = + ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler(); + if (handler == null) return; + if (handler.getSettings().getChromaKeyingColor() != null) { + ci.cancel(); + } + } +} +//#endif diff --git a/src/main/java/com/replaymod/render/mixin/MixinRenderGlobal.java b/src/main/java/com/replaymod/render/mixin/MixinRenderGlobal.java index 4636d729..86374b7e 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinRenderGlobal.java +++ b/src/main/java/com/replaymod/render/mixin/MixinRenderGlobal.java @@ -39,12 +39,31 @@ public abstract class MixinRenderGlobal { public ChunkRenderDispatcher renderDispatcher; @Shadow - public abstract void setupTerrain(Entity viewEntity, double partialTicks, ICamera camera, - int frameCount, boolean playerSpectator); + public abstract void setupTerrain( + Entity viewEntity, + //#if MC>=11300 + float partialTicks, + //#else + //$$ double partialTicks, + //#endif + ICamera camera, + int frameCount, + boolean playerSpectator + ); @Inject(method = "setupTerrain", at = @At("HEAD"), cancellable = true) - public void replayModRender_setupTerrain(Entity viewEntity, double partialTicks, ICamera camera, - int frameCount, boolean playerSpectator, CallbackInfo ci) { + private void replayModRender_setupTerrain( + Entity viewEntity, + //#if MC>=11300 + float partialTicks, + //#else + //$$ double partialTicks, + //#endif + ICamera camera, + int frameCount, + boolean playerSpectator, + CallbackInfo ci + ) { if (replayModRender_hook != null && !replayModRender_passThroughSetupTerrain) { replayModRender_passThroughSetupTerrain = true; diff --git a/src/main/java/com/replaymod/render/mixin/MixinRenderManager.java b/src/main/java/com/replaymod/render/mixin/MixinRenderManager.java index cc67a9d6..389c7d88 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinRenderManager.java +++ b/src/main/java/com/replaymod/render/mixin/MixinRenderManager.java @@ -23,7 +23,11 @@ public abstract class MixinRenderManager { @Shadow private float playerViewY; - @Inject(method = "doRenderEntity", at = @At("HEAD")) + //#if MC>=11300 + @Inject(method = "renderEntity", at = @At("HEAD")) + //#else + //$$ @Inject(method = "doRenderEntity", at = @At("HEAD")) + //#endif //#if MC>=10904 private void replayModRender_reorientForCubicRendering(Entity entity, double dx, double dy, double dz, float iDoNotKnow, float partialTicks, boolean iDoNotCare, CallbackInfo ci) { //#else diff --git a/src/main/java/com/replaymod/render/rendering/VideoRenderer.java b/src/main/java/com/replaymod/render/rendering/VideoRenderer.java index 84d9c57a..f886624e 100644 --- a/src/main/java/com/replaymod/render/rendering/VideoRenderer.java +++ b/src/main/java/com/replaymod/render/rendering/VideoRenderer.java @@ -181,7 +181,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 - // FIXME is this even necessary? + int displayWidthBefore = mc.mainWindow.framebufferWidth; + int displayHeightBefore = mc.mainWindow.framebufferHeight; + mc.mainWindow.framebufferWidth = displayWidth; + mc.mainWindow.framebufferHeight = displayHeight; //#else //$$ int displayWidthBefore = mc.displayWidth; //$$ int displayHeightBefore = mc.displayHeight; @@ -207,7 +210,8 @@ public class VideoRenderer implements RenderInfo { // change Minecraft's display size back //#if MC>=11300 - // FIXME + mc.mainWindow.framebufferWidth = displayWidthBefore; + mc.mainWindow.framebufferHeight = displayHeightBefore; //#else //$$ mc.displayWidth = displayWidthBefore; //$$ mc.displayHeight = displayHeightBefore; @@ -359,6 +363,8 @@ public class VideoRenderer implements RenderInfo { // Finally, resize the Minecraft framebuffer to the actual width/height of the window //#if MC>=11300 mc.getFramebuffer().createFramebuffer(displayWidth, displayHeight); + mc.mainWindow.framebufferWidth = displayWidth; + mc.mainWindow.framebufferHeight = displayHeight; //#else //$$ mc.resize(displayWidth, displayHeight); //#endif diff --git a/src/main/resources/META-INF/replaymod_at.cfg b/src/main/resources/META-INF/replaymod_at.cfg index 48677d95..2c3a2c35 100644 --- a/src/main/resources/META-INF/replaymod_at.cfg +++ b/src/main/resources/META-INF/replaymod_at.cfg @@ -27,6 +27,12 @@ public net.minecraft.client.Minecraft func_147121_ag()V # rightClickMouse public net.minecraft.client.Minecraft func_147112_ai()V # middleClickMouse public net.minecraft.client.Minecraft func_147115_a(Z)V # sendClickBlockToController +##if MC>=11300 +# MainWindow +public net.minecraft.client.MainWindow field_198131_r # framebufferWidth +public net.minecraft.client.MainWindow field_198132_s # framebufferHeight +##endif + # Packets ##if MC>=11300 public net.minecraft.network.play.server.SPacketJoinGame field_149200_f # maxPlayers diff --git a/src/main/resources/mixins.render.replaymod.json b/src/main/resources/mixins.render.replaymod.json index 305fa27c..ab421e58 100644 --- a/src/main/resources/mixins.render.replaymod.json +++ b/src/main/resources/mixins.render.replaymod.json @@ -11,6 +11,9 @@ //$$ "MixinRendererLivingEntity", //#endif "MixinEntityRenderer", + //#if MC>=11300 + "MixinFogRenderer", + //#endif "MixinFrustum", "MixinRender", //#if MC>=10800