Skip to content

Commit d10d499

Browse files
committed
[Savestates] Fix temporary savestate not saving correctly
1 parent a456c08 commit d10d499

File tree

2 files changed

+32
-11
lines changed

2 files changed

+32
-11
lines changed

src/main/java/com/minecrafttas/tasmod/playback/PlaybackControllerServer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
*/
4343
public class PlaybackControllerServer implements ServerPacketHandler {
4444

45-
private TASstate state;
45+
private TASstate state = NONE;
4646

4747
@Override
4848
public PacketID[] getAcceptedPacketIDs() {

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

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,6 @@ public void saveState(int index, String name, SavestateCallback cb, SavestateFla
130130
// Lock savestating and loadstating
131131
state = SavestateState.SAVING;
132132

133-
// Enable tickrate 0
134-
TASmod.tickratechanger.pauseGame(true);
135-
136-
// Save the world!
137-
server.getPlayerList().saveAllPlayerData();
138-
server.saveAllWorlds(false);
139-
140133
logger.trace("Create new savestate index via indexer");
141134
SavestatePaths paths = indexer.createSavestate(index, name, !SavestateFlags.BLOCK_CHANGE_INDEX.isBlocked(flags));
142135

@@ -149,13 +142,31 @@ public void saveState(int index, String name, SavestateCallback cb, SavestateFla
149142
}
150143

151144
public void saveStateTemp(SavestateCallback cb) {
145+
if (state == SavestateState.SAVING) {
146+
throw new SavestateException("A savestating operation is already being carried out");
147+
}
148+
if (state == SavestateState.LOADING) {
149+
throw new SavestateException("A loadstate operation is being carried out");
150+
}
151+
152+
// Lock savestating and loadstating
153+
state = SavestateState.SAVING;
154+
152155
SavestatePaths paths = indexer.createTempSavestate();
153156
SavestateFlags[] flags = new SavestateFlags[] { SavestateFlags.BLOCK_CLIENT_SAVESTATE, SavestateFlags.BLOCK_PAUSE_TICKRATE };
154157
savestateInner(paths, cb, flags);
155158
paths.getSavestate().save();
156159
}
157160

158161
private void savestateInner(SavestatePaths paths, SavestateCallback cb, SavestateFlags... flags) {
162+
163+
// Enable tickrate 0
164+
TASmod.tickratechanger.pauseGame(true);
165+
166+
// Save the world!
167+
server.getPlayerList().saveAllPlayerData();
168+
server.saveAllWorlds(false);
169+
159170
Path sourceFolder = paths.getSourceFolder();
160171
Path targetFolder = paths.getTargetFolder();
161172
Integer indexToSave = paths.getSavestate().index;
@@ -251,9 +262,6 @@ public void loadState(int index, String name, SavestateCallback cb, SavestateFla
251262
logger.catching(e);
252263
}
253264

254-
// Enable tickrate 0
255-
TASmod.tickratechanger.pauseGame(true);
256-
257265
// Get the current and target directory for copying
258266
logger.trace(LoggerMarkers.Savestate, "Load savestate index via indexer");
259267
SavestatePaths paths = indexer.loadSavestate(index, !SavestateFlags.BLOCK_CHANGE_INDEX.isBlocked(flags));
@@ -268,6 +276,16 @@ public void loadState(int index, String name, SavestateCallback cb, SavestateFla
268276
}
269277

270278
public void loadStateTemp(SavestateCallback cb) {
279+
if (state == SavestateState.SAVING) {
280+
throw new LoadstateException("A savestating operation is already being carried out");
281+
}
282+
if (state == SavestateState.LOADING) {
283+
throw new LoadstateException("A loadstate operation is being carried out");
284+
}
285+
286+
// Lock savestating and loadstating
287+
state = SavestateState.LOADING;
288+
271289
SavestatePaths paths = indexer.loadTempSavestate();
272290
if (paths == null)
273291
return;
@@ -277,6 +295,9 @@ public void loadStateTemp(SavestateCallback cb) {
277295
}
278296

279297
private void loadStateInner(SavestatePaths paths, SavestateCallback cb, SavestateFlags... flags) {
298+
// Enable tickrate 0
299+
TASmod.tickratechanger.pauseGame(true);
300+
280301
String worldname = server.getFolderName();
281302
Path sourcefolder = paths.getSourceFolder();
282303
Path targetfolder = paths.getTargetFolder();

0 commit comments

Comments
 (0)