From cf30f39b0e28f6eb035d73b6754db54d60705b28 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Mon, 20 May 2019 18:57:20 +0200 Subject: [PATCH] Be explicit about when we expect a login phase and when we don't --- src/main/java/com/replaymod/core/gui/RestoreReplayGui.java | 7 ++++--- .../com/replaymod/recording/packet/PacketListener.java | 3 ++- src/main/java/com/replaymod/replay/QuickReplaySender.java | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/replaymod/core/gui/RestoreReplayGui.java b/src/main/java/com/replaymod/core/gui/RestoreReplayGui.java index 62833344..c02f7cbd 100644 --- a/src/main/java/com/replaymod/core/gui/RestoreReplayGui.java +++ b/src/main/java/com/replaymod/core/gui/RestoreReplayGui.java @@ -42,7 +42,8 @@ public class RestoreReplayGui extends AbstractGuiScreen { new GuiLabel().setI18nText("replaymod.gui.restorereplay3")); yesButton.onClick(() -> { try { - ReplayFile replayFile = new ZipReplayFile(new ReplayStudio(), null, file); + ReplayStudio studio = new ReplayStudio(); + ReplayFile replayFile = new ZipReplayFile(studio, null, file); // Commit all not-yet-committed files into the main zip file. // If we don't do this, then re-writing packet data below can actually overwrite uncommitted packet data! replayFile.save(); @@ -50,8 +51,8 @@ public class RestoreReplayGui extends AbstractGuiScreen { if (metaData != null && metaData.getDuration() == 0) { // Try to restore replay duration // We need to re-write the packet data in case there are any incomplete packets dangling at the end - try (ReplayInputStream in = replayFile.getPacketData(); - ReplayOutputStream out = replayFile.writePacketData()) { + try (ReplayInputStream in = replayFile.getPacketData(studio, true); + ReplayOutputStream out = replayFile.writePacketData(true)) { PacketData last = null; while ((last = in.readPacket()) != null) { metaData.setDuration((int) last.getTime()); diff --git a/src/main/java/com/replaymod/recording/packet/PacketListener.java b/src/main/java/com/replaymod/recording/packet/PacketListener.java index 279c696b..5527999d 100755 --- a/src/main/java/com/replaymod/recording/packet/PacketListener.java +++ b/src/main/java/com/replaymod/recording/packet/PacketListener.java @@ -102,7 +102,8 @@ public class PacketListener extends ChannelInboundHandlerAdapter { this.replayFile = replayFile; this.metaData = metaData; this.resourcePackRecorder = new ResourcePackRecorder(replayFile); - this.packetOutputStream = new DataOutputStream(replayFile.writePacketData()); + // Note: doesn't actually always include the login phase, see `connectionState` field instead. + this.packetOutputStream = new DataOutputStream(replayFile.writePacketData(true)); this.startTime = metaData.getDate(); saveMetaData(); diff --git a/src/main/java/com/replaymod/replay/QuickReplaySender.java b/src/main/java/com/replaymod/replay/QuickReplaySender.java index 06406cc3..14bfafa2 100644 --- a/src/main/java/com/replaymod/replay/QuickReplaySender.java +++ b/src/main/java/com/replaymod/replay/QuickReplaySender.java @@ -385,7 +385,7 @@ public class QuickReplaySender extends ChannelHandlerAdapter implements ReplaySe double sysTimeStart = System.currentTimeMillis(); double duration; - try (ReplayInputStream in = replayFile.getPacketData(studio); + try (ReplayInputStream in = replayFile.getPacketData(studio, false); OutputStream cacheOut = replayFile.writeCache(CACHE_ENTRY); OutputStream cacheIndexOut = replayFile.writeCache(CACHE_INDEX_ENTRY)) { NetOutput out = new StreamNetOutput(cacheOut);