Decides the folder for panoramas before we start rendering.
This prevents panoramas being split into different folders, since the time it takes to render these things is non-trivial.
This commit is contained in:
@@ -3,21 +3,15 @@ package markil3.panorama;
|
|||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
|
||||||
import net.minecraft.block.Blocks;
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.FogRenderer;
|
|
||||||
import net.minecraft.client.renderer.texture.NativeImage;
|
import net.minecraft.client.renderer.texture.NativeImage;
|
||||||
import net.minecraft.client.renderer.texture.TextureManager;
|
import net.minecraft.client.renderer.texture.TextureManager;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.ScreenShotHelper;
|
import net.minecraft.util.ScreenShotHelper;
|
||||||
import net.minecraft.util.Util;
|
import net.minecraft.util.Util;
|
||||||
import net.minecraftforge.client.event.ModelBakeEvent;
|
import net.minecraftforge.client.event.ModelBakeEvent;
|
||||||
import net.minecraftforge.client.event.TextureStitchEvent;
|
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.RegistryEvent;
|
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.InterModComms;
|
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||||
@@ -33,7 +27,7 @@ import java.io.File;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.stream.Collectors;
|
import java.util.Optional;
|
||||||
|
|
||||||
// The value here should match an entry in the META-INF/mods.toml file
|
// The value here should match an entry in the META-INF/mods.toml file
|
||||||
@Mod("panorama")
|
@Mod("panorama")
|
||||||
@@ -84,7 +78,7 @@ public class Main
|
|||||||
File panoramas = new File(mc.gameDir, "panoramas");
|
File panoramas = new File(mc.gameDir, "panoramas");
|
||||||
if (panoramas.isDirectory())
|
if (panoramas.isDirectory())
|
||||||
{
|
{
|
||||||
for (File panorama : panoramas.listFiles())
|
for (File panorama : Optional.ofNullable(panoramas.listFiles()).orElse(new File[0]))
|
||||||
{
|
{
|
||||||
if (panorama.isDirectory())
|
if (panorama.isDirectory())
|
||||||
{
|
{
|
||||||
@@ -129,28 +123,32 @@ public class Main
|
|||||||
|
|
||||||
static void renderPanorama(Minecraft mc)
|
static void renderPanorama(Minecraft mc)
|
||||||
{
|
{
|
||||||
|
final SimpleDateFormat FORMATTER =
|
||||||
|
new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss");
|
||||||
|
|
||||||
final int SCREENSHOT_WIDTH = 2048;
|
final int SCREENSHOT_WIDTH = 2048;
|
||||||
final int SCREENSHOT_HEIGHT = 2048;
|
final int SCREENSHOT_HEIGHT = 2048;
|
||||||
|
|
||||||
|
String name;
|
||||||
|
|
||||||
RenderSystem.viewport(0, 0, SCREENSHOT_WIDTH, SCREENSHOT_HEIGHT);
|
RenderSystem.viewport(0, 0, SCREENSHOT_WIDTH, SCREENSHOT_HEIGHT);
|
||||||
|
|
||||||
if (mc.world != null)
|
if (mc.world != null)
|
||||||
{
|
{
|
||||||
|
name = FORMATTER.format(new Date());
|
||||||
// We need to render an extra frame at the beginning, or
|
// We need to render an extra frame at the beginning, or
|
||||||
// otherwise it won't render correctly.
|
// otherwise it won't render correctly.
|
||||||
for (int i = -1; i < 6; i++)
|
for (int i = -1; i < 6; i++)
|
||||||
{
|
{
|
||||||
mc.gameRenderer.renderWorld(mc.getRenderPartialTicks(),
|
mc.gameRenderer.renderWorld(mc.getRenderPartialTicks(),
|
||||||
Util.nanoTime(), new MatrixStack());
|
Util.nanoTime(), new MatrixStack());
|
||||||
saveScreenshot(mc, 0, i);
|
saveScreenshot(mc, name, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void saveScreenshot(Minecraft mc, int panoramaNum, int panoramaSide)
|
static void saveScreenshot(Minecraft mc, String name, int panoramaSide)
|
||||||
{
|
{
|
||||||
final SimpleDateFormat FORMATTER =
|
|
||||||
new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss");
|
|
||||||
final int FRAMEBUFFER_WIDTH = mc.getMainWindow().getFramebufferWidth();
|
final int FRAMEBUFFER_WIDTH = mc.getMainWindow().getFramebufferWidth();
|
||||||
final int FRAMEBUFFER_HEIGHT =
|
final int FRAMEBUFFER_HEIGHT =
|
||||||
mc.getMainWindow().getFramebufferHeight();
|
mc.getMainWindow().getFramebufferHeight();
|
||||||
@@ -158,12 +156,18 @@ public class Main
|
|||||||
final int SCREENSHOT_HEIGHT = 2048;
|
final int SCREENSHOT_HEIGHT = 2048;
|
||||||
|
|
||||||
File file = new File(mc.gameDir,
|
File file = new File(mc.gameDir,
|
||||||
"panoramas/" + FORMATTER.format(new Date()) + "/panorama_" + panoramaSide +
|
"panoramas/" + name + "/panorama_" + panoramaSide +
|
||||||
".png");
|
".png");
|
||||||
file.getParentFile().mkdirs();
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
file.createNewFile();
|
if (!file.getParentFile().mkdirs())
|
||||||
|
{
|
||||||
|
throw new IOException("Could not create panorama directory " + file.getParent());
|
||||||
|
}
|
||||||
|
if (!file.createNewFile())
|
||||||
|
{
|
||||||
|
throw new IOException("Could not create file " + file.getAbsolutePath());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (IOException e)
|
catch (IOException e)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user