Skip to content

Commit

Permalink
[PlaybackSerialiser] Added options and label FileCommands
Browse files Browse the repository at this point in the history
- Option and Label FileCommands replacing Controlbytes
- Interpolation can't be turned off so it will not make a return from Controlbytes
- Refined FileCommands overall
  • Loading branch information
ScribbleTAS committed Jun 27, 2024
1 parent 947a29c commit 2da7c94
Show file tree
Hide file tree
Showing 10 changed files with 242 additions and 39 deletions.
14 changes: 12 additions & 2 deletions src/main/java/com/minecrafttas/tasmod/TASmodClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@
import com.minecrafttas.tasmod.networking.TASmodPackets;
import com.minecrafttas.tasmod.playback.PlaybackControllerClient;
import com.minecrafttas.tasmod.playback.PlaybackControllerClient.TASstate;
import com.minecrafttas.tasmod.playback.filecommands.PlaybackFileCommand.PlaybackFileCommandExtension;
import com.minecrafttas.tasmod.playback.filecommands.integrated.DesyncMonitorFileCommandExtension;
import com.minecrafttas.tasmod.playback.filecommands.integrated.LabelFileCommandExtension;
import com.minecrafttas.tasmod.playback.filecommands.integrated.OptionsFileCommandExtension;
import com.minecrafttas.tasmod.playback.metadata.integrated.CreditsMetadataExtension;
import com.minecrafttas.tasmod.playback.metadata.integrated.StartpositionMetadataExtension;
import com.minecrafttas.tasmod.playback.tasfile.PlaybackSerialiser;
Expand Down Expand Up @@ -167,6 +168,11 @@ private void registerEventListeners() {
EventListenerRegistry.register(controller);
EventListenerRegistry.register(creditsMetadataExtension);
EventListenerRegistry.register(startpositionMetadataExtension);

EventListenerRegistry.register(desyncMonitorFileCommandExtension);

EventListenerRegistry.register(TASmodRegistry.PLAYBACK_METADATA);
EventListenerRegistry.register(TASmodRegistry.PLAYBACK_FILE_COMMAND);
}

@Override
Expand Down Expand Up @@ -299,10 +305,14 @@ private void registerSerialiserFlavors(Minecraft mc) {
TASmodRegistry.SERIALISER_FLAVOR.register(betaFlavor);
}

public static PlaybackFileCommandExtension desyncMonitorFileCommandExtension = new DesyncMonitorFileCommandExtension();
public static DesyncMonitorFileCommandExtension desyncMonitorFileCommandExtension = new DesyncMonitorFileCommandExtension();
public static OptionsFileCommandExtension optionsFileCommandExtension = new OptionsFileCommandExtension();
public static LabelFileCommandExtension labelFileCommandExtension = new LabelFileCommandExtension();

private void registerFileCommands() {
TASmodRegistry.PLAYBACK_FILE_COMMAND.register(desyncMonitorFileCommandExtension);
TASmodRegistry.PLAYBACK_FILE_COMMAND.register(optionsFileCommandExtension);
TASmodRegistry.PLAYBACK_FILE_COMMAND.register(labelFileCommandExtension);
}

private void loadConfig(Minecraft mc) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,16 @@ public interface EventPlaybackTick extends EventBase {
*/
public void onPlaybackTick(long index, TickContainer container);
}

