diff --git a/src/main/java/themixray/repeating/mod/Main.java b/src/main/java/themixray/repeating/mod/Main.java index 37e5e28..c2b8645 100644 --- a/src/main/java/themixray/repeating/mod/Main.java +++ b/src/main/java/themixray/repeating/mod/Main.java @@ -316,7 +316,12 @@ public class Main implements ClientModInitializer { replay_tick.cancel(); replay_tick = null; } - menu.updateButtons(); + try { + now_record.save(); + } catch (IOException e) { + throw new RuntimeException(e); + } + menu.updateButtons(); record_list.getWidget().getWidget(now_record).getChildren().get(3).setMessage(Text.translatable("text.repeating-mod.start")); sendMessage(Text.translatable("message.repeating-mod.replay_stop")); } diff --git a/src/main/java/themixray/repeating/mod/RecordList.java b/src/main/java/themixray/repeating/mod/RecordList.java index 9e2fc91..99fffe7 100644 --- a/src/main/java/themixray/repeating/mod/RecordList.java +++ b/src/main/java/themixray/repeating/mod/RecordList.java @@ -7,18 +7,16 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; public class RecordList { private final File folder; - private List records; + private LinkedList records; private RecordListWidget widget; public RecordList(File folder) { this.folder = folder; - this.records = new ArrayList<>(); + this.records = new LinkedList<>(); this.widget = new RecordListWidget(0, 0, 180, 200); } @@ -35,7 +33,11 @@ public class RecordList { } public void loadRecords() { - for (File file : folder.listFiles()) { + LinkedList files = new LinkedList<>(List.of(folder.listFiles())); + + files.sort(Comparator.comparingLong((f) -> f.lastModified())); + + for (File file : files) { try { addRecord(file); } catch (Exception e) {} diff --git a/src/main/java/themixray/repeating/mod/RecordState.java b/src/main/java/themixray/repeating/mod/RecordState.java index 2272f03..21d782b 100644 --- a/src/main/java/themixray/repeating/mod/RecordState.java +++ b/src/main/java/themixray/repeating/mod/RecordState.java @@ -101,7 +101,7 @@ public class RecordState { public RecordEvent getLastEvent(String type) { for (RecordEvent r: Lists.reverse(new ArrayList<>(events))) { - if (r.getType().getName().equals(type)) { + if (r.getType() != null && r.getType().getName().equals(type)) { return r; } } diff --git a/src/main/java/themixray/repeating/mod/event/RecordEvent.java b/src/main/java/themixray/repeating/mod/event/RecordEvent.java index 7b56dc7..0c2cb64 100644 --- a/src/main/java/themixray/repeating/mod/event/RecordEvent.java +++ b/src/main/java/themixray/repeating/mod/event/RecordEvent.java @@ -6,7 +6,7 @@ public abstract class RecordEvent { public abstract void replay(); public RecordEventType getType() { for (RecordEventType ev : RecordEventType.values()) { - if (ev.getEventClass().equals(this.getClass())) { + if (ev.getEventClass().getTypeName().equals(this.getClass().getTypeName())) { return ev; } } diff --git a/src/main/java/themixray/repeating/mod/mixin/ScreenMixin.java b/src/main/java/themixray/repeating/mod/mixin/ScreenMixin.java index 25b9504..bfa46c8 100644 --- a/src/main/java/themixray/repeating/mod/mixin/ScreenMixin.java +++ b/src/main/java/themixray/repeating/mod/mixin/ScreenMixin.java @@ -21,21 +21,21 @@ public abstract class ScreenMixin extends AbstractParentElement implements Drawa @Inject(at = @At(value = "HEAD"), method = "close") private void close(CallbackInfo ci) { if (Main.me.is_recording) { - Main.me.now_record.addEvent(new GuiCloseEvent()); +// Main.me.now_record.addEvent(new GuiCloseEvent()); } } @Inject(at = @At(value = "HEAD"), method = "keyPressed") private void keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable cir) { if (Main.me.is_recording) { - Main.me.now_record.addEvent(new GuiKeyPressEvent(keyCode, scanCode, modifiers)); +// Main.me.now_record.addEvent(new GuiKeyPressEvent(keyCode, scanCode, modifiers)); } } @Override public boolean charTyped(char chr, int modifiers) { if (Main.me.is_recording) { - Main.me.now_record.addEvent(new GuiCharTypeEvent(chr, modifiers)); +// Main.me.now_record.addEvent(new GuiCharTypeEvent(chr, modifiers)); } return super.charTyped(chr, modifiers); } @@ -43,7 +43,7 @@ public abstract class ScreenMixin extends AbstractParentElement implements Drawa @Override public boolean keyReleased(int keyCode, int scanCode, int modifiers) { if (Main.me.is_recording) { - Main.me.now_record.addEvent(new GuiKeyReleaseEvent(keyCode, scanCode, modifiers)); +// Main.me.now_record.addEvent(new GuiKeyReleaseEvent(keyCode, scanCode, modifiers)); } return super.keyReleased(keyCode, scanCode, modifiers); } @@ -51,7 +51,7 @@ public abstract class ScreenMixin extends AbstractParentElement implements Drawa @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { if (Main.me.is_recording) { - Main.me.now_record.addEvent(new GuiMouseClickEvent(mouseX, mouseY, button)); +// Main.me.now_record.addEvent(new GuiMouseClickEvent(mouseX, mouseY, button)); } return super.mouseClicked(mouseX, mouseY, button); } @@ -59,7 +59,7 @@ public abstract class ScreenMixin extends AbstractParentElement implements Drawa @Override public void mouseMoved(double mouseX, double mouseY) { if (Main.me.is_recording) { - Main.me.now_record.addEvent(new GuiMouseMoveEvent(mouseX, mouseY)); +// Main.me.now_record.addEvent(new GuiMouseMoveEvent(mouseX, mouseY)); } super.mouseMoved(mouseX, mouseY); } @@ -67,7 +67,7 @@ public abstract class ScreenMixin extends AbstractParentElement implements Drawa @Override public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { if (Main.me.is_recording) { - Main.me.now_record.addEvent(new GuiMouseDragEvent(mouseX, mouseY, button, deltaX, deltaY)); +// Main.me.now_record.addEvent(new GuiMouseDragEvent(mouseX, mouseY, button, deltaX, deltaY)); } return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); } @@ -75,7 +75,7 @@ public abstract class ScreenMixin extends AbstractParentElement implements Drawa @Override public boolean mouseReleased(double mouseX, double mouseY, int button) { if (Main.me.is_recording) { - Main.me.now_record.addEvent(new GuiMouseReleaseEvent(mouseX, mouseY, button)); +// Main.me.now_record.addEvent(new GuiMouseReleaseEvent(mouseX, mouseY, button)); } return super.mouseReleased(mouseX, mouseY, button); } @@ -83,7 +83,7 @@ public abstract class ScreenMixin extends AbstractParentElement implements Drawa @Override public boolean mouseScrolled(double mouseX, double mouseY, double amount) { if (Main.me.is_recording) { - Main.me.now_record.addEvent(new GuiMouseScrollEvent(mouseX, mouseY, amount)); +// Main.me.now_record.addEvent(new GuiMouseScrollEvent(mouseX, mouseY, amount)); } return super.mouseScrolled(mouseX, mouseY, amount); } diff --git a/src/main/java/themixray/repeating/mod/widget/RecordListWidget.java b/src/main/java/themixray/repeating/mod/widget/RecordListWidget.java index ddded9f..d038f91 100644 --- a/src/main/java/themixray/repeating/mod/widget/RecordListWidget.java +++ b/src/main/java/themixray/repeating/mod/widget/RecordListWidget.java @@ -14,11 +14,12 @@ import themixray.repeating.mod.RecordState; import themixray.repeating.mod.RepeatingScreen; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import java.util.function.Consumer; public class RecordListWidget extends ScrollableWidget { - private List widgets = new ArrayList<>(); + private LinkedList widgets = new LinkedList<>(); private boolean focused = false; public RecordListWidget(int x, int y, int width, int height) { diff --git a/src/main/java/themixray/repeating/mod/widget/RecordWidget.java b/src/main/java/themixray/repeating/mod/widget/RecordWidget.java index 44d3e23..3838168 100644 --- a/src/main/java/themixray/repeating/mod/widget/RecordWidget.java +++ b/src/main/java/themixray/repeating/mod/widget/RecordWidget.java @@ -6,6 +6,8 @@ import net.minecraft.client.gui.tooltip.Tooltip; import net.minecraft.client.gui.widget.*; import net.minecraft.text.Style; import net.minecraft.text.Text; +import net.minecraft.text.TextColor; +import net.minecraft.util.Formatting; import themixray.repeating.mod.Main; import themixray.repeating.mod.RecordState; import themixray.repeating.mod.RenderListener; @@ -43,7 +45,10 @@ public class RecordWidget implements Drawable, Widget { } public boolean contains(int x, int y) { - return parent.getX() + getX() <= x && parent.getY() + getY() <= y && x <= parent.getX() + getX() + getWidth() && y <= parent.getY() + getY() + getHeight(); + return parent.getX() + getX() <= x && + parent.getY() + getY() <= y && + x <= parent.getX() + getX() + getWidth() && + y <= parent.getY() + getY() + getHeight(); } public void setX(int x) { @@ -105,6 +110,11 @@ public class RecordWidget implements Drawable, Widget { children.add(delete_button); ButtonWidget export_button = ButtonWidget.builder(Text.translatable("text.repeating-mod.export"), (i) -> { + try { + record.save(); + } catch (IOException e) { + throw new RuntimeException(e); + } if (Desktop.isDesktopSupported()) { Desktop desk = Desktop.getDesktop(); try { @@ -116,6 +126,9 @@ public class RecordWidget implements Drawable, Widget { throw new RuntimeException(ex); } } + } else { + Main.sendMessage(Text.literal("Record file is ").append( + Text.literal("["+record.getFile().getAbsolutePath()+"]").styled((s) -> s.withColor(Formatting.GRAY)))); } }).dimensions(parent.getX() + getX() + 110,parent.getY() + getY() + 4 + 14, 65, 13).build(); @@ -124,11 +137,15 @@ public class RecordWidget implements Drawable, Widget { ButtonWidget replay_button = ButtonWidget.builder(Text.translatable("text.repeating-mod.start"), (i) -> { if (Main.me.is_replaying) { Main.me.stopReplay(); + if (getRecord().equals(Main.me.now_record)) { + return; + } } i.setMessage(Text.translatable("text.repeating-mod.stop")); Main.me.now_record = record; Main.me.startReplay(); + Main.client.setScreen(null); }).dimensions(parent.getX() + getX() + 110,parent.getY() + getY() + 4 + 28, 65, 13) .tooltip(Tooltip.of(Text.translatable("text.repeating-mod.replay_tooltip"))).build();