Use MainWindowAccessor across all versions

This commit is contained in:
Jonas Herzig
2021-02-23 13:37:06 +01:00
parent e4da7f331b
commit 4eeaca5af1
5 changed files with 32 additions and 21 deletions

View File

@@ -2,9 +2,11 @@ package com.replaymod.core.versions;
import com.replaymod.core.mixin.GuiScreenAccessor;
import com.replaymod.core.mixin.MinecraftAccessor;
import com.replaymod.render.mixin.MainWindowAccessor;
import com.replaymod.replaystudio.protocol.PacketTypeRegistry;
import com.replaymod.replaystudio.us.myles.ViaVersion.api.protocol.ProtocolVersion;
import com.replaymod.replaystudio.us.myles.ViaVersion.packets.State;
import de.johni0702.minecraft.gui.utils.NonNull;
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
@@ -38,7 +40,6 @@ import java.util.ArrayList;
//#if MC>=11400
import com.replaymod.core.mixin.AbstractButtonWidgetAccessor;
import com.replaymod.render.mixin.MainWindowAccessor;
import net.minecraft.SharedConstants;
import net.minecraft.client.gl.Framebuffer;
import net.minecraft.client.gui.widget.ButtonWidget;
@@ -464,13 +465,17 @@ public class MCVer {
}
//#if MC>=11400
public static Window getWindow(MinecraftClient mc) {
public static @NonNull Window getWindow(MinecraftClient mc) {
//#if MC>=11500
return mc.getWindow();
//#else
//$$ return mc.window;
//#endif
}
//#else
//$$ public static @NonNull MainWindowAccessor getWindow(Minecraft mc) {
//$$ return (MainWindowAccessor) mc;
//$$ }
//#endif
//#if MC>=11400

View File

@@ -1,4 +1,3 @@
//#if MC>=11400
package com.replaymod.render.mixin;
import net.minecraft.client.util.Window;
@@ -7,9 +6,12 @@ import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(Window.class)
public interface MainWindowAccessor {
@Accessor
int getFramebufferWidth();
@Accessor
void setFramebufferWidth(int value);
@Accessor
int getFramebufferHeight();
@Accessor
void setFramebufferHeight(int value);
}
//#endif

View File

@@ -19,6 +19,7 @@ import com.replaymod.render.gui.GuiRenderingDone;
import com.replaymod.render.gui.GuiVideoRenderer;
import com.replaymod.render.hooks.ForceChunkLoadingHook;
import com.replaymod.render.metadata.MetadataInjector;
import com.replaymod.render.mixin.MainWindowAccessor;
import com.replaymod.render.mixin.WorldRendererAccessor;
import com.replaymod.replay.ReplayHandler;
import com.replaymod.replaystudio.pathing.path.Keyframe;
@@ -46,7 +47,6 @@ import org.lwjgl.opengl.GL11;
//#if MC>=11400
import com.replaymod.render.EXRWriter;
import com.replaymod.render.mixin.MainWindowAccessor;
import net.minecraft.client.gui.screen.Screen;
import org.lwjgl.glfw.GLFW;
import java.util.concurrent.CompletableFuture;
@@ -232,19 +232,11 @@ public class VideoRenderer implements RenderInfo {
@Override
public float updateForNextFrame() {
// because the jGui lib uses Minecraft's displayWidth and displayHeight values, update these temporarily
//#if MC>=11400
int displayWidthBefore = getWindow(mc).getFramebufferWidth();
int displayHeightBefore = getWindow(mc).getFramebufferHeight();
//noinspection ConstantConditions
MainWindowAccessor acc = (MainWindowAccessor) (Object) getWindow(mc);
int displayWidthBefore = acc.getFramebufferWidth();
int displayHeightBefore = acc.getFramebufferHeight();
acc.setFramebufferWidth(displayWidth);
acc.setFramebufferHeight(displayHeight);
//#else
//$$ int displayWidthBefore = mc.displayWidth;
//$$ int displayHeightBefore = mc.displayHeight;
//$$ mc.displayWidth = displayWidth;
//$$ mc.displayHeight = displayHeight;
//#endif
if (!settings.isHighPerformance() || framesDone % fps == 0) {
while (drawGui() && paused) {
@@ -285,13 +277,8 @@ public class VideoRenderer implements RenderInfo {
}
// change Minecraft's display size back
//#if MC>=11400
acc.setFramebufferWidth(displayWidthBefore);
acc.setFramebufferHeight(displayHeightBefore);
//#else
//$$ mc.displayWidth = displayWidthBefore;
//$$ mc.displayHeight = displayHeightBefore;
//#endif
if (cameraPathExporter != null) {
cameraPathExporter.recordFrame(timer.tickDelta);

View File

@@ -20,8 +20,8 @@
//#if MC>=11400
"Mixin_PreserveDepthDuringHandRendering",
"Mixin_WindowsWorkaroundForTinyEXRNatives",
"MainWindowAccessor",
//#endif
"MainWindowAccessor",
"WorldRendererAccessor",
//#if MC>=10904
"MixinParticleManager",

View File

@@ -0,0 +1,17 @@
package com.replaymod.render.mixin;
import net.minecraft.client.Minecraft;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(Minecraft.class)
public interface MainWindowAccessor {
@Accessor("displayWidth")
int getFramebufferWidth();
@Accessor("displayWidth")
void setFramebufferWidth(int value);
@Accessor("displayHeight")
int getFramebufferHeight();
@Accessor("displayHeight")
void setFramebufferHeight(int value);
}