package tc.oc.pgm.join; import javax.inject.Singleton; import com.sk89q.minecraft.util.commands.Command; import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.minecraft.util.commands.CommandException; import com.sk89q.minecraft.util.commands.CommandPermissions; import org.bukkit.command.CommandSender; import tc.oc.commons.core.commands.Commands; import tc.oc.pgm.PGMTranslations; import tc.oc.pgm.commands.CommandUtils; import tc.oc.pgm.match.Competitor; import tc.oc.pgm.match.Match; import tc.oc.pgm.match.MatchPlayer; import tc.oc.pgm.teams.TeamMatchModule; @Singleton public class JoinCommands implements Commands { @Command( aliases = { "join" }, desc = "Joins the current match", usage = "[team] - defaults to random", flags = "f", min = 0, max = -1 ) @CommandPermissions(JoinMatchModule.JOIN_PERMISSION) public void join(CommandContext args, CommandSender sender) throws CommandException { MatchPlayer player = CommandUtils.senderToMatchPlayer(sender); Match match = player.getMatch(); JoinMatchModule jmm = match.needMatchModule(JoinMatchModule.class); TeamMatchModule tmm = match.getMatchModule(TeamMatchModule.class); boolean force = sender.hasPermission("pgm.join.force") && args.hasFlag('f'); Competitor chosenParty = null; if(args.argsLength() > 0) { if(args.getJoinedStrings(0).trim().toLowerCase().startsWith("obs")) { observe(args, sender); return; } else if(tmm != null) { // player wants to join a specific team chosenParty = tmm.bestFuzzyMatch(args.getJoinedStrings(0)); if(chosenParty == null) throw new CommandException(PGMTranslations.get().t("command.teamNotFound", sender)); } } jmm.requestJoin(player, force ? JoinMethod.FORCE : JoinMethod.USER, chosenParty); } public static final String OBSERVE_COMMAND = "observe"; @Command( aliases = { OBSERVE_COMMAND, "obs", "spectate" }, desc = "Observe the current match", min = 0, max = 0 ) @CommandPermissions(JoinMatchModule.JOIN_PERMISSION) public void observe(CommandContext args, CommandSender sender) throws CommandException { final MatchPlayer player = CommandUtils.senderToMatchPlayer(sender); player.getMatch().needMatchModule(JoinMatchModule.class).requestObserve(player); } }