diff --git a/src/main/java/com/replaymod/render/gui/GuiRenderQueue.java b/src/main/java/com/replaymod/render/gui/GuiRenderQueue.java index cb483a81..33d1392a 100644 --- a/src/main/java/com/replaymod/render/gui/GuiRenderQueue.java +++ b/src/main/java/com/replaymod/render/gui/GuiRenderQueue.java @@ -25,6 +25,7 @@ import de.johni0702.minecraft.gui.container.GuiVerticalList; import de.johni0702.minecraft.gui.element.GuiButton; import de.johni0702.minecraft.gui.element.GuiElement; import de.johni0702.minecraft.gui.element.GuiLabel; +import de.johni0702.minecraft.gui.element.GuiTooltip; import de.johni0702.minecraft.gui.function.Typeable; import de.johni0702.minecraft.gui.layout.CustomLayout; import de.johni0702.minecraft.gui.layout.GridLayout; @@ -338,6 +339,11 @@ public class GuiRenderQueue extends AbstractGuiPopup implements removeButton.setEnabled(selected >= 1); renderButton.setEnabled(selected > 0); renderButton.setI18nLabel("replaymod.gui.renderqueue.render" + (selected > 0 ? "selected" : "all")); + + String[] compatError = VideoRenderer.checkCompat(); + if (compatError != null) { + renderButton.setDisabled().setTooltip(new GuiTooltip().setText(compatError)); + } } @Override diff --git a/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java b/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java index 52103d3e..5a632c57 100644 --- a/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java +++ b/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java @@ -367,19 +367,26 @@ public class GuiRenderSettings extends AbstractGuiPopup { videoWidth.setEnabled(!renderMethod.hasFixedAspectRatio()); // Validate video width and height - String error = updateResolution(); - if (error == null) { - renderButton.setEnabled().setTooltip(null); + String resolutionError = updateResolution(); + if (resolutionError == null) { queueButton.setEnabled().setTooltip(null); videoWidth.setTextColor(Colors.WHITE); videoHeight.setTextColor(Colors.WHITE); } else { - renderButton.setDisabled().setTooltip(new GuiTooltip().setI18nText(error)); - queueButton.setDisabled().setTooltip(new GuiTooltip().setI18nText(error)); + queueButton.setDisabled().setTooltip(new GuiTooltip().setI18nText(resolutionError)); videoWidth.setTextColor(Colors.RED); videoHeight.setTextColor(Colors.RED); } + String[] compatError = VideoRenderer.checkCompat(); + if (resolutionError != null) { + renderButton.setDisabled().setTooltip(new GuiTooltip().setI18nText(resolutionError)); + } else if (compatError != null) { + renderButton.setDisabled().setTooltip(new GuiTooltip().setText(compatError)); + } else { + renderButton.setEnabled().setTooltip(null); + } + // Enable/Disable bitrate input field and dropdown if (encodingPresetDropdown.getSelectedValue().hasBitrateSetting()) { bitRateField.setEnabled(); diff --git a/src/main/java/com/replaymod/render/hooks/ChunkLoadingRenderGlobal.java b/src/main/java/com/replaymod/render/hooks/ChunkLoadingRenderGlobal.java index 334f6c02..f15097cf 100644 --- a/src/main/java/com/replaymod/render/hooks/ChunkLoadingRenderGlobal.java +++ b/src/main/java/com/replaymod/render/hooks/ChunkLoadingRenderGlobal.java @@ -63,15 +63,6 @@ public class ChunkLoadingRenderGlobal { } private void install() { - //#if FABRIC>=1 - if (net.fabricmc.loader.api.FabricLoader.getInstance().isModLoaded("sodium")) { - throw new UnsupportedOperationException( - "Rendering is not currently supported while Sodium is installed.\n" + - "See https://github.com/ReplayMod/ReplayMod/issues/150\n" + - "For now, you need to uninstall Sodium before rendering!" - ); - } - //#endif try { //#if MC>=11400 Field hookField = WorldRenderer.class.getField("replayModRender_hook"); diff --git a/src/main/java/com/replaymod/render/rendering/VideoRenderer.java b/src/main/java/com/replaymod/render/rendering/VideoRenderer.java index 3d47734b..565b84eb 100644 --- a/src/main/java/com/replaymod/render/rendering/VideoRenderer.java +++ b/src/main/java/com/replaymod/render/rendering/VideoRenderer.java @@ -727,4 +727,17 @@ public class VideoRenderer implements RenderInfo { return getVideoTime(); } } + + public static String[] checkCompat() { + //#if FABRIC>=1 + if (net.fabricmc.loader.api.FabricLoader.getInstance().isModLoaded("sodium")) { + return new String[] { + "Rendering is not currently supported while Sodium is installed.", + "See https://github.com/ReplayMod/ReplayMod/issues/150", + "For now, you need to uninstall Sodium before rendering!" + }; + } + //#endif + return null; + } } diff --git a/src/main/java/com/replaymod/replay/gui/screen/GuiReplayViewer.java b/src/main/java/com/replaymod/replay/gui/screen/GuiReplayViewer.java index 85188d31..52403f5f 100644 --- a/src/main/java/com/replaymod/replay/gui/screen/GuiReplayViewer.java +++ b/src/main/java/com/replaymod/replay/gui/screen/GuiReplayViewer.java @@ -5,6 +5,7 @@ import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.SettableFuture; import com.replaymod.render.gui.GuiRenderQueue; +import com.replaymod.render.rendering.VideoRenderer; import com.replaymod.render.utils.RenderJob; import com.replaymod.replaystudio.us.myles.ViaVersion.api.Pair; import de.johni0702.minecraft.gui.GuiRenderer; @@ -281,6 +282,11 @@ public class GuiReplayViewer extends GuiScreen { loadButton.setI18nLabel("replaymod.gui.viewer.bulkrender", jobs.size()); loadButton.setTooltip(new GuiTooltip().setText(tooltipLines)); loadButton.setEnabled(!jobs.isEmpty()); + + String[] compatError = VideoRenderer.checkCompat(); + if (compatError != null) { + loadButton.setDisabled().setTooltip(new GuiTooltip().setText(compatError)); + } } else { loadButton.setI18nLabel("replaymod.gui.load"); loadButton.setTooltip(null);