]> git.defcon.no Git - YAVote/blob - src/no/defcon/yavote/YAVote.java
98433ba107aa0b09834bb09a930649c1b46fd49c
[YAVote] / src / no / defcon / yavote / YAVote.java
1 package no.defcon.yavote;
2
3 import java.io.File;
4
5 import org.bukkit.ChatColor;
6 import org.bukkit.command.Command;
7 import org.bukkit.command.CommandSender;
8 import org.bukkit.entity.Player;
9 import org.bukkit.plugin.java.JavaPlugin;
10
11 import org.bukkit.plugin.PluginLogger;
12
13 import org.bukkit.event.Listener;
14 import org.bukkit.event.EventHandler;
15 import org.bukkit.event.player.PlayerQuitEvent;
16
17 public class YAVote extends JavaPlugin implements Listener {
18 public PluginLogger logger;
19 private Votemanager manager;
20
21 public void onDisable() {
22 // TODO: Stub.
23 }
24
25 public void onEnable() {
26 logger = new PluginLogger(this);
27 manager = new Votemanager(this);
28
29 // Set up default values for all missing config variables.
30 if ( ! getConfig().isSet("vote.timeoutSeconds") )
31 getConfig().set("vote.timeoutSeconds", 15*60L);
32
33 if ( ! getConfig().isSet("vote.weather.requiredPercent") )
34 getConfig().set("vote.weather.requiredPercent", 33);
35
36 if ( ! getConfig().isSet("vote.time.requiredPercent") )
37 getConfig().set("vote.time.requiredPercent", 33);
38
39 if ( ! getConfig().isSet("vote.time.dayStart") )
40 getConfig().set("vote.time.dayStart", 23500);
41
42 if ( ! getConfig().isSet("vote.time.nightStart") )
43 getConfig().set("vote.time.nightStart", 12500);
44
45 // Create config plugin data-dir if missing...
46 if(!getDataFolder().exists())
47 {
48 logger.info("Creating configuration directory");
49 getDataFolder().mkdirs();
50 }
51
52 // If config.yml is missing, create it by writing out defaults.
53 if(!new File(getDataFolder(), "config.yml").exists())
54 {
55 logger.info("Creating configuration file");
56 saveConfig();
57 }
58
59 getServer().getPluginManager().registerEvents(this, this);
60
61 logger.info("Version " + getDescription().getVersion() + " is enabled!");
62 }
63
64 @EventHandler
65 public void onLogout(PlayerQuitEvent event)
66 {
67 logger.info("Triggered onLogout() with " + getServer().getOnlinePlayers().length + " players online.");
68 manager.removeVote( event.getPlayer() );
69 }
70
71 public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
72 if(cmd.getName().equalsIgnoreCase("vote")){
73 if (!(sender instanceof Player)) {
74 sender.sendMessage(ChatColor.RED + "You must be an online player!");
75 return true;
76 }
77 Player player = (Player) sender;
78
79 // TODO: Add check to verify that only one option is given.
80
81 String voteCmd = args[0];
82
83 if ( voteCmd.equalsIgnoreCase("status") )
84 {
85 if ( ! player.hasPermission("vote.status"))
86 return noPermissionsMessage(player);
87
88 if ( ! manager.isVoteRunning() )
89 {
90 sender.sendMessage("No vote is currently running.");
91 return true;
92 }
93
94 return notImplemented(player);
95 }
96
97 else if ( voteCmd.equalsIgnoreCase("cancel") )
98 {
99 if ( ! player.hasPermission("vote.cancel"))
100 return noPermissionsMessage(player);
101
102 if ( ! manager.isVoteRunning() )
103 {
104 if (! manager.cancelVote() )
105 player.sendMessage("I'm sorry, unable to cancel at this time.");
106
107 return true;
108 }
109
110 return notImplemented(player);
111 }
112 else if ( voteCmd.equalsIgnoreCase("sun") || voteCmd.equalsIgnoreCase("rain") || voteCmd.equalsIgnoreCase("storm") ||
113 voteCmd.equalsIgnoreCase("day") || voteCmd.equalsIgnoreCase("night") )
114 {
115 if ( ! manager.isVoteRunning() )
116 {
117 if ( ! testPermission(voteCmd, "start", player ))
118 return noPermissionsMessage(player);
119
120 manager.startVote( voteCmd.toLowerCase(), player );
121 return true;
122 }
123 else
124 {
125 if ( ! manager.getVoteType().equalsIgnoreCase( voteCmd ) )
126 {
127 player.sendMessage("A vote for " + manager.getVoteType() + " is already running.");
128 return true;
129 }
130
131 else if ( ! testPermission(voteCmd, "respond", player ))
132 return noPermissionsMessage(player);
133
134 else if ( ! manager.addVote( player, true ) )
135 {
136 player.sendMessage("Oops, I was unable to count your vote!");
137 return true;
138 }
139 return true;
140 }
141 }
142
143 else if ( voteCmd.equalsIgnoreCase("yes") || voteCmd.equalsIgnoreCase("no") )
144 {
145 if ( ! manager.isVoteRunning() )
146 {
147 sender.sendMessage("No vote running. Perhaps you want to start a new one?");
148 return true;
149 }
150 if ( ! testPermission(manager.getVoteType(), "respond", player ))
151 return noPermissionsMessage(player);
152
153 if ( ! manager.addVote( player, (voteCmd.equalsIgnoreCase("yes")?true:false)) )
154 {
155 player.sendMessage("Oops, I was unable to count your vote!");
156 return true;
157 }
158 return true;
159 }
160
161
162
163 return notImplemented(player);
164 }
165 return false;
166 }
167
168 private boolean notImplemented(Player p) {
169 p.sendMessage("It seems I do not know how to do that yet...");
170 return true;
171 }
172
173 private boolean noPermissionsMessage( Player p ){
174 p.sendMessage("I'm sorry, " + p.getDisplayName() + ", I'm afraid I can't do that.");
175 return true;
176 }
177
178 private boolean testPermission (String cmd, String action, Player p)
179 {
180 if ( ( cmd.equalsIgnoreCase("sun") ) || cmd.equalsIgnoreCase("rain") || cmd.equalsIgnoreCase("storm") )
181 {
182 if ( p.hasPermission("vote.weather." + action ) ) return true;
183 else return false;
184 }
185 if ( ( cmd.equalsIgnoreCase("day") ) || cmd.equalsIgnoreCase("night") )
186 {
187 if ( p.hasPermission("vote.time." + action ) ) return true;
188 else return false;
189 }
190 return false;
191 }
192 }