diff --git a/src/main/java/eu/crushedpixel/replaymod/entities/CameraEntity.java b/src/main/java/eu/crushedpixel/replaymod/entities/CameraEntity.java index cdffaf32..3534cf19 100755 --- a/src/main/java/eu/crushedpixel/replaymod/entities/CameraEntity.java +++ b/src/main/java/eu/crushedpixel/replaymod/entities/CameraEntity.java @@ -152,6 +152,12 @@ public class CameraEntity extends EntityPlayer { direction = direction.normalize().add(new Vec3(oldDir.xCoord * (motion / 4f), oldDir.yCoord * (motion / 4f), oldDir.zCoord * (motion / 4f)).normalize()); } + public void moveAbsolute(Position pos) { + this.moveAbsolute(pos.getX(), pos.getY(), pos.getZ()); + rotationPitch = pos.getPitch(); + rotationYaw = pos.getYaw(); + } + public void moveAbsolute(double x, double y, double z) { if(ReplayHandler.isInPath()) return; this.lastTickPosX = this.prevPosX = this.posX = x; diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiKeyframeTimeline.java b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiKeyframeTimeline.java index 1afe9236..e4211e7b 100644 --- a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiKeyframeTimeline.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiKeyframeTimeline.java @@ -1,7 +1,9 @@ package eu.crushedpixel.replaymod.gui.elements; +import eu.crushedpixel.replaymod.ReplayMod; import eu.crushedpixel.replaymod.gui.GuiEditKeyframe; import eu.crushedpixel.replaymod.holders.Keyframe; +import eu.crushedpixel.replaymod.holders.MarkerKeyframe; import eu.crushedpixel.replaymod.holders.PositionKeyframe; import eu.crushedpixel.replaymod.holders.TimeKeyframe; import eu.crushedpixel.replaymod.replay.ReplayHandler; @@ -16,15 +18,23 @@ public class GuiKeyframeTimeline extends GuiTimeline { private static final int KEYFRAME_TIME_Y = 25; private static final int KEYFRAME_SPEC_X = 74; private static final int KEYFRAME_SPEC_Y = 30; + private static final int KEYFRAME_MARKER_X = 40; + private static final int KEYFRAME_MARKER_Y = 39; private Keyframe clickedKeyFrame; private long clickTime; private boolean dragging; + private boolean markerKeyframes; + private boolean timeKeyframes; + private boolean placeKeyframes; - public GuiKeyframeTimeline(int positionX, int positionY, int width) { + public GuiKeyframeTimeline(int positionX, int positionY, int width, boolean showMarkers, + boolean showMarkerKeyframes, boolean showPlaceKeyframes, boolean showTimeKeyframes) { super(positionX, positionY, width); - showMarkers = true; - showMarkerIndicators = false; + this.showMarkers = showMarkers; + this.markerKeyframes = showMarkerKeyframes; + this.timeKeyframes = showTimeKeyframes; + this.placeKeyframes = showPlaceKeyframes; } @Override @@ -34,13 +44,15 @@ public class GuiKeyframeTimeline extends GuiTimeline { return; } - int tolerance = (int) (2 * Math.round(zoom * timelineLength / width)); + int tolerance = (int)(2 * Math.round(zoom * timelineLength / width)); Keyframe closest; - if (mouseY >= positionY + BORDER_TOP + 5) { + if (mouseY >= positionY + BORDER_TOP + 5 && timeKeyframes) { closest = ReplayHandler.getClosestTimeKeyframeForRealTime((int) time, tolerance); - } else if (mouseY >= positionY + BORDER_TOP) { + } else if (mouseY >= positionY + BORDER_TOP && placeKeyframes) { closest = ReplayHandler.getClosestPlaceKeyframeForRealTime((int) time, tolerance); + } else if (mouseY >= positionY + BORDER_TOP + 10 && markerKeyframes) { + closest = ReplayHandler.getClosestMarkerForRealTime((int) time, tolerance); } else { closest = null; } @@ -85,6 +97,10 @@ public class GuiKeyframeTimeline extends GuiTimeline { @Override public void mouseRelease(Minecraft mc, int mouseX, int mouseY, int button) { mouseDrag(mc, mouseX, mouseY, button); + if(clickedKeyFrame instanceof MarkerKeyframe && dragging == false) { + ReplayMod.replaySender.jumpToTime(clickedKeyFrame.getRealTimestamp()); + ReplayHandler.setLastPosition(((MarkerKeyframe)clickedKeyFrame).getPosition()); + } clickedKeyFrame = null; dragging = false; } @@ -169,7 +185,8 @@ public class GuiKeyframeTimeline extends GuiTimeline { int keyframeX = getKeyframeX(kf.getRealTimestamp(), leftTime, bodyWidth, segmentLength); - if (kf instanceof PositionKeyframe) { + if(kf instanceof PositionKeyframe) { + if(!placeKeyframes) return; textureX = KEYFRAME_PLACE_X; textureY = KEYFRAME_PLACE_Y; y += 0; @@ -179,10 +196,16 @@ public class GuiKeyframeTimeline extends GuiTimeline { textureX = KEYFRAME_SPEC_X; textureY = KEYFRAME_SPEC_Y; } - } else if (kf instanceof TimeKeyframe) { + } else if(kf instanceof TimeKeyframe) { + if(!timeKeyframes) return; textureX = KEYFRAME_TIME_X; textureY = KEYFRAME_TIME_Y; y += 5; + } else if(kf instanceof MarkerKeyframe) { + if(!markerKeyframes) return; + textureX = KEYFRAME_MARKER_X; + textureY = KEYFRAME_MARKER_Y; + y += 10; } else { throw new UnsupportedOperationException("Unknown keyframe type: " + kf.getClass()); } diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiTimeline.java b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiTimeline.java index 6e24dd4a..ac4253f6 100644 --- a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiTimeline.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiTimeline.java @@ -1,8 +1,6 @@ package eu.crushedpixel.replaymod.gui.elements; import eu.crushedpixel.replaymod.ReplayMod; -import eu.crushedpixel.replaymod.holders.Marker; -import eu.crushedpixel.replaymod.replay.ReplayHandler; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; @@ -27,11 +25,6 @@ public class GuiTimeline extends Gui implements GuiElement { protected static final int BORDER_RIGHT = 4; protected static final int BODY_WIDTH = TEXTURE_WIDTH - BORDER_LEFT - BORDER_RIGHT; - protected static final int MARKER_TEXTURE_X = 40; - protected static final int MARKER_TEXTURE_Y = 39; - protected static final int MARKER_TEXTURE_WIDTH = 5; - protected static final int MARKER_TEXTURE_HEIGHT = 5; - /** * Current position of the cursor. Should normally be between 0 and {@link #timelineLength}. */ @@ -59,11 +52,6 @@ public class GuiTimeline extends Gui implements GuiElement { */ public boolean showMarkers; - /** - * Whether to draw indicators for Replay Markers. - */ - public boolean showMarkerIndicators = true; - protected final int positionX; protected final int positionY; protected final int width; @@ -150,26 +138,6 @@ public class GuiTimeline extends Gui implements GuiElement { } } - if(showMarkerIndicators) { - double segmentLength = timelineLength * zoom; - - for(Marker marker : ReplayHandler.getMarkers()) { - if(marker.getTimestamp() <= rightTime && marker.getTimestamp() >= leftTime) { - int textureX = MARKER_TEXTURE_X; - int textureY = MARKER_TEXTURE_Y; - int y = positionY; - - int markerX = getMarkerX(marker.getTimestamp(), leftTime, bodyWidth, segmentLength); - - if(ReplayHandler.isSelected(marker)) { - textureX += MARKER_TEXTURE_WIDTH; - } - - rect(markerX - 2, y + HEIGHT - 3 - MARKER_TEXTURE_HEIGHT, textureX, textureY, MARKER_TEXTURE_WIDTH, MARKER_TEXTURE_HEIGHT); - } - } - } - drawTimelineCursor(leftTime, rightTime, bodyWidth); } diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/overlay/GuiReplayOverlay.java b/src/main/java/eu/crushedpixel/replaymod/gui/overlay/GuiReplayOverlay.java index 8d40bbef..270c49c9 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/overlay/GuiReplayOverlay.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/overlay/GuiReplayOverlay.java @@ -7,6 +7,7 @@ import eu.crushedpixel.replaymod.gui.GuiMouseInput; import eu.crushedpixel.replaymod.gui.GuiRenderSettings; import eu.crushedpixel.replaymod.gui.GuiReplaySpeedSlider; import eu.crushedpixel.replaymod.gui.elements.*; +import eu.crushedpixel.replaymod.holders.MarkerKeyframe; import eu.crushedpixel.replaymod.holders.Position; import eu.crushedpixel.replaymod.holders.PositionKeyframe; import eu.crushedpixel.replaymod.holders.TimeKeyframe; @@ -181,6 +182,28 @@ public class GuiReplayOverlay extends Gui { } }; + private final GuiElement buttonMarker = new DelegatingElement() { + + private final GuiElement buttonNotSelected = texturedButton(BUTTON_TIME_X, BOTTOM_ROW, 0, 80, 20, new Runnable() { + @Override + public void run() { + ReplayHandler.addKeyframe(new TimeKeyframe(ReplayHandler.getRealTimelineCursor(), ReplayMod.replaySender.currentTimeStamp())); + } + }, "replaymod.gui.ingame.menu.addtimekeyframe"); + + private final GuiElement buttonSelected = texturedButton(BUTTON_TIME_X, BOTTOM_ROW, 0, 100, 20, new Runnable() { + @Override + public void run() { + ReplayHandler.removeKeyframe(ReplayHandler.getSelectedKeyframe()); + } + }, "replaymod.gui.ingame.menu.removetimekeyframe"); + + @Override + public GuiElement delegate() { + return ReplayHandler.getSelectedKeyframe() instanceof TimeKeyframe ? buttonSelected : buttonNotSelected; + } + }; + private final GuiElement buttonZoomIn = texturedButton(WIDTH - 14 - 9, BOTTOM_ROW, 40, 20, 9, new Runnable() { @Override public void run() { @@ -197,14 +220,16 @@ public class GuiReplayOverlay extends Gui { } }, "replaymod.gui.ingame.menu.zoomout"); - private final GuiTimeline timeline = new GuiTimeline(TIMELINE_X, TOP_ROW - 1, WIDTH - 14 - TIMELINE_X) { + private final GuiKeyframeTimeline timeline = new GuiKeyframeTimeline(TIMELINE_X, TOP_ROW - 1, WIDTH - 14 - TIMELINE_X, false, true, false, false) { @Override public void mouseClick(Minecraft mc, int mouseX, int mouseY, int button) { - performJump(timeline.getTimeAt(mouseX, mouseY)); + super.mouseClick(mc, mouseX, mouseY, button); + if(!(ReplayHandler.getSelectedKeyframe() instanceof MarkerKeyframe)) + performJump(timeline.getTimeAt(mouseX, mouseY)); } }; - private final GuiKeyframeTimeline timelineReal = new GuiKeyframeTimeline(TIMELINE_REAL_X, BOTTOM_ROW - 1, TIMELINE_REAL_WIDTH); + private final GuiKeyframeTimeline timelineReal = new GuiKeyframeTimeline(TIMELINE_REAL_X, BOTTOM_ROW - 1, TIMELINE_REAL_WIDTH, true, false, true, true); { timelineReal.timelineLength = 10 * 60 * 1000; } diff --git a/src/main/java/eu/crushedpixel/replaymod/holders/Marker.java b/src/main/java/eu/crushedpixel/replaymod/holders/MarkerKeyframe.java similarity index 61% rename from src/main/java/eu/crushedpixel/replaymod/holders/Marker.java rename to src/main/java/eu/crushedpixel/replaymod/holders/MarkerKeyframe.java index 7c86bfed..c1351567 100644 --- a/src/main/java/eu/crushedpixel/replaymod/holders/Marker.java +++ b/src/main/java/eu/crushedpixel/replaymod/holders/MarkerKeyframe.java @@ -2,25 +2,26 @@ package eu.crushedpixel.replaymod.holders; import org.apache.commons.lang3.builder.HashCodeBuilder; -public class Marker { - - public Marker(Position position, int timestamp, String name) { - this.position = position; - this.timestamp = timestamp; - this.name = name; - } +public class MarkerKeyframe extends Keyframe { private Position position; - private int timestamp; private String name; + @Override + public Object clone() { + return new MarkerKeyframe(this.getPosition(), this.getRealTimestamp(), this.getName()); + } + + public MarkerKeyframe(Position position, int timestamp, String name) { + super(timestamp); + this.position = position; + this.name = name; + } + public Position getPosition() { return position; } - public int getTimestamp() { - return timestamp; - } public String getName() { return name; @@ -29,8 +30,8 @@ public class Marker { @Override public boolean equals(Object o2) { if(o2 == null) return false; - if(!(o2 instanceof Marker)) return false; - Marker m2 = (Marker)o2; + if(!(o2 instanceof MarkerKeyframe)) return false; + MarkerKeyframe m2 = (MarkerKeyframe)o2; return hashCode() == m2.hashCode(); } @@ -38,7 +39,7 @@ public class Marker { public int hashCode() { return new HashCodeBuilder(17, 37) .append(position) - .append(timestamp) + .append(getRealTimestamp()) .append(name) .toHashCode(); } diff --git a/src/main/java/eu/crushedpixel/replaymod/recording/ConnectionEventHandler.java b/src/main/java/eu/crushedpixel/replaymod/recording/ConnectionEventHandler.java index 5ca2f6cf..c7b891aa 100755 --- a/src/main/java/eu/crushedpixel/replaymod/recording/ConnectionEventHandler.java +++ b/src/main/java/eu/crushedpixel/replaymod/recording/ConnectionEventHandler.java @@ -62,7 +62,7 @@ public class ConnectionEventHandler { public static void addMarker() { if(!isRecording || packetListener == null) { String reason = isRecording ? " (recording)" : " (null)"; - logger.error("Invalid attempt to insert Marker!" + reason); + logger.error("Invalid attempt to insert MarkerKeyframe!" + reason); return; } try { diff --git a/src/main/java/eu/crushedpixel/replaymod/recording/DataListener.java b/src/main/java/eu/crushedpixel/replaymod/recording/DataListener.java index 8f98f03a..9656c825 100755 --- a/src/main/java/eu/crushedpixel/replaymod/recording/DataListener.java +++ b/src/main/java/eu/crushedpixel/replaymod/recording/DataListener.java @@ -4,7 +4,7 @@ import com.google.common.hash.Hashing; import com.google.common.io.Files; import com.google.gson.Gson; import eu.crushedpixel.replaymod.ReplayMod; -import eu.crushedpixel.replaymod.holders.Marker; +import eu.crushedpixel.replaymod.holders.MarkerKeyframe; import eu.crushedpixel.replaymod.holders.PacketData; import eu.crushedpixel.replaymod.utils.ReplayFile; import eu.crushedpixel.replaymod.utils.ReplayFileIO; @@ -35,7 +35,7 @@ public abstract class DataListener extends ChannelInboundHandlerAdapter { protected boolean alive = true; protected DataWriter dataWriter; protected Set players = new HashSet(); - protected Set markers = new HashSet(); + protected Set markers = new HashSet(); private boolean singleplayer; private Gson gson = new Gson(); @@ -154,7 +154,7 @@ public abstract class DataListener extends ChannelInboundHandlerAdapter { queue.add(data); } - public void requestFinish(Set players, Set markers) { + public void requestFinish(Set players, Set markers) { active = false; try { diff --git a/src/main/java/eu/crushedpixel/replaymod/recording/PacketListener.java b/src/main/java/eu/crushedpixel/replaymod/recording/PacketListener.java index 81ad5d81..e4968ba1 100755 --- a/src/main/java/eu/crushedpixel/replaymod/recording/PacketListener.java +++ b/src/main/java/eu/crushedpixel/replaymod/recording/PacketListener.java @@ -7,7 +7,7 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import eu.crushedpixel.replaymod.ReplayMod; import eu.crushedpixel.replaymod.chat.ChatMessageHandler; -import eu.crushedpixel.replaymod.holders.Marker; +import eu.crushedpixel.replaymod.holders.MarkerKeyframe; import eu.crushedpixel.replaymod.holders.PacketData; import eu.crushedpixel.replaymod.holders.Position; import eu.crushedpixel.replaymod.utils.ReplayFileIO; @@ -223,7 +223,7 @@ public class PacketListener extends DataListener { Position pos = new Position(Minecraft.getMinecraft().getRenderViewEntity()); int timestamp = (int) (System.currentTimeMillis() - startTime); - Marker marker = new Marker(pos, timestamp, null); + MarkerKeyframe marker = new MarkerKeyframe(pos, timestamp, null); markers.add(marker); diff --git a/src/main/java/eu/crushedpixel/replaymod/replay/ReplayHandler.java b/src/main/java/eu/crushedpixel/replaymod/replay/ReplayHandler.java index bb4a7c2b..13d45e71 100755 --- a/src/main/java/eu/crushedpixel/replaymod/replay/ReplayHandler.java +++ b/src/main/java/eu/crushedpixel/replaymod/replay/ReplayHandler.java @@ -40,7 +40,6 @@ public class ReplayHandler { private static float cameraTilt = 0; private static KeyframeSet[] keyframeRepository = new KeyframeSet[]{}; - private static Marker[] markers = new Marker[]{}; /** * The file currently being played. @@ -66,10 +65,22 @@ public class ReplayHandler { } } - public static Marker[] getMarkers() { return markers; } + public static MarkerKeyframe[] getMarkers() { + List markers = new ArrayList(); + for(Keyframe kf : keyframes) { + if(kf instanceof MarkerKeyframe) markers.add((MarkerKeyframe)kf); + } + return markers.toArray(new MarkerKeyframe[markers.size()]); + } + + public static void setMarkers(MarkerKeyframe[] m, boolean write) { + for(Keyframe kf : new ArrayList(keyframes)) { + if(kf instanceof MarkerKeyframe) keyframes.remove(kf); + } + for(MarkerKeyframe marker : m) { + keyframes.add(marker); + } - public static void setMarkers(Marker[] m, boolean write) { - markers = m; if(write) { try { File tempFile = File.createTempFile(ReplayFile.ENTRY_MARKERS, "json"); @@ -165,19 +176,7 @@ public class ReplayHandler { public static void addMarker() { Position pos = new Position(mc.getRenderViewEntity()); int timestamp = ReplayMod.replaySender.currentTimeStamp(); - addMarker(new Marker(pos, timestamp, null)); - } - - public static void addMarker(Marker marker) { - List markerList = new ArrayList(Arrays.asList(markers)); - markerList.add(marker); - markers = markerList.toArray(new Marker[markerList.size()]); - } - - public static void removeMarker(Marker marker) { - List markerList = new ArrayList(Arrays.asList(markers)); - markerList.remove(marker); - markers = markerList.toArray(new Marker[markerList.size()]); + addKeyframe(new MarkerKeyframe(pos, timestamp, null)); } public static void addKeyframe(Keyframe keyframe) { @@ -287,6 +286,25 @@ public class ReplayHandler { return closest; } + public static MarkerKeyframe getClosestMarkerForRealTime(int realTime, int tolerance) { + List found = new ArrayList(); + for(Keyframe kf : keyframes) { + if(!(kf instanceof MarkerKeyframe)) continue; + if(Math.abs(kf.getRealTimestamp() - realTime) <= tolerance) { + found.add((MarkerKeyframe) kf); + } + } + + MarkerKeyframe closest = null; + + for(MarkerKeyframe kf : found) { + if(closest == null || Math.abs(closest.getRealTimestamp() - realTime) > Math.abs(kf.getRealTimestamp() - realTime)) { + closest = kf; + } + } + return closest; + } + public static PositionKeyframe getPreviousPositionKeyframe(int realTime) { if(keyframes.isEmpty()) return null; PositionKeyframe backup = null; @@ -365,11 +383,6 @@ public class ReplayHandler { return kf == selectedKeyframe; } - public static boolean isSelected(Marker marker) { - //TODO: Make marker selectable - return false; - } - public static void selectKeyframe(Keyframe kf) { selectedKeyframe = kf; sortKeyframes(); @@ -421,8 +434,8 @@ public class ReplayHandler { KeyframeSet[] paths = currentReplayFile.paths().get(); ReplayHandler.setKeyframeRepository(paths == null ? new KeyframeSet[0] : paths, false); - Marker[] markers = currentReplayFile.markers().get(); - ReplayHandler.setMarkers(markers == null ? new Marker[0] : markers, false); + MarkerKeyframe[] markers = currentReplayFile.markers().get(); + ReplayHandler.setMarkers(markers == null ? new MarkerKeyframe[0] : markers, false); PlayerVisibility visibility = currentReplayFile.visibility().get(); PlayerHandler.loadPlayerVisibilityConfiguration(visibility); diff --git a/src/main/java/eu/crushedpixel/replaymod/replay/ReplaySender.java b/src/main/java/eu/crushedpixel/replaymod/replay/ReplaySender.java index 34bbd388..8aedbb20 100755 --- a/src/main/java/eu/crushedpixel/replaymod/replay/ReplaySender.java +++ b/src/main/java/eu/crushedpixel/replaymod/replay/ReplaySender.java @@ -536,9 +536,7 @@ public class ReplaySender extends ChannelInboundHandlerAdapter { if (cam != null && pos != null) { // Move camera back in case we have been respawned if (Math.abs(pos.getX() - cam.posX) < ReplayMod.TP_DISTANCE_LIMIT && Math.abs(pos.getZ() - cam.posZ) < ReplayMod.TP_DISTANCE_LIMIT) { - cam.moveAbsolute(pos.getX(), pos.getY(), pos.getZ()); - cam.rotationPitch = pos.getPitch(); - cam.rotationYaw = pos.getYaw(); + cam.moveAbsolute(pos); } } diff --git a/src/main/java/eu/crushedpixel/replaymod/utils/ReplayFile.java b/src/main/java/eu/crushedpixel/replaymod/utils/ReplayFile.java index aa64f5ab..7236a860 100644 --- a/src/main/java/eu/crushedpixel/replaymod/utils/ReplayFile.java +++ b/src/main/java/eu/crushedpixel/replaymod/utils/ReplayFile.java @@ -5,7 +5,7 @@ import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import eu.crushedpixel.replaymod.holders.KeyframeSet; -import eu.crushedpixel.replaymod.holders.Marker; +import eu.crushedpixel.replaymod.holders.MarkerKeyframe; import eu.crushedpixel.replaymod.holders.PlayerVisibility; import eu.crushedpixel.replaymod.recording.ReplayMetaData; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; @@ -129,17 +129,17 @@ public class ReplayFile extends ZipFile { return getEntry(ENTRY_MARKERS); } - public Supplier markers() { - return new Supplier() { + public Supplier markers() { + return new Supplier() { @Override - public Marker[] get() { + public MarkerKeyframe[] get() { try { ZipArchiveEntry entry = markersEntry(); if (entry == null) { return null; } BufferedReader reader = new BufferedReader(new InputStreamReader(getInputStream(entry))); - return new Gson().fromJson(reader, Marker[].class); + return new Gson().fromJson(reader, MarkerKeyframe[].class); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/eu/crushedpixel/replaymod/utils/ReplayFileIO.java b/src/main/java/eu/crushedpixel/replaymod/utils/ReplayFileIO.java index 04d9935e..ecfb3f6d 100755 --- a/src/main/java/eu/crushedpixel/replaymod/utils/ReplayFileIO.java +++ b/src/main/java/eu/crushedpixel/replaymod/utils/ReplayFileIO.java @@ -3,7 +3,7 @@ package eu.crushedpixel.replaymod.utils; import com.google.gson.Gson; import eu.crushedpixel.replaymod.ReplayMod; import eu.crushedpixel.replaymod.holders.KeyframeSet; -import eu.crushedpixel.replaymod.holders.Marker; +import eu.crushedpixel.replaymod.holders.MarkerKeyframe; import eu.crushedpixel.replaymod.holders.PacketData; import eu.crushedpixel.replaymod.holders.PlayerVisibility; import eu.crushedpixel.replaymod.recording.PacketSerializer; @@ -58,7 +58,7 @@ public class ReplayFileIO { return files; } - public static void writeReplayFile(File replayFile, File tempFile, ReplayMetaData metaData, Set markers, + public static void writeReplayFile(File replayFile, File tempFile, ReplayMetaData metaData, Set markers, Map resourcePacks, Map resourcePackRequests) throws IOException { byte[] buffer = new byte[1024]; @@ -91,7 +91,7 @@ public class ReplayFileIO { zos.putNextEntry(new ZipEntry(ReplayFile.ENTRY_MARKERS)); pw = new PrintWriter(zos); - pw.write(new Gson().toJson(markers.toArray(new Marker[markers.size()]))); + pw.write(new Gson().toJson(markers.toArray(new MarkerKeyframe[markers.size()]))); pw.flush(); zos.closeEntry(); } @@ -332,7 +332,7 @@ public class ReplayFileIO { FileUtils.write(file, json); } - public static void writeMarkersToFile(Marker[] markers, File file) throws IOException { + public static void writeMarkersToFile(MarkerKeyframe[] markers, File file) throws IOException { file.mkdirs(); file.createNewFile(); diff --git a/src/main/resources/assets/replaymod/replay_gui.png b/src/main/resources/assets/replaymod/replay_gui.png index 91edbce3..864fbc85 100755 Binary files a/src/main/resources/assets/replaymod/replay_gui.png and b/src/main/resources/assets/replaymod/replay_gui.png differ