Search in sources :

Example 1 with Team

use of com.voxelgameslib.voxelgameslib.components.team.Team in project VoxelGamesLibv2 by VoxelGamesLib.

the class TeamSelectFeature method balance.

private void balance() {
    // TODO Balancing by rating
    Map<String, Integer> sizes = calcSizes();
    String large = findLargest(sizes);
    if (large == null || large.equals("")) {
        log.finer("no balancing");
        teams.stream().map(t -> t.getName() + ": " + t.getPlayers().size()).forEach(log::finer);
        return;
    }
    int largeCount = sizes.get(large);
    String small = findSmallest(sizes);
    int smallCount = sizes.get(small);
    log.finer("LARGE: " + large + " : " + largeCount);
    log.finer("SMALL: " + small + " : " + smallCount);
    if (!(largeCount == smallCount || largeCount == smallCount + 1)) {
        Team largeT = getTeam(large).orElseThrow(() -> new RuntimeException("Null team encountered"));
        Team smallT = getTeam(small).orElseThrow(() -> new RuntimeException("Null team encountered"));
        boolean switched = false;
        for (int i = largeT.getPlayers().size() - 1; i > 0; i--) {
            User player = largeT.getPlayers().get(i);
            // if(playerIsInParty) {TODO party handling for team select
            log.finer("SWITCH: " + player + " from " + large + " to " + small);
            largeT.leave(player);
            smallT.join(player, player.getRating(getPhase().getGame().getGameMode()));
            Lang.msg(player, LangKey.TEAM_AUTO_BALANCED, largeT.getName(), smallT.getName());
            switched = true;
            break;
        // }
        }
        if (!switched) {
            log.finer(largeT.getName());
            log.finer(largeT.getPlayers().size() + "");
            User player = largeT.getPlayers().get(largeT.getPlayers().size() - 1);
            largeT.leave(player);
            smallT.join(player, player.getRating(getPhase().getGame().getGameMode()));
            Lang.msg(player, LangKey.TEAM_AUTO_BALANCED, largeT.getName(), smallT.getName());
        }
        balance();
    }
}
Also used : CommandAlias(co.aikar.commands.annotation.CommandAlias) Expose(com.google.gson.annotations.Expose) LangKey(com.voxelgameslib.voxelgameslib.lang.LangKey) GameEvent(com.voxelgameslib.voxelgameslib.event.GameEvent) HashMap(java.util.HashMap) Logger(java.util.logging.Logger) Singleton(javax.inject.Singleton) DefaultGameData(com.voxelgameslib.voxelgameslib.game.DefaultGameData) Lang(com.voxelgameslib.voxelgameslib.lang.Lang) ArrayList(java.util.ArrayList) GameLeaveEvent(com.voxelgameslib.voxelgameslib.event.events.game.GameLeaveEvent) List(java.util.List) AbstractFeature(com.voxelgameslib.voxelgameslib.feature.AbstractFeature) Map(java.util.Map) Team(com.voxelgameslib.voxelgameslib.components.team.Team) Optional(java.util.Optional) FeatureCommandImplementor(com.voxelgameslib.voxelgameslib.feature.FeatureCommandImplementor) User(com.voxelgameslib.voxelgameslib.user.User) ChatColor(org.bukkit.ChatColor) CommandPermission(co.aikar.commands.annotation.CommandPermission) Nonnull(javax.annotation.Nonnull) AbstractFeatureCommand(com.voxelgameslib.voxelgameslib.feature.AbstractFeatureCommand) User(com.voxelgameslib.voxelgameslib.user.User) Team(com.voxelgameslib.voxelgameslib.components.team.Team)

Example 2 with Team

use of com.voxelgameslib.voxelgameslib.components.team.Team in project VoxelGamesLibv2 by VoxelGamesLib.

the class TeamSelectFeature method disable.

@Override
public void disable() {
    Map<String, Integer> sizes = calcSizes();
    // add everyone who isn't in a team yet to the smallest team
    for (User user : getPhase().getGame().getPlayers()) {
        if (!getTeam(user).isPresent()) {
            Team t = getTeam(findSmallest(sizes)).orElseThrow(() -> new RuntimeException("Null team encountered"));
            t.join(user, user.getRating(getPhase().getGame().getGameMode()));
            Lang.msg(user, LangKey.TEAM_AUTO_ASSIGNED, t.getName());
            sizes.put(t.getName(), sizes.get(t.getName()) + 1);
        }
    }
    // make teams balanced
    balance();
    // save teams for next phase
    DefaultGameData defaultGameData = getPhase().getGame().getGameData(DefaultGameData.class).orElse(new DefaultGameData());
    defaultGameData.teams = teams;
    getPhase().getGame().putGameData(defaultGameData);
}
Also used : User(com.voxelgameslib.voxelgameslib.user.User) Team(com.voxelgameslib.voxelgameslib.components.team.Team) DefaultGameData(com.voxelgameslib.voxelgameslib.game.DefaultGameData)

Example 3 with Team

