diff --git a/src/main/java/com/replaymod/core/ReplayMod.java b/src/main/java/com/replaymod/core/ReplayMod.java index ed840ffa..fbe56f50 100755 --- a/src/main/java/com/replaymod/core/ReplayMod.java +++ b/src/main/java/com/replaymod/core/ReplayMod.java @@ -8,6 +8,7 @@ import com.replaymod.core.handler.MainMenuHandler; import com.replaymod.core.utils.OpenGLUtils; import com.replaymod.core.versions.MCVer; import com.replaymod.recording.ReplayModRecording; +import com.replaymod.render.ReplayModRender; import com.replaymod.replay.ReplayModReplay; import com.replaymod.replaystudio.util.I18n; import de.johni0702.minecraft.gui.container.GuiScreen; @@ -163,6 +164,7 @@ public class ReplayMod implements Module { modules.add(this); modules.add(new ReplayModRecording(this)); modules.add(new ReplayModReplay(this)); + modules.add(new ReplayModRender(this)); //#if MC>=11300 settingsRegistry.register(); diff --git a/src/main/java/com/replaymod/core/versions/MCVer.java b/src/main/java/com/replaymod/core/versions/MCVer.java index 8d620079..6213cac0 100644 --- a/src/main/java/com/replaymod/core/versions/MCVer.java +++ b/src/main/java/com/replaymod/core/versions/MCVer.java @@ -345,8 +345,7 @@ public class MCVer { return world.playerEntities; } - /* FIXME - public static BooleanState fog() { + public static GlStateManager.BooleanState fog() { //#if MC>=11300 return GlStateManager.FOG.fog; //#else @@ -362,7 +361,7 @@ public class MCVer { //#endif } - public static void fog(BooleanState fog) { + public static void fog(GlStateManager.BooleanState fog) { //#if MC>=11300 GlStateManager.FOG.fog = fog; //#else @@ -378,7 +377,7 @@ public class MCVer { //#endif } - public static BooleanState texture2DState(int index) { + public static GlStateManager.BooleanState texture2DState(int index) { //#if MC>=11300 return GlStateManager.TEXTURES[index].texture2DState; //#else @@ -390,7 +389,7 @@ public class MCVer { //#endif } - public static void texture2DState(int index, BooleanState texture2DState) { + public static void texture2DState(int index, GlStateManager.BooleanState texture2DState) { //#if MC>=11300 GlStateManager.TEXTURES[index].texture2DState = texture2DState; //#else @@ -401,7 +400,6 @@ public class MCVer { //#endif //#endif } - */ public static void ServerList_saveSingleServer(ServerData serverData) { //#if MC>=10904 @@ -612,6 +610,14 @@ public class MCVer { //#endif } + public static long milliTime() { + //#if MC>=11300 + return Util.milliTime(); + //#else + //$$ return Minecraft.getSystemTime(); + //#endif + } + public static File Minecraft_mcDataDir(Minecraft mc) { //#if MC>=11300 return mc.gameDir; diff --git a/src/main/java/com/replaymod/render/RenderSettings.java b/src/main/java/com/replaymod/render/RenderSettings.java index 2d158800..917fc9bb 100644 --- a/src/main/java/com/replaymod/render/RenderSettings.java +++ b/src/main/java/com/replaymod/render/RenderSettings.java @@ -1,12 +1,12 @@ package com.replaymod.render; +import com.replaymod.core.versions.MCVer; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor; import lombok.AllArgsConstructor; import lombok.Data; import lombok.Getter; -import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; import net.minecraft.util.Util; -import org.lwjgl.util.ReadableColor; import java.io.File; import java.util.Arrays; @@ -15,11 +15,15 @@ import java.util.Optional; import static com.replaymod.render.ReplayModRender.LOGGER; +//#if MC>=11300 +import org.apache.maven.artifact.versioning.ComparableVersion; +//#else //#if MC>=10800 -import net.minecraftforge.fml.common.versioning.ComparableVersion; +//$$ import net.minecraftforge.fml.common.versioning.ComparableVersion; //#else //$$ import cpw.mods.fml.common.versioning.ComparableVersion; //#endif +//#endif @Data public class RenderSettings { @@ -170,7 +174,7 @@ public class RenderSettings { switch (Util.getOSType()) { case WINDOWS: // Allow windows users to unpack the ffmpeg archive into a sub-folder of their .minecraft folder - File inDotMinecraft = new File(Minecraft.getMinecraft().mcDataDir, "ffmpeg/bin/ffmpeg.exe"); + File inDotMinecraft = new File(MCVer.mcDataDir(MCVer.getMinecraft()), "ffmpeg/bin/ffmpeg.exe"); if (inDotMinecraft.exists()) { LOGGER.debug("FFmpeg found in .minecraft/ffmpeg"); return inDotMinecraft.getAbsolutePath(); diff --git a/src/main/java/com/replaymod/render/ReplayModRender.java b/src/main/java/com/replaymod/render/ReplayModRender.java index 1f9cfcda..15cf3414 100644 --- a/src/main/java/com/replaymod/render/ReplayModRender.java +++ b/src/main/java/com/replaymod/render/ReplayModRender.java @@ -1,65 +1,57 @@ package com.replaymod.render; +import com.replaymod.core.Module; import com.replaymod.core.ReplayMod; import com.replaymod.render.utils.RenderJob; import com.replaymod.replay.events.ReplayCloseEvent; import net.minecraft.crash.CrashReport; -import net.minecraft.util.ReportedException; -import net.minecraftforge.common.config.Configuration; import org.apache.commons.io.FileUtils; +import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; //#if MC>=10800 import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +//#if MC>=11300 +import net.minecraftforge.eventbus.api.SubscribeEvent; +//#else +//$$ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +//#endif //#else //$$ import cpw.mods.fml.common.Mod; -//$$ import cpw.mods.fml.common.event.FMLPreInitializationEvent; //$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent; //#endif import java.io.File; import java.io.IOException; +import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import static com.replaymod.core.versions.MCVer.*; -@Mod(modid = ReplayModRender.MOD_ID, - version = "@MOD_VERSION@", - acceptedMinecraftVersions = "@MC_VERSION@", - acceptableRemoteVersions = "*", - //#if MC>=10800 - clientSideOnly = true, - //#endif - useMetadata = true) -public class ReplayModRender { - public static final String MOD_ID = "replaymod-render"; - - @Mod.Instance(MOD_ID) +public class ReplayModRender implements Module { + { instance = this; } public static ReplayModRender instance; private ReplayMod core; - public static Logger LOGGER; + public static Logger LOGGER = LogManager.getLogger(); - private Configuration configuration; private final List renderQueue = new ArrayList<>(); + public ReplayModRender(ReplayMod core) { + this.core = core; + + core.getSettingsRegistry().register(Setting.class); + } + public ReplayMod getCore() { return core; } - @Mod.EventHandler - public void preInit(FMLPreInitializationEvent event) { - LOGGER = event.getModLog(); - core = ReplayMod.instance; - configuration = new Configuration(event.getSuggestedConfigurationFile()); - + @Override + public void initClient() { FML_BUS.register(this); - - core.getSettingsRegistry().register(Setting.class); } @SubscribeEvent @@ -69,17 +61,17 @@ public class ReplayModRender { public File getVideoFolder() { String path = core.getSettingsRegistry().get(Setting.RENDER_PATH); - File folder = new File(path.startsWith("./") ? core.getMinecraft().mcDataDir : null, path); + File folder = new File(path.startsWith("./") ? mcDataDir(core.getMinecraft()) : null, path); try { FileUtils.forceMkdir(folder); } catch (IOException e) { - throw new ReportedException(CrashReport.makeCrashReport(e, "Cannot create video folder.")); + throw newReportedException(CrashReport.makeCrashReport(e, "Cannot create video folder.")); } return folder; } - public Configuration getConfiguration() { - return configuration; + public Path getRenderSettingsPath() { + return mcDataDir(core.getMinecraft()).toPath().resolve("config/replaymod-rendersettings.json"); } public List getRenderQueue() { diff --git a/src/main/java/com/replaymod/render/VideoWriter.java b/src/main/java/com/replaymod/render/VideoWriter.java index 792814f4..e90cedcb 100755 --- a/src/main/java/com/replaymod/render/VideoWriter.java +++ b/src/main/java/com/replaymod/render/VideoWriter.java @@ -1,18 +1,18 @@ package com.replaymod.render; +import com.replaymod.core.versions.MCVer; import com.replaymod.render.frame.RGBFrame; import com.replaymod.render.rendering.FrameConsumer; import com.replaymod.render.rendering.VideoRenderer; import com.replaymod.render.utils.ByteBufferPool; import com.replaymod.render.utils.StreamPipe; -import net.minecraft.client.Minecraft; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import net.minecraft.crash.CrashReport; import net.minecraft.crash.CrashReportCategory; import org.apache.commons.exec.CommandLine; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.io.output.TeeOutputStream; -import org.lwjgl.util.ReadableDimension; import java.io.ByteArrayOutputStream; import java.io.File; @@ -68,7 +68,7 @@ public class VideoWriter implements FrameConsumer { } catch (IOException e) { throw new NoFFmpegException(e); } - File exportLogFile = new File(Minecraft.getMinecraft().mcDataDir, "export.log"); + File exportLogFile = new File(MCVer.mcDataDir(MCVer.getMinecraft()), "export.log"); OutputStream exportLogOut = new TeeOutputStream(new FileOutputStream(exportLogFile), ffmpegLog); new StreamPipe(process.getInputStream(), exportLogOut).start(); new StreamPipe(process.getErrorStream(), exportLogOut).start(); @@ -124,9 +124,9 @@ public class VideoWriter implements FrameConsumer { } CrashReport report = CrashReport.makeCrashReport(t, "Exporting frame"); CrashReportCategory exportDetails = report.makeCategory("Export details"); - exportDetails.addCrashSection("Export command", settings.getExportCommand()); - exportDetails.addCrashSection("Export args", commandArgs); - Minecraft.getMinecraft().crashed(report); + MCVer.addDetail(exportDetails, "Export command", settings::getExportCommand); + MCVer.addDetail(exportDetails, "Export args", commandArgs::toString); + MCVer.getMinecraft().crashed(report); } } diff --git a/src/main/java/com/replaymod/render/capturer/ODSFrameCapturer.java b/src/main/java/com/replaymod/render/capturer/ODSFrameCapturer.java index 465575e8..e3c6d2bf 100644 --- a/src/main/java/com/replaymod/render/capturer/ODSFrameCapturer.java +++ b/src/main/java/com/replaymod/render/capturer/ODSFrameCapturer.java @@ -1,16 +1,16 @@ package com.replaymod.render.capturer; +import com.replaymod.core.versions.MCVer; import com.replaymod.render.RenderSettings; import com.replaymod.render.frame.CubicOpenGlFrame; import com.replaymod.render.frame.ODSOpenGlFrame; import com.replaymod.render.frame.OpenGlFrame; import com.replaymod.render.rendering.FrameCapturer; import com.replaymod.render.shader.Program; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import net.minecraft.client.Minecraft; import net.minecraft.crash.CrashReport; -import net.minecraft.util.ReportedException; import net.minecraft.util.ResourceLocation; -import org.lwjgl.util.ReadableDimension; //#if MC>=10800 import net.minecraft.client.renderer.GlStateManager; @@ -38,7 +38,7 @@ public class ODSFrameCapturer implements FrameCapturer { private final BooleanState[] previousStates = new BooleanState[3]; private final BooleanState previousFogState; - private final Minecraft mc = Minecraft.getMinecraft(); + private final Minecraft mc = MCVer.getMinecraft(); public ODSFrameCapturer(WorldRenderer worldRenderer, final RenderInfo renderInfo, int frameSize) { RenderInfo fakeInfo = new RenderInfo() { @@ -98,7 +98,7 @@ public class ODSFrameCapturer implements FrameCapturer { }); shaderProgram.stopUsing(); } catch (Exception e) { - throw new ReportedException(CrashReport.makeCrashReport(e, "Creating ODS shaders")); + throw newReportedException(CrashReport.makeCrashReport(e, "Creating ODS shaders")); } } diff --git a/src/main/java/com/replaymod/render/capturer/OpenGlFrameCapturer.java b/src/main/java/com/replaymod/render/capturer/OpenGlFrameCapturer.java index 6654b43f..0f7ab0de 100644 --- a/src/main/java/com/replaymod/render/capturer/OpenGlFrameCapturer.java +++ b/src/main/java/com/replaymod/render/capturer/OpenGlFrameCapturer.java @@ -1,16 +1,17 @@ package com.replaymod.render.capturer; +import com.replaymod.core.versions.MCVer; import com.replaymod.render.frame.OpenGlFrame; import com.replaymod.render.rendering.Frame; import com.replaymod.render.rendering.FrameCapturer; import com.replaymod.render.utils.ByteBufferPool; +import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; +import de.johni0702.minecraft.gui.utils.lwjgl.WritableDimension; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.shader.Framebuffer; import org.lwjgl.opengl.GL11; -import org.lwjgl.util.Dimension; -import org.lwjgl.util.ReadableDimension; -import org.lwjgl.util.WritableDimension; import java.io.IOException; import java.nio.ByteBuffer; @@ -30,7 +31,7 @@ public abstract class OpenGlFrameCapturer=11300 + Framebuffer fb = mc.getFramebuffer(); + if (fb.framebufferWidth != width || fb.framebufferHeight != height) { + fb.createFramebuffer(width, height); } - } - - private void setWindowSize(int width, int height) { - mc.resize(width, height); + //#else + //$$ if (width != mc.displayWidth || height != mc.displayHeight) { + //$$ setWindowSize(width, height); + //$$ mc.resize(width, height); + //$$ } + //#endif } @Override diff --git a/src/main/java/com/replaymod/render/capturer/RenderInfo.java b/src/main/java/com/replaymod/render/capturer/RenderInfo.java index 72f7596e..826214c3 100644 --- a/src/main/java/com/replaymod/render/capturer/RenderInfo.java +++ b/src/main/java/com/replaymod/render/capturer/RenderInfo.java @@ -1,7 +1,7 @@ package com.replaymod.render.capturer; import com.replaymod.render.RenderSettings; -import org.lwjgl.util.ReadableDimension; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; public interface RenderInfo { ReadableDimension getFrameSize(); diff --git a/src/main/java/com/replaymod/render/capturer/SimplePboOpenGlFrameCapturer.java b/src/main/java/com/replaymod/render/capturer/SimplePboOpenGlFrameCapturer.java index 13492562..4914d5a2 100644 --- a/src/main/java/com/replaymod/render/capturer/SimplePboOpenGlFrameCapturer.java +++ b/src/main/java/com/replaymod/render/capturer/SimplePboOpenGlFrameCapturer.java @@ -3,9 +3,9 @@ package com.replaymod.render.capturer; import com.replaymod.render.frame.OpenGlFrame; import com.replaymod.render.utils.ByteBufferPool; import com.replaymod.render.utils.PixelBufferObject; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import net.minecraft.client.renderer.OpenGlHelper; import org.lwjgl.opengl.GL11; -import org.lwjgl.util.ReadableDimension; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/src/main/java/com/replaymod/render/events/ReplayRenderEvent.java b/src/main/java/com/replaymod/render/events/ReplayRenderEvent.java index a6ff19b9..4bb94b80 100644 --- a/src/main/java/com/replaymod/render/events/ReplayRenderEvent.java +++ b/src/main/java/com/replaymod/render/events/ReplayRenderEvent.java @@ -5,7 +5,11 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; //#if MC>=10800 -import net.minecraftforge.fml.common.eventhandler.Event; +//#if MC>=11300 +import net.minecraftforge.eventbus.api.Event; +//#else +//$$ import net.minecraftforge.fml.common.eventhandler.Event; +//#endif //#else //$$ import cpw.mods.fml.common.eventhandler.Event; //#endif diff --git a/src/main/java/com/replaymod/render/frame/OpenGlFrame.java b/src/main/java/com/replaymod/render/frame/OpenGlFrame.java index 1d595aab..82d40770 100644 --- a/src/main/java/com/replaymod/render/frame/OpenGlFrame.java +++ b/src/main/java/com/replaymod/render/frame/OpenGlFrame.java @@ -1,9 +1,9 @@ package com.replaymod.render.frame; import com.replaymod.render.rendering.Frame; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import lombok.Getter; import lombok.RequiredArgsConstructor; -import org.lwjgl.util.ReadableDimension; import java.nio.ByteBuffer; diff --git a/src/main/java/com/replaymod/render/frame/RGBFrame.java b/src/main/java/com/replaymod/render/frame/RGBFrame.java index 8a1f5a8c..57a9904e 100644 --- a/src/main/java/com/replaymod/render/frame/RGBFrame.java +++ b/src/main/java/com/replaymod/render/frame/RGBFrame.java @@ -1,9 +1,9 @@ package com.replaymod.render.frame; import com.replaymod.render.rendering.Frame; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import lombok.Getter; import org.apache.commons.lang3.Validate; -import org.lwjgl.util.ReadableDimension; import java.nio.ByteBuffer; diff --git a/src/main/java/com/replaymod/render/gui/GuiExportFailed.java b/src/main/java/com/replaymod/render/gui/GuiExportFailed.java index 930851ca..d9eb4e1c 100644 --- a/src/main/java/com/replaymod/render/gui/GuiExportFailed.java +++ b/src/main/java/com/replaymod/render/gui/GuiExportFailed.java @@ -13,11 +13,12 @@ import de.johni0702.minecraft.gui.layout.HorizontalLayout; import de.johni0702.minecraft.gui.layout.VerticalLayout; import net.minecraft.crash.CrashReport; import net.minecraft.crash.CrashReportCategory; -import net.minecraft.util.ReportedException; import java.util.Arrays; import java.util.function.Consumer; +import static com.replaymod.core.versions.MCVer.addDetail; +import static com.replaymod.core.versions.MCVer.newReportedException; import static com.replaymod.render.ReplayModRender.LOGGER; public class GuiExportFailed extends GuiScreen { @@ -31,9 +32,9 @@ public class GuiExportFailed extends GuiScreen { // If they haven't, then this is probably a faulty ffmpeg installation and there's nothing we can do CrashReport crashReport = CrashReport.makeCrashReport(e, "Exporting video"); CrashReportCategory details = crashReport.makeCategory("Export details"); - details.addCrashSection("Settings", settings); - details.addCrashSection("FFmpeg log", e.getLog()); - throw new ReportedException(crashReport); + addDetail(details, "Settings", settings::toString); + addDetail(details, "FFmpeg log", e::getLog); + throw newReportedException(crashReport); } else { // If they have, ask them whether it was intentional GuiExportFailed gui = new GuiExportFailed(e, doRestart); diff --git a/src/main/java/com/replaymod/render/gui/GuiRenderQueue.java b/src/main/java/com/replaymod/render/gui/GuiRenderQueue.java index 7801479f..ef3cf4e3 100644 --- a/src/main/java/com/replaymod/render/gui/GuiRenderQueue.java +++ b/src/main/java/com/replaymod/render/gui/GuiRenderQueue.java @@ -27,10 +27,10 @@ import de.johni0702.minecraft.gui.layout.HorizontalLayout; import de.johni0702.minecraft.gui.popup.AbstractGuiPopup; import de.johni0702.minecraft.gui.popup.GuiYesNoPopup; import de.johni0702.minecraft.gui.utils.Colors; +import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import net.minecraft.client.gui.GuiErrorScreen; import net.minecraft.crash.CrashReport; -import org.lwjgl.util.Dimension; -import org.lwjgl.util.ReadableDimension; import javax.annotation.Nullable; import java.util.List; diff --git a/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java b/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java index 76593189..792b4262 100644 --- a/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java +++ b/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java @@ -28,18 +28,21 @@ import de.johni0702.minecraft.gui.popup.GuiFileChooserPopup; import de.johni0702.minecraft.gui.utils.Colors; import de.johni0702.minecraft.gui.utils.Consumer; import de.johni0702.minecraft.gui.utils.Utils; +import de.johni0702.minecraft.gui.utils.lwjgl.Color; +import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import net.minecraft.client.gui.GuiErrorScreen; import net.minecraft.client.resources.I18n; import net.minecraft.crash.CrashReport; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.common.config.Property; -import org.lwjgl.util.Color; -import org.lwjgl.util.Dimension; -import org.lwjgl.util.ReadableColor; -import org.lwjgl.util.ReadableDimension; import javax.annotation.Nullable; import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; @@ -294,7 +297,14 @@ public class GuiRenderSettings extends GuiScreen implements Closeable { this.replayHandler = replayHandler; this.timeline = timeline; - String json = getConfigProperty(ReplayModRender.instance.getConfiguration()).getString(); + Path path = ReplayModRender.instance.getRenderSettingsPath(); + String json = "{}"; + try { + json = new String(Files.readAllBytes(path), StandardCharsets.UTF_8); + } catch (FileNotFoundException ignored) { + } catch (IOException e) { + LOGGER.error("Reading render settings:", e); + } RenderSettings settings = new GsonBuilder() .registerTypeAdapter(RenderSettings.class, (InstanceCreator) type -> getDefaultRenderSettings()) .registerTypeAdapter(ReadableColor.class, new Gson().getAdapter(Color.class)) @@ -506,14 +516,12 @@ public class GuiRenderSettings extends GuiScreen implements Closeable { public void close() { RenderSettings settings = save(true); String json = new Gson().toJson(settings); - Configuration config = ReplayModRender.instance.getConfiguration(); - getConfigProperty(config).set(json); - config.save(); - } - - protected Property getConfigProperty(Configuration configuration) { - return configuration.get("rendersettings", "settings", "{}", - "Last state of the render settings GUI. Internal use only."); + Path path = ReplayModRender.instance.getRenderSettingsPath(); + try { + Files.write(path, json.getBytes(StandardCharsets.UTF_8)); + } catch (IOException e) { + LOGGER.error("Saving render settings:", e); + } } public ReplayHandler getReplayHandler() { diff --git a/src/main/java/com/replaymod/render/gui/GuiRenderingDone.java b/src/main/java/com/replaymod/render/gui/GuiRenderingDone.java index 659f145e..6e534d4d 100644 --- a/src/main/java/com/replaymod/render/gui/GuiRenderingDone.java +++ b/src/main/java/com/replaymod/render/gui/GuiRenderingDone.java @@ -1,6 +1,7 @@ package com.replaymod.render.gui; import com.replaymod.core.SettingsRegistry; +import com.replaymod.core.versions.MCVer; import com.replaymod.render.RenderSettings; import com.replaymod.render.ReplayModRender; import com.replaymod.render.Setting; @@ -13,13 +14,8 @@ import de.johni0702.minecraft.gui.layout.CustomLayout; import de.johni0702.minecraft.gui.layout.HorizontalLayout; import de.johni0702.minecraft.gui.layout.VerticalLayout; import lombok.RequiredArgsConstructor; -import net.minecraft.util.Util; -import org.apache.logging.log4j.LogManager; -import org.lwjgl.Sys; -import java.awt.*; import java.io.File; -import java.io.IOException; @RequiredArgsConstructor public class GuiRenderingDone extends GuiScreen { @@ -34,30 +30,7 @@ public class GuiRenderingDone extends GuiScreen { public final GuiButton openFolder = new GuiButton().onClick(new Runnable() { @Override public void run() { - File folder = videoFile.getParentFile(); - String path = folder.getAbsolutePath(); - - // First try OS specific methods - try { - switch (Util.getOSType()) { - case WINDOWS: - Runtime.getRuntime().exec(String.format("cmd.exe /C start \"Open file\" \"%s\"", path)); - return; - case OSX: - Runtime.getRuntime().exec(new String[]{"/usr/bin/open", path}); - return; - } - } catch (IOException e) { - LogManager.getLogger().error("Cannot open file", e); - } - - // Otherwise try the java way - try { - Desktop.getDesktop().browse(folder.toURI()); - } catch (Throwable throwable) { - // And if all fails, lwjgl - Sys.openURL("file://" + path); - } + MCVer.openFile(videoFile.getParentFile()); } }).setSize(200, 20).setI18nLabel("replaymod.gui.openfolder"); diff --git a/src/main/java/com/replaymod/render/gui/GuiVideoRenderer.java b/src/main/java/com/replaymod/render/gui/GuiVideoRenderer.java index d8c00b4c..c9aa63ce 100644 --- a/src/main/java/com/replaymod/render/gui/GuiVideoRenderer.java +++ b/src/main/java/com/replaymod/render/gui/GuiVideoRenderer.java @@ -14,12 +14,13 @@ import de.johni0702.minecraft.gui.element.advanced.GuiProgressBar; import de.johni0702.minecraft.gui.function.Tickable; import de.johni0702.minecraft.gui.layout.CustomLayout; import de.johni0702.minecraft.gui.layout.HorizontalLayout; +import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadablePoint; import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.texture.NativeImage; import net.minecraft.client.resources.I18n; import net.minecraft.util.ResourceLocation; -import org.lwjgl.util.Dimension; -import org.lwjgl.util.ReadableDimension; -import org.lwjgl.util.ReadablePoint; import java.nio.ByteBuffer; @@ -228,7 +229,11 @@ public class GuiVideoRenderer extends GuiScreen implements Tickable { final int videoHeight = videoSize.getHeight(); if (previewTexture == null) { - previewTexture = new DynamicTexture(videoWidth, videoHeight); + //#if MC>=11300 + previewTexture = new DynamicTexture(videoWidth, videoHeight, true); + //#else + //$$ previewTexture = new DynamicTexture(videoWidth, videoHeight); + //#endif } if (previewTextureDirty) { @@ -262,13 +267,24 @@ public class GuiVideoRenderer extends GuiScreen implements Tickable { ByteBuffer buffer = frame.getByteBuffer(); buffer.mark(); synchronized (this) { - int[] data = previewTexture.getTextureData(); - // Optifine changes the texture data array to be three times as long (for use by shaders), - // we only want to initialize the first third which is why we use the length of the buffer instead - // of the length of the data array - for (int i = 0; buffer.remaining() > 0; i++) { - data[i] = 0xff << 24 | (buffer.get() & 0xff) << 16 | (buffer.get() & 0xff) << 8 | (buffer.get() & 0xff); + //#if MC>=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); + } } + //#else + //$$ int[] data = previewTexture.getTextureData(); + //$$ // Optifine changes the texture data array to be three times as long (for use by shaders), + //$$ // we only want to initialize the first third which is why we use the length of the buffer instead + //$$ // of the length of the data array + //$$ for (int i = 0; buffer.remaining() > 0; i++) { + //$$ data[i] = 0xff << 24 | (buffer.get() & 0xff) << 16 | (buffer.get() & 0xff) << 8 | (buffer.get() & 0xff); + //$$ } + //#endif previewTextureDirty = true; } buffer.reset(); diff --git a/src/main/java/com/replaymod/render/hooks/ChunkLoadingRenderGlobal.java b/src/main/java/com/replaymod/render/hooks/ChunkLoadingRenderGlobal.java index 8fe6c2b9..91996a9b 100644 --- a/src/main/java/com/replaymod/render/hooks/ChunkLoadingRenderGlobal.java +++ b/src/main/java/com/replaymod/render/hooks/ChunkLoadingRenderGlobal.java @@ -3,8 +3,6 @@ package com.replaymod.render.hooks; import com.replaymod.render.utils.JailingQueue; import net.minecraft.client.renderer.RegionRenderCacheBuilder; -import net.minecraft.client.renderer.RenderGlobal; -import net.minecraft.client.renderer.chunk.ChunkCompileTaskGenerator; import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher; import net.minecraft.client.renderer.chunk.ChunkRenderWorker; import net.minecraft.client.renderer.chunk.RenderChunk; @@ -12,6 +10,14 @@ import net.minecraft.client.renderer.chunk.RenderChunk; import java.lang.reflect.Field; import java.util.Iterator; +//#if MC>=11300 +import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.renderer.chunk.ChunkRenderTask; +//#else +//$$ import net.minecraft.client.renderer.RenderGlobal; +//$$ import net.minecraft.client.renderer.chunk.ChunkCompileTaskGenerator; +//#endif + //#if MC>=10904 import java.util.concurrent.PriorityBlockingQueue; //#else @@ -22,14 +28,28 @@ import static com.replaymod.core.versions.MCVer.*; public class ChunkLoadingRenderGlobal { - private final RenderGlobal hooked; + //#if MC>=11300 + private final WorldRenderer hooked; + //#else + //$$ private final RenderGlobal hooked; + //#endif private ChunkRenderDispatcher renderDispatcher; - private JailingQueue workerJailingQueue; + //#if MC>=11300 + private JailingQueue workerJailingQueue; + //#else + //$$ private JailingQueue workerJailingQueue; + //#endif private CustomChunkRenderWorker renderWorker; private int frame; @SuppressWarnings("unchecked") - public ChunkLoadingRenderGlobal(RenderGlobal renderGlobal) { + public ChunkLoadingRenderGlobal( + //#if MC>=11300 + WorldRenderer renderGlobal + //#else + //$$ RenderGlobal renderGlobal + //#endif + ) { this.hooked = renderGlobal; setup(renderGlobal.renderDispatcher); @@ -51,14 +71,22 @@ public class ChunkLoadingRenderGlobal { int workerThreads = renderDispatcher.listThreadedWorkers.size(); //#if MC>=10904 - PriorityBlockingQueue queueChunkUpdates = renderDispatcher.queueChunkUpdates; + //#if MC>=11300 + PriorityBlockingQueue queueChunkUpdates = renderDispatcher.queueChunkUpdates; + //#else + //$$ PriorityBlockingQueue queueChunkUpdates = renderDispatcher.queueChunkUpdates; + //#endif //#else //$$ BlockingQueue queueChunkUpdates = renderDispatcher.queueChunkUpdates; //#endif workerJailingQueue = new JailingQueue<>(queueChunkUpdates); renderDispatcher.queueChunkUpdates = workerJailingQueue; //#if MC>=10904 - ChunkCompileTaskGenerator element = new ChunkCompileTaskGenerator(null, null, 0); + //#if MC>=11300 + ChunkRenderTask element = new ChunkRenderTask(null, null, 0); + //#else + //$$ ChunkCompileTaskGenerator element = new ChunkCompileTaskGenerator(null, null, 0); + //#endif //#else //$$ ChunkCompileTaskGenerator element = new ChunkCompileTaskGenerator(null, null); //#endif @@ -75,7 +103,11 @@ public class ChunkLoadingRenderGlobal { renderDispatcher.queueChunkUpdates = queueChunkUpdates; try { - Field hookField = RenderGlobal.class.getField("replayModRender_hook"); + //#if MC>=11300 + Field hookField = WorldRenderer.class.getField("replayModRender_hook"); + //#else + //$$ Field hookField = RenderGlobal.class.getField("replayModRender_hook"); + //#endif hookField.set(hooked, this); } catch (NoSuchFieldException | IllegalAccessException e) { throw new Error(e); @@ -119,7 +151,11 @@ public class ChunkLoadingRenderGlobal { workerJailingQueue.freeAll(); try { - Field hookField = RenderGlobal.class.getField("replayModRender_hook"); + //#if MC>=11300 + Field hookField = WorldRenderer.class.getField("replayModRender_hook"); + //#else + //$$ Field hookField = RenderGlobal.class.getField("replayModRender_hook"); + //#endif hookField.set(hooked, null); } catch (NoSuchFieldException | IllegalAccessException e) { throw new Error(e); @@ -139,7 +175,13 @@ public class ChunkLoadingRenderGlobal { } @Override - protected void processTask(ChunkCompileTaskGenerator p_178474_1_) throws InterruptedException { + protected void processTask( + //#if MC>=11300 + ChunkRenderTask p_178474_1_ + //#else + //$$ ChunkCompileTaskGenerator p_178474_1_ + //#endif + ) throws InterruptedException { super.processTask(p_178474_1_); } } diff --git a/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java b/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java index fa6d2ef3..9566662f 100644 --- a/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java +++ b/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java @@ -1,5 +1,6 @@ package com.replaymod.render.hooks; +import com.replaymod.core.versions.MCVer; import com.replaymod.render.RenderSettings; import com.replaymod.render.capturer.CaptureData; import com.replaymod.render.capturer.RenderInfo; @@ -8,8 +9,12 @@ import lombok.Getter; import net.minecraft.client.Minecraft; //#if MC>=10800 -import net.minecraft.client.renderer.GlStateManager; -import net.minecraftforge.fml.common.FMLCommonHandler; +//#if MC>=11300 +import net.minecraftforge.fml.hooks.BasicEventHooks; +//#else +//$$ import net.minecraft.client.renderer.GlStateManager; +//$$ import net.minecraftforge.fml.common.FMLCommonHandler; +//#endif //#else //$$ import com.replaymod.core.versions.MCVer.GlStateManager; //$$ import cpw.mods.fml.common.FMLCommonHandler; @@ -18,7 +23,7 @@ import net.minecraftforge.fml.common.FMLCommonHandler; import java.io.IOException; public class EntityRendererHandler implements WorldRenderer { - public final Minecraft mc = Minecraft.getMinecraft(); + public final Minecraft mc = MCVer.getMinecraft(); @Getter protected final RenderSettings settings; @@ -44,21 +49,33 @@ public class EntityRendererHandler implements WorldRenderer { } public void renderWorld(float partialTicks, long finishTimeNano) { - FMLCommonHandler.instance().onRenderTickStart(partialTicks); - - mc.entityRenderer.updateLightmap(partialTicks); - - GlStateManager.enableDepth(); - GlStateManager.enableAlpha(); - GlStateManager.alphaFunc(516, 0.5F); + //#if MC>=11300 + BasicEventHooks.onRenderTickStart(partialTicks); + //#else + //$$ FMLCommonHandler.instance().onRenderTickStart(partialTicks); + //#endif + //#if MC>=11300 + mc.entityRenderer.renderWorld(partialTicks, finishTimeNano); + //#else + //$$ mc.entityRenderer.updateLightmap(partialTicks); + //$$ + //$$ GlStateManager.enableDepth(); + //$$ GlStateManager.enableAlpha(); + //$$ GlStateManager.alphaFunc(516, 0.5F); + //$$ //#if MC>=10800 - mc.entityRenderer.renderWorldPass(2, partialTicks, finishTimeNano); + //$$ mc.entityRenderer.renderWorldPass(2, partialTicks, finishTimeNano); //#else //$$ mc.entityRenderer.renderWorld(partialTicks, finishTimeNano); //#endif + //#endif - FMLCommonHandler.instance().onRenderTickEnd(partialTicks); + //#if MC>=11300 + BasicEventHooks.onRenderTickEnd(partialTicks); + //#else + //$$ FMLCommonHandler.instance().onRenderTickEnd(partialTicks); + //#endif } @Override diff --git a/src/main/java/com/replaymod/render/metadata/MetadataInjector.java b/src/main/java/com/replaymod/render/metadata/MetadataInjector.java index 16d9017e..9042eeb0 100644 --- a/src/main/java/com/replaymod/render/metadata/MetadataInjector.java +++ b/src/main/java/com/replaymod/render/metadata/MetadataInjector.java @@ -5,9 +5,9 @@ import com.coremedia.iso.boxes.*; import com.google.common.primitives.Bytes; import com.googlecode.mp4parser.BasicContainer; import com.replaymod.render.RenderSettings; +import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; -import org.lwjgl.util.Dimension; import java.io.File; import java.io.FileOutputStream; diff --git a/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java b/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java index 919a88bc..6bbbca70 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java +++ b/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java @@ -1,20 +1,17 @@ package com.replaymod.render.mixin; +import com.replaymod.core.versions.MCVer; import com.replaymod.render.RenderSettings; import com.replaymod.render.capturer.CubicOpenGlFrameCapturer; import com.replaymod.render.capturer.StereoscopicOpenGlFrameCapturer; import com.replaymod.render.hooks.EntityRendererHandler; import com.replaymod.replay.camera.CameraEntity; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.EntityRenderer; -import net.minecraft.client.renderer.RenderGlobal; -import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.renderer.Matrix4f; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import org.lwjgl.opengl.GL11; -import org.lwjgl.util.ReadableColor; -import org.lwjgl.util.glu.Project; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -22,6 +19,16 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +//#if MC>=11300 +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.GameSettings; +//#else +//$$ import net.minecraft.client.renderer.EntityRenderer; +//$$ import net.minecraft.client.renderer.RenderGlobal; +//$$ import net.minecraft.client.settings.GameSettings; +//#endif + //#if MC>=10904 import net.minecraft.util.math.RayTraceResult; //#else @@ -31,12 +38,17 @@ import net.minecraft.util.math.RayTraceResult; //#if MC>=10800 import net.minecraft.client.renderer.GlStateManager; //#else +//$$ import net.minecraft.entity.EntityLivingBase; //$$ import com.replaymod.core.versions.MCVer.GlStateManager; //#endif import static com.replaymod.core.versions.MCVer.*; -@Mixin(value = EntityRenderer.class) +//#if MC>=11300 +@Mixin(value = GameRenderer.class) +//#else +//$$ @Mixin(value = EntityRenderer.class) +//#endif public abstract class MixinEntityRenderer implements EntityRendererHandler.IEntityRenderer, EntityRendererHandler.GluPerspective { @Shadow public Minecraft mc; @@ -75,7 +87,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti @Inject(method = "orientCamera", at = @At("HEAD")) private void replayModRender_resetRotationIfNeeded(float partialTicks, CallbackInfo ci) { if (replayModRender_handler != null) { - Entity entity = getRenderViewEntity(Minecraft.getMinecraft()); + Entity entity = getRenderViewEntity(MCVer.getMinecraft()); RenderSettings settings = replayModRender_handler.getSettings(); if (settings.isStabilizeYaw()) { entity.prevRotationYaw = entity.rotationYaw = 0; @@ -98,7 +110,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti @Inject(method = "setupCameraTransform", at = @At("HEAD")) private void replayModRender_beforeSetupCameraTransform(float partialTicks, int renderPass, CallbackInfo ci) { if (replayModRender_handler != null) { - Entity entity = getRenderViewEntity(Minecraft.getMinecraft()); + Entity entity = getRenderViewEntity(MCVer.getMinecraft()); orgYaw = entity.rotationYaw; orgPitch = entity.rotationPitch; orgPrevYaw = entity.prevRotationYaw; @@ -110,7 +122,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti @Inject(method = "setupCameraTransform", at = @At("RETURN")) private void replayModRender_afterSetupCameraTransform(float partialTicks, int renderPass, CallbackInfo ci) { if (replayModRender_handler != null) { - Entity entity = getRenderViewEntity(Minecraft.getMinecraft()); + Entity entity = getRenderViewEntity(MCVer.getMinecraft()); entity.rotationYaw = orgYaw; entity.rotationPitch = orgPitch; entity.prevRotationYaw = orgPrevYaw; @@ -128,7 +140,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti ci.cancel(); return; // No spectator hands during 360° view, we wouldn't even know where to put it } - Entity currentEntity = getRenderViewEntity(Minecraft.getMinecraft()); + 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; @@ -142,9 +154,13 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti @Shadow public abstract void renderHand(float partialTicks, int renderPass); + //#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")) + 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) { + //$$ @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")) @@ -152,6 +168,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti //$$ @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); @@ -160,38 +177,51 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti private int orgRenderDistanceChunks; + //#if MC>=11300 + @Inject(method = "updateCameraAndRender", at = @At(value = "JUMP", ordinal = 0)) + //#else //#if MC>=10800 - @Inject(method = "renderWorldPass", at = @At(value = "JUMP", ordinal = 0)) + //$$ @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) { - GameSettings settings = Minecraft.getMinecraft().gameSettings; + GameSettings settings = MCVer.getMinecraft().gameSettings; orgRenderDistanceChunks = settings.renderDistanceChunks; settings.renderDistanceChunks = 5; // Set render distance to 5 so we're always rendering sky when chroma keying } } + //#if MC>=11300 + @Redirect(method = "updateCameraAndRender", 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 - @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) { + //$$ @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) { - Minecraft.getMinecraft().gameSettings.renderDistanceChunks = orgRenderDistanceChunks; + MCVer.getMinecraft().gameSettings.renderDistanceChunks = 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); } else { + //#if MC>=11300 + instance.renderSky(partialTicks); + //#else //#if MC>=10800 - instance.renderSky(partialTicks, renderPass); + //$$ instance.renderSky(partialTicks, renderPass); //#else //$$ instance.renderSky(partialTicks); //#endif + //#endif } } @@ -207,9 +237,9 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti private void replayModRender_setupStereoscopicProjection(float partialTicks, int renderPass, CallbackInfo ci) { if (replayModRender_getHandler() != null) { if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) { - GlStateManager.translate(0.07, 0, 0); + GL11.glTranslatef(0.07f, 0, 0); } else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) { - GlStateManager.translate(-0.07, 0, 0); + GL11.glTranslatef(-0.07f, 0, 0); } } } @@ -222,9 +252,9 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti private void replayModRender_setupStereoscopicModelView(float partialTicks, int renderPass, CallbackInfo ci) { if (replayModRender_getHandler() != null) { if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) { - GlStateManager.translate(0.1, 0, 0); + GL11.glTranslatef(0.1f, 0, 0); } else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) { - GlStateManager.translate(-0.1, 0, 0); + GL11.glTranslatef(-0.1f, 0, 0); } } } @@ -233,63 +263,84 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti * Cubic Renderer */ - @Redirect(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false)) - private void replayModRender_gluPerspective$0(float fovY, float aspect, float zNear, float zFar) { - replayModRender_gluPerspective(fovY, aspect, zNear, zFar); + //#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); } - //#if MC>=10800 - @Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false)) - //#else - //$$ @Redirect(method = "renderHand", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false)) - //#endif - private void replayModRender_gluPerspective$1(float fovY, float aspect, float zNear, float zFar) { - replayModRender_gluPerspective(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); } - //#if MC>=10800 - @Redirect(method = "renderCloudsCheck", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false)) - private void replayModRender_gluPerspective$2(float fovY, float aspect, float zNear, float zFar) { - replayModRender_gluPerspective(fovY, aspect, zNear, zFar); - } - //#endif - @Override public void replayModRender_gluPerspective(float fovY, float aspect, float zNear, float zFar) { if (replayModRender_getHandler() != null && replayModRender_getHandler().omnidirectional) { fovY = 90; aspect = 1; } - Project.gluPerspective(fovY, aspect, zNear, zFar); + 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)) + //$$ private void replayModRender_gluPerspective$0(float fovY, float aspect, float zNear, float zFar) { + //$$ replayModRender_gluPerspective(fovY, aspect, zNear, zFar); + //$$ } + //$$ + //#if MC>=10800 + //$$ @Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false)) + //#else + //$$ @Redirect(method = "renderHand", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false)) + //#endif + //$$ private void replayModRender_gluPerspective$1(float fovY, float aspect, float zNear, float zFar) { + //$$ replayModRender_gluPerspective(fovY, aspect, zNear, zFar); + //$$ } + //$$ + //#if MC>=10800 + //$$ @Redirect(method = "renderCloudsCheck", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false)) + //$$ private void replayModRender_gluPerspective$2(float fovY, float aspect, float zNear, float zFar) { + //$$ replayModRender_gluPerspective(fovY, aspect, zNear, zFar); + //$$ } + //#endif + //$$ + //$$ @Override + //$$ public void replayModRender_gluPerspective(float fovY, float aspect, float zNear, float zFar) { + //$$ if (replayModRender_getHandler() != null && replayModRender_getHandler().omnidirectional) { + //$$ fovY = 90; + //$$ aspect = 1; + //$$ } + //$$ Project.gluPerspective(fovY, aspect, zNear, zFar); + //$$ } + //#endif @Inject(method = "orientCamera", at = @At("HEAD")) private void replayModRender_setupCubicFrameRotation(float partialTicks, CallbackInfo ci) { if (replayModRender_getHandler() != null && replayModRender_getHandler().data instanceof CubicOpenGlFrameCapturer.Data) { switch ((CubicOpenGlFrameCapturer.Data) replayModRender_getHandler().data) { case FRONT: - GlStateManager.rotate(0, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(0, 0.0F, 1.0F, 0.0F); break; case RIGHT: - GlStateManager.rotate(90, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(90, 0.0F, 1.0F, 0.0F); break; case BACK: - GlStateManager.rotate(180, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(180, 0.0F, 1.0F, 0.0F); break; case LEFT: - GlStateManager.rotate(-90, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-90, 0.0F, 1.0F, 0.0F); break; case BOTTOM: - GlStateManager.rotate(90, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(90, 1.0F, 0.0F, 0.0F); break; case TOP: - GlStateManager.rotate(-90, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-90, 1.0F, 0.0F, 0.0F); break; } } if (replayModRender_getHandler() != null && replayModRender_getHandler().omnidirectional) { // Minecraft goes back a little so we have to revert that - GlStateManager.translate(0.0F, 0.0F, 0.1F); + GL11.glTranslatef(0.0F, 0.0F, 0.1F); } } } diff --git a/src/main/java/com/replaymod/render/mixin/MixinFrustum.java b/src/main/java/com/replaymod/render/mixin/MixinFrustum.java index 4a6facbe..aad8f545 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinFrustum.java +++ b/src/main/java/com/replaymod/render/mixin/MixinFrustum.java @@ -1,7 +1,7 @@ package com.replaymod.render.mixin; +import com.replaymod.core.versions.MCVer; import com.replaymod.render.hooks.EntityRendererHandler; -import net.minecraft.client.Minecraft; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -21,7 +21,7 @@ import net.minecraft.client.renderer.culling.Frustum; public abstract class MixinFrustum { @Inject(method = "isBoxInFrustum", at = @At("HEAD"), cancellable = true) public void isBoxInFrustum(double minX, double minY, double minZ, double maxX, double maxY, double maxZ, CallbackInfoReturnable ci) { - EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) Minecraft.getMinecraft().entityRenderer).replayModRender_getHandler(); + EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler(); if (handler != null && handler.omnidirectional && handler.data == null) { // Normally the camera is always facing the direction of the omnidirectional image face that is currently // getting rendered. With ODS however, the camera is always facing forwards and the turning happens in the diff --git a/src/main/java/com/replaymod/render/mixin/MixinParticleManager.java b/src/main/java/com/replaymod/render/mixin/MixinParticleManager.java index 5cf6df2c..87fed192 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinParticleManager.java +++ b/src/main/java/com/replaymod/render/mixin/MixinParticleManager.java @@ -1,8 +1,8 @@ package com.replaymod.render.mixin; //#if MC>=10904 +import com.replaymod.core.versions.MCVer; import com.replaymod.render.hooks.EntityRendererHandler; -import net.minecraft.client.Minecraft; import net.minecraft.client.particle.Particle; import net.minecraft.client.particle.ParticleManager; import net.minecraft.entity.Entity; @@ -46,7 +46,7 @@ public abstract class MixinParticleManager { //$$ private void renderParticle(Particle particle, VertexBuffer vertexBuffer, Entity view, float partialTicks, //#endif float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) { - EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) Minecraft.getMinecraft().entityRenderer).replayModRender_getHandler(); + EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler(); if (handler != null && handler.omnidirectional) { // Align all particles towards the camera double dx = particle.prevPosX + (particle.posX - particle.prevPosX) * partialTicks - view.posX; diff --git a/src/main/java/com/replaymod/render/mixin/MixinRender.java b/src/main/java/com/replaymod/render/mixin/MixinRender.java index 898f7140..5f1bfd71 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinRender.java +++ b/src/main/java/com/replaymod/render/mixin/MixinRender.java @@ -1,7 +1,7 @@ package com.replaymod.render.mixin; +import com.replaymod.core.versions.MCVer; import com.replaymod.render.hooks.EntityRendererHandler; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; import org.spongepowered.asm.mixin.Mixin; @@ -13,7 +13,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; public abstract class MixinRender { @Inject(method = "renderLivingLabel", at = @At("HEAD"), cancellable = true) private void replayModRender_areAllNamesHidden(Entity entityIn, String str, double x, double y, double z, int maxDistance, CallbackInfo ci) { - EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) Minecraft.getMinecraft().entityRenderer).replayModRender_getHandler(); + EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler(); if (handler != null && !handler.getSettings().isRenderNameTags()) { ci.cancel(); } diff --git a/src/main/java/com/replaymod/render/mixin/MixinRenderGlobal.java b/src/main/java/com/replaymod/render/mixin/MixinRenderGlobal.java index c81175b0..4636d729 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinRenderGlobal.java +++ b/src/main/java/com/replaymod/render/mixin/MixinRenderGlobal.java @@ -2,7 +2,6 @@ package com.replaymod.render.mixin; import com.replaymod.render.hooks.ChunkLoadingRenderGlobal; -import net.minecraft.client.renderer.RenderGlobal; import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher; import net.minecraft.client.renderer.culling.ICamera; import net.minecraft.entity.Entity; @@ -10,16 +9,25 @@ 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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +//#if MC>=11300 +import net.minecraft.client.renderer.WorldRenderer; +//#else +//$$ import net.minecraft.client.renderer.RenderGlobal; +//#endif + //#if MC<10904 //$$ import net.minecraft.client.renderer.chunk.RenderChunk; //$$ import net.minecraft.util.BlockPos; //$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; //#endif -@Mixin(RenderGlobal.class) +//#if MC>=11300 +@Mixin(WorldRenderer.class) +//#else +//$$ @Mixin(RenderGlobal.class) +//#endif public abstract class MixinRenderGlobal { public ChunkLoadingRenderGlobal replayModRender_hook; private boolean replayModRender_passThroughSetupTerrain; diff --git a/src/main/java/com/replaymod/render/mixin/MixinRenderManager.java b/src/main/java/com/replaymod/render/mixin/MixinRenderManager.java index 7f9f1562..cc67a9d6 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinRenderManager.java +++ b/src/main/java/com/replaymod/render/mixin/MixinRenderManager.java @@ -1,7 +1,7 @@ package com.replaymod.render.mixin; +import com.replaymod.core.versions.MCVer; import com.replaymod.render.hooks.EntityRendererHandler; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.entity.Entity; import org.spongepowered.asm.mixin.Mixin; @@ -29,7 +29,7 @@ public abstract class MixinRenderManager { //#else //$$ private void replayModRender_reorientForCubicRendering(Entity entity, double dx, double dy, double dz, float iDoNotKnow, float partialTicks, boolean iDoNotCare, CallbackInfoReturnable ci) { //#endif - EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) Minecraft.getMinecraft().entityRenderer).replayModRender_getHandler(); + EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler(); if (handler != null && handler.omnidirectional) { double pitch = -Math.atan2(dy, Math.sqrt(dx * dx + dz * dz)); double yaw = -Math.atan2(dx, dz); diff --git a/src/main/java/com/replaymod/render/processor/CubicToRGBProcessor.java b/src/main/java/com/replaymod/render/processor/CubicToRGBProcessor.java index 223ea375..9d5c8dec 100644 --- a/src/main/java/com/replaymod/render/processor/CubicToRGBProcessor.java +++ b/src/main/java/com/replaymod/render/processor/CubicToRGBProcessor.java @@ -3,7 +3,7 @@ package com.replaymod.render.processor; import com.replaymod.render.frame.CubicOpenGlFrame; import com.replaymod.render.frame.RGBFrame; import com.replaymod.render.utils.ByteBufferPool; -import org.lwjgl.util.Dimension; +import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import java.nio.ByteBuffer; diff --git a/src/main/java/com/replaymod/render/processor/EquirectangularToRGBProcessor.java b/src/main/java/com/replaymod/render/processor/EquirectangularToRGBProcessor.java index b027b977..b8954917 100644 --- a/src/main/java/com/replaymod/render/processor/EquirectangularToRGBProcessor.java +++ b/src/main/java/com/replaymod/render/processor/EquirectangularToRGBProcessor.java @@ -3,9 +3,9 @@ package com.replaymod.render.processor; import com.replaymod.render.frame.CubicOpenGlFrame; import com.replaymod.render.frame.RGBFrame; import com.replaymod.render.utils.ByteBufferPool; +import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import lombok.Getter; import org.apache.commons.lang3.Validate; -import org.lwjgl.util.Dimension; import java.nio.ByteBuffer; diff --git a/src/main/java/com/replaymod/render/processor/ODSToRGBProcessor.java b/src/main/java/com/replaymod/render/processor/ODSToRGBProcessor.java index 2db32280..6e626eef 100644 --- a/src/main/java/com/replaymod/render/processor/ODSToRGBProcessor.java +++ b/src/main/java/com/replaymod/render/processor/ODSToRGBProcessor.java @@ -3,8 +3,8 @@ package com.replaymod.render.processor; import com.replaymod.render.frame.ODSOpenGlFrame; import com.replaymod.render.frame.RGBFrame; import com.replaymod.render.utils.ByteBufferPool; -import org.lwjgl.util.Dimension; -import org.lwjgl.util.ReadableDimension; +import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/src/main/java/com/replaymod/render/processor/OpenGlToRGBProcessor.java b/src/main/java/com/replaymod/render/processor/OpenGlToRGBProcessor.java index 0cd54e5f..b6e6a6a3 100644 --- a/src/main/java/com/replaymod/render/processor/OpenGlToRGBProcessor.java +++ b/src/main/java/com/replaymod/render/processor/OpenGlToRGBProcessor.java @@ -2,7 +2,7 @@ package com.replaymod.render.processor; import com.replaymod.render.frame.OpenGlFrame; import com.replaymod.render.frame.RGBFrame; -import org.lwjgl.util.ReadableDimension; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import java.nio.ByteBuffer; diff --git a/src/main/java/com/replaymod/render/processor/StereoscopicToRGBProcessor.java b/src/main/java/com/replaymod/render/processor/StereoscopicToRGBProcessor.java index 02ed1de3..38f244b9 100644 --- a/src/main/java/com/replaymod/render/processor/StereoscopicToRGBProcessor.java +++ b/src/main/java/com/replaymod/render/processor/StereoscopicToRGBProcessor.java @@ -3,8 +3,8 @@ package com.replaymod.render.processor; import com.replaymod.render.frame.RGBFrame; import com.replaymod.render.frame.StereoscopicOpenGlFrame; import com.replaymod.render.utils.ByteBufferPool; -import org.lwjgl.util.Dimension; -import org.lwjgl.util.ReadableDimension; +import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import java.nio.ByteBuffer; diff --git a/src/main/java/com/replaymod/render/rendering/Pipeline.java b/src/main/java/com/replaymod/render/rendering/Pipeline.java index 5b771aac..cff1d7fa 100644 --- a/src/main/java/com/replaymod/render/rendering/Pipeline.java +++ b/src/main/java/com/replaymod/render/rendering/Pipeline.java @@ -1,16 +1,23 @@ package com.replaymod.render.rendering; +import com.replaymod.core.versions.MCVer; import lombok.RequiredArgsConstructor; import net.minecraft.client.Minecraft; import net.minecraft.crash.CrashReport; -import net.minecraft.util.ReportedException; -import org.lwjgl.opengl.Display; + +//#if MC>=11300 +import org.lwjgl.glfw.GLFW; +//#else +//$$ import org.lwjgl.opengl.Display; +//#endif import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import static com.replaymod.core.versions.MCVer.newReportedException; + public class Pipeline implements Runnable { private final FrameCapturer capturer; @@ -48,9 +55,13 @@ public class Pipeline implements Runnable { } }, new ThreadPoolExecutor.DiscardPolicy()); - Minecraft mc = Minecraft.getMinecraft(); + Minecraft mc = MCVer.getMinecraft(); while (!capturer.isDone() && !Thread.currentThread().isInterrupted()) { - if (Display.isCloseRequested() || mc.hasCrashed) { + //#if MC>=11300 + if (GLFW.glfwWindowShouldClose(mc.mainWindow.getHandle()) || mc.hasCrashed) { + //#else + //$$ if (Display.isCloseRequested() || mc.hasCrashed) { + //#endif Thread.currentThread().interrupt(); return; } @@ -73,7 +84,7 @@ public class Pipeline implements Runnable { consumer.close(); } catch (Throwable t) { CrashReport crashReport = CrashReport.makeCrashReport(t, "Cleaning up rendering pipeline"); - throw new ReportedException(crashReport); + throw newReportedException(crashReport); } } @@ -105,7 +116,7 @@ public class Pipeline implements Runnable { } } catch (Throwable t) { CrashReport crashReport = CrashReport.makeCrashReport(t, "Processing frame"); - Minecraft.getMinecraft().crashed(crashReport); + MCVer.getMinecraft().crashed(crashReport); } } } diff --git a/src/main/java/com/replaymod/render/rendering/VideoRenderer.java b/src/main/java/com/replaymod/render/rendering/VideoRenderer.java index 87367523..c329139d 100644 --- a/src/main/java/com/replaymod/render/rendering/VideoRenderer.java +++ b/src/main/java/com/replaymod/render/rendering/VideoRenderer.java @@ -1,6 +1,7 @@ package com.replaymod.render.rendering; import com.replaymod.core.utils.WrappedTimer; +import com.replaymod.core.versions.MCVer; import com.replaymod.pathing.player.AbstractTimelinePlayer; import com.replaymod.pathing.player.ReplayTimer; import com.replaymod.pathing.properties.TimestampProperty; @@ -18,16 +19,19 @@ import com.replaymod.replay.ReplayHandler; import com.replaymod.replaystudio.pathing.path.Keyframe; import com.replaymod.replaystudio.pathing.path.Path; import com.replaymod.replaystudio.pathing.path.Timeline; +import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; +import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.shader.Framebuffer; -import net.minecraft.util.ReportedException; import net.minecraft.util.Timer; -import org.lwjgl.input.Mouse; -import org.lwjgl.opengl.Display; -import org.lwjgl.util.Dimension; -import org.lwjgl.util.ReadableDimension; + +//#if MC>=11300 +import org.lwjgl.glfw.GLFW; +//#else +//$$ import net.minecraft.client.gui.ScaledResolution; +//$$ import org.lwjgl.opengl.Display; +//#endif //#if MC>=10904 import net.minecraft.util.SoundCategory; @@ -57,7 +61,7 @@ import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT; import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT; public class VideoRenderer implements RenderInfo { - private final Minecraft mc = Minecraft.getMinecraft(); + private final Minecraft mc = MCVer.getMinecraft(); private final RenderSettings settings; private final ReplayHandler replayHandler; private final Timeline timeline; @@ -152,7 +156,7 @@ public class VideoRenderer implements RenderInfo { renderingPipeline.run(); if (mc.hasCrashed) { - throw new ReportedException(mc.crashReporter); + throw newReportedException(mc.crashReporter); } if (settings.isInjectSphericalMetadata()) { @@ -175,18 +179,25 @@ public class VideoRenderer implements RenderInfo { @Override public float updateForNextFrame() { // because the jGui lib uses Minecraft's displayWidth and displayHeight values, update these temporarily - int displayWidthBefore = mc.displayWidth; - int displayHeightBefore = mc.displayHeight; - - mc.displayWidth = displayWidth; - mc.displayHeight = displayHeight; + //#if MC>=11300 + // FIXME is this even necessary? + //#else + //$$ int displayWidthBefore = mc.displayWidth; + //$$ int displayHeightBefore = mc.displayHeight; + //$$ mc.displayWidth = displayWidth; + //$$ mc.displayHeight = displayHeight; + //#endif if (!settings.isHighPerformance() || framesDone % fps == 0) { drawGui(); } // Updating the timer will cause the timeline player to update the game state - mc.timer.updateTimer(); + mc.timer.updateTimer( + //#if MC>=11300 + MCVer.milliTime() + //#endif + ); int elapsedTicks = mc.timer.elapsedTicks; while (elapsedTicks-- > 0) { @@ -194,8 +205,12 @@ public class VideoRenderer implements RenderInfo { } // change Minecraft's display size back - mc.displayWidth = displayWidthBefore; - mc.displayHeight = displayHeightBefore; + //#if MC>=11300 + // FIXME + //#else + //$$ mc.displayWidth = displayWidthBefore; + //$$ mc.displayHeight = displayHeightBefore; + //#endif framesDone++; return mc.timer.renderPartialTicks; @@ -211,31 +226,52 @@ public class VideoRenderer implements RenderInfo { timelinePlayerFuture = timelinePlayer.start(timeline); if (!OpenGlHelper.isFramebufferEnabled()) { - Display.setResizable(false); + //#if MC>=11300 + GLFW.glfwSetWindowAttrib(mc.mainWindow.getHandle(), GLFW.GLFW_RESIZABLE, 1); + //#else + //$$ Display.setResizable(false); + //#endif } if (mc.gameSettings.showDebugInfo) { debugInfoWasShown = true; mc.gameSettings.showDebugInfo = false; } - if (Mouse.isGrabbed()) { + //#if MC>=11300 + if (mc.mouseHelper.isMouseGrabbed()) { mouseWasGrabbed = true; } - Mouse.setGrabbed(false); + mc.mouseHelper.ungrabMouse(); + //#else + //$$ if (Mouse.isGrabbed()) { + //$$ mouseWasGrabbed = true; + //$$ } + //$$ Mouse.setGrabbed(false); + //#endif // Mute all sounds except GUI sounds (buttons, etc.) - Map mutedSounds = new EnumMap<>(SoundCategory.class); + //#if MC>=11300 + originalSoundLevels = new EnumMap<>(SoundCategory.class); for (SoundCategory category : SoundCategory.values()) { - mutedSounds.put(category, 0f); + if (category != SoundCategory.MASTER) { + originalSoundLevels.put(category, mc.gameSettings.getSoundLevel(category)); + mc.gameSettings.setSoundLevel(category, 0); + } } + //#else + //$$ Map mutedSounds = new EnumMap<>(SoundCategory.class); + //$$ for (SoundCategory category : SoundCategory.values()) { + //$$ mutedSounds.put(category, 0f); + //$$ } //#if MC>=10904 - originalSoundLevels = mc.gameSettings.soundLevels; - mutedSounds.put(SoundCategory.MASTER, originalSoundLevels.get(SoundCategory.MASTER)); - mc.gameSettings.soundLevels = mutedSounds; + //$$ originalSoundLevels = mc.gameSettings.soundLevels; + //$$ mutedSounds.put(SoundCategory.MASTER, originalSoundLevels.get(SoundCategory.MASTER)); + //$$ mc.gameSettings.soundLevels = mutedSounds; //#else //$$ originalSoundLevels = mc.gameSettings.mapSoundLevels; //$$ mutedSounds.put(SoundCategory.MASTER, (Float) originalSoundLevels.get(SoundCategory.MASTER)); //$$ mc.gameSettings.mapSoundLevels = mutedSounds; //#endif + //#endif fps = settings.getFramesPerSecond(); @@ -277,14 +313,28 @@ public class VideoRenderer implements RenderInfo { timelinePlayer.onTick(new ReplayTimer.UpdatedEvent()); if (!OpenGlHelper.isFramebufferEnabled()) { - Display.setResizable(true); + //#if MC>=11300 + GLFW.glfwSetWindowAttrib(mc.mainWindow.getHandle(), GLFW.GLFW_RESIZABLE, 0); + //#else + //$$ Display.setResizable(true); + //#endif } mc.gameSettings.showDebugInfo = debugInfoWasShown; if (mouseWasGrabbed) { - mc.mouseHelper.grabMouseCursor(); + //#if MC>=11300 + mc.mouseHelper.grabMouse(); + //#else + //$$ mc.mouseHelper.grabMouseCursor(); + //#endif } //#if MC>=10904 - mc.gameSettings.soundLevels = originalSoundLevels; + //#if MC>=11300 + for (Map.Entry entry : originalSoundLevels.entrySet()) { + mc.gameSettings.setSoundLevel(entry.getKey(), entry.getValue()); + } + //#else + //$$ mc.gameSettings.soundLevels = originalSoundLevels; + //#endif //#else //$$ mc.gameSettings.mapSoundLevels = originalSoundLevels; //#endif @@ -306,7 +356,11 @@ public class VideoRenderer implements RenderInfo { } // Finally, resize the Minecraft framebuffer to the actual width/height of the window - mc.resize(displayWidth, displayHeight); + //#if MC>=11300 + mc.getFramebuffer().createFramebuffer(displayWidth, displayHeight); + //#else + //$$ mc.resize(displayWidth, displayHeight); + //#endif } private void tick() { @@ -317,14 +371,14 @@ public class VideoRenderer implements RenderInfo { } mc.currentScreen = gui.toMinecraft(); - //#if MC>=10800 - try { - mc.runTick(); - } catch (IOException e) { - throw new RuntimeException(e); - } + //#if MC>=10800 && MC<11300 + //$$ try { + //$$ mc.runTick(); + //$$ } catch (IOException e) { + //$$ throw new RuntimeException(e); + //$$ } //#else - //$$ mc.runTick(); + mc.runTick(); //#endif } @@ -333,7 +387,11 @@ public class VideoRenderer implements RenderInfo { // Resize the GUI framebuffer if the display size changed if (!settings.isHighPerformance() && displaySizeChanged()) { updateDisplaySize(); - guiFramebuffer.createBindFramebuffer(mc.displayWidth, mc.displayHeight); + //#if MC>=11300 + guiFramebuffer.createBindFramebuffer(mc.mainWindow.getFramebufferWidth(), mc.mainWindow.getFramebufferHeight()); + //#else + //$$ guiFramebuffer.createBindFramebuffer(mc.displayWidth, mc.displayHeight); + //#endif } pushMatrix(); @@ -341,28 +399,47 @@ public class VideoRenderer implements RenderInfo { enableTexture2D(); guiFramebuffer.bindFramebuffer(true); - mc.entityRenderer.setupOverlayRendering(); + //#if MC>=11300 + mc.mainWindow.setupOverlayRendering(); + //#else + //$$ mc.entityRenderer.setupOverlayRendering(); + //#endif - ScaledResolution scaled = newScaledResolution(mc); - gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight()); + //#if MC>=11300 + gui.toMinecraft().setWorldAndResolution(mc, mc.mainWindow.getScaledWidth(), mc.mainWindow.getScaledHeight()); + //#else + //$$ ScaledResolution scaled = newScaledResolution(mc); + //$$ gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight()); + //#endif + // Events are polled on 1.13+ in mainWindow.update which is called later + //#if MC<11300 //#if MC>=10800 - try { - gui.toMinecraft().handleInput(); - } catch (IOException e) { - // That's a strange exception from this kind of method O_o - // It isn't actually thrown here, so we'll deal with it the easy way - throw new RuntimeException(e); - } + //$$ try { + //$$ gui.toMinecraft().handleInput(); + //$$ } catch (IOException e) { + //$$ // That's a strange exception from this kind of method O_o + //$$ // It isn't actually thrown here, so we'll deal with it the easy way + //$$ throw new RuntimeException(e); + //$$ } //#else //$$ gui.toMinecraft().handleInput(); //#endif + //#endif - int mouseX = Mouse.getX() * scaled.getScaledWidth() / mc.displayWidth; - int mouseY = scaled.getScaledHeight() - Mouse.getY() * scaled.getScaledHeight() / mc.displayHeight - 1; + //#if MC>=11300 + int mouseX = (int) mc.mouseHelper.getMouseX(); + int mouseY = (int) mc.mouseHelper.getMouseY(); - gui.toMinecraft().updateScreen(); - gui.toMinecraft().drawScreen(mouseX, mouseY, 0); + gui.toMinecraft().tick(); + gui.toMinecraft().render(mouseX, mouseY, 0); + //#else + //$$ int mouseX = Mouse.getX() * scaled.getScaledWidth() / mc.displayWidth; + //$$ int mouseY = scaled.getScaledHeight() - Mouse.getY() * scaled.getScaledHeight() / mc.displayHeight - 1; + //$$ + //$$ gui.toMinecraft().updateScreen(); + //$$ gui.toMinecraft().drawScreen(mouseX, mouseY, 0); + //#endif guiFramebuffer.unbindFramebuffer(); popMatrix(); @@ -370,20 +447,30 @@ public class VideoRenderer implements RenderInfo { guiFramebuffer.framebufferRender(displayWidth, displayHeight); popMatrix(); - // if not in high performance mode, update the gui size if screen size changed - // otherwise just swap the progress gui to screen - if (settings.isHighPerformance()) { - Display.update(); - } else { + //#if MC>=11300 + mc.mainWindow.update(false); + //#else + //$$ // if not in high performance mode, update the gui size if screen size changed + //$$ // otherwise just swap the progress gui to screen + //$$ if (settings.isHighPerformance()) { + //$$ Display.update(); + //$$ } else { //#if MC>=10800 - mc.updateDisplay(); + //$$ mc.updateDisplay(); //#else //$$ mc.resetSize(); //#endif + //$$ } + //#endif + //#if MC>=11300 + if (mc.mouseHelper.isMouseGrabbed()) { + mc.mouseHelper.ungrabMouse(); } - if (Mouse.isGrabbed()) { - Mouse.setGrabbed(false); - } + //#else + //$$ if (Mouse.isGrabbed()) { + //$$ Mouse.setGrabbed(false); + //$$ } + //#endif if (paused) { try { Thread.sleep(50); @@ -396,12 +483,21 @@ public class VideoRenderer implements RenderInfo { } private boolean displaySizeChanged() { - return displayWidth != Display.getWidth() || displayHeight != Display.getHeight(); + //#if MC>=11300 + return displayWidth != mc.mainWindow.getWidth() || displayHeight != mc.mainWindow.getHeight(); + //#else + //$$ return displayWidth != Display.getWidth() || displayHeight != Display.getHeight(); + //#endif } private void updateDisplaySize() { - displayWidth = Display.getWidth(); - displayHeight = Display.getHeight(); + //#if MC>=11300 + displayWidth = mc.mainWindow.getWidth(); + displayHeight = mc.mainWindow.getHeight(); + //#else + //$$ displayWidth = Display.getWidth(); + //$$ displayHeight = Display.getHeight(); + //#endif } public int getFramesDone() { diff --git a/src/main/java/com/replaymod/render/shader/Program.java b/src/main/java/com/replaymod/render/shader/Program.java index b4d2c8e8..3481c5f9 100644 --- a/src/main/java/com/replaymod/render/shader/Program.java +++ b/src/main/java/com/replaymod/render/shader/Program.java @@ -1,7 +1,6 @@ package com.replaymod.render.shader; -import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.IResource; +import com.replaymod.core.versions.MCVer; import net.minecraft.util.ResourceLocation; import org.apache.commons.io.IOUtils; import org.lwjgl.opengl.ARBFragmentShader; @@ -9,6 +8,12 @@ import org.lwjgl.opengl.ARBShaderObjects; import org.lwjgl.opengl.ARBVertexShader; import org.lwjgl.opengl.GL11; +//#if MC>=11300 +import net.minecraft.resources.IResource; +//#else +//$$ import net.minecraft.client.resources.IResource; +//#endif + import java.io.InputStream; import static org.lwjgl.opengl.ARBShaderObjects.*; @@ -47,7 +52,7 @@ public class Program { if(shader == 0) throw new Exception("glCreateShaderObjectARB failed"); - IResource resource = Minecraft.getMinecraft().getResourceManager().getResource(resourceLocation); + IResource resource = MCVer.getMinecraft().getResourceManager().getResource(resourceLocation); try (InputStream is = resource.getInputStream()) { glShaderSourceARB(shader, IOUtils.toString(is)); } diff --git a/src/main/java/com/replaymod/render/utils/PixelBufferObject.java b/src/main/java/com/replaymod/render/utils/PixelBufferObject.java index 87794da9..7d400846 100644 --- a/src/main/java/com/replaymod/render/utils/PixelBufferObject.java +++ b/src/main/java/com/replaymod/render/utils/PixelBufferObject.java @@ -1,12 +1,18 @@ package com.replaymod.render.utils; import com.google.common.base.Objects; +import com.replaymod.core.versions.MCVer; import lombok.RequiredArgsConstructor; -import net.minecraft.client.Minecraft; import org.apache.logging.log4j.LogManager; -import org.lwjgl.opengl.ARBBufferObject; -import org.lwjgl.opengl.GLContext; -import org.lwjgl.opengl.Util; + +//#if MC>=11300 +import org.lwjgl.opengl.ARBVertexBufferObject; +import org.lwjgl.opengl.GL; +//#else +//$$ import org.lwjgl.opengl.ARBBufferObject; +//$$ import org.lwjgl.opengl.GLContext; +//$$ import org.lwjgl.opengl.Util; +//#endif import java.nio.ByteBuffer; @@ -14,6 +20,10 @@ import static org.lwjgl.opengl.ARBPixelBufferObject.*; import static org.lwjgl.opengl.GL15.*; import static org.lwjgl.opengl.GL21.GL_PIXEL_PACK_BUFFER; +//#if MC>=11300 +import static org.lwjgl.opengl.ARBVertexBufferObject.*; +//#endif + public class PixelBufferObject { @RequiredArgsConstructor public enum Usage { @@ -24,8 +34,13 @@ public class PixelBufferObject { private final int arb, gl15; } - public static final boolean SUPPORTED = GLContext.getCapabilities().GL_ARB_pixel_buffer_object || GLContext.getCapabilities().OpenGL15; - private static final boolean arb = !GLContext.getCapabilities().OpenGL15; + //#if MC>=11300 + public static final boolean SUPPORTED = GL.getCapabilities().GL_ARB_pixel_buffer_object || GL.getCapabilities().OpenGL15; + private static final boolean arb = !GL.getCapabilities().OpenGL15; + //#else + //$$ public static final boolean SUPPORTED = GLContext.getCapabilities().GL_ARB_pixel_buffer_object || GLContext.getCapabilities().OpenGL15; + //$$ private static final boolean arb = !GLContext.getCapabilities().OpenGL15; + //#endif private static ThreadLocal bound = new ThreadLocal<>(); private static ThreadLocal mapped = new ThreadLocal<>(); @@ -39,12 +54,20 @@ public class PixelBufferObject { } this.size = size; - this.handle = arb ? ARBBufferObject.glGenBuffersARB() : glGenBuffers(); + //#if MC>=11300 + this.handle = arb ? ARBVertexBufferObject.glGenBuffersARB() : glGenBuffers(); + //#else + //$$ this.handle = arb ? ARBBufferObject.glGenBuffersARB() : glGenBuffers(); + //#endif bind(); if (arb) { - ARBBufferObject.glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, size, usage.arb); + //#if MC>=11300 + ARBVertexBufferObject.glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, size, usage.arb); + //#else + //$$ ARBBufferObject.glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, size, usage.arb); + //#endif } else { glBufferData(GL_PIXEL_PACK_BUFFER, size, usage.gl15); } @@ -61,7 +84,11 @@ public class PixelBufferObject { public void bind() { if (arb) { - ARBBufferObject.glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, getHandle()); + //#if MC>=11300 + ARBVertexBufferObject.glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, getHandle()); + //#else + //$$ ARBBufferObject.glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, getHandle()); + //#endif } else { glBindBuffer(GL_PIXEL_PACK_BUFFER, getHandle()); } @@ -71,7 +98,11 @@ public class PixelBufferObject { public void unbind() { checkBound(); if (arb) { - ARBBufferObject.glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0); + //#if MC>=11300 + ARBVertexBufferObject.glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0); + //#else + //$$ ARBBufferObject.glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0); + //#endif } else { glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); } @@ -95,13 +126,19 @@ public class PixelBufferObject { checkNotMapped(); ByteBuffer buffer; if (arb) { - buffer = ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB, size, null); + //#if MC>=11300 + buffer = ARBVertexBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB, size, null); + //#else + //$$ buffer = ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB, size, null); + //#endif } else { buffer = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY, size, null); } - if (buffer == null) { - Util.checkGLError(); - } + //#if MC<11300 + //$$ if (buffer == null) { + //$$ Util.checkGLError(); + //$$ } + //#endif mapped.set(getHandle()); return buffer; } @@ -111,13 +148,19 @@ public class PixelBufferObject { checkNotMapped(); ByteBuffer buffer; if (arb) { - buffer = ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_WRITE_ONLY_ARB, size, null); + //#if MC>=11300 + buffer = ARBVertexBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_WRITE_ONLY_ARB, size, null); + //#else + //$$ buffer = ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_WRITE_ONLY_ARB, size, null); + //#endif } else { buffer = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_WRITE_ONLY, size, null); } - if (buffer == null) { - Util.checkGLError(); - } + //#if MC<11300 + //$$ if (buffer == null) { + //$$ Util.checkGLError(); + //$$ } + //#endif mapped.set(getHandle()); return buffer; } @@ -127,13 +170,19 @@ public class PixelBufferObject { checkNotMapped(); ByteBuffer buffer; if (arb) { - buffer = ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_WRITE_ARB, size, null); + //#if MC>=11300 + buffer = ARBVertexBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_WRITE_ARB, size, null); + //#else + //$$ buffer = ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_WRITE_ARB, size, null); + //#endif } else { buffer = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_WRITE, size, null); } - if (buffer == null) { - Util.checkGLError(); - } + //#if MC<11300 + //$$ if (buffer == null) { + //$$ Util.checkGLError(); + //$$ } + //#endif mapped.set(getHandle()); return buffer; } @@ -144,7 +193,11 @@ public class PixelBufferObject { throw new IllegalStateException("Buffer not mapped."); } if (arb) { - ARBBufferObject.glUnmapBufferARB(GL_PIXEL_PACK_BUFFER_ARB); + //#if MC>=11300 + ARBVertexBufferObject.glUnmapBufferARB(GL_PIXEL_PACK_BUFFER_ARB); + //#else + //$$ ARBBufferObject.glUnmapBufferARB(GL_PIXEL_PACK_BUFFER_ARB); + //#endif } else { glUnmapBuffer(GL_PIXEL_PACK_BUFFER); } @@ -154,7 +207,11 @@ public class PixelBufferObject { public void delete() { if (handle != -1) { if (arb) { - ARBBufferObject.glDeleteBuffersARB(getHandle()); + //#if MC>=11300 + ARBVertexBufferObject.glDeleteBuffersARB(getHandle()); + //#else + //$$ ARBBufferObject.glDeleteBuffersARB(getHandle()); + //#endif } else { glDeleteBuffers(getHandle()); } @@ -167,12 +224,7 @@ public class PixelBufferObject { super.finalize(); if (handle != -1) { LogManager.getLogger().warn("PBO garbage collected before deleted!"); - Minecraft.getMinecraft().addScheduledTask(new Runnable() { - @Override - public void run() { - delete(); - } - }); + MCVer.getMinecraft().addScheduledTask(this::delete); } } } diff --git a/src/main/java/com/replaymod/render/utils/SoundHandler.java b/src/main/java/com/replaymod/render/utils/SoundHandler.java index c0ea3f1d..8959689d 100644 --- a/src/main/java/com/replaymod/render/utils/SoundHandler.java +++ b/src/main/java/com/replaymod/render/utils/SoundHandler.java @@ -1,6 +1,6 @@ package com.replaymod.render.utils; -import net.minecraft.client.Minecraft; +import com.replaymod.core.versions.MCVer; import net.minecraft.util.ResourceLocation; import org.apache.commons.io.IOUtils; @@ -24,7 +24,7 @@ public class SoundHandler { */ public void playSound(ResourceLocation loc) { try { - InputStream is = Minecraft.getMinecraft().getResourceManager().getResource(loc).getInputStream(); + InputStream is = MCVer.getMinecraft().getResourceManager().getResource(loc).getInputStream(); byte[] bytes = IOUtils.toByteArray(is); is.close(); AudioInputStream ais = AudioSystem.getAudioInputStream(new ByteArrayInputStream(bytes)); diff --git a/src/main/resources/META-INF/replaymod_at.cfg b/src/main/resources/META-INF/replaymod_at.cfg index 53e91c8c..b1d4b8ff 100644 --- a/src/main/resources/META-INF/replaymod_at.cfg +++ b/src/main/resources/META-INF/replaymod_at.cfg @@ -74,15 +74,24 @@ public net.minecraft.client.renderer.EntityRenderer * public net.minecraft.client.renderer.EntityRenderer *() # RenderGlobal -public net.minecraft.client.renderer.RenderGlobal field_174995_M # renderDispatcher -public net.minecraft.client.renderer.RenderGlobal field_147595_R # displayListEntitiesDirty -public net.minecraft.client.renderer.RenderGlobal field_175009_l # chunksToUpdate -public net.minecraft.client.renderer.RenderGlobal field_72755_R # renderInfos -public net.minecraft.client.renderer.RenderGlobal field_175009_l # chunksToUpdate -public net.minecraft.client.renderer.RenderGlobal field_72740_G # renderEntitiesStartupCounter +##if MC>=11300 +public net.minecraft.client.renderer.WorldRenderer field_174995_M # renderDispatcher +public net.minecraft.client.renderer.WorldRenderer field_147595_R # displayListEntitiesDirty +public net.minecraft.client.renderer.WorldRenderer field_175009_l # chunksToUpdate +public net.minecraft.client.renderer.WorldRenderer field_72755_R # renderInfos +public net.minecraft.client.renderer.WorldRenderer field_175009_l # chunksToUpdate +public net.minecraft.client.renderer.WorldRenderer field_72740_G # renderEntitiesStartupCounter +##else +#$$ public net.minecraft.client.renderer.RenderGlobal field_174995_M # renderDispatcher +#$$ public net.minecraft.client.renderer.RenderGlobal field_147595_R # displayListEntitiesDirty +#$$ public net.minecraft.client.renderer.RenderGlobal field_175009_l # chunksToUpdate +#$$ public net.minecraft.client.renderer.RenderGlobal field_72755_R # renderInfos +#$$ public net.minecraft.client.renderer.RenderGlobal field_175009_l # chunksToUpdate +#$$ public net.minecraft.client.renderer.RenderGlobal field_72740_G # renderEntitiesStartupCounter ##if MC<10904 #$$ public net.minecraft.client.renderer.RenderGlobal func_174983_a(Lnet.minecraft.util.BlockPos;Lnet.minecraft.client.renderer.chunk.RenderChunk;)Z # isPositionInRenderChunk ##endif +##endif public net.minecraft.client.renderer.RenderGlobal$ContainerLocalRenderInformation #public net.minecraft.client.renderer.RenderGlobal$ContainerLocalRenderInformation field_178553_a # renderChunk @@ -120,7 +129,11 @@ public net.minecraft.server.integrated.IntegratedServer field_71348_o # isGamePa # GameSettings ##if MC>=10904 ##if MC>=11002 -public-f net.minecraft.client.settings.GameSettings field_186714_aM # soundLevels +##if MC>=11300 +public-f net.minecraft.client.GameSettings field_186714_aM # soundLevels +##else +#$$ public-f net.minecraft.client.settings.GameSettings field_186714_aM # soundLevels +##endif ##else #$$ public net.minecraft.client.settings.GameSettings field_186714_aM # soundLevels ##endif diff --git a/versions/common.gradle b/versions/common.gradle index f5756395..ad76535e 100644 --- a/versions/common.gradle +++ b/versions/common.gradle @@ -277,7 +277,6 @@ sourceSets { exclude 'com/replaymod/editor' exclude 'com/replaymod/extras' exclude 'com/replaymod/online' - exclude 'com/replaymod/render' exclude 'com/replaymod/restrictions' exclude 'com/replaymod/simplepathing' }