package tc.oc.commons.bukkit.ticket;
import java.util.List;
import javax.inject.Inject;
import com.sk89q.minecraft.util.commands.Command;
import com.sk89q.minecraft.util.commands.CommandContext;
import com.sk89q.minecraft.util.commands.CommandException;
import org.bukkit.command.CommandSender;
import tc.oc.api.docs.Game;
import tc.oc.commons.bukkit.commands.CommandUtils;
import tc.oc.commons.core.commands.Commands;
import tc.oc.commons.core.formatting.StringUtils;
public class TicketCommands implements Commands {
private final TicketBooth ticketBooth;
@Inject TicketCommands(TicketBooth ticketBooth) {
this.ticketBooth = ticketBooth;
}
@Command(
aliases = { "games" },
desc = "List all the games you can play",
min = 0,
max = 0
)
public void games(final CommandContext args, final CommandSender sender) throws CommandException {
ticketBooth.showGames(sender);
}
@Command(
aliases = { "play", "replay" },
desc = "Play a game",
usage = "[game]",
min = 0,
max = -1
)
public List<String> play(final CommandContext args, final CommandSender sender) throws CommandException {
final String name = args.argsLength() > 0 ? args.getRemainingString(0) : "";
if(args.getSuggestionContext() != null) {
return StringUtils.complete(name, ticketBooth.allGames(sender).stream().map(Game::name));
}
ticketBooth.playGame(CommandUtils.senderToPlayer(sender), name);
return null;
}
@Command(
aliases = { "leave", "quit" },
desc = "Leave the game you are currently playing, or waiting to play",
min = 0,
max = 0
)
public void leave(final CommandContext args, final CommandSender sender) throws CommandException {
ticketBooth.leaveGame(CommandUtils.senderToPlayer(sender), true);
}
@Command(
aliases = { "watch" },
desc = "Spectate a game",
usage = "[game]",
min = 0,
max = -1
)
public List<String> watch(final CommandContext args, final CommandSender sender) throws CommandException {
final String name = args.argsLength() > 0 ? args.getRemainingString(0) : "";
if(args.getSuggestionContext() != null) {
return StringUtils.complete(name, ticketBooth.allGames(sender).stream().map(Game::name));
}
ticketBooth.watchGame(CommandUtils.senderToPlayer(sender), name);
return null;
}
}