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