2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								From: Shane Freeder <theboyetronic@gmail.com>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Date: Sun, 9 Jun 2019 03:53:22 +0100
							 
						 
					
						
							
								
									
										
										
										
											2024-07-15 11:57:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Subject: [PATCH] Incremental chunk and player saving
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								--- a/src/main/java/net/minecraft/server/MinecraftServer.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								@@ -0,0 +0,0 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         try {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								             this.isSaving = true;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-            this.getPlayerList().saveAll();
 
							 
						 
					
						
							
								
									
										
										
										
											2024-01-20 23:13:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            this.getPlayerList().saveAll(); // Paper - Incremental chunk and player saving; diff on change
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								             flag3 = this.saveAllChunks(suppressLogs, flush, force);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         } finally {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								             this.isSaving = false;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								@@ -0,0 +0,0 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-05 20:00:14 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								         --this.ticksUntilAutosave;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-        // CraftBukkit start
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-        if (this.autosavePeriod > 0 && this.ticksUntilAutosave <= 0) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-            this.ticksUntilAutosave = this.autosavePeriod;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-            // CraftBukkit end
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								-            MinecraftServer.LOGGER.debug("Autosave started");
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-            this.profiler.push("save");
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-            this.saveEverything(true, false, false);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-            this.profiler.pop();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-            MinecraftServer.LOGGER.debug("Autosave finished");
 
							 
						 
					
						
							
								
									
										
										
										
											2024-01-20 23:13:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        // Paper start - Incremental chunk and player saving
 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-09 01:51:45 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        int playerSaveInterval = io.papermc.paper.configuration.GlobalConfiguration.get().playerAutoSave.rate;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+        if (playerSaveInterval < 0) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            playerSaveInterval = autosavePeriod;
 
							 
						 
					
						
							
								
									
										
										
										
											2024-07-15 11:57:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+        this.profiler.push("save");
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-28 16:02:52 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        final boolean fullSave = autosavePeriod > 0 && this.tickCount % autosavePeriod == 0;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+        try {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            this.isSaving = true;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            if (playerSaveInterval > 0) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                this.playerList.saveAll(playerSaveInterval);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            for (ServerLevel level : this.getAllLevels()) {
 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-09 01:51:45 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                if (level.paperConfig().chunks.autoSaveInterval.value() > 0) {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-28 16:02:52 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                    level.saveIncrementally(fullSave);
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+                }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        } finally {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            this.isSaving = false;
 
							 
						 
					
						
							
								
									
										
										
										
											2024-07-15 11:57:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								         }
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+        this.profiler.pop();
 
							 
						 
					
						
							
								
									
										
										
										
											2024-01-20 23:13:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        // Paper end - Incremental chunk and player saving
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								         // Paper start - move executeAll() into full server tick timing
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         try (co.aikar.timings.Timing ignored = MinecraftTimings.processTasksTimer.startTiming()) {
							 
						 
					
						
							
								
									
										
										
										
											2024-07-17 10:24:53 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								             this.runAllTasks();
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
 
							 
						 
					
						
							
								
									
										
										
										
											2024-06-15 14:12:22 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								@@ -0,0 +0,0 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								         return !this.server.isUnderSpawnProtection(this, pos, player) && this.getWorldBorder().isWithinBounds(pos);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
									
										
										
										
											2024-01-20 23:13:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    // Paper start - Incremental chunk and player saving
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+    public void saveIncrementally(boolean doFull) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        ServerChunkCache chunkproviderserver = this.getChunkSource();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        if (doFull) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld()));
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        try (co.aikar.timings.Timing ignored = this.timings.worldSave.startTiming()) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            if (doFull) {
 
							 
						 
					
						
							
								
									
										
										
										
											2024-07-15 11:57:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                this.saveLevelData(true);
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+            }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2024-07-15 11:57:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            // chunk autosave is already called by the ChunkSystem during unload processing (ChunkMap#processUnloads)
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            // Copied from save()
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            // CraftBukkit start - moved from MinecraftServer.saveChunks
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            if (doFull) { // Paper
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                ServerLevel worldserver1 = this;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                this.serverLevelData.setWorldBorder(worldserver1.getWorldBorder().createSettings());
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-25 22:25:02 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                this.serverLevelData.setCustomBossEvents(this.server.getCustomBossEvents().save(this.registryAccess()));
 
							 
						 
					
						
							
								
									
										
										
										
											2022-12-07 22:05:01 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                this.convertable.saveDataTag(this.server.registryAccess(), this.serverLevelData, this.server.getPlayerList().getSingleplayerData());
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+            }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            // CraftBukkit end
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
									
										
										
										
											2024-01-20 23:13:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    // Paper end - Incremental chunk and player saving
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     public void save(@Nullable ProgressListener progressListener, boolean flush, boolean savingDisabled) {
							 
						 
					
						
							
								
									
										
										
										
											2024-06-15 14:12:22 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								         // Paper start - add close param
							 
						 
					
						
							
								
									
										
										
										
											2024-01-24 22:13:08 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								         this.save(progressListener, flush, savingDisabled, false);
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-28 22:43:03 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								@@ -0,0 +0,0 @@ import org.bukkit.inventory.MainHand;
 
							 
						 
					
						
							
								
									
										
										
										
											2024-06-15 14:12:22 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 public class ServerPlayer extends net.minecraft.world.entity.player.Player implements ca.spottedleaf.moonrise.patches.chunk_system.player.ChunkSystemServerPlayer { // Paper - rewrite chunk system
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-28 22:43:03 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     private static final Logger LOGGER = LogUtils.getLogger();
							 
						 
					
						
							
								
									
										
										
										
											2024-01-20 23:13:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    public long lastSave = MinecraftServer.currentTick; // Paper - Incremental chunk and player saving
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								     private static final int NEUTRAL_MOB_DEATH_NOTIFICATION_RADII_XZ = 32;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     private static final int NEUTRAL_MOB_DEATH_NOTIFICATION_RADII_Y = 10;
							 
						 
					
						
							
								
									
										
										
										
											2023-12-05 20:00:14 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     private static final int FLY_STAT_RECORDING_SPEED = 25;
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								--- a/src/main/java/net/minecraft/server/players/PlayerList.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								@@ -0,0 +0,0 @@ public abstract class PlayerList {
 
							 
						 
					
						
							
								
									
										
										
										
											2022-12-19 11:46:55 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								     protected void save(ServerPlayer player) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         if (!player.getBukkitEntity().isPersistent()) return; // CraftBukkit
							 
						 
					
						
							
								
									
										
										
										
											2024-01-20 23:13:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        player.lastSave = MinecraftServer.currentTick; // Paper - Incremental chunk and player saving
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								         this.playerIo.save(player);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         ServerStatsCounter serverstatisticmanager = (ServerStatsCounter) player.getStats(); // CraftBukkit
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								@@ -0,0 +0,0 @@ public abstract class PlayerList {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     public void saveAll() {
							 
						 
					
						
							
								
									
										
										
										
											2024-01-20 23:13:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        // Paper start - Incremental chunk and player saving
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+        this.saveAll(-1);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    public void saveAll(int interval) {
 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-24 12:43:46 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								         io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								         MinecraftTimings.savePlayers.startTiming(); // Paper
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        int numSaved = 0;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        long now = MinecraftServer.currentTick;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         for (int i = 0; i < this.players.size(); ++i) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-            this.save(this.players.get(i));
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            ServerPlayer entityplayer = this.players.get(i);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            if (interval == -1 || now - entityplayer.lastSave >= interval) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                this.save(entityplayer);
 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-27 20:34:33 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                if (interval != -1 && ++numSaved >= io.papermc.paper.configuration.GlobalConfiguration.get().playerAutoSave.maxPerTick()) { break; }
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+            }
 
							 
						 
					
						
							
								
									
										
										
										
											2024-01-20 23:13:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            // Paper end - Incremental chunk and player saving
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 17:25:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								         }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         MinecraftTimings.savePlayers.stopTiming(); // Paper
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         return null; }); // Paper - ensure main