+package no.defcon.yavote;\r
+\r
+import java.io.File;\r
+\r
+import org.bukkit.ChatColor;\r
+import org.bukkit.command.Command;\r
+import org.bukkit.command.CommandSender;\r
+import org.bukkit.entity.Player;\r
+import org.bukkit.plugin.java.JavaPlugin;\r
+\r
+import org.bukkit.plugin.PluginLogger;\r
+\r
+public class YAVote extends JavaPlugin {\r
+ public PluginLogger logger;\r
+ private Votemanager manager;\r
+ \r
+ public void onDisable() {\r
+ // TODO: Stub.\r
+ }\r
+ \r
+ public void onEnable() {\r
+ logger = new PluginLogger(this);\r
+ manager = new Votemanager(this);\r
+ \r
+ // Set up default values for all missing config variables.\r
+ if ( ! getConfig().isSet("vote.timeoutSeconds") )\r
+ getConfig().set("vote.timeoutSeconds", 15*60L);\r
+ \r
+ if ( ! getConfig().isSet("vote.weather.requiredPercent") )\r
+ getConfig().set("vote.weather.requiredPercent", 33);\r
+\r
+ if ( ! getConfig().isSet("vote.time.requiredPercent") )\r
+ getConfig().set("vote.time.requiredPercent", 33);\r
+\r
+ if ( ! getConfig().isSet("vote.time.dayStart") )\r
+ getConfig().set("vote.time.dayStart", 23500);\r
+ \r
+ if ( ! getConfig().isSet("vote.time.nightStart") )\r
+ getConfig().set("vote.time.nightStart", 12500);\r
+\r
+ // Create config plugin data-dir if missing...\r
+ if(!getDataFolder().exists())\r
+ {\r
+ logger.info("Creating configuration directory");\r
+ getDataFolder().mkdirs();\r
+ }\r
+ \r
+ // If config.yml is missing, create it by writing out defaults.\r
+ if(!new File(getDataFolder(), "config.yml").exists())\r
+ {\r
+ logger.info("Creating configuration file");\r
+ saveConfig();\r
+ }\r
+ logger.info("Version " + getDescription().getVersion() + " is enabled!");\r
+ }\r
+ \r
+ public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){\r
+ if(cmd.getName().equalsIgnoreCase("vote")){\r
+ if (!(sender instanceof Player)) {\r
+ sender.sendMessage(ChatColor.RED + "You must be an online player!");\r
+ return true;\r
+ }\r
+ Player player = (Player) sender; \r
+\r
+ // TODO: Add check to verify that only one option is given.\r
+ \r
+ String voteCmd = args[0];\r
+ \r
+ if ( voteCmd.equalsIgnoreCase("status") )\r
+ {\r
+ if ( ! player.hasPermission("vote.status"))\r
+ return noPermissionsMessage(player);\r
+\r
+ if ( ! manager.isVoteRunning() )\r
+ {\r
+ sender.sendMessage("No vote is currently running.");\r
+ return true;\r
+ }\r
+ \r
+ return notImplemented(player);\r
+ }\r
+ \r
+ else if ( voteCmd.equalsIgnoreCase("cancel") )\r
+ {\r
+ if ( ! player.hasPermission("vote.cancel"))\r
+ return noPermissionsMessage(player);\r
+\r
+ if ( ! manager.isVoteRunning() )\r
+ {\r
+ if (! manager.cancelVote() )\r
+ player.sendMessage("I'm sorry, unable to cancel at this time.");\r
+ \r
+ return true;\r
+ }\r
+\r
+ return notImplemented(player);\r
+ }\r
+ else if ( voteCmd.equalsIgnoreCase("sun") || voteCmd.equalsIgnoreCase("rain") || \r
+ voteCmd.equalsIgnoreCase("day") || voteCmd.equalsIgnoreCase("night") ) \r
+ {\r
+ if ( ! manager.isVoteRunning() )\r
+ {\r
+ if ( ! testPermission(voteCmd, "start", player ))\r
+ return noPermissionsMessage(player);\r
+ \r
+ manager.startVote( voteCmd.toLowerCase(), player );\r
+ return true;\r
+ }\r
+ else\r
+ {\r
+ if ( ! manager.getVoteType().equalsIgnoreCase( voteCmd ) )\r
+ {\r
+ player.sendMessage("A vote for " + manager.getVoteType() + " is already running.");\r
+ return true;\r
+ }\r
+ \r
+ else if ( ! testPermission(voteCmd, "respond", player ))\r
+ return noPermissionsMessage(player);\r
+ \r
+ else if ( ! manager.addVote( player, true ) )\r
+ {\r
+ player.sendMessage("Oops, I was unable to count your vote!");\r
+ return true;\r
+ }\r
+ return true;\r
+ }\r
+ }\r
+ \r
+ else if ( voteCmd.equalsIgnoreCase("yes") || voteCmd.equalsIgnoreCase("no") )\r
+ {\r
+ if ( ! manager.isVoteRunning() )\r
+ {\r
+ sender.sendMessage("No vote running. Perhaps you want to start a new one?");\r
+ return true;\r
+ }\r
+ if ( ! testPermission(manager.getVoteType(), "respond", player ))\r
+ return noPermissionsMessage(player);\r
+ \r
+ if ( ! manager.addVote( player, (voteCmd.equalsIgnoreCase("yes")?true:false)) )\r
+ {\r
+ player.sendMessage("Oops, I was unable to count your vote!");\r
+ return true;\r
+ }\r
+ return true;\r
+ }\r
+ \r
+\r
+\r
+ return notImplemented(player);\r
+ }\r
+ return false; \r
+ }\r
+ \r
+ private boolean notImplemented(Player p) {\r
+ p.sendMessage("It seems I do not know how to do that yet...");\r
+ return true;\r
+ }\r
+\r
+ private boolean noPermissionsMessage( Player p ){\r
+ p.sendMessage("I'm sorry, " + p.getDisplayName() + ", I'm afraid I can't do that.");\r
+ return true;\r
+ }\r
+ \r
+ private boolean testPermission (String cmd, String action, Player p)\r
+ {\r
+ if ( ( cmd.equalsIgnoreCase("sun") ) || cmd.equalsIgnoreCase("rain") )\r
+ {\r
+ if ( p.hasPermission("vote.weather." + action ) ) return true;\r
+ else return false;\r
+ }\r
+ if ( ( cmd.equalsIgnoreCase("day") ) || cmd.equalsIgnoreCase("night") )\r
+ {\r
+ if ( p.hasPermission("vote.time." + action ) ) return true;\r
+ else return false;\r
+ }\r
+ return false;\r
+ }\r
+}\r