package tc.oc.pgm.commands;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import tc.oc.pgm.PGM;
import tc.oc.pgm.map.PGMMap;
import tc.oc.pgm.polls.*;
import com.sk89q.minecraft.util.commands.*;
public class PollCommands {
@Command(
aliases = {"poll"},
desc = "Poll commands",
min = 1,
max = -1
)
@NestedCommand({PollSubCommands.class})
public static void pollCommand() {
}
@Command(
aliases = {"vote"},
desc = "Vote in a running poll.",
usage = "[yes|no]",
min = 1,
max = 1
)
@CommandPermissions("poll.vote")
public static void vote(CommandContext args, CommandSender sender) throws CommandException {
Player voter = tc.oc.commons.bukkit.commands.CommandUtils.senderToPlayer(sender);
Poll currentPoll = PGM.getPollManager().getPoll();
if(currentPoll != null) {
if(args.getString(0).equalsIgnoreCase("yes")) {
currentPoll.voteFor(voter.getName());
sender.sendMessage(ChatColor.GREEN + "You have voted for the current poll.");
} else if (args.getString(0).equalsIgnoreCase("no")) {
currentPoll.voteAgainst(voter.getName());
sender.sendMessage(ChatColor.RED + "You have voted against the current poll.");
} else {
throw new CommandException("Accepted values: yes|no");
}
} else {
throw new CommandException("There is currently no poll running.");
}
}
@Command(
aliases = {"veto"},
desc = "Veto the current poll.",
min = 0,
max = 0
)
@CommandPermissions("poll.veto")
public static void veto(CommandContext args, CommandSender sender) throws CommandException {
PollManager pollManager = PGM.getPollManager();
if(pollManager.isPollRunning()) {
pollManager.endPoll(PollEndReason.Cancelled);
Bukkit.getServer().broadcastMessage(ChatColor.RED + "Poll vetoed by " + sender.getName());
} else {
throw new CommandException("There is currently no poll running.");
}
}
public static Poll getCurrentPoll() throws CommandException {
Poll poll = PGM.getPollManager().getPoll();
if(poll == null) {
throw new CommandException("There is currently no poll running.");
}
return poll;
}
public static class PollSubCommands {
@Command(
aliases = {"kick"},
desc = "Start a poll to kick another player.",
usage = "[player]",
min = 1,
max = 1
)
@CommandPermissions("poll.kick")
public static void pollKick(CommandContext args, CommandSender sender) throws CommandException {
Player initiator = tc.oc.commons.bukkit.commands.CommandUtils.senderToPlayer(sender);
Player player = tc.oc.commons.bukkit.commands.CommandUtils.findOnlinePlayer(args, sender, 0);
if(player.hasPermission("pgm.poll.kick.exempt") && !initiator.hasPermission("pgm.poll.kick.override")) {
throw new CommandException(player.getName() + " may not be poll kicked.");
} else {
startPoll(new PollKick(PGM.getPollManager(), Bukkit.getServer(), initiator.getName(), player.getName()));
}
}
@Command(
aliases = {"next"},
desc = "Start a poll to change the next map.",
usage = "[map name]",
min = 1,
max = -1
)
@CommandPermissions("poll.next")
public static void pollNext(CommandContext args, CommandSender sender) throws CommandException {
Player initiator = tc.oc.commons.bukkit.commands.CommandUtils.senderToPlayer(sender);
PGMMap nextMap = CommandUtils.getMap(args.getJoinedStrings(0), sender);
startPoll(new PollNextMap(PGM.getPollManager(), Bukkit.getServer(), initiator.getName(), PGM.getMatchManager(), nextMap));
}
private static void startPoll(Poll poll) throws CommandException {
PollManager pollManager = PGM.getPollManager();
if(pollManager.isPollRunning()) {
throw new CommandException("Another poll is already running.");
}
pollManager.startPoll(poll);
Bukkit.getServer().broadcastMessage(ChatColor.RED + poll.getInitiator() + ChatColor.YELLOW + " has started a poll to " + poll.getActionString(ChatColor.YELLOW));
}
}
}