diff --git a/nmshandler/src/main/java/net/aufdemrand/denizen/nms/NMSHandler.java b/nmshandler/src/main/java/net/aufdemrand/denizen/nms/NMSHandler.java
index 24e1daf1bd..8e41c41573 100644
--- a/nmshandler/src/main/java/net/aufdemrand/denizen/nms/NMSHandler.java
+++ b/nmshandler/src/main/java/net/aufdemrand/denizen/nms/NMSHandler.java
@@ -73,6 +73,8 @@ public boolean isCorrectMappingsCode() {
return true;
}
+ public abstract void disableAsyncCatcher();
+
public abstract Sidebar createSidebar(Player player);
public abstract BlockLight createBlockLight(Location location, int lightLevel, long ticks);
diff --git a/plugin/pom.xml b/plugin/pom.xml
index 96e8bec545..38d8c64c46 100644
--- a/plugin/pom.xml
+++ b/plugin/pom.xml
@@ -22,13 +22,6 @@
jar
provided
-
- org.spigotmc
- spigot
- ${craftbukkit.version}
- jar
- provided
-
net.aufdemrand
denizen-nmshandler
diff --git a/plugin/src/main/java/net/aufdemrand/denizen/Denizen.java b/plugin/src/main/java/net/aufdemrand/denizen/Denizen.java
index 1afdf27234..7ec06e2a98 100644
--- a/plugin/src/main/java/net/aufdemrand/denizen/Denizen.java
+++ b/plugin/src/main/java/net/aufdemrand/denizen/Denizen.java
@@ -358,10 +358,11 @@ public void onEnable() {
}
try {
- org.spigotmc.AsyncCatcher.enabled = false;
+ NMSHandler.getInstance().disableAsyncCatcher();
}
- catch (Throwable e) {
- dB.echoError("Running not-Spigot?!");
+ catch (Throwable ex) {
+ dB.echoError("Running not-Spigot?! AsyncCatcher disable failed!");
+ dB.echoError(ex);
}
try {
@@ -1707,7 +1708,7 @@ public boolean allowedToWebget() {
@Override
public void preTagExecute() {
try {
- org.spigotmc.AsyncCatcher.enabled = false;
+ NMSHandler.getInstance().disableAsyncCatcher();
}
catch (Throwable e) {
dB.echoError("Running not-Spigot?!");
diff --git a/plugin/src/main/java/net/aufdemrand/denizen/objects/dWorld.java b/plugin/src/main/java/net/aufdemrand/denizen/objects/dWorld.java
index 55a5874493..540e8dcb8f 100644
--- a/plugin/src/main/java/net/aufdemrand/denizen/objects/dWorld.java
+++ b/plugin/src/main/java/net/aufdemrand/denizen/objects/dWorld.java
@@ -1,6 +1,7 @@
package net.aufdemrand.denizen.objects;
import net.aufdemrand.denizen.Settings;
+import net.aufdemrand.denizen.utilities.Utilities;
import net.aufdemrand.denizen.utilities.debugging.dB;
import net.aufdemrand.denizencore.objects.*;
import net.aufdemrand.denizencore.tags.Attribute;
@@ -8,7 +9,6 @@
import net.aufdemrand.denizencore.utilities.CoreUtilities;
import net.citizensnpcs.api.CitizensAPI;
import net.citizensnpcs.api.npc.NPC;
-import org.apache.commons.io.FileUtils;
import org.bukkit.*;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
@@ -1044,7 +1044,7 @@ public void adjust(Mechanism mechanism) {
File folder = new File(getWorld().getName());
Bukkit.getServer().unloadWorld(getWorld(), false);
try {
- FileUtils.deleteDirectory(folder);
+ Utilities.deleteDirectory(folder);
}
catch (Exception ex) {
dB.echoError(ex);
diff --git a/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/core/FileCopyCommand.java b/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/core/FileCopyCommand.java
index e81ad9ae8e..906eb1396f 100644
--- a/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/core/FileCopyCommand.java
+++ b/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/core/FileCopyCommand.java
@@ -10,9 +10,9 @@
import net.aufdemrand.denizencore.objects.aH;
import net.aufdemrand.denizencore.scripts.ScriptEntry;
import net.aufdemrand.denizencore.scripts.commands.AbstractCommand;
-import org.apache.commons.io.FileUtils;
import java.io.File;
+import java.nio.file.Files;
public class FileCopyCommand extends AbstractCommand {
@@ -103,10 +103,10 @@ public void execute(final ScriptEntry scriptEntry) throws CommandExecutionExcept
d.mkdirs();
}
if (o.isDirectory()) {
- FileUtils.copyDirectory(o, d);
+ Utilities.copyDirectory(o, d);
}
else {
- FileUtils.copyFile(o, d);
+ Files.copy(o.toPath(), (disdir ? d.toPath().resolve(o.toPath().getFileName()) : d.toPath()));
}
scriptEntry.addObject("success", new Element("true"));
}
diff --git a/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/world/CreateWorldCommand.java b/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/world/CreateWorldCommand.java
index f583e300e7..c6267f42d8 100644
--- a/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/world/CreateWorldCommand.java
+++ b/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/world/CreateWorldCommand.java
@@ -1,5 +1,6 @@
package net.aufdemrand.denizen.scripts.commands.world;
+import net.aufdemrand.denizen.utilities.Utilities;
import net.aufdemrand.denizen.utilities.debugging.dB;
import net.aufdemrand.denizencore.exceptions.CommandExecutionException;
import net.aufdemrand.denizencore.exceptions.InvalidArgumentsException;
@@ -7,7 +8,6 @@
import net.aufdemrand.denizencore.objects.aH;
import net.aufdemrand.denizencore.scripts.ScriptEntry;
import net.aufdemrand.denizencore.scripts.commands.AbstractCommand;
-import org.apache.commons.io.FileUtils;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.WorldCreator;
@@ -100,7 +100,7 @@ public void execute(ScriptEntry scriptEntry) throws CommandExecutionException {
dB.echoError(scriptEntry.getResidingQueue(), "Invalid copy from world folder - does not exist!");
return;
}
- FileUtils.copyDirectory(folder, newFolder);
+ Utilities.copyDirectory(folder, newFolder);
File file = new File(worldName.asString() + "/uid.dat");
if (file.exists()) {
file.delete();
diff --git a/plugin/src/main/java/net/aufdemrand/denizen/utilities/Utilities.java b/plugin/src/main/java/net/aufdemrand/denizen/utilities/Utilities.java
index 743a60f3a5..b6d6427186 100644
--- a/plugin/src/main/java/net/aufdemrand/denizen/utilities/Utilities.java
+++ b/plugin/src/main/java/net/aufdemrand/denizen/utilities/Utilities.java
@@ -26,6 +26,11 @@
import java.io.File;
import java.io.IOException;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -37,6 +42,38 @@ public class Utilities {
public static final TagContext noDebugContext = new BukkitTagContext(null, null, false, null, false, null);
+ public static void deleteDirectory(File directory) throws IOException {
+ Files.walkFileTree(directory.toPath(),
+ new SimpleFileVisitor() {
+ @Override
+ public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
+ Files.delete(dir);
+ return FileVisitResult.CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+ Files.delete(file);
+ return FileVisitResult.CONTINUE;
+ }
+ });
+ }
+
+ public static void copyDirectory(File source, File destination) throws IOException {
+ copyDirectory(source.toPath(), destination.toPath());
+ }
+
+ public static void copyDirectory(Path source, Path destination) throws IOException {
+ Files.walk(source).forEach(file -> {
+ try {
+ Files.copy(file, destination.resolve(source.relativize(file)));
+ }
+ catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
+ });
+ }
+
public static boolean canReadFile(File f) {
if (Settings.allowStupids()) {
return true;
diff --git a/v1_10_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_10_R1.java b/v1_10_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_10_R1.java
index 7e5426f210..9bbfbe88fa 100644
--- a/v1_10_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_10_R1.java
+++ b/v1_10_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_10_R1.java
@@ -49,6 +49,11 @@ public class Handler_v1_10_R1 extends NMSHandler {
private final ProfileEditor profileEditor = new ProfileEditor_v1_10_R1();
+ @Override
+ public void disableAsyncCatcher() {
+ org.spigotmc.AsyncCatcher.enabled = false;
+ }
+
@Override
public Thread getMainThread() {
return ((CraftServer) Bukkit.getServer()).getServer().primaryThread;
diff --git a/v1_11_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_11_R1.java b/v1_11_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_11_R1.java
index 538013270d..dc23dd9671 100644
--- a/v1_11_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_11_R1.java
+++ b/v1_11_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_11_R1.java
@@ -49,6 +49,11 @@ public class Handler_v1_11_R1 extends NMSHandler {
private final ProfileEditor profileEditor = new ProfileEditor_v1_11_R1();
+ @Override
+ public void disableAsyncCatcher() {
+ org.spigotmc.AsyncCatcher.enabled = false;
+ }
+
@Override
public Thread getMainThread() {
return ((CraftServer) Bukkit.getServer()).getServer().primaryThread;
diff --git a/v1_12_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_12_R1.java b/v1_12_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_12_R1.java
index 963ec8cd12..e1a0bae2c1 100644
--- a/v1_12_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_12_R1.java
+++ b/v1_12_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_12_R1.java
@@ -55,6 +55,11 @@ public class Handler_v1_12_R1 extends NMSHandler {
private final ProfileEditor profileEditor = new ProfileEditor_v1_12_R1();
+ @Override
+ public void disableAsyncCatcher() {
+ org.spigotmc.AsyncCatcher.enabled = false;
+ }
+
@Override
public Thread getMainThread() {
return ((CraftServer) Bukkit.getServer()).getServer().primaryThread;
diff --git a/v1_13_R2/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_13_R2.java b/v1_13_R2/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_13_R2.java
index 6b49148417..25314b2381 100644
--- a/v1_13_R2/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_13_R2.java
+++ b/v1_13_R2/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_13_R2.java
@@ -59,6 +59,11 @@ public class Handler_v1_13_R2 extends NMSHandler {
private final ProfileEditor profileEditor = new ProfileEditor_v1_13_R2();
+ @Override
+ public void disableAsyncCatcher() {
+ org.spigotmc.AsyncCatcher.enabled = false;
+ }
+
@Override
public boolean isCorrectMappingsCode() {
return ((CraftMagicNumbers) CraftMagicNumbers.INSTANCE).getMappingsVersion().equals("00ed8e5c39debc3ed194ad7c5645cc45");
diff --git a/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_8_R3.java b/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_8_R3.java
index 21675903b4..3ceb22cb21 100644
--- a/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_8_R3.java
+++ b/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_8_R3.java
@@ -49,6 +49,11 @@ public class Handler_v1_8_R3 extends NMSHandler {
private final ProfileEditor profileEditor = new ProfileEditor_v1_8_R3();
+ @Override
+ public void disableAsyncCatcher() {
+ org.spigotmc.AsyncCatcher.enabled = false;
+ }
+
@Override
public Thread getMainThread() {
return ((CraftServer) Bukkit.getServer()).getServer().primaryThread;
diff --git a/v1_9_R2/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_9_R2.java b/v1_9_R2/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_9_R2.java
index 675b19badd..51fc3fd401 100644
--- a/v1_9_R2/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_9_R2.java
+++ b/v1_9_R2/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_9_R2.java
@@ -49,6 +49,11 @@ public class Handler_v1_9_R2 extends NMSHandler {
private final ProfileEditor profileEditor = new ProfileEditor_v1_9_R2();
+ @Override
+ public void disableAsyncCatcher() {
+ org.spigotmc.AsyncCatcher.enabled = false;
+ }
+
@Override
public int getPort() {
return ((CraftServer) Bukkit.getServer()).getServer().P();