diff --git a/buildnumber.properties b/buildnumber.properties index eadcb68e..77f3df0f 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,4 @@ #Build Number for ANT. Do not edit! #Tue Aug 26 18:22:59 CEST 2014 -build.number=934 +build.number=935 + diff --git a/src/config.yml b/src/config.yml index d4adc7bd..02e9d752 100644 --- a/src/config.yml +++ b/src/config.yml @@ -36,8 +36,6 @@ allow: tnt_minecarts: false explosions: false -explosive_radius: 4.0 - # Blocked commands: # # How blocked commands work: @@ -114,7 +112,7 @@ blocked_commands: - 's:a:/restart' - 's:b:/setblock:_' -# Automatically wipe dropped objects: +# Automatically wipe dropped objects auto_wipe: true # Nuking prevention @@ -125,8 +123,9 @@ nukemonitor: range: 10.0 freecam_trigger_count: 10 +explosive_radius: 4.0 -# Show all attempted commands in the log, will result in duplicate log messages: +# Show all attempted commands in the log, will result in duplicate log messages preprocess_log: true # Disable certain events @@ -135,13 +134,12 @@ disable: weather: true -# Enable misc. features: +# Enable misc. features landmines_enabled: false mp44_enabled: false tossmob_enabled: false -# Moblimiter: - +# Moblimiter moblimiter: enabled: true max: 50 @@ -154,7 +152,8 @@ moblimiter: # Flatlands flatlands: generate: true - # Flatlands generation parameters, uses CleanroomGenerator syntax - http://dev.bukkit.org/server-mods/cleanroomgenerator/ + + # Flatlands generation parameters - Uses CleanroomGenerator syntax - http://dev.bukkit.org/server-mods/cleanroomgenerator/ generate_params: 16,stone,32,dirt,1,grass # Admin-Only Mode @@ -176,6 +175,21 @@ host_sender_names: - rcon - remotebukkit +# Announcer +announcer: + enabled: true + + # Interval between announcements, in seconds. + interval: 600 + + # Prefix for all announcements + prefix: '&5[&eTotalFreedom&5] &b' + + announcements: + - 'Be sure to visit our forums at &6http://totalfreedom.boards.net/' + - 'You can always review the server rules here: &6http://totalfreedom.me/' + - 'If you aren''t OP, be sure to ask!' + # Players who cannot be banned by username unbannable_usernames: - honeydew @@ -226,7 +240,7 @@ twitterbot: petprotect: enabled: true -# Logs Registration +# Logviewer logs: url: '' secret: '' @@ -234,7 +248,7 @@ logs: # Mojang service checker service_checker_url: http://status.mojang.com/check -# HTTPD +# HTTPD server httpd: enabled: true port: 28966 @@ -243,7 +257,9 @@ httpd: # Inactivity Auto-Kick (Requires Essentials) autokick: enabled: true + # autokick_threshold - Percentage of server player capacity used at which players will be automatically kicked for being inactive. Range: 0.0 - 1.0 threshold: 0.9 + # autokick_time - Time, in seconds, after which a player should be kicked when inactive time: 120 diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_rollback.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_rollback.java index d808c546..264a6fc6 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_rollback.java +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_rollback.java @@ -14,6 +14,11 @@ public class Command_rollback extends TFM_Command @Override public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 0 || args.length > 2) + { + return false; + } + if (args.length == 1) { if ("purgeall".equals(args[0])) @@ -40,8 +45,10 @@ public class Command_rollback extends TFM_Command playerMsg("Rolled back " + TFM_RollbackManager.rollback(playerName) + " edits for " + playerName + "."); playerMsg("If this rollback was a mistake, use /rollback undo " + playerName + " within 40 seconds to reverse the rollback."); } + return true; } - else if (args.length == 2) + + if (args.length == 2) { if ("purge".equalsIgnoreCase(args[0])) { @@ -54,8 +61,10 @@ public class Command_rollback extends TFM_Command } playerMsg("Purged " + TFM_RollbackManager.purgeEntries(playerName) + " rollback history entries for " + playerName + "."); + return true; } - else if ("undo".equalsIgnoreCase(args[0])) + + if ("undo".equalsIgnoreCase(args[0])) { final String playerName = TFM_RollbackManager.findPlayer(args[1]); @@ -67,17 +76,10 @@ public class Command_rollback extends TFM_Command TFM_Util.adminAction(sender.getName(), "Reverting rollback for player: " + playerName, false); playerMsg("Reverted " + TFM_RollbackManager.undoRollback(playerName) + " edits for " + playerName + "."); + return true; } - else - { - return false; - } - } - else - { - return false; } - return true; + return false; } } diff --git a/src/me/StevenLawson/TotalFreedomMod/Config/TFM_ConfigEntry.java b/src/me/StevenLawson/TotalFreedomMod/Config/TFM_ConfigEntry.java index 7ff5c5af..d8dede36 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Config/TFM_ConfigEntry.java +++ b/src/me/StevenLawson/TotalFreedomMod/Config/TFM_ConfigEntry.java @@ -65,6 +65,11 @@ public enum TFM_ConfigEntry FLATLANDS_GENERATE(Boolean.class, "flatlands.generate"), FLATLANDS_GENERATE_PARAMS(String.class, "flatlands.generate_params"), // + ANNOUNCER_ENABLED(Boolean.class, "announcer.enabled"), + ANNOUNCER_INTERVAL(Integer.class, "announcer.interval"), + ANNOUNCER_PREFIX(String.class, "announcer.prefix"), + ANNOUNCER_ANNOUNCEMENTS(List.class, "announcer.announcements"), + // EXPLOSIVE_RADIUS(Double.class, "explosive_radius"), FREECAM_TRIGGER_COUNT(Integer.class, "freecam_trigger_count"), SERVICE_CHECKER_URL(String.class, "service_checker_url"), diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_Announcer.java b/src/me/StevenLawson/TotalFreedomMod/TFM_Announcer.java new file mode 100644 index 00000000..2ddccf1d --- /dev/null +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_Announcer.java @@ -0,0 +1,112 @@ +package me.StevenLawson.TotalFreedomMod; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import me.StevenLawson.TotalFreedomMod.Config.TFM_ConfigEntry; +import org.bukkit.scheduler.BukkitRunnable; + +public class TFM_Announcer +{ + private static final List ANNOUNCEMENTS = new ArrayList(); + private static boolean enabled; + private static long interval; + private static String prefix; + private static BukkitRunnable announcer; + + private TFM_Announcer() + { + throw new AssertionError(); + } + + public static boolean isEnabled() + { + return enabled; + } + + public static List getAnnouncements() + { + return Collections.unmodifiableList(ANNOUNCEMENTS); + } + + public static long getTickInterval() + { + return interval; + } + + public static String getPrefix() + { + return prefix; + } + + public static void load() + { + stop(); + + ANNOUNCEMENTS.clear(); + + for (Object announcement : TFM_ConfigEntry.ANNOUNCER_ANNOUNCEMENTS.getList()) + { + ANNOUNCEMENTS.add(TFM_Util.colorize((String) announcement)); + } + + enabled = TFM_ConfigEntry.ANNOUNCER_ENABLED.getBoolean(); + interval = TFM_ConfigEntry.ANNOUNCER_INTERVAL.getInteger() * 20L; + prefix = TFM_Util.colorize(TFM_ConfigEntry.ANNOUNCER_PREFIX.getString()); + + if (enabled) + { + start(); + } + } + + public static boolean isStarted() + { + return announcer != null; + } + + public static void start() + { + if (isStarted()) + { + return; + } + + announcer = new BukkitRunnable() + { + private int current = 0; + + @Override + public void run() + { + current++; + + if (current >= ANNOUNCEMENTS.size()) + { + current = 0; + } + + TFM_Util.bcastMsg(prefix + ANNOUNCEMENTS.get(current)); + } + }; + + announcer.runTaskTimer(TotalFreedomMod.plugin, interval, interval); + } + + public static void stop() + { + if (announcer == null) + { + return; + } + + try + { + announcer.cancel(); + } + finally + { + announcer = null; + } + } +} diff --git a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java index abaad0e3..2d5a3b2a 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java +++ b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java @@ -70,8 +70,6 @@ public class TotalFreedomMod extends JavaPlugin TFM_Log.info("Made by Madgeek1450 and DarthSalamon"); TFM_Log.info("Compiled " + buildDate + " by " + buildCreator); - TFM_Util.deleteCoreDumps(); - if (!TFM_ServerInterface.COMPILE_NMS_VERSION.equals(TFM_Util.getNmsVersion())) { TFM_Log.warning(pluginName + " is compiled for " + TFM_ServerInterface.COMPILE_NMS_VERSION + " but the server is running " @@ -79,19 +77,27 @@ public class TotalFreedomMod extends JavaPlugin TFM_Log.warning("This might result in unexpected behaviour!"); } - // Admin list + TFM_Util.deleteCoreDumps(); + TFM_Util.deleteFolder(new File("./_deleteme")); + + // Create backups TFM_Util.createBackups(SUPERADMIN_FILE); - TFM_AdminList.load(); - - // Permban list TFM_Util.createBackups(PERMBAN_FILE); - TFM_PermbanList.load(); - // Playerlist and bans + // Load services + TFM_AdminList.load(); + TFM_PermbanList.load(); TFM_PlayerList.load(); TFM_BanManager.load(); + TFM_Announcer.load(); - TFM_Util.deleteFolder(new File("./_deleteme")); + // Protect area + // TODO: Refractor to single .load() method + if (TFM_ConfigEntry.PROTECTAREA_ENABLED.getBoolean()) + { + TFM_ProtectedArea.loadProtectedAreas(); + TFM_ProtectedArea.autoAddSpawnpoints(); + } final PluginManager pm = server.getPluginManager(); pm.registerEvents(new TFM_EntityListener(), plugin); @@ -107,6 +113,7 @@ public class TotalFreedomMod extends JavaPlugin } catch (Exception ex) { + TFM_Log.warning("Could not load world: Flatlands"); } try @@ -115,6 +122,7 @@ public class TotalFreedomMod extends JavaPlugin } catch (Exception ex) { + TFM_Log.warning("Could not load world: AdminWorld"); } // Initialize game rules @@ -127,6 +135,7 @@ public class TotalFreedomMod extends JavaPlugin TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.NATURAL_REGENERATION, true, false); TFM_GameRuleHandler.commitGameRules(); + // Disable weather if (TFM_ConfigEntry.DISABLE_WEATHER.getBoolean()) { for (World world : server.getWorlds()) @@ -138,16 +147,17 @@ public class TotalFreedomMod extends JavaPlugin } } - if (TFM_ConfigEntry.PROTECTAREA_ENABLED.getBoolean()) - { - TFM_ProtectedArea.loadProtectedAreas(); - TFM_ProtectedArea.autoAddSpawnpoints(); - } - // Heartbeat new TFM_Heartbeat(plugin).runTaskTimer(plugin, HEARTBEAT_RATE * 20L, HEARTBEAT_RATE * 20L); - // metrics @ http://mcstats.org/plugin/TotalFreedomMod + // Start services + TFM_ServiceChecker.start(); + TFM_HTTPD_Manager.start(); + TFM_FrontDoor.start(); + + TFM_Log.info("Version " + pluginVersion + " for " + TFM_ServerInterface.COMPILE_NMS_VERSION + " enabled"); + + // Metrics @ http://mcstats.org/plugin/TotalFreedomMod try { final Metrics metrics = new Metrics(plugin); @@ -158,13 +168,7 @@ public class TotalFreedomMod extends JavaPlugin TFM_Log.warning("Failed to submit metrics data: " + ex.getMessage()); } - TFM_ServiceChecker.start(); - TFM_HTTPD_Manager.start(); - TFM_FrontDoor.start(); - - TFM_Log.info("Version " + pluginVersion + " for " + TFM_ServerInterface.COMPILE_NMS_VERSION + " enabled"); - - // Delayed Start: + // Load commands later new BukkitRunnable() { @Override