Skip to content

Commit c47b3bd

Browse files
committed
[Savestates] Split savestate/loadstate methods and add "inner" methods
1 parent 87016dd commit c47b3bd

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

src/main/java/com/minecrafttas/tasmod/savestates/SavestateHandlerServer.java

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.List;
1212
import java.util.stream.Collectors;
1313

14+
import org.apache.commons.lang3.ArrayUtils;
1415
import org.apache.logging.log4j.Logger;
1516

1617
import com.minecrafttas.mctcommon.events.EventListenerRegistry;
@@ -135,11 +136,20 @@ public void saveState(int index, String name, SavestateCallback cb, SavestateFla
135136

136137
logger.trace("Create new savestate index via indexer");
137138
SavestatePaths paths = indexer.createSavestate(index, name, !SavestateFlags.BLOCK_CHANGE_INDEX.isBlocked(flags));
139+
140+
if (paths.getSavestate().index == 0) {
141+
if (!ArrayUtils.contains(flags, SavestateFlags.BLOCK_CLIENT_SAVESTATE))
142+
flags = ArrayUtils.add(flags, SavestateFlags.BLOCK_CLIENT_SAVESTATE);
143+
}
144+
145+
savestateInner(paths, cb, flags);
146+
}
147+
148+
private void savestateInner(SavestatePaths paths, SavestateCallback cb, SavestateFlags... flags) {
138149
Path sourceFolder = paths.getSourceFolder();
139150
Path targetFolder = paths.getTargetFolder();
140151
int indexToSave = paths.getSavestate().index;
141152
logger.debug("Source: {}, Target: {}", sourceFolder, targetFolder);
142-
143153
EventListenerRegistry.fireEvent(EventSavestate.EventServerSavestate.class, server, paths);
144154

145155
if (Files.exists(targetFolder)) {
@@ -151,7 +161,7 @@ public void saveState(int index, String name, SavestateCallback cb, SavestateFla
151161
* Prevents creating an InputSavestate when saving at index 0 (Index 0 is the
152162
* savestate when starting a recording)
153163
*/
154-
if (index != 0) {
164+
if (!SavestateFlags.BLOCK_CLIENT_SAVESTATE.isBlocked(flags)) {
155165
/*
156166
* Send the name of the world to all players. This will make a savestate of the
157167
* recording on the client with that name
@@ -235,10 +245,18 @@ public void loadState(int index, String name, SavestateCallback cb, SavestateFla
235245
SavestatePaths paths = indexer.loadSavestate(index, !SavestateFlags.BLOCK_CHANGE_INDEX.isBlocked(flags));
236246
logger.debug(LoggerMarkers.Savestate, "Source: {}, Target: {}", paths.getSourceFolder(), paths.getTargetFolder());
237247

248+
if (paths.getSavestate().index == 0) {
249+
if (!ArrayUtils.contains(flags, SavestateFlags.BLOCK_CLIENT_SAVESTATE))
250+
flags = ArrayUtils.add(flags, SavestateFlags.BLOCK_CLIENT_SAVESTATE);
251+
}
252+
253+
loadStateInner(paths, cb, flags);
254+
}
255+
256+
private void loadStateInner(SavestatePaths paths, SavestateCallback cb, SavestateFlags... flags) {
238257
String worldname = server.getFolderName();
239258
Path sourcefolder = paths.getSourceFolder();
240259
Path targetfolder = paths.getTargetFolder();
241-
int indexToLoad = paths.getSavestate().index;
242260

243261
EventListenerRegistry.fireEvent(EventSavestate.EventServerLoadstate.class, server, paths);
244262

@@ -247,7 +265,7 @@ public void loadState(int index, String name, SavestateCallback cb, SavestateFla
247265
* savestate when starting a recording. Not doing this will load an empty
248266
* InputSavestate)
249267
*/
250-
if (indexToLoad != 0) {
268+
if (!SavestateFlags.BLOCK_CLIENT_SAVESTATE.isBlocked(flags)) {
251269
try {
252270
// loadstate inputs client
253271
TASmod.server.sendToAll(new TASmodBufferBuilder(TASmodPackets.SAVESTATE_LOAD).writeString(paths.getSavestate().folder.toString()));
@@ -576,6 +594,10 @@ public static enum SavestateFlags {
576594
* Stops updating the current index when savestating/loadstating
577595
*/
578596
BLOCK_CHANGE_INDEX,
597+
/**
598+
* Stops the creation/loading of a client savestate
599+
*/
600+
BLOCK_CLIENT_SAVESTATE,
579601
/**
580602
* Stops setting the tickrate to 0 after a savestate/loadstate
581603
*/

src/main/java/com/minecrafttas/tasmod/savestates/SavestateIndexer.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.stream.Stream;
2121

2222
import org.apache.logging.log4j.Logger;
23+
import org.jetbrains.annotations.Nullable;
2324

2425
import com.minecrafttas.mctcommon.file.AbstractDataFile;
2526
import com.minecrafttas.tasmod.TASmod;
@@ -473,8 +474,11 @@ public Savestate getCurrentSavestate() {
473474
*/
474475
public class Savestate extends AbstractDataFile {
475476

477+
@Nullable
476478
protected Integer index;
479+
@Nullable
477480
protected String name;
481+
@Nullable
478482
protected Date date;
479483
protected Path folder;
480484
protected Logger logger = TASmod.LOGGER;

0 commit comments

Comments
 (0)