summaryrefslogtreewikicommitdiff
path: root/src/main/java/net/tylermurphy/hideAndSeek/command/SaveMap.java
diff options
context:
space:
mode:
authorTyler Murphy <tylermurphy534@gmail.com>2021-08-31 21:55:27 -0400
committerTyler Murphy <tylermurphy534@gmail.com>2021-08-31 21:55:27 -0400
commitf1379a94754b68cc3904d2b96b5815854d5565c1 (patch)
tree39ef970eabaaeabf0993ea1cec6ffbd31c83a07b /src/main/java/net/tylermurphy/hideAndSeek/command/SaveMap.java
parent1.3.0 beta 4 (diff)
downloadkenshinshideandseek-f1379a94754b68cc3904d2b96b5815854d5565c1.tar.gz
kenshinshideandseek-f1379a94754b68cc3904d2b96b5815854d5565c1.tar.bz2
kenshinshideandseek-f1379a94754b68cc3904d2b96b5815854d5565c1.zip
1.3.0 beta 5
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/command/SaveMap.java')
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/command/SaveMap.java106
1 files changed, 106 insertions, 0 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/SaveMap.java b/src/main/java/net/tylermurphy/hideAndSeek/command/SaveMap.java
new file mode 100644
index 0000000..2956c80
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/command/SaveMap.java
@@ -0,0 +1,106 @@
+package net.tylermurphy.hideAndSeek.command;
+
+import static net.tylermurphy.hideAndSeek.Store.*;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.bukkit.Bukkit;
+import org.bukkit.command.CommandSender;
+import org.bukkit.scheduler.BukkitRunnable;
+
+import net.tylermurphy.hideAndSeek.Main;
+import net.tylermurphy.hideAndSeek.util.ICommand;
+
+public class SaveMap implements ICommand {
+
+ public void execute(CommandSender sender, String[] args) {
+ if(spawnPosition.getBlockX() == 0 && spawnPosition.getBlockY() == 0 && spawnPosition.getBlockZ() == 0) {
+ sender.sendMessage(errorPrefix + "Please set spawn location first");
+ return;
+ }
+ sender.sendMessage(messagePrefix + "Starting map save");
+ sender.sendMessage(warningPrefix + "All commands will be disabled when the save is in progress. Do not turn off the server.");
+ Bukkit.getServer().getWorld(spawnWorld).save();
+ BukkitRunnable runnable = new BukkitRunnable() {
+ public void run() {
+ File current = new File(Main.root+File.separator+spawnWorld);
+ if(current.exists()) {
+ File temp_destenation = new File(Main.root+File.separator+"temp_hideandseek_"+spawnWorld);
+ File destenation = new File(Main.root+File.separator+"hideandseek_"+spawnWorld);
+ copyFileStructure(current, temp_destenation);
+ if(destenation.exists()) {
+ deleteDirectory(destenation);
+ destenation.mkdir();
+ }
+ temp_destenation.renameTo(destenation);
+ sender.sendMessage(messagePrefix + "Map save complete");
+ runningBackup = false;
+ } else {
+ sender.sendMessage(errorPrefix + "Coudnt find current map");
+ }
+ }
+ };
+ runnable.runTaskAsynchronously(Main.plugin);
+ runningBackup = true;
+ }
+
+ private static void copyFileStructure(File source, File target){
+ try {
+ ArrayList<String> ignore = new ArrayList<>(Arrays.asList("uid.dat", "session.lock"));
+ if(!ignore.contains(source.getName())) {
+ if(source.isDirectory()) {
+ if(!target.exists())
+ if (!target.mkdirs())
+ throw new IOException("Couldn't create world directory!");
+ String files[] = source.list();
+ for (String file : files) {
+ File srcFile = new File(source, file);
+ File destFile = new File(target, file);
+ copyFileStructure(srcFile, destFile);
+ }
+ } else {
+ InputStream in = new FileInputStream(source);
+ OutputStream out = new FileOutputStream(target);
+ byte[] buffer = new byte[1024];
+ int length;
+ while ((length = in.read(buffer)) > 0)
+ out.write(buffer, 0, length);
+ in.close();
+ out.close();
+ }
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private boolean deleteDirectory(File directoryToBeDeleted) {
+ File[] allContents = directoryToBeDeleted.listFiles();
+ if (allContents != null) {
+ for (File file : allContents) {
+ deleteDirectory(file);
+ }
+ }
+ return directoryToBeDeleted.delete();
+ }
+
+ public String getLabel() {
+ return "saveMap";
+ }
+
+ public String getUsage() {
+ return "";
+ }
+
+ public String getDescription() {
+ return "Saves current map for the game. May lag server.";
+ }
+
+}