From 1faaa340e5d02ab0afdc5c9482ce7e5a5e74c1f7 Mon Sep 17 00:00:00 2001 From: md_5 Date: Thu, 30 Jun 2016 15:13:32 +1000 Subject: [PATCH] SPIGOT-1283: Copy data directory on world import in case it's required --- nms-patches/MinecraftServer.patch | 65 ++++++++++++++++--------------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/nms-patches/MinecraftServer.patch b/nms-patches/MinecraftServer.patch index f0a5cfb3a8..f34430830e 100644 --- a/nms-patches/MinecraftServer.patch +++ b/nms-patches/MinecraftServer.patch @@ -109,7 +109,7 @@ this.i = new long[this.worldServer.length][100]; IDataManager idatamanager = this.convertable.a(s, true); -@@ -167,36 +221,107 @@ +@@ -167,36 +221,108 @@ worlddata.a(s1); worldsettings = new WorldSettings(worlddata); } @@ -187,6 +187,7 @@ + // Migrate world data too. + try { + com.google.common.io.Files.copy(new File(new File(s), "level.dat"), new File(new File(name), "level.dat")); ++ org.apache.commons.io.FileUtils.copyDirectory(new File(new File(s), "data"), new File(new File(name), "data")); + } catch (IOException exception) { + MinecraftServer.LOGGER.warn("Unable to migrate world data."); + } @@ -228,7 +229,7 @@ this.v.setPlayerFileData(this.worldServer); this.a(this.getDifficulty()); this.l(); -@@ -212,25 +337,38 @@ +@@ -212,25 +338,38 @@ this.b("menu.generatingTerrain"); boolean flag4 = false; @@ -282,7 +283,7 @@ this.t(); } -@@ -266,14 +404,17 @@ +@@ -266,14 +405,17 @@ protected void t() { this.f = null; this.g = 0; @@ -302,7 +303,7 @@ if (worldserver != null) { if (!flag) { -@@ -282,6 +423,7 @@ +@@ -282,6 +424,7 @@ try { worldserver.save(true, (IProgressUpdate) null); @@ -310,7 +311,7 @@ } catch (ExceptionWorldConflict exceptionworldconflict) { MinecraftServer.LOGGER.warn(exceptionworldconflict.getMessage()); } -@@ -290,8 +432,24 @@ +@@ -290,8 +433,24 @@ } @@ -336,7 +337,7 @@ if (this.am() != null) { this.am().b(); } -@@ -300,6 +458,7 @@ +@@ -300,6 +459,7 @@ MinecraftServer.LOGGER.info("Saving players"); this.v.savePlayers(); this.v.u(); @@ -344,7 +345,7 @@ } if (this.worldServer != null) { -@@ -321,12 +480,14 @@ +@@ -321,12 +481,14 @@ aworldserver = this.worldServer; i = aworldserver.length; @@ -359,7 +360,7 @@ } if (this.m.d()) { -@@ -366,6 +527,7 @@ +@@ -366,6 +528,7 @@ long k = j - this.aa; if (k > 2000L && this.aa - this.Q >= 15000L) { @@ -367,7 +368,7 @@ MinecraftServer.LOGGER.warn("Can\'t keep up! Did the system time change, or is the server overloaded? Running {}ms behind, skipping {} tick(s)", new Object[] { Long.valueOf(k), Long.valueOf(k / 50L)}); k = 2000L; this.Q = this.aa; -@@ -378,11 +540,12 @@ +@@ -378,11 +541,12 @@ i += k; this.aa = j; @@ -381,7 +382,7 @@ i -= 50L; this.C(); } -@@ -420,6 +583,12 @@ +@@ -420,6 +584,12 @@ } catch (Throwable throwable1) { MinecraftServer.LOGGER.error("Exception stopping the server", throwable1); } finally { @@ -394,7 +395,7 @@ this.B(); } -@@ -463,7 +632,7 @@ +@@ -463,7 +633,7 @@ public void B() {} @@ -403,7 +404,7 @@ long i = System.nanoTime(); ++this.ticks; -@@ -489,7 +658,7 @@ +@@ -489,7 +659,7 @@ this.q.b().a(agameprofile); } @@ -412,7 +413,7 @@ this.methodProfiler.a("save"); this.v.savePlayers(); this.saveChunks(true); -@@ -524,20 +693,40 @@ +@@ -524,20 +694,40 @@ this.methodProfiler.c("levels"); @@ -456,7 +457,7 @@ this.methodProfiler.a("tick"); -@@ -564,9 +753,9 @@ +@@ -564,9 +754,9 @@ worldserver.getTracker().updatePlayers(); this.methodProfiler.b(); this.methodProfiler.b(); @@ -468,7 +469,7 @@ } this.methodProfiler.c("connection"); -@@ -590,10 +779,11 @@ +@@ -590,10 +780,11 @@ this.o.add(itickable); } @@ -481,7 +482,7 @@ boolean flag = true; String s = null; String s1 = "."; -@@ -638,13 +828,16 @@ +@@ -638,13 +829,16 @@ ++j; } } @@ -499,7 +500,7 @@ if (s != null) { dedicatedserver.i(s); } -@@ -675,6 +868,25 @@ +@@ -675,6 +869,25 @@ dedicatedserver.stop(); } }); @@ -525,7 +526,7 @@ } catch (Exception exception) { MinecraftServer.LOGGER.fatal("Failed to start the minecraft server", exception); } -@@ -682,8 +894,10 @@ +@@ -682,8 +895,10 @@ } public void F() { @@ -536,7 +537,7 @@ } public File d(String s) { -@@ -699,7 +913,14 @@ +@@ -699,7 +914,14 @@ } public WorldServer getWorldServer(int i) { @@ -552,7 +553,7 @@ } public String getVersion() { -@@ -723,7 +944,7 @@ +@@ -723,7 +945,7 @@ } public boolean isDebugging() { @@ -561,7 +562,7 @@ } public void g(String s) { -@@ -738,7 +959,7 @@ +@@ -738,7 +960,7 @@ } public String getServerModName() { @@ -570,7 +571,7 @@ } public CrashReport b(CrashReport crashreport) { -@@ -767,6 +988,7 @@ +@@ -767,6 +989,7 @@ } public List tabCompleteCommand(ICommandListener icommandlistener, String s, @Nullable BlockPosition blockposition, boolean flag) { @@ -578,7 +579,7 @@ ArrayList arraylist = Lists.newArrayList(); boolean flag1 = s.startsWith("/"); -@@ -809,10 +1031,13 @@ +@@ -809,10 +1032,13 @@ return arraylist; } @@ -593,7 +594,7 @@ } public String getName() { -@@ -868,11 +1093,13 @@ +@@ -868,11 +1094,13 @@ } public void a(EnumDifficulty enumdifficulty) { @@ -610,7 +611,7 @@ if (worldserver != null) { if (worldserver.getWorldData().isHardcore()) { -@@ -939,13 +1166,11 @@ +@@ -939,13 +1167,11 @@ int i = 0; if (this.worldServer != null) { @@ -628,7 +629,7 @@ WorldData worlddata = worldserver.getWorldData(); mojangstatisticsgenerator.a("world[" + i + "][dimension]", Integer.valueOf(worldserver.worldProvider.getDimensionManager().getDimensionID())); -@@ -978,7 +1203,7 @@ +@@ -978,7 +1204,7 @@ public abstract boolean aa(); public boolean getOnlineMode() { @@ -637,7 +638,7 @@ } public void setOnlineMode(boolean flag) { -@@ -1050,13 +1275,9 @@ +@@ -1050,13 +1276,9 @@ } public void setGamemode(EnumGamemode enumgamemode) { @@ -654,7 +655,7 @@ } } -@@ -1088,7 +1309,7 @@ +@@ -1088,7 +1310,7 @@ } public World getWorld() { @@ -663,7 +664,7 @@ } public Entity f() { -@@ -1160,8 +1381,10 @@ +@@ -1160,8 +1382,10 @@ WorldServer[] aworldserver = this.worldServer; int i = aworldserver.length; @@ -676,7 +677,7 @@ if (worldserver != null) { Entity entity = worldserver.getEntity(uuid); -@@ -1176,7 +1399,7 @@ +@@ -1176,7 +1400,7 @@ } public boolean getSendCommandFeedback() { @@ -685,7 +686,7 @@ } public void a(CommandObjectiveExecutor.EnumCommandResult commandobjectiveexecutor_enumcommandresult, int i) {} -@@ -1191,7 +1414,7 @@ +@@ -1191,7 +1415,7 @@ public ListenableFuture a(Callable callable) { Validate.notNull(callable); @@ -694,7 +695,7 @@ ListenableFutureTask listenablefuturetask = ListenableFutureTask.create(callable); Queue queue = this.j; -@@ -1236,4 +1459,11 @@ +@@ -1236,4 +1460,11 @@ public int a(@Nullable WorldServer worldserver) { return worldserver != null ? worldserver.getGameRules().c("spawnRadius") : 10; }