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,6 +316,11 @@ public class Main implements ClientModInitializer {
replay_tick.cancel();
replay_tick = null;
}
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"));

View File

@ -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<RecordState> records;
private LinkedList<RecordState> 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<File> files = new LinkedList<>(List.of(folder.listFiles()));
files.sort(Comparator.comparingLong((f) -> f.lastModified()));
for (File file : files) {
try {
addRecord(file);
} catch (Exception e) {}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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<Boolean> 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);
}

View File

@ -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<RecordWidget> widgets = new ArrayList<>();
private LinkedList<RecordWidget> widgets = new LinkedList<>();
private boolean focused = false;
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.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();