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();