ProjectAres/Tourney/src/net/anxuiz/tourney/ReadyManager.java

73 lines
2.1 KiB
Java

package net.anxuiz.tourney;
import java.util.HashSet;
import javax.inject.Inject;
import com.google.common.base.Preconditions;
import com.google.common.collect.Iterables;
import net.anxuiz.tourney.event.PartyReadyStatusChangeEvent;
import org.bukkit.Bukkit;
import tc.oc.pgm.match.Match;
import tc.oc.pgm.match.Party;
import tc.oc.pgm.match.inject.MatchScoped;
@MatchScoped
public class ReadyManager {
private final Match match;
private final TeamManager teamManager;
private final HashSet<Party> readyParties = new HashSet<>();
@Inject ReadyManager(Match match, TeamManager teamManager) {
this.match = match;
this.teamManager = teamManager;
}
public void remove(Party party) {
readyParties.remove(party);
}
/**
* Determines whether or not the specified {@link Party} is ready.
*
* @param team The team to check.
* @return Whether or not the team is ready.
*/
public boolean isReady(Party team) {
return this.readyParties.contains(team);
}
/**
* Marks the specified {@link Party} as ready.
*
* @param team The team to mark.
*/
public void markReady(Party team) {
if (readyParties.contains(Preconditions.checkNotNull(team, "Team"))) return;
this.readyParties.add(team);
Bukkit.getPluginManager().callEvent(new PartyReadyStatusChangeEvent(false, team));
}
/**
* Marks the specified {@link Party} as not ready.
*
* @param team The team to mark.
*/
public void markNotReady(Party team) {
if (!readyParties.contains(Preconditions.checkNotNull(team, "Team"))) return;
this.readyParties.remove(team);
Bukkit.getPluginManager().callEvent(new PartyReadyStatusChangeEvent(true, team));
}
/**
* Determines whether or not the current match is ready to begin.
*
* @return Whether or not the current match is ready to begin.
*/
public boolean readyToStart() {
return isReady(match.getDefaultParty()) &&
Iterables.all(teamManager.getMappedTeams(),
ReadyManager.this::isReady);
}
}