use of com.voxelgameslib.voxelgameslib.components.team.Team in project VoxelGamesLibv2 by VoxelGamesLib.

the class TeamSelectFeature method enable.

@Override
public void enable() {
    // create default teams
    List<String> teamNames = new ArrayList<>();
    teamNames.add("BLUE");
    teamNames.add("RED");
    teamNames.add("GREEN");
    teamNames.add("YELLOW");
    teamNames.add("LIGHT_PURPLE");
    teamNames.add("BLACK");
    List<ChatColor> teamColors = new ArrayList<>();
    teamColors.add(ChatColor.BLUE);
    teamColors.add(ChatColor.RED);
    teamColors.add(ChatColor.GREEN);
    teamColors.add(ChatColor.YELLOW);
    teamColors.add(ChatColor.LIGHT_PURPLE);
    teamColors.add(ChatColor.BLACK);
    for (int i = 0; i < teamCount; i++) {
        teams.add(new Team(teamSize, teamNames.get(i), teamColors.get(i), getPhase().getGame()));
    }
}
Also used : ArrayList(java.util.ArrayList) Team(com.voxelgameslib.voxelgameslib.components.team.Team) ChatColor(org.bukkit.ChatColor)

Example 4 with Team

use of com.voxelgameslib.voxelgameslib.components.team.Team in project VoxelGamesLibv2 by VoxelGamesLib.

the class AbstractPhase method checkEnd.

private void checkEnd() {
    // check all victory conditions
    User winner = null;
    Team winnerTeam = null;
    for (VictoryCondition victoryCondition : victoryConditions) {
        if (!victoryCondition.completed()) {
            return;
        }
        if (victoryCondition.getWinner() != null) {
            if (!victoryCondition.getWinner().equals(winner)) {
                if (winner == null) {
                    if (winnerTeam != null && !winnerTeam.contains(victoryCondition.getWinner())) {
                        throw new VoxelGameLibException(victoryCondition.getName() + " defined a winner even tho we already have a winning team!");
                    }
                    winner = victoryCondition.getWinner();
                } else {
                    throw new VoxelGameLibException(victoryCondition.getName() + " defined a different winner than one of the conditions before it!");
                }
            }
        }
        if (victoryCondition.getWinnerTeam() != null) {
            if (!victoryCondition.getWinnerTeam().equals(winnerTeam)) {
                if (winnerTeam == null) {
                    if (winner != null && !victoryCondition.getWinnerTeam().contains(winner)) {
                        throw new VoxelGameLibException(victoryCondition.getName() + " defined a winning team even tho we already have a winning user!");
                    } else {
                        winnerTeam = victoryCondition.getWinnerTeam();
                    }
                } else {
                    throw new VoxelGameLibException(victoryCondition.getName() + " defined a different winning team than one of the conditions before it!");
                }
            }
        }
    }
    // all done, end this game
    getGame().endGame(winnerTeam, winner);
}
Also used : User(com.voxelgameslib.voxelgameslib.user.User) VoxelGameLibException(com.voxelgameslib.voxelgameslib.exception.VoxelGameLibException) Team(com.voxelgameslib.voxelgameslib.components.team.Team) VictoryCondition(com.voxelgameslib.voxelgameslib.condition.VictoryCondition) EmptyVictoryCondition(com.voxelgameslib.voxelgameslib.condition.conditions.EmptyVictoryCondition)

Aggregations

Team (com.voxelgameslib.voxelgameslib.components.team.Team)4 User (com.voxelgameslib.voxelgameslib.user.User)3 DefaultGameData (com.voxelgameslib.voxelgameslib.game.DefaultGameData)2 ArrayList (java.util.ArrayList)2 ChatColor (org.bukkit.ChatColor)2 CommandAlias (co.aikar.commands.annotation.CommandAlias)1 CommandPermission (co.aikar.commands.annotation.CommandPermission)1 Expose (com.google.gson.annotations.Expose)1 VictoryCondition (com.voxelgameslib.voxelgameslib.condition.VictoryCondition)1 EmptyVictoryCondition (com.voxelgameslib.voxelgameslib.condition.conditions.EmptyVictoryCondition)1 GameEvent (com.voxelgameslib.voxelgameslib.event.GameEvent)1 GameLeaveEvent (com.voxelgameslib.voxelgameslib.event.events.game.GameLeaveEvent)1 VoxelGameLibException (com.voxelgameslib.voxelgameslib.exception.VoxelGameLibException)1 AbstractFeature (com.voxelgameslib.voxelgameslib.feature.AbstractFeature)1 AbstractFeatureCommand (com.voxelgameslib.voxelgameslib.feature.AbstractFeatureCommand)1 FeatureCommandImplementor (com.voxelgameslib.voxelgameslib.feature.FeatureCommandImplementor)1 Lang (com.voxelgameslib.voxelgameslib.lang.Lang)1 LangKey (com.voxelgameslib.voxelgameslib.lang.LangKey)1 HashMap (java.util.HashMap)1 List (java.util.List)1