diff --git a/src/main/java/com/replaymod/core/ReplayMod.java b/src/main/java/com/replaymod/core/ReplayMod.java index 4d2230bd..97a1f656 100755 --- a/src/main/java/com/replaymod/core/ReplayMod.java +++ b/src/main/java/com/replaymod/core/ReplayMod.java @@ -85,7 +85,8 @@ public class ReplayMod { } public File getReplayFolder() throws IOException { - File folder = new File(getSettingsRegistry().get(Setting.RECORDING_PATH)); + String path = getSettingsRegistry().get(Setting.RECORDING_PATH); + File folder = new File(path.startsWith("./") ? getMinecraft().mcDataDir : null, path); FileUtils.forceMkdir(folder); return folder; } diff --git a/src/main/java/com/replaymod/online/ReplayModOnline.java b/src/main/java/com/replaymod/online/ReplayModOnline.java index 365aae19..d4f750f2 100644 --- a/src/main/java/com/replaymod/online/ReplayModOnline.java +++ b/src/main/java/com/replaymod/online/ReplayModOnline.java @@ -8,10 +8,10 @@ import com.replaymod.online.gui.GuiSaveModifiedReplay; import com.replaymod.online.handler.GuiHandler; import com.replaymod.replay.ReplayModReplay; import com.replaymod.replay.events.ReplayCloseEvent; -import de.johni0702.minecraft.gui.container.GuiScreen; import com.replaymod.replaystudio.replay.ReplayFile; import com.replaymod.replaystudio.replay.ZipReplayFile; import com.replaymod.replaystudio.studio.ReplayStudio; +import de.johni0702.minecraft.gui.container.GuiScreen; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.Mod; @@ -24,6 +24,8 @@ import org.apache.logging.log4j.Logger; import java.io.File; import java.io.IOException; +import static net.minecraft.client.Minecraft.getMinecraft; + @Mod(modid = ReplayModOnline.MOD_ID, useMetadata = true) public class ReplayModOnline { public static final String MOD_ID = "replaymod-online"; @@ -101,7 +103,8 @@ public class ReplayModOnline { } public File getDownloadsFolder() { - return new File(core.getSettingsRegistry().get(Setting.DOWNLOAD_PATH)); + String path = core.getSettingsRegistry().get(Setting.DOWNLOAD_PATH); + return new File(path.startsWith("./") ? getMinecraft().mcDataDir : null, path); } public File getDownloadedFile(int id) { diff --git a/src/main/java/com/replaymod/render/ReplayModRender.java b/src/main/java/com/replaymod/render/ReplayModRender.java index ade88210..6ddb36ae 100644 --- a/src/main/java/com/replaymod/render/ReplayModRender.java +++ b/src/main/java/com/replaymod/render/ReplayModRender.java @@ -1,11 +1,17 @@ package com.replaymod.render; import com.replaymod.core.ReplayMod; +import net.minecraft.crash.CrashReport; +import net.minecraft.util.ReportedException; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import org.apache.commons.io.FileUtils; import org.apache.logging.log4j.Logger; +import java.io.File; +import java.io.IOException; + @Mod(modid = ReplayModRender.MOD_ID, useMetadata = true) public class ReplayModRender { public static final String MOD_ID = "replaymod-render"; @@ -32,6 +38,17 @@ public class ReplayModRender { core.getSettingsRegistry().register(Setting.class); } + public File getVideoFolder() { + String path = core.getSettingsRegistry().get(Setting.RENDER_PATH); + File folder = new File(path.startsWith("./") ? core.getMinecraft().mcDataDir : null, path); + try { + FileUtils.forceMkdir(folder); + } catch (IOException e) { + throw new ReportedException(CrashReport.makeCrashReport(e, "Cannot create video folder.")); + } + return folder; + } + public Configuration getConfiguration() { return configuration; } diff --git a/src/main/java/com/replaymod/render/VideoWriter.java b/src/main/java/com/replaymod/render/VideoWriter.java index 66665768..1e98ab37 100755 --- a/src/main/java/com/replaymod/render/VideoWriter.java +++ b/src/main/java/com/replaymod/render/VideoWriter.java @@ -49,7 +49,8 @@ public class VideoWriter implements FrameConsumer { System.out.println("Starting " + settings.getExportCommand() + " with args: " + commandArgs); String[] cmdline = new CommandLine(executable).addArguments(commandArgs).toStrings(); process = new ProcessBuilder(cmdline).directory(outputFolder).start(); - OutputStream exportLogOut = new TeeOutputStream(new FileOutputStream("export.log"), ffmpegLog); + File exportLogFile = new File(Minecraft.getMinecraft().mcDataDir, "export.log"); + OutputStream exportLogOut = new TeeOutputStream(new FileOutputStream(exportLogFile), ffmpegLog); new StreamPipe(process.getInputStream(), exportLogOut).start(); new StreamPipe(process.getErrorStream(), exportLogOut).start(); outputStream = process.getOutputStream(); diff --git a/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java b/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java index a9be9391..247db259 100644 --- a/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java +++ b/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java @@ -7,7 +7,6 @@ import com.google.gson.GsonBuilder; import com.google.gson.InstanceCreator; import com.replaymod.render.RenderSettings; import com.replaymod.render.ReplayModRender; -import com.replaymod.render.Setting; import com.replaymod.render.rendering.VideoRenderer; import com.replaymod.replay.ReplayHandler; import com.replaymod.replaystudio.pathing.path.Timeline; @@ -410,7 +409,7 @@ public class GuiRenderSettings extends GuiScreen implements Closeable { private File generateOutputFile(RenderSettings.EncodingPreset encodingPreset) { String fileName = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss").format(new Date()); - File folder = new File(ReplayModRender.instance.getCore().getSettingsRegistry().get(Setting.RENDER_PATH)); + File folder = ReplayModRender.instance.getVideoFolder(); return new File(folder, fileName + "." + encodingPreset.getFileExtension()); }