package in.twizmwaz.cardinal.module.modules.gameComplete;

import in.twizmwaz.cardinal.GameHandler;
import in.twizmwaz.cardinal.event.CardinalDeathEvent;
import in.twizmwaz.cardinal.event.ScoreUpdateEvent;
import in.twizmwaz.cardinal.event.objective.ObjectiveCompleteEvent;
import in.twizmwaz.cardinal.module.GameObjective;
import in.twizmwaz.cardinal.module.TaskedModule;
import in.twizmwaz.cardinal.module.modules.blitz.Blitz;
import in.twizmwaz.cardinal.module.modules.matchTimer.MatchTimer;
import in.twizmwaz.cardinal.module.modules.score.ScoreModule;
import in.twizmwaz.cardinal.module.modules.team.TeamModule;
import in.twizmwaz.cardinal.module.modules.timeLimit.TimeLimit;
import in.twizmwaz.cardinal.util.TeamUtils;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.HandlerList;

public class GameComplete implements TaskedModule {

    protected GameComplete() {
    }

    @Override
    public void unload() {
        HandlerList.unregisterAll(this);
    }

    @EventHandler
    public void onObjectiveComplete(ObjectiveCompleteEvent event) {
        for (TeamModule team : TeamUtils.getTeams()) {
            boolean skipTeam = false;
            for (GameObjective condition : TeamUtils.getShownObjectives(team)) {
                if (!condition.isComplete() && !condition.equals(event.getObjective())) skipTeam = true;
            }
            if (TeamUtils.getShownObjectives(team).size() == 0 || skipTeam) continue;
            GameHandler.getGameHandler().getMatch().end(team);
        }
    }

    @EventHandler
    public void onScoreUpdate(ScoreUpdateEvent event) {
        if (ScoreModule.matchHasMax()) {
            if (event.getScoreModule().getScore() >= ScoreModule.max()) {
                GameHandler.getGameHandler().getMatch().end(event.getScoreModule().getTeam());
            }
        }
    }

    @EventHandler(priority = EventPriority.HIGHEST)
    public void onCardinalDeath(CardinalDeathEvent event) {
        if (Blitz.matchIsBlitz()) {
            boolean win = true;
            TeamModule winner = null;
            for (TeamModule team : TeamUtils.getTeams()) {
                if (!team.isObserver()) {
                    if (winner == null && team.size() > 0) {
                        winner = team;
                    } else if (winner != null && team.size() > 0) {
                        win = false;
                    }
                }
            }
            if (win) {
                GameHandler.getGameHandler().getMatch().end(winner);
            }
        }
    }

    @Override
    public void run() {
        if (TimeLimit.getMatchTimeLimit() != 0 && MatchTimer.getTimeInSeconds() >= TimeLimit.getMatchTimeLimit()) {
            GameHandler.getGameHandler().getMatch().end(TimeLimit.getMatchWinner());
        }
    }
}

@@ -143,24 +143,81 @@
 DeathEvent;%0A
+import in.twizmwaz.cardinal.event.PlayerChangeTeamEvent;%0A
 import in.tw
@@ -775,16 +775,42 @@
 mUtils;%0A
+import org.bukkit.Bukkit;%0A
 import o
@@ -2030,35 +2030,41 @@
 d on
-CardinalDeath(CardinalDeath
+PlayerChangeTeam(PlayerChangeTeam
 Even

Fix detection for the end of a blitz match