From 4805e5e9f50790c955db2986b681265fc6d246f9 Mon Sep 17 00:00:00 2001 From: johni0702 Date: Sun, 23 Oct 2016 14:06:17 +0200 Subject: [PATCH] Fix crash when setting two keyframes to the same time via the edit keyframe gui The save button is now disabled if the configured time is already occupied. --- .../simplepathing/gui/GuiEditKeyframe.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/replaymod/simplepathing/gui/GuiEditKeyframe.java b/src/main/java/com/replaymod/simplepathing/gui/GuiEditKeyframe.java index 0bf0a7c9..edb160a5 100644 --- a/src/main/java/com/replaymod/simplepathing/gui/GuiEditKeyframe.java +++ b/src/main/java/com/replaymod/simplepathing/gui/GuiEditKeyframe.java @@ -19,6 +19,7 @@ import de.johni0702.minecraft.gui.layout.HorizontalLayout; import de.johni0702.minecraft.gui.layout.VerticalLayout; import de.johni0702.minecraft.gui.popup.AbstractGuiPopup; import de.johni0702.minecraft.gui.utils.Colors; +import de.johni0702.minecraft.gui.utils.Consumer; import org.apache.commons.lang3.tuple.Triple; import org.lwjgl.input.Keyboard; import org.lwjgl.util.ReadablePoint; @@ -71,9 +72,10 @@ public abstract class GuiEditKeyframe> extends Abst this.path = path; long time = keyframe.getTime(); - timeMinField.setValue(time / 1000 / 60); - timeSecField.setValue(time / 1000 % 60); - timeMSecField.setValue(time % 1000); + Consumer updateSaveButtonState = s -> saveButton.setEnabled(canSave()); + timeMinField.setValue(time / 1000 / 60).onTextChanged(updateSaveButtonState); + timeSecField.setValue(time / 1000 % 60).onTextChanged(updateSaveButtonState); + timeMSecField.setValue(time % 1000).onTextChanged(updateSaveButtonState); title.setI18nText("replaymod.gui.editkeyframe.title." + type); saveButton.onClick(() -> { @@ -87,6 +89,14 @@ public abstract class GuiEditKeyframe> extends Abst }); } + private boolean canSave() { + long newTime = (timeMinField.getInteger() * 60 + timeSecField.getInteger()) * 1000 + timeMSecField.getInteger(); + if (newTime != keyframe.getTime() && path.getKeyframe(newTime) != null) { + return false; + } + return true; + } + @Override public boolean typeKey(ReadablePoint mousePosition, int keyCode, char keyChar, boolean ctrlDown, boolean shiftDown) { if (keyCode == Keyboard.KEY_ESCAPE) {