Refactored and reformatted code to use less static variables
This commit is contained in:
@@ -1,113 +1,95 @@
|
||||
package eu.crushedpixel.replaymod.video;
|
||||
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.nio.IntBuffer;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipInputStream;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import eu.crushedpixel.replaymod.ReplayMod;
|
||||
import eu.crushedpixel.replaymod.chat.ChatMessageHandler.ChatMessageType;
|
||||
import eu.crushedpixel.replaymod.events.TickAndRenderListener;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.renderer.OpenGlHelper;
|
||||
import net.minecraft.client.renderer.texture.TextureUtil;
|
||||
import net.minecraft.client.shader.Framebuffer;
|
||||
|
||||
import org.lwjgl.BufferUtils;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
|
||||
import eu.crushedpixel.replaymod.chat.ChatMessageRequests;
|
||||
import eu.crushedpixel.replaymod.chat.ChatMessageRequests.ChatMessageType;
|
||||
import eu.crushedpixel.replaymod.gui.GuiReplaySaving;
|
||||
import eu.crushedpixel.replaymod.replay.ReplayHandler;
|
||||
import eu.crushedpixel.replaymod.utils.ImageUtils;
|
||||
import eu.crushedpixel.replaymod.utils.ReplayFileIO;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
|
||||
public class ReplayScreenshot {
|
||||
|
||||
private static Minecraft mc = Minecraft.getMinecraft();
|
||||
private static Minecraft mc = Minecraft.getMinecraft();
|
||||
|
||||
private static long last_finish = -1;
|
||||
private static long last_finish = -1;
|
||||
|
||||
private static boolean before;
|
||||
private static double beforeSpeed;
|
||||
private static GuiScreen beforeScreen;
|
||||
private static boolean before;
|
||||
private static double beforeSpeed;
|
||||
private static GuiScreen beforeScreen;
|
||||
private static boolean locked = false;
|
||||
|
||||
public static void prepareScreenshot() {
|
||||
before = mc.gameSettings.hideGUI;
|
||||
beforeSpeed = ReplayHandler.getSpeed();
|
||||
beforeScreen = mc.currentScreen;
|
||||
}
|
||||
|
||||
private static boolean locked = false;
|
||||
public static void prepareScreenshot() {
|
||||
before = mc.gameSettings.hideGUI;
|
||||
beforeSpeed = ReplayMod.replaySender.getReplaySpeed();
|
||||
beforeScreen = mc.currentScreen;
|
||||
}
|
||||
|
||||
public static void saveScreenshot() {
|
||||
public static void saveScreenshot() {
|
||||
|
||||
if(locked) return;
|
||||
locked = true;
|
||||
|
||||
try {
|
||||
GuiReplaySaving.replaySaving = true;
|
||||
if(locked) return;
|
||||
locked = true;
|
||||
|
||||
mc.gameSettings.hideGUI = true;
|
||||
mc.currentScreen = null;
|
||||
try {
|
||||
GuiReplaySaving.replaySaving = true;
|
||||
|
||||
mc.entityRenderer.updateCameraAndRender(0);
|
||||
ReplayHandler.setSpeed(0);
|
||||
mc.gameSettings.hideGUI = true;
|
||||
mc.currentScreen = null;
|
||||
|
||||
final BufferedImage fbi = ScreenCapture.captureScreen();
|
||||
mc.entityRenderer.updateCameraAndRender(0);
|
||||
ReplayMod.replaySender.setReplaySpeed(0);
|
||||
|
||||
mc.gameSettings.hideGUI = before;
|
||||
mc.currentScreen = beforeScreen;
|
||||
ReplayHandler.setSpeed(beforeSpeed);
|
||||
final BufferedImage fbi = ScreenCapture.captureScreen();
|
||||
|
||||
//The actual cropping and saving should be executed in a separate thread
|
||||
Thread ioThread = new Thread(new Runnable() {
|
||||
mc.gameSettings.hideGUI = before;
|
||||
mc.currentScreen = beforeScreen;
|
||||
ReplayMod.replaySender.setReplaySpeed(beforeSpeed);
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
float aspect = 1280f/720f;
|
||||
//The actual cropping and saving should be executed in a separate thread
|
||||
Thread ioThread = new Thread(new Runnable() {
|
||||
|
||||
Rectangle rect;
|
||||
if((float)fbi.getWidth()/(float)fbi.getHeight() <= aspect) {
|
||||
int h = Math.round(fbi.getWidth()/aspect);
|
||||
int y = (fbi.getHeight()/2) - (h/2);
|
||||
rect = new Rectangle(0, y, fbi.getWidth(), h);
|
||||
} else {
|
||||
int w = Math.round(fbi.getHeight()*aspect);
|
||||
int x = (fbi.getWidth()/2) - (w/2);
|
||||
rect = new Rectangle(x, 0, w, fbi.getHeight());
|
||||
}
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
float aspect = 1280f / 720f;
|
||||
|
||||
final BufferedImage nbi = ImageUtils.cropImage(fbi, rect);
|
||||
Rectangle rect;
|
||||
if((float) fbi.getWidth() / (float) fbi.getHeight() <= aspect) {
|
||||
int h = Math.round(fbi.getWidth() / aspect);
|
||||
int y = (fbi.getHeight() / 2) - (h / 2);
|
||||
rect = new Rectangle(0, y, fbi.getWidth(), h);
|
||||
} else {
|
||||
int w = Math.round(fbi.getHeight() * aspect);
|
||||
int x = (fbi.getWidth() / 2) - (w / 2);
|
||||
rect = new Rectangle(x, 0, w, fbi.getHeight());
|
||||
}
|
||||
|
||||
File replayFile = ReplayHandler.getReplayFile();
|
||||
final BufferedImage nbi = ImageUtils.cropImage(fbi, rect);
|
||||
|
||||
File tempImage = File.createTempFile("thumb", null);
|
||||
File replayFile = ReplayHandler.getReplayFile();
|
||||
|
||||
int h = 720;
|
||||
int w = 1280;
|
||||
File tempImage = File.createTempFile("thumb", null);
|
||||
|
||||
BufferedImage img = ImageUtils.scaleImage(nbi, new Dimension(w, h));
|
||||
int h = 720;
|
||||
int w = 1280;
|
||||
|
||||
ImageIO.write(img, "jpg", tempImage);
|
||||
BufferedImage img = ImageUtils.scaleImage(nbi, new Dimension(w, h));
|
||||
|
||||
ReplayFileIO.addThumbToZip(replayFile, tempImage);
|
||||
ImageIO.write(img, "jpg", tempImage);
|
||||
|
||||
tempImage.delete();
|
||||
ReplayFileIO.addThumbToZip(replayFile, tempImage);
|
||||
|
||||
tempImage.delete();
|
||||
|
||||
/*
|
||||
File outputFile = File.createTempFile(replayFile.getName(), null);
|
||||
File outputFile = File.createTempFile(replayFile.getName(), null);
|
||||
|
||||
byte[] buf = new byte[1024];
|
||||
|
||||
@@ -155,31 +137,29 @@ public class ReplayScreenshot {
|
||||
tempImage.delete();
|
||||
*/
|
||||
|
||||
ChatMessageRequests.addChatMessage("Thumbnail has been successfully saved", ChatMessageType.INFORMATION);
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
finally {
|
||||
GuiReplaySaving.replaySaving = false;
|
||||
locked = false;
|
||||
TickAndRenderListener.finishScreenshot();
|
||||
}
|
||||
}
|
||||
});
|
||||
ReplayMod.chatMessageHandler.addChatMessage("Thumbnail has been successfully saved", ChatMessageType.INFORMATION);
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
GuiReplaySaving.replaySaving = false;
|
||||
locked = false;
|
||||
TickAndRenderListener.finishScreenshot();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
ioThread.start();
|
||||
}
|
||||
catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
mc.gameSettings.hideGUI = before;
|
||||
mc.currentScreen = beforeScreen;
|
||||
ReplayHandler.setSpeed(beforeSpeed);
|
||||
exception.printStackTrace();
|
||||
ChatMessageRequests.addChatMessage("Thumbnail could not be saved", ChatMessageType.WARNING);
|
||||
}
|
||||
ioThread.start();
|
||||
} catch(Exception exception) {
|
||||
exception.printStackTrace();
|
||||
mc.gameSettings.hideGUI = before;
|
||||
mc.currentScreen = beforeScreen;
|
||||
ReplayMod.replaySender.setReplaySpeed(beforeSpeed);
|
||||
exception.printStackTrace();
|
||||
ReplayMod.chatMessageHandler.addChatMessage("Thumbnail could not be saved", ChatMessageType.WARNING);
|
||||
}
|
||||
|
||||
last_finish = System.currentTimeMillis();
|
||||
}
|
||||
last_finish = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user