package net.anxuiz.tourney.listener; import com.google.common.base.Preconditions; import com.google.common.collect.Iterables; import com.sk89q.minecraft.util.commands.ChatColor; import net.anxuiz.tourney.KDMSession; import net.anxuiz.tourney.TeamManager; import net.anxuiz.tourney.Tourney; import net.anxuiz.tourney.TourneyState; import org.apache.commons.lang.WordUtils; import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import java.time.Duration; import tc.oc.api.docs.Entrant; import tc.oc.pgm.cycle.CycleMatchModule; import tc.oc.pgm.events.CycleEvent; import tc.oc.pgm.events.MatchEndEvent; import tc.oc.pgm.match.Match; import tc.oc.pgm.match.MatchState; import tc.oc.pgm.victory.VictoryMatchModule; public class KDMListener implements Listener { private KDMSession session; public KDMListener(final KDMSession session) { this.session = Preconditions.checkNotNull(session, "Session"); } @EventHandler(priority = EventPriority.HIGH) public void onMatchCycle(CycleEvent event) { Tourney plugin = Tourney.get(); if (event.getOldMatch().matchState().equals(MatchState.Finished)) { plugin.setState(TourneyState.ENABLED_WAITING_FOR_TEAMS); TeamManager teamManager = plugin.getMatchManager().getTeamManager(); teamManager.assignTeams(this.session.getEntrants()); } else { plugin.clearKDMSession(); } } @EventHandler(priority = EventPriority.LOW) public void onMatchEnd(MatchEndEvent event) { Match match = event.getMatch(); Tourney plugin = Tourney.get(); this.session.appendMatch(match, plugin.getMatchManager().getTeamManager().teamToEntrant(Iterables.getOnlyElement(event.getMatch().needMatchModule(VictoryMatchModule.class).winners(), null))); Entrant winningParticipation = this.session.calculateWinner(); int matchesPlayed = this.session.getMatchesPlayed(); if (winningParticipation != null) { Bukkit.broadcastMessage(ChatColor.YELLOW + "A winner has been determined!"); Bukkit.broadcastMessage(ChatColor.AQUA + WordUtils.capitalize(winningParticipation.team().name()) + ChatColor.RESET + ChatColor.YELLOW + " wins! Congratulations!"); plugin.clearKDMSession(); } else if (matchesPlayed < 3) { Bukkit.broadcastMessage(ChatColor.YELLOW + "A winner has not yet been determined! Beginning match #" + (matchesPlayed + 1) + "..."); match.needMatchModule(CycleMatchModule.class).startCountdown(Duration.ofSeconds(15), session.getMap()); } else { Bukkit.broadcastMessage(ChatColor.YELLOW + "There is a tie! Congratulations to both teams!"); Tourney.get().clearKDMSession(); } } }