86 lines
3.3 KiB
Java
86 lines
3.3 KiB
Java
package tc.oc.pgm.goals;
|
|
|
|
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.ChatColor;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.entity.Player;
|
|
import tc.oc.pgm.match.Match;
|
|
import tc.oc.pgm.match.MatchPlayer;
|
|
import tc.oc.pgm.commands.CommandUtils;
|
|
import tc.oc.pgm.teams.Team;
|
|
import tc.oc.pgm.teams.TeamMatchModule;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import static tc.oc.commons.core.util.Nullables.castOrNull;
|
|
|
|
public class GoalCommands {
|
|
private GoalCommands() {}
|
|
|
|
@Command(
|
|
aliases = {"proximity"},
|
|
desc = "Show stats about how close each competitor has been to each objective",
|
|
min = 0,
|
|
max = 0
|
|
)
|
|
@CommandPermissions("pgm.proximity")
|
|
public static void proximity(CommandContext args, CommandSender sender) throws CommandException {
|
|
Match match = CommandUtils.getMatch(sender);
|
|
TeamMatchModule tmm = CommandUtils.getMatchModule(TeamMatchModule.class, sender);
|
|
|
|
MatchPlayer matchPlayer = sender instanceof Player ? match.getPlayer((Player) sender) : null;
|
|
if(matchPlayer != null && matchPlayer.isParticipating()) {
|
|
throw new CommandException("The /proximity command is only available to observers");
|
|
}
|
|
|
|
List<String> lines = new ArrayList<>();
|
|
for(Team team : tmm.getTeams()) {
|
|
boolean teamHeader = false;
|
|
final GoalMatchModule gmm = match.needMatchModule(GoalMatchModule.class);
|
|
|
|
for(Goal<?> goal : gmm.getGoals(team)) {
|
|
if(goal instanceof TouchableGoal && goal.isVisible()) {
|
|
TouchableGoal touchable = (TouchableGoal) goal;
|
|
ProximityGoal proximity = castOrNull(goal, ProximityGoal.class);
|
|
|
|
if(!teamHeader) {
|
|
lines.add(team.getColoredName());
|
|
teamHeader = true;
|
|
}
|
|
|
|
String line = ChatColor.WHITE + " " + touchable.getColoredName() + ChatColor.WHITE;
|
|
|
|
if(touchable.isCompleted(team)) {
|
|
line += ChatColor.GREEN + " COMPLETE";
|
|
} else if(touchable.hasTouched(team)) {
|
|
line += ChatColor.YELLOW + " TOUCHED";
|
|
} else {
|
|
line += ChatColor.RED + " UNTOUCHED";
|
|
}
|
|
|
|
if(proximity != null && proximity.isProximityRelevant(team)) {
|
|
ProximityMetric metric = proximity.getProximityMetric(team);
|
|
if(metric != null) {
|
|
line += ChatColor.GRAY + " " + metric.description() + ": " +
|
|
ChatColor.AQUA + String.format("%.2f", proximity.getMinimumDistance(team));
|
|
}
|
|
}
|
|
|
|
lines.add(line);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(lines.isEmpty()) {
|
|
sender.sendMessage(ChatColor.RED + "There are no objectives that track proximity");
|
|
} else {
|
|
sender.sendMessage(lines.toArray(new String[lines.size()]));
|
|
}
|
|
}
|
|
|
|
}
|