From 3a3fcca8b0d1ff2dc485e44558ab9db927a99230 Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Sun, 14 Aug 2016 10:26:51 +1000 Subject: [PATCH] Various Remove numerical versioning Fix queue relighting concurrency Fixed fixlighting async error Fixes for 1.7.10 + thermos Fixed non disk schematic loading --- build.gradle | 16 +++-- .../com/boydti/fawe/bukkit/FaweBukkit.java | 31 +-------- .../fawe/bukkit/v1_10/BukkitQueue_1_10.java | 1 + .../fawe/bukkit/v1_7/BukkitQueue17.java | 1 + .../fawe/bukkit/v1_8/BukkitQueue18R3.java | 1 + .../fawe/bukkit/v1_9/BukkitQueue_1_9_R1.java | 1 + core/build.gradle | 10 +++ core/src/main/java/com/boydti/fawe/Fawe.java | 40 ++++++++---- .../java/com/boydti/fawe/FaweVersion.java | 15 +++++ core/src/main/java/com/boydti/fawe/IFawe.java | 2 - .../java/com/boydti/fawe/config/Settings.java | 10 ++- .../boydti/fawe/example/MappedFaweQueue.java | 5 +- .../fawe/example/NMSMappedFaweQueue.java | 7 +- .../com/boydti/fawe/example/NMSRelighter.java | 18 +++++ .../clipboard/CPUOptimizedClipboard.java | 6 ++ .../clipboard/MemoryOptimizedClipboard.java | 12 ++++ .../java/com/boydti/fawe/util/MainUtil.java | 15 +++++ .../com/sk89q/worldedit/LocalSession.java | 7 +- core/src/main/resources/fawe.properties | 2 + .../java/com/boydti/fawe/forge/FaweForge.java | 6 -- .../boydti/fawe/forge/v0/ForgeQueue_All.java | 1 + .../java/com/boydti/fawe/forge/FaweForge.java | 6 -- .../boydti/fawe/forge/v0/ForgeChunk_All.java | 65 +------------------ .../boydti/fawe/forge/v0/ForgeQueue_All.java | 18 ++--- .../java/com/boydti/fawe/forge/FaweForge.java | 6 -- .../boydti/fawe/forge/v0/ForgeQueue_All.java | 1 + .../java/com/boydti/fawe/forge/FaweForge.java | 6 -- .../boydti/fawe/forge/v0/ForgeQueue_All.java | 1 + gradle.properties | 2 +- 29 files changed, 154 insertions(+), 158 deletions(-) create mode 100644 core/src/main/java/com/boydti/fawe/FaweVersion.java create mode 100644 core/src/main/resources/fawe.properties diff --git a/build.gradle b/build.gradle index 81873824..cca59d18 100644 --- a/build.gradle +++ b/build.gradle @@ -15,17 +15,23 @@ apply plugin: 'java' clean { delete "target" } group = 'com.boydti.fawe' + def revision = "" +def buildNumber = "" +final def date = new Date().format("yy.MM.dd") ext { git = org.ajoberstar.grgit.Grgit.open(file(".git")) revision = "-${git.head().abbreviatedId}" + parents = git.head().parentIds; + index = -44; // Offset to mach CI + for (;parents != null && !parents.isEmpty();index++) { + commit = git.getResolve().toCommit(parents.get(0)); + parents = commit.getParentIds(); + } + buildNumber = "-${index}" } -if ( project.hasProperty("lzNoGitHash") ) { // gradle build -PlzNoGitHash - revision = ""; -} - -version = "3.5.1${revision}" +version = date + revision + buildNumber description = """FastAsyncWorldEdit""" subprojects { diff --git a/bukkit0/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java b/bukkit0/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java index fcc18b7e..b9d6dd27 100644 --- a/bukkit0/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java +++ b/bukkit0/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java @@ -1,7 +1,6 @@ package com.boydti.fawe.bukkit; import com.boydti.fawe.Fawe; -import com.boydti.fawe.FaweAPI; import com.boydti.fawe.IFawe; import com.boydti.fawe.bukkit.regions.FactionsFeature; import com.boydti.fawe.bukkit.regions.FactionsOneFeature; @@ -22,7 +21,6 @@ import com.boydti.fawe.object.FaweQueue; import com.boydti.fawe.regions.FaweMaskManager; import com.boydti.fawe.util.MainUtil; import com.boydti.fawe.util.ReflectionUtils; -import com.boydti.fawe.util.StringMan; import com.boydti.fawe.util.TaskManager; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.world.World; @@ -63,7 +61,7 @@ public class FaweBukkit implements IFawe, Listener { this.plugin = plugin; try { Fawe.set(this); - if (Bukkit.getVersion().contains("git-Spigot") && FaweAPI.checkVersion(this.getVersion(), 1, 7, 10)) { + if (Bukkit.getVersion().contains("git-Spigot")) { debug("====== USE PAPER SPIGOT ======"); debug("DOWNLOAD: https://ci.destroystokyo.com/job/PaperSpigot/"); debug("GUIDE: https://www.spigotmc.org/threads/21726/"); @@ -151,27 +149,6 @@ public class FaweBukkit implements IFawe, Listener { private int[] version; - @Override - public int[] getVersion() { - if (this.version == null) { - try { - this.version = new int[3]; - final String[] split = plugin.getDescription().getVersion().split("-")[0].split("\\."); - this.version[0] = Integer.parseInt(split[0]); - this.version[1] = Integer.parseInt(split[1]); - if (split.length == 3) { - this.version[2] = Integer.parseInt(split[2]); - } - } catch (final NumberFormatException e) { - MainUtil.handleError(e); - Fawe.debug(StringMan.getString(Bukkit.getBukkitVersion())); - Fawe.debug(StringMan.getString(Bukkit.getBukkitVersion().split("-")[0].split("\\."))); - return new int[] { Integer.MAX_VALUE, 0, 0 }; - } - } - return this.version; - } - private boolean hasNMS = true; /** @@ -195,9 +172,7 @@ public class FaweBukkit implements IFawe, Listener { } catch (Throwable ignore) {} try { return plugin.getQueue(world); - } catch (Throwable ignore) { -// ignore.printStackTrace(); - } + } catch (Throwable ignore) {} // Disable incompatible settings Settings.QUEUE.PARALLEL_THREADS = 1; // BukkitAPI placer is too slow to parallel thread at the chunk level Settings.HISTORY.COMBINE_STAGES = false; // Performing a chunk copy (if possible) wouldn't be faster using the BukkitAPI @@ -323,7 +298,7 @@ public class FaweBukkit implements IFawe, Listener { @Override public String getPlatform() { - return "bukkit"; + return Bukkit.getVersion(); } @Override diff --git a/bukkit110/src/main/java/com/boydti/fawe/bukkit/v1_10/BukkitQueue_1_10.java b/bukkit110/src/main/java/com/boydti/fawe/bukkit/v1_10/BukkitQueue_1_10.java index bb171df0..de0f460d 100644 --- a/bukkit110/src/main/java/com/boydti/fawe/bukkit/v1_10/BukkitQueue_1_10.java +++ b/bukkit110/src/main/java/com/boydti/fawe/bukkit/v1_10/BukkitQueue_1_10.java @@ -250,6 +250,7 @@ public class BukkitQueue_1_10 extends BukkitQueue_0 extends FaweQueue { @Override public int size() { - if (chunks.size() == 0 && SetQueue.IMP.getStage(this) != SetQueue.QueueStage.INACTIVE) { + int size = chunks.size(); + if (size == 0 && SetQueue.IMP.getStage(this) != SetQueue.QueueStage.INACTIVE) { runTasks(); } - return chunks.size(); + return size; } private ConcurrentLinkedDeque toUpdate = new ConcurrentLinkedDeque<>(); diff --git a/core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java b/core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java index 040c54cf..fbd18648 100644 --- a/core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java +++ b/core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java @@ -55,12 +55,7 @@ public abstract class NMSMappedFaweQueue ex public void runTasks() { super.runTasks(); if (relighter != null) { - boolean sky = hasSky(); - if (sky) { - relighter.fixSkyLighting(); - } - relighter.fixBlockLighting(); - relighter.sendChunks(); + relighter.fixLightingSafe(hasSky()); } } diff --git a/core/src/main/java/com/boydti/fawe/example/NMSRelighter.java b/core/src/main/java/com/boydti/fawe/example/NMSRelighter.java index 3e1e38c5..e9af0219 100644 --- a/core/src/main/java/com/boydti/fawe/example/NMSRelighter.java +++ b/core/src/main/java/com/boydti/fawe/example/NMSRelighter.java @@ -15,6 +15,7 @@ public class NMSRelighter { private final NMSMappedFaweQueue queue; private final HashMap skyToRelight; private final HashMap blocksToRelight; + private volatile boolean relighting = false; private static final int DISPATCH_SIZE = 64; @@ -68,6 +69,23 @@ public class NMSRelighter { } } + public void fixLightingSafe(boolean sky) { + if (relighting) { + return; + } + relighting = true; + try { + if (sky) { + fixSkyLighting(); + } + fixBlockLighting(); + sendChunks(); + } catch (Throwable e) { + e.printStackTrace(); + } + relighting = false; + } + public void fixBlockLighting() { while (!blocksToRelight.isEmpty()) { RelightBlockEntry current = blocksToRelight.entrySet().iterator().next().getValue(); diff --git a/core/src/main/java/com/boydti/fawe/object/clipboard/CPUOptimizedClipboard.java b/core/src/main/java/com/boydti/fawe/object/clipboard/CPUOptimizedClipboard.java index ca5d6517..b57d1b35 100644 --- a/core/src/main/java/com/boydti/fawe/object/clipboard/CPUOptimizedClipboard.java +++ b/core/src/main/java/com/boydti/fawe/object/clipboard/CPUOptimizedClipboard.java @@ -54,6 +54,12 @@ public class CPUOptimizedClipboard extends FaweClipboard { height = dimensions.getBlockY(); length = dimensions.getBlockZ(); area = width * length; + int newVolume = area * height; + if (newVolume != volume) { + volume = newVolume; + ids = new byte[volume]; + datas = new byte[volume]; + } } @Override diff --git a/core/src/main/java/com/boydti/fawe/object/clipboard/MemoryOptimizedClipboard.java b/core/src/main/java/com/boydti/fawe/object/clipboard/MemoryOptimizedClipboard.java index 1a18ad6b..1d7982a2 100644 --- a/core/src/main/java/com/boydti/fawe/object/clipboard/MemoryOptimizedClipboard.java +++ b/core/src/main/java/com/boydti/fawe/object/clipboard/MemoryOptimizedClipboard.java @@ -140,6 +140,18 @@ public class MemoryOptimizedClipboard extends FaweClipboard { height = dimensions.getBlockY(); length = dimensions.getBlockZ(); area = width * length; + int newVolume = area * height; + if (newVolume != volume) { + volume = newVolume; + ids = new byte[1 + (volume >> BLOCK_SHIFT)][]; + datas = new byte[1 + (volume >> BLOCK_SHIFT)][]; + lastAddI = -1; + lastIdsI = -1; + lastDatasI = -1; + saveIds = false; + saveAdd = false; + saveDatas = false; + } } @Override diff --git a/core/src/main/java/com/boydti/fawe/util/MainUtil.java b/core/src/main/java/com/boydti/fawe/util/MainUtil.java index 2b8b8483..7c9e27e8 100644 --- a/core/src/main/java/com/boydti/fawe/util/MainUtil.java +++ b/core/src/main/java/com/boydti/fawe/util/MainUtil.java @@ -96,6 +96,21 @@ public class MainUtil { return size.get(); } + public static double getJavaVersion () { + String version = System.getProperty("java.version"); + int pos = version.indexOf('.'); + pos = version.indexOf('.', pos+1); + return Double.parseDouble (version.substring (0, pos)); + } + + public static void stacktrace() { + try { + int i = 1/0; + } catch (Exception e) { + e.printStackTrace(); + } + } + public static long traverse(Path path, final RunnableVal2 onEach) { final AtomicLong size = new AtomicLong(0); try { diff --git a/core/src/main/java/com/sk89q/worldedit/LocalSession.java b/core/src/main/java/com/sk89q/worldedit/LocalSession.java index d1383650..cde437e1 100644 --- a/core/src/main/java/com/sk89q/worldedit/LocalSession.java +++ b/core/src/main/java/com/sk89q/worldedit/LocalSession.java @@ -194,6 +194,9 @@ public class LocalSession { if (world == null || uuid == null) { return false; } + if (Settings.HISTORY.USE_DISK) { + MAX_HISTORY_SIZE = Integer.MAX_VALUE; + } if (!world.equals(currentWorld)) { this.uuid = uuid; // Save history @@ -273,9 +276,7 @@ public class LocalSession { sizes.put(id, existingSize); } existingSize.addAndGet(size); - } catch (NumberFormatException ignore){ - ignore.printStackTrace(); - } + } catch (NumberFormatException ignore){} } }); if (totalSize.get() < maxBytes) { diff --git a/core/src/main/resources/fawe.properties b/core/src/main/resources/fawe.properties new file mode 100644 index 00000000..0ccbf444 --- /dev/null +++ b/core/src/main/resources/fawe.properties @@ -0,0 +1,2 @@ +version=${version} + diff --git a/forge110/src/main/java/com/boydti/fawe/forge/FaweForge.java b/forge110/src/main/java/com/boydti/fawe/forge/FaweForge.java index 5e978a5d..38414cc0 100644 --- a/forge110/src/main/java/com/boydti/fawe/forge/FaweForge.java +++ b/forge110/src/main/java/com/boydti/fawe/forge/FaweForge.java @@ -100,12 +100,6 @@ public class FaweForge implements IFawe { return new com.boydti.fawe.forge.ForgeTaskMan(512); } - @Override - public int[] getVersion() { - String[] version = this.mod.version.split("\\."); - return new int[] {Integer.parseInt(version[0]), Integer.parseInt(version[1]), Integer.parseInt(version[2])}; - } - @Override public String getWorldName(World world) { if (world instanceof WorldWrapper) { diff --git a/forge110/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java b/forge110/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java index acab27ce..0e953a5c 100644 --- a/forge110/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java +++ b/forge110/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java @@ -511,6 +511,7 @@ public class ForgeQueue_All extends NMSMappedFaweQueue { this.count[i]++; switch (id) { case 0: - this.air[i]++; - vs[j] = -1; + vs[j] = 0; vs2[j] = (char) 1; return; case 11: @@ -63,74 +62,12 @@ public class ForgeChunk_All extends CharFaweChunk { case 138: case 169: case 213: - this.relight[i]++; - case 2: - case 4: - case 13: - case 14: - case 15: - case 20: - case 21: - case 22: - case 30: - case 32: - case 37: - case 41: - case 42: - case 45: - case 46: - case 47: - case 48: - case 49: - case 55: - case 56: - case 57: - case 58: - case 60: - case 7: - case 73: - case 79: - case 80: - case 81: - case 82: - case 83: - case 85: - case 87: - case 88: - case 101: - case 102: - case 103: - case 110: - case 112: - case 113: - case 121: - case 129: - case 133: - case 165: - case 166: - case 170: - case 172: - case 173: - case 174: - case 188: - case 189: - case 190: - case 191: - case 192: - vs[j] = (byte) (id); - vs2[j] = (char) (id << 4); - return; case 130: case 76: case 62: case 50: case 10: this.relight[i]++; - case 54: - case 146: - case 61: - case 65: - case 68: // removed default: vs2[j] = (char) ((id << 4) + data); vs[j] = (byte) id; diff --git a/forge1710/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java b/forge1710/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java index 3c1dbd77..edcd96a4 100644 --- a/forge1710/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java +++ b/forge1710/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java @@ -213,6 +213,7 @@ public class ForgeQueue_All extends NMSMappedFaweQueue