Refactored and reformatted code to use less static variables

This commit is contained in:
CrushedPixel
2015-04-23 14:09:54 +02:00
parent f22416be2c
commit 0003f040ed
109 changed files with 9037 additions and 10229 deletions

View File

@@ -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();
}
}