sort records by last modified + fix errors

This commit is contained in:
MeexReay 2024-04-26 17:54:43 +03:00
parent ed998cc701
commit 73154eff2b
7 changed files with 45 additions and 20 deletions

View File

@ -316,7 +316,12 @@ public class Main implements ClientModInitializer {
replay_tick.cancel(); replay_tick.cancel();
replay_tick = null; 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")); record_list.getWidget().getWidget(now_record).getChildren().get(3).setMessage(Text.translatable("text.repeating-mod.start"));
sendMessage(Text.translatable("message.repeating-mod.replay_stop")); sendMessage(Text.translatable("message.repeating-mod.replay_stop"));
} }

View File

@ -7,18 +7,16 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.List;
public class RecordList { public class RecordList {
private final File folder; private final File folder;
private List<RecordState> records; private LinkedList<RecordState> records;
private RecordListWidget widget; private RecordListWidget widget;
public RecordList(File folder) { public RecordList(File folder) {
this.folder = folder; this.folder = folder;
this.records = new ArrayList<>(); this.records = new LinkedList<>();
this.widget = new RecordListWidget(0, 0, 180, 200); this.widget = new RecordListWidget(0, 0, 180, 200);
} }
@ -35,7 +33,11 @@ public class RecordList {
} }
public void loadRecords() { public void loadRecords() {
for (File file : folder.listFiles()) { LinkedList<File> files = new LinkedList<>(List.of(folder.listFiles()));
files.sort(Comparator.comparingLong((f) -> f.lastModified()));
for (File file : files) {
try { try {
addRecord(file); addRecord(file);
} catch (Exception e) {} } catch (Exception e) {}

View File

@ -101,7 +101,7 @@ public class RecordState {
public RecordEvent getLastEvent(String type) { public RecordEvent getLastEvent(String type) {
for (RecordEvent r: Lists.reverse(new ArrayList<>(events))) { 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; return r;
} }
} }

View File

@ -6,7 +6,7 @@ public abstract class RecordEvent {
public abstract void replay(); public abstract void replay();
public RecordEventType getType() { public RecordEventType getType() {
for (RecordEventType ev : RecordEventType.values()) { for (RecordEventType ev : RecordEventType.values()) {
if (ev.getEventClass().equals(this.getClass())) { if (ev.getEventClass().getTypeName().equals(this.getClass().getTypeName())) {
return ev; return ev;
} }
} }

View File

@ -21,21 +21,21 @@ public abstract class ScreenMixin extends AbstractParentElement implements Drawa
@Inject(at = @At(value = "HEAD"), method = "close") @Inject(at = @At(value = "HEAD"), method = "close")
private void close(CallbackInfo ci) { private void close(CallbackInfo ci) {
if (Main.me.is_recording) { 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") @Inject(at = @At(value = "HEAD"), method = "keyPressed")
private void keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable<Boolean> cir) { private void keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable<Boolean> cir) {
if (Main.me.is_recording) { 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 @Override
public boolean charTyped(char chr, int modifiers) { public boolean charTyped(char chr, int modifiers) {
if (Main.me.is_recording) { 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); return super.charTyped(chr, modifiers);
} }
@ -43,7 +43,7 @@ public abstract class ScreenMixin extends AbstractParentElement implements Drawa
@Override @Override
public boolean keyReleased(int keyCode, int scanCode, int modifiers) { public boolean keyReleased(int keyCode, int scanCode, int modifiers) {
if (Main.me.is_recording) { 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); return super.keyReleased(keyCode, scanCode, modifiers);
} }
@ -51,7 +51,7 @@ public abstract class ScreenMixin extends AbstractParentElement implements Drawa
@Override @Override
public boolean mouseClicked(double mouseX, double mouseY, int button) { public boolean mouseClicked(double mouseX, double mouseY, int button) {
if (Main.me.is_recording) { 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); return super.mouseClicked(mouseX, mouseY, button);
} }
@ -59,7 +59,7 @@ public abstract class ScreenMixin extends AbstractParentElement implements Drawa
@Override @Override
public void mouseMoved(double mouseX, double mouseY) { public void mouseMoved(double mouseX, double mouseY) {
if (Main.me.is_recording) { 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); super.mouseMoved(mouseX, mouseY);
} }
@ -67,7 +67,7 @@ public abstract class ScreenMixin extends AbstractParentElement implements Drawa
@Override @Override
public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) {
if (Main.me.is_recording) { 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); return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY);
} }
@ -75,7 +75,7 @@ public abstract class ScreenMixin extends AbstractParentElement implements Drawa
@Override @Override
public boolean mouseReleased(double mouseX, double mouseY, int button) { public boolean mouseReleased(double mouseX, double mouseY, int button) {
if (Main.me.is_recording) { 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); return super.mouseReleased(mouseX, mouseY, button);
} }
@ -83,7 +83,7 @@ public abstract class ScreenMixin extends AbstractParentElement implements Drawa
@Override @Override
public boolean mouseScrolled(double mouseX, double mouseY, double amount) { public boolean mouseScrolled(double mouseX, double mouseY, double amount) {
if (Main.me.is_recording) { 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); return super.mouseScrolled(mouseX, mouseY, amount);
} }

View File

@ -14,11 +14,12 @@ import themixray.repeating.mod.RecordState;
import themixray.repeating.mod.RepeatingScreen; import themixray.repeating.mod.RepeatingScreen;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.function.Consumer; import java.util.function.Consumer;
public class RecordListWidget extends ScrollableWidget { public class RecordListWidget extends ScrollableWidget {
private List<RecordWidget> widgets = new ArrayList<>(); private LinkedList<RecordWidget> widgets = new LinkedList<>();
private boolean focused = false; private boolean focused = false;
public RecordListWidget(int x, int y, int width, int height) { public RecordListWidget(int x, int y, int width, int height) {

View File

@ -6,6 +6,8 @@ import net.minecraft.client.gui.tooltip.Tooltip;
import net.minecraft.client.gui.widget.*; import net.minecraft.client.gui.widget.*;
import net.minecraft.text.Style; import net.minecraft.text.Style;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.text.TextColor;
import net.minecraft.util.Formatting;
import themixray.repeating.mod.Main; import themixray.repeating.mod.Main;
import themixray.repeating.mod.RecordState; import themixray.repeating.mod.RecordState;
import themixray.repeating.mod.RenderListener; import themixray.repeating.mod.RenderListener;
@ -43,7 +45,10 @@ public class RecordWidget implements Drawable, Widget {
} }
public boolean contains(int x, int y) { 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) { public void setX(int x) {
@ -105,6 +110,11 @@ public class RecordWidget implements Drawable, Widget {
children.add(delete_button); children.add(delete_button);
ButtonWidget export_button = ButtonWidget.builder(Text.translatable("text.repeating-mod.export"), (i) -> { 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()) { if (Desktop.isDesktopSupported()) {
Desktop desk = Desktop.getDesktop(); Desktop desk = Desktop.getDesktop();
try { try {
@ -116,6 +126,9 @@ public class RecordWidget implements Drawable, Widget {
throw new RuntimeException(ex); 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(); }).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) -> { ButtonWidget replay_button = ButtonWidget.builder(Text.translatable("text.repeating-mod.start"), (i) -> {
if (Main.me.is_replaying) { if (Main.me.is_replaying) {
Main.me.stopReplay(); Main.me.stopReplay();
if (getRecord().equals(Main.me.now_record)) {
return;
}
} }
i.setMessage(Text.translatable("text.repeating-mod.stop")); i.setMessage(Text.translatable("text.repeating-mod.stop"));
Main.me.now_record = record; Main.me.now_record = record;
Main.me.startReplay(); Main.me.startReplay();
Main.client.setScreen(null);
}).dimensions(parent.getX() + getX() + 110,parent.getY() + getY() + 4 + 28, 65, 13) }).dimensions(parent.getX() + getX() + 110,parent.getY() + getY() + 4 + 28, 65, 13)
.tooltip(Tooltip.of(Text.translatable("text.repeating-mod.replay_tooltip"))).build(); .tooltip(Tooltip.of(Text.translatable("text.repeating-mod.replay_tooltip"))).build();