Skip to content

Commit e09a4d6

Browse files
committed
[PlaybackSerialiser] Added serialise functionality
- Renamed PlaybackSerialiserFlavorBase to PlaybackFlavorBase - Renamed PlaybackSerialiserFlavorRegistry to PlaybackFlavorRegistry - Added PlaybackFlavorRegistry to TASmodRegistry - Continued on PlaybackFlavorBase
1 parent ae3c1dc commit e09a4d6

File tree

11 files changed

+122
-40
lines changed

11 files changed

+122
-40
lines changed

src/main/java/com/minecrafttas/mctcommon/registry/AbstractRegistry.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.util.Map;
44

55
public abstract class AbstractRegistry<K, V> {
6-
public final Map<K, V> REGISTRY;
6+
protected final Map<K, V> REGISTRY;
77

88
public AbstractRegistry(Map<K, V> map) {
99
REGISTRY = map;

src/main/java/com/minecrafttas/tasmod/TASmodClient.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.minecrafttas.tasmod.playback.metadata.integrated.CreditsMetadataExtension;
2828
import com.minecrafttas.tasmod.playback.metadata.integrated.StartpositionMetadataExtension;
2929
import com.minecrafttas.tasmod.playback.tasfile.PlaybackSerialiser;
30+
import com.minecrafttas.tasmod.playback.tasfile.flavor.integrated.BetaFlavor;
3031
import com.minecrafttas.tasmod.savestates.SavestateHandlerClient;
3132
import com.minecrafttas.tasmod.tickratechanger.TickrateChangerClient;
3233
import com.minecrafttas.tasmod.ticksync.TickSyncClient;
@@ -170,6 +171,7 @@ private void registerEventListeners() {
170171
public void onClientInit(Minecraft mc) {
171172
registerKeybindings(mc);
172173
registerPlaybackMetadata(mc);
174+
registerSerialiserFlavors(mc);
173175

174176
createTASDir();
175177
createSavestatesDir();
@@ -288,6 +290,12 @@ private void registerPlaybackMetadata(Minecraft mc) {
288290
TASmodRegistry.PLAYBACK_METADATA.register(startpositionMetadataExtension);
289291
}
290292

293+
public static BetaFlavor betaFlavor = new BetaFlavor();
294+
295+
private void registerSerialiserFlavors(Minecraft mc) {
296+
TASmodRegistry.SERIALISER_FLAVOR.register(betaFlavor);
297+
}
298+
291299
private void loadConfig(Minecraft mc) {
292300
File configDir = new File(mc.mcDataDir, "config");
293301
if(!configDir.exists()) {

src/main/java/com/minecrafttas/tasmod/playback/tasfile/PlaybackSerialiser2.java

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,22 @@
11
package com.minecrafttas.tasmod.playback.tasfile;
22

33
import java.io.File;
4+
import java.util.ArrayList;
5+
import java.util.List;
46

7+
import com.dselent.bigarraylist.BigArrayList;
58
import com.minecrafttas.tasmod.playback.PlaybackControllerClient;
9+
import com.minecrafttas.tasmod.playback.PlaybackControllerClient.TickInputContainer;
10+
import com.minecrafttas.tasmod.playback.metadata.PlaybackMetadata;
11+
import com.minecrafttas.tasmod.playback.tasfile.flavor.PlaybackFlavorBase;
12+
import com.minecrafttas.tasmod.util.TASmodRegistry;
613

714
/**
815
* Serialises and deserialises the {@link PlaybackControllerClient}.<br>
916
* Also contains methods to save and read the {@link PlaybackControllerClient}
1017
* to/from a file
18+
*
19+
* @author Scribble
1120
*/
1221
public class PlaybackSerialiser2 {
1322

@@ -20,20 +29,32 @@ public class PlaybackSerialiser2 {
2029
* @param controller
2130
* @param flavor
2231
*/
23-
public static void saveToFile(File file, PlaybackControllerClient controller, String flavor) {
32+
public static void saveToFile(File file, PlaybackControllerClient controller, String flavorname) {
33+
if (controller == null) {
34+
throw new NullPointerException("Save to file failed. No controller specified");
35+
}
36+
saveToFile(file, controller.getInputs(), flavorname);
37+
}
38+
39+
public static void saveToFile(File file, BigArrayList<TickInputContainer> container, String flavorname) {
2440
if (file == null) {
2541
throw new NullPointerException("Save to file failed. No file specified");
2642
}
27-
28-
if (controller == null) {
29-
throw new NullPointerException("Save to file failed. No controller specified");
43+
44+
if (container == null) {
45+
throw new NullPointerException("Save to file failed. No tickcontainer list specified");
3046
}
3147

32-
if (flavor == null) {
33-
flavor = defaultFlavor;
48+
if (flavorname == null) {
49+
flavorname = defaultFlavor;
3450
}
3551

52+
PlaybackFlavorBase flavor = TASmodRegistry.SERIALISER_FLAVOR.getFlavor(flavorname);
53+
54+
List<PlaybackMetadata> metadataList = TASmodRegistry.PLAYBACK_METADATA.handleOnStore();
3655

56+
List<String> outLines = new ArrayList<>();
57+
outLines.addAll(flavor.serialiseHeader(metadataList));
3758
}
3859

3960
/**
Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import java.io.Serializable;
44
import java.util.ArrayList;
55
import java.util.List;
6+
import java.util.Queue;
7+
import java.util.concurrent.LinkedBlockingQueue;
68

79
import com.dselent.bigarraylist.BigArrayList;
810
import com.minecrafttas.tasmod.playback.PlaybackControllerClient.TickInputContainer;
@@ -11,7 +13,7 @@
1113
import com.minecrafttas.tasmod.virtual.VirtualKeyboard;
1214
import com.minecrafttas.tasmod.virtual.VirtualMouse;
1315

14-
public abstract class PlaybackSerialiserFlavorBase {
16+
public abstract class PlaybackFlavorBase {
1517

1618
/**
1719
* The current tick that is being serialised or deserialised
@@ -62,7 +64,25 @@ protected List<String> serialiseContainer(TickInputContainer container) {
6264
protected abstract List<String> serialiseCameraAngle(VirtualCameraAngle cameraAngle);
6365

6466
protected List<String> mergeInputs(List<String> serialisedKeyboard, List<String> serialisedMouse, List<String> serialisedCameraAngle) {
65-
return null;
67+
List<String> out = new ArrayList<>();
68+
69+
Queue<String> keyboardQueue = new LinkedBlockingQueue<>(serialisedKeyboard);
70+
Queue<String> mouseQueue = new LinkedBlockingQueue<>(serialisedMouse);
71+
Queue<String> cameraAngleQueue = new LinkedBlockingQueue<>(serialisedCameraAngle);
72+
73+
while(!keyboardQueue.isEmpty() && !mouseQueue.isEmpty() && !cameraAngleQueue.isEmpty()) {
74+
String kb = getOrEmpty(keyboardQueue.poll());
75+
String ms = getOrEmpty(mouseQueue.poll());
76+
String ca = getOrEmpty(cameraAngleQueue.poll());
77+
78+
out.add(kb + ms + ca);
79+
}
80+
81+
return out;
82+
}
83+
84+
protected String getOrEmpty(String string) {
85+
return string == null ? "" : string;
6686
}
6787

6888
public BigArrayList<TickInputContainer> deserialise(BigArrayList<String> lines) {
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.minecrafttas.tasmod.playback.tasfile.flavor;
22

33
import java.util.LinkedHashMap;
4-
import java.util.Map;
54
import java.util.Set;
65

6+
import com.minecrafttas.mctcommon.registry.AbstractRegistry;
77
import com.minecrafttas.tasmod.TASmod;
88

99
/**
@@ -12,11 +12,13 @@
1212
*
1313
* @author Scribble
1414
*/
15-
public class PlaybackSerialiserFlavorRegistry {
16-
17-
private static final Map<String, PlaybackSerialiserFlavorBase> SERIALISER_FLAVOR = new LinkedHashMap<>();
15+
public class PlaybackFlavorRegistry extends AbstractRegistry<String, PlaybackFlavorBase>{
16+
17+
public PlaybackFlavorRegistry() {
18+
super(new LinkedHashMap<>());
19+
}
1820

19-
public static void register(PlaybackSerialiserFlavorBase flavor) {
21+
public void register(PlaybackFlavorBase flavor) {
2022
if (flavor == null) {
2123
throw new NullPointerException("Tried to register a serialiser flavor. But flavor is null.");
2224
}
@@ -26,35 +28,30 @@ public static void register(PlaybackSerialiserFlavorBase flavor) {
2628
return;
2729
}
2830

29-
if(SERIALISER_FLAVOR.containsKey(flavor.serialiseFlavorName())) {
31+
if(REGISTRY.containsKey(flavor.serialiseFlavorName())) {
3032
TASmod.LOGGER.warn("Trying to register the serialiser flavor {}, but a flavor with the same name is already registered!", flavor.serialiseFlavorName());
3133
return;
3234
}
3335

34-
SERIALISER_FLAVOR.put(flavor.serialiseFlavorName(), flavor);
36+
REGISTRY.put(flavor.serialiseFlavorName(), flavor);
3537
}
3638

37-
public static void unregister(PlaybackSerialiserFlavorBase flavor) {
39+
public void unregister(PlaybackFlavorBase flavor) {
3840
if (flavor == null) {
3941
throw new NullPointerException("Tried to unregister a flavor with value null");
4042
}
41-
if (SERIALISER_FLAVOR.containsKey(flavor.serialiseFlavorName())) {
42-
SERIALISER_FLAVOR.remove(flavor.serialiseFlavorName());
43+
if (REGISTRY.containsKey(flavor.serialiseFlavorName())) {
44+
REGISTRY.remove(flavor.serialiseFlavorName());
4345
} else {
4446
TASmod.LOGGER.warn("Trying to unregister the flavor {}, but it was not registered!", flavor.getClass().getName());
4547
}
4648
}
4749

48-
private static boolean containsClass(PlaybackSerialiserFlavorBase newExtension) {
49-
for (PlaybackSerialiserFlavorBase extension : SERIALISER_FLAVOR.values()) {
50-
if (extension.getClass().equals(newExtension.getClass())) {
51-
return true;
52-
}
53-
}
54-
return false;
50+
public Set<String> getFlavorNames(){
51+
return REGISTRY.keySet();
5552
}
5653

57-
public static Set<String> getFlavorNames(){
58-
return SERIALISER_FLAVOR.keySet();
54+
public PlaybackFlavorBase getFlavor(String name) {
55+
return REGISTRY.get(name);
5956
}
6057
}

src/main/java/com/minecrafttas/tasmod/playback/tasfile/flavor/integrated/BetaFlavor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
import java.util.List;
44

5-
import com.minecrafttas.tasmod.playback.tasfile.flavor.PlaybackSerialiserFlavorBase;
5+
import com.minecrafttas.tasmod.playback.tasfile.flavor.PlaybackFlavorBase;
66
import com.minecrafttas.tasmod.virtual.VirtualCameraAngle;
77
import com.minecrafttas.tasmod.virtual.VirtualKeyboard;
88
import com.minecrafttas.tasmod.virtual.VirtualMouse;
99

10-
public class BetaFlavor extends PlaybackSerialiserFlavorBase {
10+
public class BetaFlavor extends PlaybackFlavorBase {
1111

1212
@Override
1313
public String flavorName() {

src/main/java/com/minecrafttas/tasmod/util/TASmodRegistry.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.minecrafttas.tasmod.util;
22

33
import com.minecrafttas.tasmod.playback.metadata.PlaybackMetadataRegistry;
4+
import com.minecrafttas.tasmod.playback.tasfile.flavor.PlaybackFlavorBase;
5+
import com.minecrafttas.tasmod.playback.tasfile.flavor.PlaybackFlavorRegistry;
6+
import com.minecrafttas.tasmod.playback.tasfile.flavor.integrated.BetaFlavor;
47

58
public class TASmodRegistry {
69
/**
@@ -10,8 +13,16 @@ public class TASmodRegistry {
1013
* savestate/rerecord count and category.<br>
1114
* <br>
1215
* Any custom class has to implement PlaybackMetadataExtension
13-
*
1416
*/
1517
public static final PlaybackMetadataRegistry PLAYBACK_METADATA = new PlaybackMetadataRegistry();
1618

19+
/**
20+
* Registry for registering custom seialiser flavors that dictate the syntax of the inputs stored in the TASfile.<br>
21+
* <br>
22+
* Either create a new flavor by extending {@link PlaybackFlavorBase}<br>
23+
* or extend an existing flavor (like {@link BetaFlavor}) and overwrite parts of the methods.<br>
24+
* <br>
25+
* The resulting flavor can be registered here and can be found as a saving option with /saveTAS
26+
*/
27+
public static final PlaybackFlavorRegistry SERIALISER_FLAVOR = new PlaybackFlavorRegistry();
1728
}

src/test/java/tasmod/playback/metadata/PlaybackMetadataRegistryTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public void onClear() {
5353

5454
}
5555

56-
File file = new File("src/test/resources/run/MetadataRegistry.txt");
56+
File file = new File("src/test/resources/metadata/MetadataRegistry.txt");
5757

5858
void store() {
5959
List<PlaybackMetadata> list = TASmodRegistry.PLAYBACK_METADATA.handleOnStore();
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package tasmod.playback.tasfile;
22

3-
public class PlaybackSerialiserTest {
3+
import static org.junit.jupiter.api.Assertions.*;
44

5+
public class PlaybackSerialiserTest {
6+
7+
58
}

src/test/java/tasmod/playback/tasfile/PlaybackSerializerFlavorBaseTest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,50 +2,50 @@
22

33
import org.junit.jupiter.api.Test;
44

5-
import com.minecrafttas.tasmod.playback.tasfile.flavor.PlaybackSerialiserFlavorBase;
5+
import com.minecrafttas.tasmod.playback.tasfile.flavor.PlaybackFlavorBase;
66

77
import static org.junit.jupiter.api.Assertions.*;
88

99
public class PlaybackSerializerFlavorBaseTest {
1010

1111
@Test
1212
void testStringPaddingEven() {
13-
String actual = PlaybackSerialiserFlavorBase.createCenteredHeading(null, '#', 52);
13+
String actual = PlaybackFlavorBase.createCenteredHeading(null, '#', 52);
1414
String expected = "####################################################";
1515
assertEquals(expected, actual);
1616
}
1717

1818
@Test
1919
void testStringPaddingOdd() {
20-
String actual = PlaybackSerialiserFlavorBase.createCenteredHeading(null, '#', 51);
20+
String actual = PlaybackFlavorBase.createCenteredHeading(null, '#', 51);
2121
String expected = "###################################################";
2222
assertEquals(expected, actual);
2323
}
2424

2525
@Test
2626
void testCenterHeadingEven() {
27-
String actual = PlaybackSerialiserFlavorBase.createCenteredHeading("TASfile", '#', 52);
27+
String actual = PlaybackFlavorBase.createCenteredHeading("TASfile", '#', 52);
2828
String expected = "###################### TASfile #####################";
2929
assertEquals(expected, actual);
3030
}
3131

3232
@Test
3333
void testCenterHeadingOdd() {
34-
String actual = PlaybackSerialiserFlavorBase.createCenteredHeading("TASfile", '#', 51);
34+
String actual = PlaybackFlavorBase.createCenteredHeading("TASfile", '#', 51);
3535
String expected = "##################### TASfile #####################";
3636
assertEquals(expected, actual);
3737
}
3838

3939
@Test
4040
void testCenterHeadingEvenText() {
41-
String actual = PlaybackSerialiserFlavorBase.createCenteredHeading("TASfiles", '#', 51);
41+
String actual = PlaybackFlavorBase.createCenteredHeading("TASfiles", '#', 51);
4242
String expected = "##################### TASfiles ####################";
4343
assertEquals(expected, actual);
4444
}
4545

4646
@Test
4747
void testCenterHeadingEvenText2() {
48-
String actual = PlaybackSerialiserFlavorBase.createCenteredHeading("Keystrokes", '#', 51);
48+
String actual = PlaybackFlavorBase.createCenteredHeading("Keystrokes", '#', 51);
4949
String expected = "#################### Keystrokes ###################";
5050
assertEquals(expected, actual);
5151
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package tasmod.playback.tasfile.integrated;
2+
3+
import java.io.File;
4+
5+
import org.junit.jupiter.api.Assertions.*;
6+
import org.junit.jupiter.api.BeforeAll;
7+
import org.junit.jupiter.api.Test;
8+
9+
import com.minecrafttas.tasmod.playback.tasfile.PlaybackSerialiser2;
10+
import com.minecrafttas.tasmod.playback.tasfile.flavor.integrated.BetaFlavor;
11+
import com.minecrafttas.tasmod.util.TASmodRegistry;
12+
13+
public class BetaFlavorTest {
14+
15+
private BetaFlavor flavor = new BetaFlavor();
16+
17+
private File file = new File("src/test/resources/betaflavor");
18+
19+
@Test
20+
void testSerialize() {
21+
}
22+
}

0 commit comments

Comments
 (0)