From 4f718ab302152e7fe353879962b9454d09d28cfa Mon Sep 17 00:00:00 2001 From: johni0702 Date: Sun, 19 Jul 2015 15:07:07 +0200 Subject: [PATCH] Split GuiEditKeyframe into multiple classes depending on Keyframe type --- .../replaymod/gui/GuiEditKeyframe.java | 351 ++++++++++-------- .../timelines/GuiKeyframeTimeline.java | 2 +- .../elements/timelines/GuiMarkerTimeline.java | 2 +- 3 files changed, 201 insertions(+), 154 deletions(-) diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/GuiEditKeyframe.java b/src/main/java/eu/crushedpixel/replaymod/gui/GuiEditKeyframe.java index 790511b0..e8f1b04a 100644 --- a/src/main/java/eu/crushedpixel/replaymod/gui/GuiEditKeyframe.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/GuiEditKeyframe.java @@ -8,6 +8,7 @@ import eu.crushedpixel.replaymod.holders.Keyframe; import eu.crushedpixel.replaymod.holders.Marker; import eu.crushedpixel.replaymod.holders.TimestampValue; import eu.crushedpixel.replaymod.interpolation.KeyframeList; +import eu.crushedpixel.replaymod.interpolation.KeyframeValue; import eu.crushedpixel.replaymod.replay.ReplayHandler; import eu.crushedpixel.replaymod.utils.MouseUtils; import eu.crushedpixel.replaymod.utils.RoundUtils; @@ -23,80 +24,47 @@ import java.awt.*; import java.io.IOException; import java.util.List; -public class GuiEditKeyframe extends GuiScreen implements GuiReplayOverlay.NoOverlay { +public abstract class GuiEditKeyframe extends GuiScreen implements GuiReplayOverlay.NoOverlay { - private enum KeyframeType { - MARKER, POSITION, TIME, SPECTATOR; - - public static KeyframeType fromKeyframe(Keyframe kf) { - if(kf.getValue() instanceof Marker) return MARKER; - if(kf.getValue() instanceof TimestampValue) return TIME; - if(kf.getValue() instanceof AdvancedPosition) { - AdvancedPosition pos = (AdvancedPosition)kf.getValue(); - if(pos.getSpectatedEntityID() == null) return POSITION; - else return SPECTATOR; - } - - return null; - } + @SuppressWarnings("unchecked") + public static GuiEditKeyframe create(Keyframe kf) { + if(kf.getValue() instanceof Marker) return new GuiEditKeyframeMarker(kf); + if(kf.getValue() instanceof TimestampValue) return new GuiEditKeyframeTime(kf); + if(kf.getValue() instanceof AdvancedPosition) return new GuiEditKeyframePosition(kf); + throw new UnsupportedOperationException("Keyframe type unknown: " + kf); } - private boolean initialized = false; + protected boolean initialized = false; private GuiAdvancedButton saveButton, cancelButton; private GuiArrowButton leftButton, rightButton; + protected GuiNumberInput min, sec, ms; - private GuiNumberInput kfMin, kfSec, kfMs; - private GuiNumberInput xCoord, yCoord, zCoord, pitch, yaw, roll; - private GuiNumberInput min, sec, ms; - - private GuiAdvancedTextField markerNameInput; - - private ComposedElement inputs; - private ComposedElement posInputs; + protected ComposedElement inputs; private int virtualHeight = 200; - private int virtualY; + protected int virtualY; - private Keyframe keyframe; - private Keyframe keyframeBackup; - private boolean save; + protected Keyframe keyframe; + protected Keyframe keyframeBackup; + protected boolean save; - private KeyframeType keyframeType; + private Keyframe previous, next; - private Keyframe previous, next; + protected int w2; + protected int w3; + protected int totalWidth; + protected int left; - private int w2; - private int w3; - private int totalWidth; - private int left; + protected String screenTitle; - private String screenTitle; - - public GuiEditKeyframe(Keyframe keyframe) { + public GuiEditKeyframe(Keyframe keyframe, KeyframeList keyframes) { this.keyframe = keyframe; this.keyframeBackup = keyframe.copy(); - this.keyframeType = KeyframeType.fromKeyframe(keyframe); - KeyframeList positionKeyframes = ReplayHandler.getPositionKeyframes(); - KeyframeList timeKeyframes = ReplayHandler.getTimeKeyframes(); - KeyframeList markerKeyframes = ReplayHandler.getMarkerKeyframes(); - - if(keyframeType == KeyframeType.POSITION) { - previous = positionKeyframes.getPreviousKeyframe(keyframe.getRealTimestamp(), false); - next = positionKeyframes.getNextKeyframe(keyframe.getRealTimestamp(), false); - - screenTitle = I18n.format("replaymod.gui.editkeyframe.title.pos"); - } else if(keyframeType == KeyframeType.TIME) { - previous = timeKeyframes.getPreviousKeyframe(keyframe.getRealTimestamp(), false); - next = timeKeyframes.getNextKeyframe(keyframe.getRealTimestamp(), false); - - screenTitle = I18n.format("replaymod.gui.editkeyframe.title.time"); - } else if(keyframeType == KeyframeType.MARKER) { - previous = markerKeyframes.getPreviousKeyframe(keyframe.getRealTimestamp(), false); - next = markerKeyframes.getNextKeyframe(keyframe.getRealTimestamp(), false); - } + previous = keyframes.getPreviousKeyframe(keyframe.getRealTimestamp(), false); + next = keyframes.getNextKeyframe(keyframe.getRealTimestamp(), false); ReplayMod.replaySender.setReplaySpeed(0); } @@ -128,7 +96,7 @@ public class GuiEditKeyframe extends GuiScreen implements GuiReplayOverlay.NoOve @Override public void performAction() { save = true; - mc.displayGuiScreen(new GuiEditKeyframe(previous)); + mc.displayGuiScreen(create(previous)); } }; @@ -136,7 +104,7 @@ public class GuiEditKeyframe extends GuiScreen implements GuiReplayOverlay.NoOve @Override public void performAction() { save = true; - mc.displayGuiScreen(new GuiEditKeyframe(next)); + mc.displayGuiScreen(create(next)); } }; @@ -152,38 +120,6 @@ public class GuiEditKeyframe extends GuiScreen implements GuiReplayOverlay.NoOve ms = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 35, 0d, 999d, (double)TimestampUtils.getMillisecondsFromTimestamp(timestamp), false, "", 1); inputs = new ComposedElement(min, sec, ms, saveButton, cancelButton, leftButton, rightButton); - - //Position/Virtual Time Input - if(keyframeType == KeyframeType.POSITION) { - AdvancedPosition pos = ((Keyframe) keyframe).getValue(); - xCoord = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 100, null, null, RoundUtils.round2Decimals(pos.getX()), true); - yCoord = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 100, null, null, RoundUtils.round2Decimals(pos.getY()), true); - zCoord = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 100, null, null, RoundUtils.round2Decimals(pos.getZ()), true); - yaw = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 100, -180d, 180d, RoundUtils.round2Decimals(pos.getYaw()), true); - pitch = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 100, -90d, 90d, RoundUtils.round2Decimals(pos.getPitch()), true); - roll = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 100, null, null, RoundUtils.round2Decimals(pos.getRoll()), true); - - posInputs = new ComposedElement(xCoord, yCoord, zCoord, yaw, pitch, roll); - inputs.addPart(posInputs); - } else if(keyframeType == KeyframeType.TIME) { - int time = ((Keyframe) keyframe).getValue().asInt(); - - kfMin = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 30, 0d, null, (double)TimestampUtils.timestampToWholeMinutes(time), false, "", 1); - kfSec = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 25, 0d, 59d, (double)TimestampUtils.getSecondsFromTimestamp(time), false, "", 1); - kfMs = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 35, 0d, 999d, (double)TimestampUtils.getMillisecondsFromTimestamp(time), false, "", 1); - - inputs.addPart(kfMin); - inputs.addPart(kfSec); - inputs.addPart(kfMs); - } else if(keyframeType == KeyframeType.MARKER) { - String name = ((Keyframe)keyframe).getValue().getName(); - if(name == null) name = ""; - markerNameInput = new GuiAdvancedTextField(fontRendererObj, 0, 0, 200, 20); - markerNameInput.hint = I18n.format("replaymod.gui.editkeyframe.markername"); - markerNameInput.setText(name); - - inputs.addPart(markerNameInput); - } } w3 = fontRendererObj.getStringWidth(I18n.format("replaymod.gui.editkeyframe.timelineposition")+":")+10+ @@ -201,38 +137,6 @@ public class GuiEditKeyframe extends GuiScreen implements GuiReplayOverlay.NoOve min.yPosition = sec.yPosition = ms.yPosition = virtualY+virtualHeight-65; - if(keyframeType == KeyframeType.POSITION) { - int w = Math.max(fontRendererObj.getStringWidth(I18n.format("replaymod.gui.editkeyframe.xpos")), - Math.max(fontRendererObj.getStringWidth(I18n.format("replaymod.gui.editkeyframe.ypos")), - fontRendererObj.getStringWidth(I18n.format("replaymod.gui.editkeyframe.zpos")))); - w2 = Math.max(fontRendererObj.getStringWidth(I18n.format("replaymod.gui.editkeyframe.camyaw")), - Math.max(fontRendererObj.getStringWidth(I18n.format("replaymod.gui.editkeyframe.campitch")), - fontRendererObj.getStringWidth(I18n.format("replaymod.gui.editkeyframe.camroll")))); - - totalWidth = w +100+w2+100+5+5+10; - left = (this.width - totalWidth)/2; - - int x = w + left + 5; - int i = 0; - for(GuiElement input : posInputs.getParts()) { - if(input instanceof GuiTextField) { - GuiTextField textField = (GuiTextField)input; - textField.xPosition = i < 3 ? x : left+totalWidth-100; - textField.yPosition = i < 3 ? virtualY + 20 + i*30 : virtualY + 20 + (i-3)*30; - i++; - } - } - } else if(keyframeType == KeyframeType.TIME) { - kfMin.xPosition = min.xPosition; - kfSec.xPosition = sec.xPosition; - kfMs.xPosition = ms.xPosition; - - kfMin.yPosition = kfSec.yPosition = kfMs.yPosition = min.yPosition - 10 - 20; - } else if(keyframeType == KeyframeType.MARKER) { - markerNameInput.xPosition = width/2 - 100; - markerNameInput.yPosition = height/2-10; - } - saveButton.yPosition = cancelButton.yPosition = virtualY + virtualHeight - 20 - 5; saveButton.xPosition = this.width - 100 - 5 - 10; cancelButton.xPosition = saveButton.xPosition - 100 - 5; @@ -256,26 +160,9 @@ public class GuiEditKeyframe extends GuiScreen implements GuiReplayOverlay.NoOve @Override public void onGuiClosed() { if(!save) { - if(keyframeType != KeyframeType.MARKER) { - ReplayHandler.removeKeyframe(keyframe); - ReplayHandler.addKeyframe(keyframeBackup); - } else { - ReplayHandler.getMarkerKeyframes().remove(keyframe); - ReplayHandler.getMarkerKeyframes().add(keyframeBackup); - } - ReplayHandler.selectKeyframe(keyframeBackup); } else { keyframe.setRealTimestamp(TimestampUtils.calculateTimestamp(min.getIntValue(), sec.getIntValue(), ms.getIntValue())); - if(keyframeType == KeyframeType.POSITION) { - ((Keyframe) keyframe).setValue(new AdvancedPosition(xCoord.getPreciseValue(), yCoord.getPreciseValue(), - zCoord.getPreciseValue(), new Float(pitch.getPreciseValue()), (float) yaw.getPreciseValue(), - (float) roll.getPreciseValue(), null)); - } else if(keyframeType == KeyframeType.TIME) { - ((Keyframe)keyframe).setValue(new TimestampValue(TimestampUtils.calculateTimestamp(kfMin.getIntValue(), kfSec.getIntValue(), kfMs.getIntValue()))); - } else if(keyframeType == KeyframeType.MARKER) { - ((Keyframe)keyframe).getValue().setName(markerNameInput.getText().trim()); - } } ReplayHandler.fireKeyframesModifyEvent(); Keyboard.enableRepeatEvents(false); @@ -325,22 +212,182 @@ public class GuiEditKeyframe extends GuiScreen implements GuiReplayOverlay.NoOve drawString(fontRendererObj, I18n.format("replaymod.gui.seconds"), sec.xPosition+sec.width+5, sec.yPosition+7, Color.WHITE.getRGB()); drawString(fontRendererObj, I18n.format("replaymod.gui.milliseconds"), ms.xPosition + ms.width + 5, ms.yPosition + 7, Color.WHITE.getRGB()); - if(keyframeType == KeyframeType.POSITION) { - drawString(fontRendererObj, I18n.format("replaymod.gui.editkeyframe.xpos"), left, virtualY + 27, Color.WHITE.getRGB()); - drawString(fontRendererObj, I18n.format("replaymod.gui.editkeyframe.ypos"), left, virtualY + 57, Color.WHITE.getRGB()); - drawString(fontRendererObj, I18n.format("replaymod.gui.editkeyframe.zpos"), left, virtualY + 87, Color.WHITE.getRGB()); - drawString(fontRendererObj, I18n.format("replaymod.gui.editkeyframe.camyaw"), left+totalWidth-100-5-w2, virtualY + 27, Color.WHITE.getRGB()); - drawString(fontRendererObj, I18n.format("replaymod.gui.editkeyframe.campitch"), left+totalWidth-100-5-w2, virtualY + 57, Color.WHITE.getRGB()); - drawString(fontRendererObj, I18n.format("replaymod.gui.editkeyframe.camroll"), left+totalWidth-100-5-w2, virtualY + 87, Color.WHITE.getRGB()); - } else if(keyframeType == KeyframeType.TIME) { - drawString(fontRendererObj, I18n.format("replaymod.gui.editkeyframe.timestamp")+":", (width-w3)/2, kfMin.yPosition + 7, Color.WHITE.getRGB()); - drawString(fontRendererObj, I18n.format("replaymod.gui.minutes"), kfMin.xPosition + kfMin.width + 5, kfMin.yPosition + 7, Color.WHITE.getRGB()); - drawString(fontRendererObj, I18n.format("replaymod.gui.seconds"), kfSec.xPosition+kfSec.width+5, kfSec.yPosition+7, Color.WHITE.getRGB()); - drawString(fontRendererObj, I18n.format("replaymod.gui.milliseconds"), kfMs.xPosition+kfMs.width+5, kfMs.yPosition+7, Color.WHITE.getRGB()); - } + drawScreen0(); inputs.draw(mc, mouseX, mouseY); super.drawScreen(mouseX, mouseY, partialTicks); } + + protected void drawScreen0() {} + + private static class GuiEditKeyframeMarker extends GuiEditKeyframe { + private GuiAdvancedTextField markerNameInput; + + public GuiEditKeyframeMarker(Keyframe keyframe) { + super(keyframe, ReplayHandler.getMarkerKeyframes()); + } + + @Override + public void initGui() { + if (!initialized) { + String name = keyframe.getValue().getName(); + if (name == null) name = ""; + markerNameInput = new GuiAdvancedTextField(fontRendererObj, 0, 0, 200, 20); + markerNameInput.hint = I18n.format("replaymod.gui.editkeyframe.markername"); + markerNameInput.setText(name); + + inputs.addPart(markerNameInput); + } + + super.initGui(); + + markerNameInput.xPosition = width/2 - 100; + markerNameInput.yPosition = height/2-10; + } + + @Override + public void onGuiClosed() { + if (!save) { + ReplayHandler.getMarkerKeyframes().remove(keyframe); + ReplayHandler.getMarkerKeyframes().add(keyframeBackup); + } else { + keyframe.getValue().setName(markerNameInput.getText().trim()); + } + super.onGuiClosed(); + } + + } + + private static class GuiEditKeyframeTime extends GuiEditKeyframe { + private GuiNumberInput kfMin, kfSec, kfMs; + + public GuiEditKeyframeTime(Keyframe keyframe) { + super(keyframe, ReplayHandler.getTimeKeyframes()); + screenTitle = I18n.format("replaymod.gui.editkeyframe.title.time"); + } + + @Override + public void initGui() { + if (!initialized) { + int time = keyframe.getValue().asInt(); + + kfMin = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 30, 0d, null, (double)TimestampUtils.timestampToWholeMinutes(time), false, "", 1); + kfSec = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 25, 0d, 59d, (double)TimestampUtils.getSecondsFromTimestamp(time), false, "", 1); + kfMs = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 35, 0d, 999d, (double)TimestampUtils.getMillisecondsFromTimestamp(time), false, "", 1); + + inputs.addPart(kfMin); + inputs.addPart(kfSec); + inputs.addPart(kfMs); + } + + super.initGui(); + + kfMin.xPosition = min.xPosition; + kfSec.xPosition = sec.xPosition; + kfMs.xPosition = ms.xPosition; + + kfMin.yPosition = kfSec.yPosition = kfMs.yPosition = min.yPosition - 10 - 20; + } + + @Override + protected void drawScreen0() { + drawString(fontRendererObj, I18n.format("replaymod.gui.editkeyframe.timestamp")+":", (width-w3)/2, kfMin.yPosition + 7, Color.WHITE.getRGB()); + drawString(fontRendererObj, I18n.format("replaymod.gui.minutes"), kfMin.xPosition + kfMin.width + 5, kfMin.yPosition + 7, Color.WHITE.getRGB()); + drawString(fontRendererObj, I18n.format("replaymod.gui.seconds"), kfSec.xPosition + kfSec.width + 5, kfSec.yPosition + 7, Color.WHITE.getRGB()); + drawString(fontRendererObj, I18n.format("replaymod.gui.milliseconds"), kfMs.xPosition + kfMs.width + 5, kfMs.yPosition + 7, Color.WHITE.getRGB()); + } + + @Override + public void onGuiClosed() { + if (!save) { + ReplayHandler.removeKeyframe(keyframe); + ReplayHandler.addKeyframe(keyframeBackup); + } else { + keyframe.setValue(new TimestampValue(TimestampUtils.calculateTimestamp( + kfMin.getIntValue(), kfSec.getIntValue(), kfMs.getIntValue()))); + } + super.onGuiClosed(); + } + + } + + private static class GuiEditKeyframePosition extends GuiEditKeyframe { + private GuiNumberInput xCoord, yCoord, zCoord, pitch, yaw, roll; + private ComposedElement posInputs; + + public GuiEditKeyframePosition(Keyframe keyframe) { + super(keyframe, ReplayHandler.getPositionKeyframes()); + screenTitle = I18n.format("replaymod.gui.editkeyframe.title.pos"); + } + + @Override + public void initGui() { + if (keyframe.getValue().getSpectatedEntityID() != null) { + super.initGui(); + return; + } + + if (!initialized) { + AdvancedPosition pos = keyframe.getValue(); + xCoord = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 100, null, null, RoundUtils.round2Decimals(pos.getX()), true); + yCoord = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 100, null, null, RoundUtils.round2Decimals(pos.getY()), true); + zCoord = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 100, null, null, RoundUtils.round2Decimals(pos.getZ()), true); + yaw = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 100, -180d, 180d, RoundUtils.round2Decimals(pos.getYaw()), true); + pitch = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 100, -90d, 90d, RoundUtils.round2Decimals(pos.getPitch()), true); + roll = new GuiDraggingNumberInput(fontRendererObj, 0, 0, 100, null, null, RoundUtils.round2Decimals(pos.getRoll()), true); + + posInputs = new ComposedElement(xCoord, yCoord, zCoord, yaw, pitch, roll); + inputs.addPart(posInputs); + } + + super.initGui(); + + int w = Math.max(fontRendererObj.getStringWidth(I18n.format("replaymod.gui.editkeyframe.xpos")), + Math.max(fontRendererObj.getStringWidth(I18n.format("replaymod.gui.editkeyframe.ypos")), + fontRendererObj.getStringWidth(I18n.format("replaymod.gui.editkeyframe.zpos")))); + w2 = Math.max(fontRendererObj.getStringWidth(I18n.format("replaymod.gui.editkeyframe.camyaw")), + Math.max(fontRendererObj.getStringWidth(I18n.format("replaymod.gui.editkeyframe.campitch")), + fontRendererObj.getStringWidth(I18n.format("replaymod.gui.editkeyframe.camroll")))); + + totalWidth = w +100+w2+100+5+5+10; + left = (this.width - totalWidth)/2; + + int x = w + left + 5; + int i = 0; + for(GuiElement input : posInputs.getParts()) { + if(input instanceof GuiTextField) { + GuiTextField textField = (GuiTextField)input; + textField.xPosition = i < 3 ? x : left+totalWidth-100; + textField.yPosition = i < 3 ? virtualY + 20 + i*30 : virtualY + 20 + (i-3)*30; + i++; + } + } + } + + @Override + public void onGuiClosed() { + if (!save) { + ReplayHandler.removeKeyframe(keyframe); + ReplayHandler.addKeyframe(keyframeBackup); + } else { + keyframe.setValue(new AdvancedPosition(xCoord.getPreciseValue(), yCoord.getPreciseValue(), + zCoord.getPreciseValue(), new Float(pitch.getPreciseValue()), (float) yaw.getPreciseValue(), + (float) roll.getPreciseValue(), null)); + } + super.onGuiClosed(); + } + + @Override + protected void drawScreen0() { + if (keyframe.getValue().getSpectatedEntityID() != null) return; + drawString(fontRendererObj, I18n.format("replaymod.gui.editkeyframe.xpos"), left, virtualY + 27, Color.WHITE.getRGB()); + drawString(fontRendererObj, I18n.format("replaymod.gui.editkeyframe.ypos"), left, virtualY + 57, Color.WHITE.getRGB()); + drawString(fontRendererObj, I18n.format("replaymod.gui.editkeyframe.zpos"), left, virtualY + 87, Color.WHITE.getRGB()); + drawString(fontRendererObj, I18n.format("replaymod.gui.editkeyframe.camyaw"), left + totalWidth - 100 - 5 - w2, virtualY + 27, Color.WHITE.getRGB()); + drawString(fontRendererObj, I18n.format("replaymod.gui.editkeyframe.campitch"), left + totalWidth - 100 - 5 - w2, virtualY + 57, Color.WHITE.getRGB()); + drawString(fontRendererObj, I18n.format("replaymod.gui.editkeyframe.camroll"), left + totalWidth - 100 - 5 - w2, virtualY + 87, Color.WHITE.getRGB()); + } + + } } diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/elements/timelines/GuiKeyframeTimeline.java b/src/main/java/eu/crushedpixel/replaymod/gui/elements/timelines/GuiKeyframeTimeline.java index 2215cae7..729ce219 100644 --- a/src/main/java/eu/crushedpixel/replaymod/gui/elements/timelines/GuiKeyframeTimeline.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/elements/timelines/GuiKeyframeTimeline.java @@ -61,7 +61,7 @@ public class GuiKeyframeTimeline extends GuiTimeline { long currentTime = System.currentTimeMillis(); if(closest != null) { if(currentTime - clickTime < 500) { // if double clicked then open GUI instead - mc.displayGuiScreen(new GuiEditKeyframe(closest)); + mc.displayGuiScreen(GuiEditKeyframe.create(closest)); this.clickedKeyFrame = null; } else { this.clickedKeyFrame = closest; diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/elements/timelines/GuiMarkerTimeline.java b/src/main/java/eu/crushedpixel/replaymod/gui/elements/timelines/GuiMarkerTimeline.java index ca49d7c1..8ab93421 100644 --- a/src/main/java/eu/crushedpixel/replaymod/gui/elements/timelines/GuiMarkerTimeline.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/elements/timelines/GuiMarkerTimeline.java @@ -52,7 +52,7 @@ public class GuiMarkerTimeline extends GuiTimeline { long currentTime = System.currentTimeMillis(); if(closest != null) { if(currentTime - clickTime < 500) { // if double clicked then open GUI instead - mc.displayGuiScreen(new GuiEditKeyframe(closest)); + mc.displayGuiScreen(GuiEditKeyframe.create(closest)); this.clickedKeyFrame = null; } else { this.clickedKeyFrame = closest;