From 2a40e42c5a2306b047bc3b6d913aac81f51210a2 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 12 Jan 2014 21:07:18 +1100 Subject: [PATCH] Replace AutoSave Mechanism The problem here is that MinecraftServer.save(..), will attempt to sleep whilst all pending chunks are written to disk, however due to various and complicated bugs, it will wait for an incorrect amount of chunks, which may cause it to sleep for an overly long amount of time. Instead we will mimic the save-all command in its behaviour, which is both safe and performant. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index b686a49..5c7a9c6 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -625,7 +625,16 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs SpigotTimings.worldSaveTimer.startTiming(); // Spigot this.methodProfiler.a("save"); this.v.savePlayers(); - this.saveChunks(true); + // Spigot Start + // We replace this with saving each individual world as this.saveChunks(...) is broken, + // and causes the main thread to sleep for random amounts of time depending on chunk activity + server.playerCommandState = true; + for (World world : worlds) { + world.getWorld().save(); + } + server.playerCommandState = false; + // this.saveChunks(true); + // Spigot End this.methodProfiler.b(); SpigotTimings.worldSaveTimer.stopTiming(); // Spigot } -- 2.1.0