/**
* Fired when a recording is cleared
*/
@FunctionalInterface
public interface EventRecordClear extends EventBase {

/**
* Fired when a recording is cleared
*/
public void onClear();
}
}
7 changes: 4 additions & 3 deletions src/main/java/com/minecrafttas/tasmod/gui/InfoHud.java
Original file line number Diff line number Diff line change
Expand Up @@ -423,10 +423,11 @@ public boolean checkInit() {
@Override
public void onDrawHotbar() {
// render custom info box if control byte is set
if (!ControlByteHandler.hideInfoBox && TASmodClient.controller.isPlayingback())
drawRectWithText(ControlByteHandler.text, 10, 10, true);
String text = TASmodClient.labelFileCommandExtension.getLabelText();
if (!text.isEmpty() && TASmodClient.controller.isPlayingback())
drawRectWithText(text, 10, 10, true);
// skip rendering of control byte is set
if (!ControlByteHandler.shouldRenderHud && TASmodClient.controller.isPlayingback())
if (!TASmodClient.optionsFileCommandExtension.shouldRenderHud() && TASmodClient.controller.isPlayingback())
return;
int xpos=40;
int ypos=190;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import com.minecrafttas.tasmod.events.EventClient.EventVirtualCameraAngleTick;
import com.minecrafttas.tasmod.events.EventClient.EventVirtualKeyboardTick;
import com.minecrafttas.tasmod.events.EventClient.EventVirtualMouseTick;
import com.minecrafttas.tasmod.events.EventPlaybackClient;
import com.minecrafttas.tasmod.events.EventPlaybackClient.EventControllerStateChange;
import com.minecrafttas.tasmod.events.EventPlaybackClient.EventPlaybackJoinedWorld;
import com.minecrafttas.tasmod.events.EventPlaybackClient.EventPlaybackTick;
Expand All @@ -49,7 +50,6 @@
import com.minecrafttas.tasmod.playback.tasfile.flavor.SerialiserFlavorBase;
import com.minecrafttas.tasmod.util.LoggerMarkers;
import com.minecrafttas.tasmod.util.Scheduler.Task;
import com.minecrafttas.tasmod.util.TASmodRegistry;
import com.minecrafttas.tasmod.virtual.VirtualCameraAngle;
import com.minecrafttas.tasmod.virtual.VirtualInput;
import com.minecrafttas.tasmod.virtual.VirtualKeyboard;
Expand Down Expand Up @@ -530,16 +530,13 @@ public TickContainer get() {

public void clear() {
LOGGER.debug(LoggerMarkers.Playback, "Clearing playback controller");
EventListenerRegistry.fireEvent(EventPlaybackClient.EventRecordClear.class);
try {
inputs.clearMemory();
} catch (IOException e) {
e.printStackTrace();
}
inputs = new BigArrayList<TickContainer>(directory + File.separator + "temp");
controlBytes.clear();
index = 0;
desyncMonitor.clear();
TASmodRegistry.PLAYBACK_METADATA.handleOnClear();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,9 @@ public void onEnable() {
};

public void onDisable() {

};

public void onClear() {
};

public void onRecord(long tick, TickContainer tickContainer) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import com.minecrafttas.tasmod.playback.filecommands.PlaybackFileCommand.PlaybackFileCommandContainer;
import com.minecrafttas.tasmod.playback.filecommands.PlaybackFileCommand.PlaybackFileCommandExtension;

public class PlaybackFileCommandsRegistry extends AbstractRegistry<String, PlaybackFileCommandExtension> implements EventPlaybackClient.EventRecordTick, EventPlaybackClient.EventPlaybackTick {
public class PlaybackFileCommandsRegistry extends AbstractRegistry<String, PlaybackFileCommandExtension> implements EventPlaybackClient.EventRecordTick, EventPlaybackClient.EventPlaybackTick, EventPlaybackClient.EventRecordClear {

private List<PlaybackFileCommandExtension> enabledExtensions = new ArrayList<>();

Expand Down Expand Up @@ -137,4 +137,11 @@ public void handleOnDeserialiseEndline(long currentTick, TickContainer deseriali
}
}

@Override
public void onClear() {
REGISTRY.values().forEach(fc -> {
fc.onClear();
});
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.minecrafttas.tasmod.playback.filecommands.integrated;

import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.text.NumberFormat;
import java.text.ParseException;
Expand All @@ -9,7 +10,9 @@

import com.dselent.bigarraylist.BigArrayList;
import com.minecrafttas.tasmod.TASmod;
import com.minecrafttas.tasmod.events.EventPlaybackClient;
import com.minecrafttas.tasmod.playback.PlaybackControllerClient;
import com.minecrafttas.tasmod.playback.PlaybackControllerClient.TASstate;
import com.minecrafttas.tasmod.playback.PlaybackControllerClient.TickContainer;
import com.minecrafttas.tasmod.playback.filecommands.PlaybackFileCommand;
import com.minecrafttas.tasmod.playback.filecommands.PlaybackFileCommand.PlaybackFileCommandContainer;
Expand All @@ -26,11 +29,11 @@
*
* @author Scribble
*/
public class DesyncMonitorFileCommandExtension extends PlaybackFileCommandExtension {
public class DesyncMonitorFileCommandExtension extends PlaybackFileCommandExtension implements EventPlaybackClient.EventControllerStateChange {

private File tempDir = new File(Minecraft.getMinecraft().mcDataDir.getAbsolutePath() + File.separator + "saves" + File.separator + "tasfiles" + File.separator + "temp" + File.separator + "monitoring");

private BigArrayList<MonitorContainer> container = new BigArrayList<MonitorContainer>(tempDir.toString());
private BigArrayList<MonitorContainer> monitorContainer = new BigArrayList<MonitorContainer>(tempDir.toString());

private MonitorContainer currentValues;

Expand All @@ -40,10 +43,17 @@ public class DesyncMonitorFileCommandExtension extends PlaybackFileCommandExtens
public String name() {
return "tasmod_desyncMonitoring@v1";
}

@Override
public String[] getFileCommandNames() {
return new String[] {"desyncMonitoring"};
return new String[] { "desyncMonitoring" };
}

@Override
public void onControllerStateChange(TASstate newstate, TASstate oldstate) {
if(newstate==TASstate.RECORDING && monitorContainer.isEmpty()) {
recordNull(0);
}
}

@Override
Expand All @@ -56,40 +66,45 @@ public void onRecord(long tick, TickContainer tickContainer) {
values = new MonitorContainer(tick);
}

if (container.size() <= tick) {
container.add(values);
if (monitorContainer.size() <= tick) {
monitorContainer.add(values);
} else {
container.set(tick, values);
monitorContainer.set(tick, values);
}
}

@Override
public void onDisable() {
this.onClear();
}

@Override
public PlaybackFileCommandContainer onSerialiseEndlineComment(long currentTick, TickContainer tickContainer) {
PlaybackFileCommandContainer out = new PlaybackFileCommandContainer();
MonitorContainer monitoredValues = container.get(currentTick);
MonitorContainer monitoredValues = monitorContainer.get(currentTick);
PlaybackFileCommand command = new PlaybackFileCommand("desyncMonitor", monitoredValues.toStringArray());

out.add("desyncMonitor", command);

return out;
}

@Override
public void onDeserialiseEndlineComment(long tick, TickContainer container, PlaybackFileCommandContainer fileCommandContainer) {
List<PlaybackFileCommand> commandsEndline = fileCommandContainer.get("desyncMonitor");
if(commandsEndline == null || commandsEndline.isEmpty()) {
return;
if (commandsEndline == null || commandsEndline.isEmpty()) {
recordNull(tick);
}

PlaybackFileCommand command = commandsEndline.get(0);
this.container.add(loadFromFile(tick, command.getArgs()));
this.monitorContainer.add(loadFromFile(tick, command.getArgs()));
}

public void recordNull(int index) {
if (container.size() <= index) {
container.add(new MonitorContainer(index));
public void recordNull(long tick) {
if (monitorContainer.size() <= tick) {
monitorContainer.add(new MonitorContainer(tick));
} else {
container.set(index, new MonitorContainer(index));
monitorContainer.set(tick, new MonitorContainer(tick));
}
}

Expand Down Expand Up @@ -119,13 +134,13 @@ private MonitorContainer loadFromFile(long tick, String[] args) throws PlaybackL
} catch (ParseException e) {
throw new PlaybackLoadException(e);
}

return new MonitorContainer(tick, x, y, z, mx, my, mz);
}

public MonitorContainer get(long l) {
try {
return container.get(l);
return monitorContainer.get(l);
} catch (IndexOutOfBoundsException e) {
return null;
}
Expand Down Expand Up @@ -226,7 +241,7 @@ public MonitorContainer(long index, double posx, double posy, double posz, doubl
public MonitorContainer(long index) {
this(index, 0, 0, 0, 0, 0, 0);
}

public String[] toStringArray() {
String[] out = new String[values.length];
for (int i = 0; i < values.length; i++) {
Expand Down Expand Up @@ -313,16 +328,22 @@ public String getText() {
return text;
}
}
private double parseDouble(String doublestring) throws ParseException{

private double parseDouble(String doublestring) throws ParseException {
NumberFormat format = NumberFormat.getInstance(Locale.ENGLISH);
Number number = format.parse(doublestring);
return number.doubleValue();
}

public void clear() {
@Override
public void onClear() {
currentValues = null;
container = new BigArrayList<MonitorContainer>(tempDir.toString());
try {
monitorContainer.clearMemory();
} catch (IOException e) {
e.printStackTrace();
}
monitorContainer = new BigArrayList<MonitorContainer>(tempDir.toString());
lastStatus = TextFormatting.GRAY + "Empty";
lastPos = "";
lastMotion = "";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package com.minecrafttas.tasmod.playback.filecommands.integrated;

import java.io.IOException;

import com.dselent.bigarraylist.BigArrayList;
import com.minecrafttas.tasmod.playback.PlaybackControllerClient.TickContainer;
import com.minecrafttas.tasmod.playback.filecommands.PlaybackFileCommand;
import com.minecrafttas.tasmod.playback.filecommands.PlaybackFileCommand.PlaybackFileCommandContainer;
import com.minecrafttas.tasmod.playback.filecommands.PlaybackFileCommand.PlaybackFileCommandExtension;
import com.minecrafttas.tasmod.playback.filecommands.PlaybackFileCommand.PlaybackFileCommandLine;

public class LabelFileCommandExtension extends PlaybackFileCommandExtension {

private String labelText = "";

BigArrayList<PlaybackFileCommandContainer> label = new BigArrayList<>();

@Override
public String name() {
return "tasmod_label@v1";
}

@Override
public String[] getFileCommandNames() {
return new String[] { "label" };
}

@Override
public void onDeserialiseInlineComment(long tick, TickContainer container, PlaybackFileCommandContainer fileCommandContainer) {
if (fileCommandContainer.containsKey("label")) {
label.add(fileCommandContainer.split("label"));
}
}

@Override
public void onPlayback(long tick, TickContainer tickContainer) {
PlaybackFileCommandContainer containerInTick = label.get(tick - 1);
if (containerInTick == null) {
return;
}

PlaybackFileCommandLine line = containerInTick.get("label");
if (line == null) {
return;
}

for (PlaybackFileCommand command : line) {
labelText = String.join(", ", command.getArgs());
}
}

@Override
public void onClear() {
try {
label.clearMemory();
} catch (IOException e) {
e.printStackTrace();
}

label = new BigArrayList<>();
}

public String getLabelText() {
return labelText;
}
}
Loading

0 comments on commit 2da7c94

Please sign in to comment.