diff --git a/src/main/java/com/replaymod/render/gui/GuiNoFfmpeg.java b/src/main/java/com/replaymod/render/gui/GuiNoFfmpeg.java new file mode 100644 index 00000000..6261f861 --- /dev/null +++ b/src/main/java/com/replaymod/render/gui/GuiNoFfmpeg.java @@ -0,0 +1,48 @@ +package com.replaymod.render.gui; + +import de.johni0702.minecraft.gui.container.GuiPanel; +import de.johni0702.minecraft.gui.container.GuiScreen; +import de.johni0702.minecraft.gui.element.GuiButton; +import de.johni0702.minecraft.gui.element.GuiLabel; +import de.johni0702.minecraft.gui.layout.HorizontalLayout; +import de.johni0702.minecraft.gui.layout.VerticalLayout; + +import java.net.URI; + +import static com.replaymod.core.versions.MCVer.openURL; +import static de.johni0702.minecraft.gui.versions.MCVer.setClipboardString; + +public class GuiNoFfmpeg extends GuiScreen { + + private static final String LINK = "https://www.replaymod.com/docs/#installing-ffmpeg"; + + private final GuiLabel message = new GuiLabel() + .setI18nText("replaymod.gui.rendering.error.message"); + private final GuiLabel link = new GuiLabel() + .setText(LINK); + private final GuiButton openLinkButton = new GuiButton() + .setI18nLabel("chat.link.open") + .setSize(100, 20) + .onClick(() -> openURL(URI.create(LINK))); + private final GuiButton copyToClipboardButton = new GuiButton() + .setI18nLabel("chat.copy") + .setSize(100, 20) + .onClick(() -> setClipboardString(LINK)); + private final GuiButton backButton = new GuiButton() + .setI18nLabel("gui.back") + .setSize(100, 20); + private final GuiPanel buttons = new GuiPanel() + .setLayout(new HorizontalLayout(HorizontalLayout.Alignment.CENTER).setSpacing(4)) + .addElements(null, openLinkButton, copyToClipboardButton, backButton); + + { + setBackground(Background.DIRT); + setTitle(new GuiLabel().setI18nText("replaymod.gui.rendering.error.title")); + setLayout(new VerticalLayout(VerticalLayout.Alignment.CENTER).setSpacing(30)); + addElements(new VerticalLayout.Data(0.5), message, link, buttons); + } + + public GuiNoFfmpeg(Runnable goBack) { + backButton.onClick(goBack); + } +} diff --git a/src/main/java/com/replaymod/render/gui/GuiRenderQueue.java b/src/main/java/com/replaymod/render/gui/GuiRenderQueue.java index db37e673..a1b8b6a2 100644 --- a/src/main/java/com/replaymod/render/gui/GuiRenderQueue.java +++ b/src/main/java/com/replaymod/render/gui/GuiRenderQueue.java @@ -37,7 +37,6 @@ 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.MinecraftClient; -import net.minecraft.client.gui.screen.NoticeScreen; import net.minecraft.util.crash.CrashReport; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.tuple.Pair; @@ -181,17 +180,7 @@ public class GuiRenderQueue extends AbstractGuiPopup implements videoRenderer.renderVideo(); } catch (FFmpegWriter.NoFFmpegException e) { LOGGER.error("Rendering video:", e); - NoticeScreen errorScreen = new NoticeScreen( - //#if MC>=11400 - container::display, - new TranslatableText("replaymod.gui.rendering.error.title"), - new TranslatableText("replaymod.gui.rendering.error.message") - //#else - //$$ I18n.format("replaymod.gui.rendering.error.title"), - //$$ I18n.format("replaymod.gui.rendering.error.message") - //#endif - ); - mc.openScreen(errorScreen); + mc.openScreen(new GuiNoFfmpeg(container::display).toMinecraft()); return; } catch (FFmpegWriter.FFmpegStartupException e) { int jobsToSkip = jobsDone; diff --git a/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java b/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java index 38d80a27..b8f67b17 100644 --- a/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java +++ b/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java @@ -30,7 +30,6 @@ 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.ReadableDimension; -import net.minecraft.client.gui.screen.NoticeScreen; import net.minecraft.client.resource.language.I18n; import net.minecraft.util.crash.CrashReport; @@ -240,17 +239,7 @@ public class GuiRenderSettings extends AbstractGuiPopup { videoRenderer.renderVideo(); } catch (FFmpegWriter.NoFFmpegException e) { LOGGER.error("Rendering video:", e); - NoticeScreen errorScreen = new NoticeScreen( - //#if MC>=11400 - getScreen()::display, - new TranslatableText("replaymod.gui.rendering.error.title"), - new TranslatableText("replaymod.gui.rendering.error.message") - //#else - //$$ I18n.format("replaymod.gui.rendering.error.title"), - //$$ I18n.format("replaymod.gui.rendering.error.message") - //#endif - ); - getMinecraft().openScreen(errorScreen); + getMinecraft().openScreen(new GuiNoFfmpeg(getScreen()::display).toMinecraft()); } catch (FFmpegWriter.FFmpegStartupException e) { GuiExportFailed.tryToRecover(e, newSettings -> { // Update settings with fixed ffmpeg arguments diff --git a/src/main/resources/assets/replaymod/lang b/src/main/resources/assets/replaymod/lang index 54ab62bd..4b1698fc 160000 --- a/src/main/resources/assets/replaymod/lang +++ b/src/main/resources/assets/replaymod/lang @@ -1 +1 @@ -Subproject commit 54ab62bdbb646c6b4f4b6d61a26183258e5a017d +Subproject commit 4b1698fcf805fea05d6c3f0ca6c14c63d7e731db