package me.StevenLawson.TotalFreedomMod; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.*; import me.StevenLawson.TotalFreedomMod.Commands.TFM_Command; import me.StevenLawson.TotalFreedomMod.Commands.TFM_CommandLoader; import me.StevenLawson.TotalFreedomMod.Listener.*; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.exception.ExceptionUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Server; import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; import org.mcstats.Metrics; public class TotalFreedomMod extends JavaPlugin { public static final Server server = Bukkit.getServer(); // public static final long HEARTBEAT_RATE = 5L; //Seconds public static final long SERVICE_CHECKER_RATE = 120L; // public static final String CONFIG_FILE = "config.yml"; 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_"; // public static final String MSG_NO_PERMS = ChatColor.YELLOW + "You do not have permission to use this command."; public static final String YOU_ARE_OP = ChatColor.YELLOW + "You are now op!"; public static final String YOU_ARE_NOT_OP = ChatColor.YELLOW + "You are no longer op!"; public static final String CAKE_LYRICS = "But there's no sense crying over every mistake. You just keep on trying till you run out of cake."; public static final String NOT_FROM_CONSOLE = "This command may not be used from the console."; // public static boolean allPlayersFrozen = false; public static BukkitTask freezePurgeTask = null; public static BukkitTask mutePurgeTask = null; public static boolean lockdownEnabled = false; public static Map fuckoffEnabledFor = new HashMap(); // public static String pluginVersion = ""; public static String buildNumber = ""; public static String buildDate = ""; public static String pluginName = ""; // public static TotalFreedomMod plugin = null; public static File plugin_file = null; @Override public void onEnable() { TotalFreedomMod.plugin = this; TotalFreedomMod.plugin_file = getFile(); TotalFreedomMod.pluginName = this.getDescription().getName(); setAppProperties(); loadMainConfig(); loadSuperadminConfig(); loadPermbanConfig(); TFM_UserList.getInstance(this); registerEventHandlers(); if (generateFlatlands) { TFM_Util.wipeFlatlandsIfFlagged(); TFM_Util.generateFlatlands(flatlandsGenerationParams); } TFM_AdminWorld.getInstance().getAdminWorld(); if (disableWeather) { for (World world : server.getWorlds()) { world.setThundering(false); world.setStorm(false); world.setThunderDuration(0); world.setThunderDuration(0); } } // Initialize game rules TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.DO_DAYLIGHT_CYCLE, !disableNight, false); TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.DO_FIRE_TICK, allowFireSpread, false); TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.DO_MOB_LOOT, false, false); TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.DO_MOB_SPAWNING, !mobLimiterEnabled, false); TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.DO_TILE_DROPS, false, false); TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.MOB_GRIEFING, false, false); TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.NATURAL_REGENERATION, true, false); TFM_GameRuleHandler.commitGameRules(); if (TotalFreedomMod.protectedAreasEnabled) { TFM_ProtectedArea.loadProtectedAreas(); TFM_ProtectedArea.autoAddSpawnpoints(); } TFM_Util.deleteFolder(new File("./_deleteme")); File[] coreDumps = new File(".").listFiles(new java.io.FileFilter() { @Override public boolean accept(File file) { return file.getName().startsWith("java.core"); } }); for (File dump : coreDumps) { TFM_Log.info("Removing core dump file: " + dump.getName()); dump.delete(); } // Heartbeat new TFM_Heartbeat(this).runTaskTimer(plugin, HEARTBEAT_RATE * 20L, HEARTBEAT_RATE * 20L); // metrics @ http://mcstats.org/plugin/TotalFreedomMod try { Metrics metrics = new Metrics(plugin); metrics.start(); } catch (IOException ex) { TFM_Log.warning("Failed to submit metrics data: " + ex.getMessage()); } TFM_Log.info("Plugin Enabled - Version: " + TotalFreedomMod.pluginVersion + "." + TotalFreedomMod.buildNumber + " by Madgeek1450 and DarthSalamon"); TFM_ServiceChecker.getInstance().getUpdateRunnable().runTaskTimerAsynchronously(plugin, 40L, SERVICE_CHECKER_RATE * 20L); new BukkitRunnable() { @Override public void run() { TFM_CommandLoader.getInstance().scan(); TFM_CommandBlockerNew.getInstance().parseBlockingRules(); } }.runTaskLater(this, 20L); } @Override public void onDisable() { server.getScheduler().cancelTasks(this); TFM_Log.info("Plugin disabled"); } @Override public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { try { Player sender_p = null; boolean senderIsConsole = false; if (sender instanceof Player) { sender_p = (Player) sender; TFM_Log.info(String.format("[PLAYER_COMMAND] %s(%s): /%s %s", sender_p.getName(), ChatColor.stripColor(sender_p.getDisplayName()), commandLabel, StringUtils.join(args, " ")), true); } else { senderIsConsole = true; TFM_Log.info(String.format("[CONSOLE_COMMAND] %s: /%s %s", sender.getName(), commandLabel, StringUtils.join(args, " ")), true); } TFM_Command dispatcher; try { ClassLoader classLoader = TotalFreedomMod.class.getClassLoader(); dispatcher = (TFM_Command) classLoader.loadClass(String.format("%s.%s%s", COMMAND_PATH, COMMAND_PREFIX, cmd.getName().toLowerCase())).newInstance(); dispatcher.setup(this, sender, dispatcher.getClass()); } catch (Throwable ex) { TFM_Log.severe("Command not loaded: " + cmd.getName() + "\n" + ExceptionUtils.getStackTrace(ex)); sender.sendMessage(ChatColor.RED + "Command Error: Command not loaded: " + cmd.getName()); return true; } try { if (dispatcher.senderHasPermission()) { return dispatcher.run(sender, sender_p, cmd, commandLabel, args, senderIsConsole); } else { sender.sendMessage(TotalFreedomMod.MSG_NO_PERMS); } } catch (Throwable ex) { TFM_Log.severe("Command Error: " + commandLabel + "\n" + ExceptionUtils.getStackTrace(ex)); } } catch (Throwable ex) { TFM_Log.severe("Command Error: " + commandLabel + "\n" + ExceptionUtils.getStackTrace(ex)); sender.sendMessage(ChatColor.RED + "Unknown Command Error."); } return true; } // public static boolean allowFirePlace = false; public static boolean allowFireSpread = false; public static boolean allowLavaDamage = false; public static boolean allowLavaPlace = false; public static boolean allowWaterPlace = false; public static boolean allowExplosions = false; public static boolean allowFliudSpread = false; public static boolean allowTntMinecarts = false; public static double explosiveRadius = 4.0D; public static List blockedCommands = new ArrayList(); public static boolean autoEntityWipe = true; public static boolean nukeMonitor = true; public static int nukeMonitorCountBreak = 100; public static int nukeMonitorCountPlace = 25; public static double nukeMonitorRange = 10.0D; public static int freecamTriggerCount = 10; public static boolean preprocessLogEnabled = true; public static boolean disableNight = true; public static boolean disableWeather = true; public static boolean landminesEnabled = false; public static boolean mp44Enabled = false; public static boolean mobLimiterEnabled = true; public static int mobLimiterMax = 50; public static boolean mobLimiterDisableDragon = true; public static boolean mobLimiterDisableGhast = true; public static boolean mobLimiterDisableSlime = true; public static boolean mobLimiterDisableGiant = true; public static boolean tossmobEnabled = false; public static boolean generateFlatlands = true; public static String flatlandsGenerationParams = "16,stone,32,dirt,1,grass"; public static boolean adminOnlyMode = false; public static boolean protectedAreasEnabled = true; public static boolean autoProtectSpawnpoints = true; public static double autoProtectRadius = 25.0D; public static List host_sender_names = Arrays.asList("rcon", "remotebukkit"); public static boolean twitterbotEnabled = false; public static String twitterbotURL = ""; public static String twitterbotSecret = ""; public static boolean petProtectEnabled = true; public static String logsRegisterPassword = ""; public static String logsRegisterURL = ""; public static String serviceCheckerURL = "http://status.mojang.com/check"; public static void loadMainConfig() { try { TFM_Util.createDefaultConfiguration(CONFIG_FILE, plugin_file); FileConfiguration config = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder(), CONFIG_FILE)); allowFirePlace = config.getBoolean("allow_fire_place", allowFirePlace); allowFireSpread = config.getBoolean("allow_fire_spread", allowFireSpread); allowLavaDamage = config.getBoolean("allow_lava_damage", allowLavaDamage); allowLavaPlace = config.getBoolean("allow_lava_place", allowLavaPlace); allowWaterPlace = config.getBoolean("allow_water_place", allowWaterPlace); allowExplosions = config.getBoolean("allow_explosions", allowExplosions); allowTntMinecarts = config.getBoolean("allow_tnt_minecarts", allowTntMinecarts); explosiveRadius = config.getDouble("explosiveRadius", explosiveRadius); blockedCommands = config.getStringList("blocked_commands"); autoEntityWipe = config.getBoolean("auto_wipe", autoEntityWipe); nukeMonitor = config.getBoolean("nuke_monitor", nukeMonitor); nukeMonitorCountBreak = config.getInt("nuke_monitor_count_break", nukeMonitorCountBreak); nukeMonitorCountPlace = config.getInt("nuke_monitor_count_place", nukeMonitorCountPlace); nukeMonitorRange = config.getDouble("nuke_monitor_range", nukeMonitorRange); freecamTriggerCount = config.getInt("freecam_trigger_count", freecamTriggerCount); preprocessLogEnabled = config.getBoolean("preprocess_log", preprocessLogEnabled); disableNight = config.getBoolean("disable_night", disableNight); disableWeather = config.getBoolean("disable_weather", disableWeather); landminesEnabled = config.getBoolean("landmines_enabled", landminesEnabled); mp44Enabled = config.getBoolean("mp44_enabled", mp44Enabled); mobLimiterEnabled = config.getBoolean("mob_limiter_enabled", mobLimiterEnabled); mobLimiterMax = config.getInt("mob_limiter_max", mobLimiterMax); mobLimiterDisableDragon = config.getBoolean("mob_limiter_disable_dragon", mobLimiterDisableDragon); mobLimiterDisableGhast = config.getBoolean("mob_limiter_disable_ghast", mobLimiterDisableGhast); mobLimiterDisableSlime = config.getBoolean("mob_limiter_disable_slime", mobLimiterDisableSlime); mobLimiterDisableGiant = config.getBoolean("mob_limiter_disable_giant", mobLimiterDisableGiant); tossmobEnabled = config.getBoolean("tossmob_enabled", tossmobEnabled); generateFlatlands = config.getBoolean("generate_flatlands", generateFlatlands); flatlandsGenerationParams = config.getString("flatlands_generation_params", flatlandsGenerationParams); allowFliudSpread = config.getBoolean("allow_fluid_spread", allowFliudSpread); adminOnlyMode = config.getBoolean("admin_only_mode", adminOnlyMode); protectedAreasEnabled = config.getBoolean("protected_areas_enabled", protectedAreasEnabled); autoProtectSpawnpoints = config.getBoolean("auto_protect_spawnpoints", autoProtectSpawnpoints); autoProtectRadius = config.getDouble("auto_protect_radius", autoProtectRadius); host_sender_names = config.getStringList("host_sender_names"); twitterbotEnabled = config.getBoolean("twitterbot_enabled", twitterbotEnabled); twitterbotURL = config.getString("twitterbot_url", twitterbotURL); twitterbotSecret = config.getString("twitterbot_secret", twitterbotSecret); petProtectEnabled = config.getBoolean("pet_protect_enabled", petProtectEnabled); logsRegisterPassword = config.getString("logs_register_password", logsRegisterPassword); logsRegisterURL = config.getString("logs_register_url", logsRegisterURL); serviceCheckerURL = config.getString("service_checker_url", serviceCheckerURL); } catch (Exception ex) { TFM_Log.severe("Error loading main config: " + ex.getMessage()); } } public static void loadSuperadminConfig() { try { TFM_SuperadminList.backupSavedList(); TFM_SuperadminList.loadSuperadminList(); } catch (Exception ex) { TFM_Log.severe("Error loading superadmin list: " + ex.getMessage()); } } // public static List permbanned_players = new ArrayList(); public static List permbanned_ips = new ArrayList(); public static void loadPermbanConfig() { try { TFM_Util.createDefaultConfiguration(PERMBAN_FILE, plugin_file); FileConfiguration config = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder(), PERMBAN_FILE)); permbanned_players = new ArrayList(); permbanned_ips = new ArrayList(); for (String user : config.getKeys(false)) { permbanned_players.add(user.toLowerCase().trim()); List user_ips = config.getStringList(user); for (String ip : user_ips) { ip = ip.toLowerCase().trim(); if (!permbanned_ips.contains(ip)) { permbanned_ips.add(ip); } } } } catch (Exception ex) { TFM_Log.severe("Error loading permban list: " + ex.getMessage()); } } private static void registerEventHandlers() { PluginManager pm = server.getPluginManager(); pm.registerEvents(new TFM_EntityListener(), plugin); pm.registerEvents(new TFM_BlockListener(), plugin); pm.registerEvents(new TFM_PlayerListener(), plugin); pm.registerEvents(new TFM_WeatherListener(), plugin); pm.registerEvents(new TFM_ServerListener(), plugin); } private static void setAppProperties() { try { InputStream in; Properties props = new Properties(); in = plugin.getClass().getResourceAsStream("/appinfo.properties"); props.load(in); in.close(); TotalFreedomMod.pluginVersion = props.getProperty("program.VERSION"); TotalFreedomMod.buildNumber = props.getProperty("program.BUILDNUM"); TotalFreedomMod.buildDate = props.getProperty("program.BUILDDATE"); } catch (Exception ex) { TFM_Log.severe(ex); } } }