From d427ba3152a1b5dd8565e1a632bc8dafcc90d0f2 Mon Sep 17 00:00:00 2001 From: boy0001 Date: Mon, 24 Aug 2015 04:09:57 +1000 Subject: [PATCH] Fix auto-trim --- .../bukkit/listeners/ChunkListener.java | 36 +++++++++++------- target/PlotSquared-Bukkit.jar | Bin 1314904 -> 1314899 bytes target/PlotSquared-Sponge.jar | Bin 1079533 -> 1079533 bytes 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/plotsquared/bukkit/listeners/ChunkListener.java b/src/main/java/com/plotsquared/bukkit/listeners/ChunkListener.java index bee07e4e0..56ee577d9 100644 --- a/src/main/java/com/plotsquared/bukkit/listeners/ChunkListener.java +++ b/src/main/java/com/plotsquared/bukkit/listeners/ChunkListener.java @@ -110,7 +110,7 @@ public class ChunkListener implements Listener { String name = world.getName(); boolean autosave = world.isAutoSave(); boolean plotworld = PS.get().isPlotWorld(name); - if (autosave && plotworld) { + if (!Settings.CHUNK_PROCESSOR_TRIM_ON_SAVE && autosave && plotworld) { world.setAutoSave(false); } HashMap map = players.get(name); @@ -121,12 +121,7 @@ public class ChunkListener implements Listener { int x = chunk.getX(); int z = chunk.getZ(); if (!map.containsKey(new ChunkLoc(x, z))) { - Plot plot = MainUtil.getPlot(new Location(name, x << 4, 1, z << 4)); - if (Settings.CHUNK_PROCESSOR_TRIM_ON_SAVE && plot == null || plot.owner == null && plotworld) { - unloadChunk(chunk); - CraftChunk c = null; - } - else { + if (!Settings.CHUNK_PROCESSOR_TRIM_ON_SAVE || !plotworld || !unloadChunk(name, chunk)) { chunk.unload(true, false); } } @@ -139,10 +134,28 @@ public class ChunkListener implements Listener { }, 300); } - public void unloadChunk(Chunk chunk) { + public boolean unloadChunk(String world, Chunk chunk) { + int X = chunk.getX(); + int Z = chunk.getZ(); + int x = X << 4; + int z = Z << 4; + int x2 = x + 15; + int z2 = z + 15; + Plot plot; + plot = MainUtil.getPlot(new Location(world, x, 1, z)); + if (plot != null && plot.owner != null) return false; + plot = MainUtil.getPlot(new Location(world, x2, 1, z2)); + if (plot != null && plot.owner != null) return false; + plot = MainUtil.getPlot(new Location(world, x2, 1, z)); + if (plot != null && plot.owner != null) return false; + plot = MainUtil.getPlot(new Location(world, x, 1, z2)); + if (plot != null && plot.owner != null) return false; + plot = MainUtil.getPlot(new Location(world, x + 7, 1, z + 7)); + if (plot != null && plot.owner != null) return false; Object c = methodGetHandleChunk.of(chunk).call(); mustSave.of(c).set(false); chunk.unload(false, false); + return true; } @EventHandler @@ -151,11 +164,7 @@ public class ChunkListener implements Listener { Chunk chunk = event.getChunk(); String world = chunk.getWorld().getName(); if (PS.get().isPlotWorld(world)) { - int x = chunk.getX(); - int z = chunk.getZ(); - Plot plot = MainUtil.getPlot(new Location(world, x << 4, 1, z << 4)); - if (plot == null || plot.owner == null && PS.get().isPlotWorld(world)) { - unloadChunk(chunk); + if (unloadChunk(world, chunk)) { return; } } @@ -164,6 +173,7 @@ public class ChunkListener implements Listener { event.setCancelled(true); } } + @EventHandler public void onChunkLoad(ChunkLoadEvent event) { diff --git a/target/PlotSquared-Bukkit.jar b/target/PlotSquared-Bukkit.jar index 0775d0f3bb505b05a56f0013d890c1df36b5bad2..ee9fddef2993991fe95cdaae4cad88f797f2153c 100644 GIT binary patch delta 10105 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 delta 10085 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