From 484f8fab021c2df6bbc505ef1e65403531c577a3 Mon Sep 17 00:00:00 2001 From: CrushedPixel Date: Tue, 2 Jun 2015 20:42:39 +0200 Subject: [PATCH] DataListener Shutdown Hook only does its job if the Replay hasn't been saved before. This prevents the Replay from being corrupted when quitting Minecraft. --- .../eu/crushedpixel/replaymod/recording/DataListener.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/crushedpixel/replaymod/recording/DataListener.java b/src/main/java/eu/crushedpixel/replaymod/recording/DataListener.java index 6e4a0474..c73a40ab 100755 --- a/src/main/java/eu/crushedpixel/replaymod/recording/DataListener.java +++ b/src/main/java/eu/crushedpixel/replaymod/recording/DataListener.java @@ -37,6 +37,8 @@ public abstract class DataListener extends ChannelInboundHandlerAdapter { private boolean singleplayer; private Gson gson = new Gson(); + private int saveState = 0; //0: Idle, 1: Saving, 2: Saved + private final File tempResourcePacksFolder = Files.createTempDir(); private final Map requestToHash = new ConcurrentHashMap(); private final Map resourcePacks = new HashMap(); @@ -58,7 +60,7 @@ public abstract class DataListener extends ChannelInboundHandlerAdapter { @Override public void run() { try { - if(DataListener.this.alive) { + if(saveState == 0) { System.out.println("Saving Replay File to prevent Corruption"); DataListener.this.channelInactive(null); } @@ -156,6 +158,7 @@ public abstract class DataListener extends ChannelInboundHandlerAdapter { try { ReplayMod.replayFileAppender.startNewReplayFileWriting(); + saveState = 1; String mcversion = Minecraft.getMinecraft().getVersion(); String[] split = mcversion.split("-"); @@ -183,6 +186,7 @@ public abstract class DataListener extends ChannelInboundHandlerAdapter { e.printStackTrace(); } finally { ReplayMod.replayFileAppender.replayFileWritingFinished(); + saveState = 2; } }