From 40bfd059f1d1e7ccbaba47b1fab80ac84ff1d8f7 Mon Sep 17 00:00:00 2001 From: Steven Lawson Date: Sun, 4 Nov 2012 22:44:24 -0500 Subject: [PATCH] Kluged /wipeflatlands with some horrible thing that requires the server to restart, but it works now :) --- .../Commands/Command_wipeflatlands.java | 57 ++------- .../TotalFreedomMod/TFM_Util.java | 109 ++++++++++++++++++ .../TotalFreedomMod/TotalFreedomMod.java | 2 + src/plugin.yml | 20 ++-- 4 files changed, 131 insertions(+), 57 deletions(-) diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_wipeflatlands.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_wipeflatlands.java index c85f8333..d0472379 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_wipeflatlands.java +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_wipeflatlands.java @@ -1,10 +1,8 @@ package me.StevenLawson.TotalFreedomMod.Commands; -import java.io.File; import me.StevenLawson.TotalFreedomMod.TFM_Util; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import org.bukkit.ChatColor; -import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -14,58 +12,23 @@ public class Command_wipeflatlands extends TFM_Command @Override public boolean run(final CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (!senderIsConsole) + if (!(senderIsConsole && TotalFreedomMod.superAwesomeAdmins.contains(sender.getName().toLowerCase()))) { sender.sendMessage(TotalFreedomMod.MSG_NO_PERMS); return true; } - - TFM_Util.bcastMsg("Flatlands is being wiped.", ChatColor.RED); - - server.getScheduler().scheduleAsyncDelayedTask(plugin, new Runnable() + + TFM_Util.setSavedFlag("do_wipe_flatlands", true); + + TFM_Util.bcastMsg("Server is going offline for flatlands wipe.", ChatColor.GRAY); + + for (Player p : server.getOnlinePlayers()) { - @Override - public void run() - { - World flatlands = server.getWorld("flatlands"); - - if (flatlands != null) - { - for (Player p : flatlands.getPlayers()) - { - p.teleport(server.getWorlds().get(0).getSpawnLocation()); - } + p.kickPlayer("Server is going offline for flatlands wipe, come back in a few minutes."); + } - if (server.unloadWorld(flatlands, false)) - { - File flatlands_folder = new File("./flatlands"); + server.shutdown(); - if (flatlands_folder.exists()) - { - TFM_Util.deleteFolder(flatlands_folder); - } - - if (flatlands_folder.exists()) - { - sender.sendMessage("Old Flatlands folder could not be deleted."); - } - else - { - TFM_Util.generateFlatlands(); - } - } - else - { - sender.sendMessage("Flatlands could not be unloaded."); - } - } - else - { - sender.sendMessage("Flatlands is not loaded."); - } - } - }); - return true; } } diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java b/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java index 510bf645..8e20017c 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java @@ -5,6 +5,8 @@ import java.net.InetSocketAddress; import java.net.URI; import java.util.*; import java.util.jar.JarFile; +import java.util.logging.Level; +import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.ZipEntry; @@ -911,6 +913,113 @@ public class TFM_Util } return StringUtils.join(player_names, ", "); } + + @SuppressWarnings("unchecked") + public static Map getSavedFlags() + { + Map saved_flags = null; + + File input_file = new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.SAVED_FLAGS_FILE); + if (input_file.exists()) + { + try + { + FileInputStream fis = new FileInputStream(input_file); + ObjectInputStream ois = new ObjectInputStream(fis); + saved_flags = (HashMap) ois.readObject(); + ois.close(); + fis.close(); + } + catch (Exception ex) + { + TFM_Log.severe(ex); + } + } + + return saved_flags; + } + + public static boolean getSavedFlag(String flag) throws Exception + { + Boolean flag_value = null; + + Map saved_flags = TFM_Util.getSavedFlags(); + + if (saved_flags != null) + { + if (saved_flags.containsKey(flag)) + { + flag_value = saved_flags.get(flag); + } + } + + if (flag_value != null) + { + return flag_value.booleanValue(); + } + else + { + throw new Exception(); + } + } + + public static void setSavedFlag(String flag, boolean value) + { + Map saved_flags = TFM_Util.getSavedFlags(); + + if (saved_flags == null) + { + saved_flags = new HashMap(); + } + + saved_flags.put(flag, value); + + try + { + FileOutputStream fos = new FileOutputStream(new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.SAVED_FLAGS_FILE)); + ObjectOutputStream oos = new ObjectOutputStream(fos); + oos.writeObject(saved_flags); + oos.close(); + fos.close(); + } + catch (Exception ex) + { + TFM_Log.severe(ex); + } + } + + public static void wipeFlatlandsIfFlagged() + { + boolean do_wipe_flatlands = false; + try + { + do_wipe_flatlands = TFM_Util.getSavedFlag("do_wipe_flatlands"); + } + catch (Exception ex) + { + } + + if (do_wipe_flatlands) + { + if (Bukkit.getServer().getWorld("flatlands") == null) + { + TFM_Log.info("Wiping flaglands."); + + TFM_Util.setSavedFlag("do_wipe_flatlands", false); + + File flatlands_folder = new File("./flatlands"); + + if (flatlands_folder.exists()) + { + TFM_Util.deleteFolder(flatlands_folder); + } + } + else + { + TFM_Log.severe("Can't wipe flatlands, it is already loaded."); + } + } + } // I wrote all this before i discovered getTargetBlock >.> - might come in handy some day... // public static final double LOOKAT_VIEW_HEIGHT = 1.65; // public static final double LOOKAT_STEP_DISTANCE = 0.2; diff --git a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java index 1a8b8cfc..8cd4721f 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java +++ b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java @@ -31,6 +31,7 @@ public class TotalFreedomMod extends JavaPlugin public static final String SUPERADMIN_FILE = "superadmin.yml"; public static final String PERMBAN_FILE = "permban.yml"; public static final String PROTECTED_AREA_FILE = "protectedareas.dat"; + public static final String SAVED_FLAGS_FILE = "savedflags.dat"; public static final String COMMAND_PATH = "me.StevenLawson.TotalFreedomMod.Commands"; public static final String COMMAND_PREFIX = "Command_"; @@ -76,6 +77,7 @@ public class TotalFreedomMod extends JavaPlugin if (generateFlatlands) { + TFM_Util.wipeFlatlandsIfFlagged(); TFM_Util.generateFlatlands(flatlandsGenerationParams); } diff --git a/src/plugin.yml b/src/plugin.yml index 1fa88367..5adfcc4b 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -9,7 +9,7 @@ commands: usage: / [on | off] cage: description: Superadmin command - Place a cage around someone. - usage: / [off | outermaterial] [water | lava] + usage: / cake: description: Superadmin command - For the people that are still alive. usage: / @@ -195,9 +195,9 @@ commands: tempban: description: Superadmin Command - Temporarily ban someone. usage: / [playername] [duration] [reason] - terminal: - description: Execute a system command. - usage: / +# terminal: +# description: Execute a system command. +# usage: / tfbanlist: description: Shows all banned player names. Superadmins may optionally use 'purge' to clear the list. usage: / [purge] @@ -219,9 +219,9 @@ commands: wildcard: description: Superadmin command - Run any command on all users, username placeholder = ?. usage: / [fluff] ? [fluff] ? -# wipeflatlands: - Currently broken. -# description: Owner command - Wipe the flatlands map. -# usage: / - ziptool: - description: Owner command - Zip and unzip files. - usage: / > | > + wipeflatlands: + description: Owner command - Wipe the flatlands map. Requires manual restart after command is used. + usage: / +# ziptool: +# description: Owner command - Zip and unzip files. +# usage: / > | >