Search in sources :

Example 11 with Translatable

use of com.palmergames.bukkit.towny.object.Translatable in project SiegeWar by TownyAdvanced.

the class SiegeWarBannerControlUtil method addNewBannerControlSession.

private static void addNewBannerControlSession(Siege siege, final Player player, Resident resident, SiegeSide siegeSide) {
    // Add session
    int sessionDurationMillis = (int) (SiegeWarSettings.getWarSiegeBannerControlSessionDurationMinutes() * TimeMgmt.ONE_MINUTE_IN_MILLIS);
    long sessionEndTime = System.currentTimeMillis() + sessionDurationMillis;
    BannerControlSession bannerControlSession = new BannerControlSession(resident, player, siegeSide, sessionEndTime);
    siege.addBannerControlSession(player, bannerControlSession);
    // Notify Player in console
    String messageKey = SiegeWarSettings.isTrapWarfareMitigationEnabled() ? "msg_siege_war_banner_control_session_started_with_altitude" : "msg_siege_war_banner_control_session_started";
    String sessionDurationText = TimeMgmt.getFormattedTimeValue(sessionDurationMillis);
    Messaging.sendMsg(player, Translatable.of(messageKey, TownySettings.getTownBlockSize(), SiegeWarSettings.getBannerControlVerticalDistanceUpBlocks(), SiegeWarSettings.getBannerControlVerticalDistanceDownBlocks(), sessionDurationText));
    // Notify player in action bar
    ChatColor bossBarMessageColor = ChatColor.valueOf(SiegeWarSettings.getBannerControlCaptureMessageColor().toUpperCase());
    String actionBarMessage = bossBarMessageColor + Translatable.of("msg_siege_war_banner_control_remaining_session_time", sessionDurationText).forLocale(bannerControlSession.getPlayer());
    BossBarUtil.updateBannerCapBossBar(bannerControlSession.getPlayer(), actionBarMessage, bannerControlSession);
    CosmeticUtil.evaluateBeacon(player, siege);
    // If this is a switching session, notify participating nations/towns
    if (siegeSide != siege.getBannerControllingSide()) {
        boolean firstControlSwitchingSession = true;
        for (BannerControlSession otherSession : siege.getBannerControlSessions().values()) {
            if (otherSession != bannerControlSession && otherSession.getSiegeSide() != siege.getBannerControllingSide()) {
                firstControlSwitchingSession = false;
                break;
            }
        }
        if (firstControlSwitchingSession) {
            Translatable message = siegeSide == SiegeSide.ATTACKERS ? Translatable.of("msg_siege_war_attacking_troops_at_siege_banner", siege.getTown().getFormattedName()) : Translatable.of("msg_siege_war_defending_troops_at_siege_banner", siege.getTown().getFormattedName());
            SiegeWarNotificationUtil.informSiegeParticipants(siege, message);
        }
    }
}
Also used : BannerControlSession(com.gmail.goosius.siegewar.objects.BannerControlSession) Translatable(com.palmergames.bukkit.towny.object.Translatable) ChatColor(org.bukkit.ChatColor)

Example 12 with Translatable

use of com.palmergames.bukkit.towny.object.Translatable in project SiegeWar by TownyAdvanced.

the class SiegeWarScoringUtil method awardPenaltyPoints.

/**
 * This method applies penalty battle points to a player if they are in the given siegezone
 * Offline players will also be punished
 *
 * @param residentIsAttacker is the resident an attacker or defender?
 * @param player the player who the penalty relates to
 * @param siege the siege to apply the penalty to
 */
public static void awardPenaltyPoints(boolean residentIsAttacker, Player player, Siege siege) {
    // No penalty points without an active battle session
    if (!BattleSession.getBattleSession().isActive())
        return;
    // Give battle points to opposing side
    int battlePoints;
    if (residentIsAttacker) {
        battlePoints = SiegeWarSettings.getWarBattlePointsForAttackerDeath();
        battlePoints = applyBattlePointsPenaltyForBannerControl(true, battlePoints, siege);
        siege.adjustDefenderBattlePoints(battlePoints);
    } else {
        battlePoints = SiegeWarSettings.getWarBattlePointsForDefenderDeath();
        battlePoints = applyBattlePointsPenaltyForBannerControl(false, battlePoints, siege);
        siege.adjustAttackerBattlePoints(battlePoints);
    }
    // Save siege to db
    SiegeController.saveSiege(siege);
    // Generate message
    String langKey;
    Translatable message;
    Player killer = getPlayerKiller(player);
    if (killer != null) {
        langKey = residentIsAttacker ? "msg_siege_war_attacker_killed_by_player" : "msg_siege_war_defender_killed_by_player";
        message = Translatable.of(langKey, siege.getTown().getName(), player.getName(), killer.getName(), Math.abs(battlePoints));
    } else {
        langKey = residentIsAttacker ? Translation.of("msg_siege_war_attacker_death") : Translation.of("msg_siege_war_defender_death");
        message = Translatable.of(langKey, siege.getTown().getName(), player.getName(), Math.abs(battlePoints));
    }
    // Send messages to siege participants
    SiegeWarNotificationUtil.informSiegeParticipants(siege, message);
}
Also used : Player(org.bukkit.entity.Player) Translatable(com.palmergames.bukkit.towny.object.Translatable)

Example 13 with Translatable

use of com.palmergames.bukkit.towny.object.Translatable in project SiegeWar by TownyAdvanced.

the class SiegeWarWallBreachUtil method awardWallBreachBonuses.

/**
 * Award wall-breach bonuses if conditions are met.
 *
 * Conditions:
 * - Town hostile team has Banner Control.
 * - Player is the BC list.
 * - Player is at the homeblock.
 * - Player did not already get the award in this Battle Session.
 *
 * @param siege the siege
 */
private static void awardWallBreachBonuses(Siege siege) {
    if (SiegeWarSettings.getWallBreachBonusBattlePoints() == 0)
        return;
    // Town-hostile team must have banner control
    switch(siege.getBannerControllingSide()) {
        case NOBODY:
            return;
        case ATTACKERS:
            if (siege.getSiegeType() == SiegeType.REVOLT || siege.getSiegeType() == SiegeType.LIBERATION)
                return;
            break;
        case DEFENDERS:
            if (siege.getSiegeType() == SiegeType.CONQUEST || siege.getSiegeType() == SiegeType.SUPPRESSION)
                return;
            break;
    }
    // Cycle banner controlling residents
    Player player;
    Set<Resident> newAwardees = new HashSet<>();
    Set<Resident> previousAwardees = new HashSet<>(siege.getWallBreachBonusAwardees());
    for (Resident candidate : siege.getBannerControllingResidents()) {
        // Candidate must be at the homeblock of the besieged town
        player = TownyAPI.getInstance().getPlayer(candidate);
        TownBlock townblockWherePlayerIsLocated = TownyAPI.getInstance().getTownBlock(player);
        if (townblockWherePlayerIsLocated == null)
            continue;
        if (townblockWherePlayerIsLocated != siege.getTown().getHomeBlockOrNull())
            continue;
        // Candidate must not already have award
        if (previousAwardees.contains(candidate)) {
            Messaging.sendErrorMsg(player, Translatable.of("msg_err_already_received_wall_breach_bonus"));
            continue;
        }
        // Mark candidate to receive bonus
        newAwardees.add(candidate);
        // Notify player
        Messaging.sendMsg(player, Translatable.of("msg_wall_breach_bonus_awarded"));
    }
    // Grant bonuses!
    if (newAwardees.size() > 0) {
        // Adjust Battle Points
        int battlePointsBonus = SiegeWarSettings.getWallBreachBonusBattlePoints() * newAwardees.size();
        if (siege.getBannerControllingSide() == SiegeSide.ATTACKERS) {
            siege.adjustAttackerBattlePoints(battlePointsBonus);
        } else {
            siege.adjustDefenderBattlePoints(battlePointsBonus);
        }
        // Register new awardees with Siege
        siege.getWallBreachBonusAwardees().addAll(newAwardees);
        // Notify siege stakeholders
        if (newAwardees.size() > 0) {
            Translatable message = Translatable.of("msg_wall_breach_bonus_awarded_to_attackers", siege.getTown().getName(), newAwardees.size(), SiegeWarSettings.getWallBreachBonusBattlePoints());
            SiegeWarNotificationUtil.informSiegeParticipants(siege, message);
        }
    }
}
Also used : Player(org.bukkit.entity.Player) Resident(com.palmergames.bukkit.towny.object.Resident) Translatable(com.palmergames.bukkit.towny.object.Translatable) TownBlock(com.palmergames.bukkit.towny.object.TownBlock) HashSet(java.util.HashSet)

Aggregations

Translatable (com.palmergames.bukkit.towny.object.Translatable)13 Player (org.bukkit.entity.Player)6 Resident (com.palmergames.bukkit.towny.object.Resident)5 Town (com.palmergames.bukkit.towny.object.Town)5 TownyException (com.palmergames.bukkit.towny.exceptions.TownyException)3 TownBlock (com.palmergames.bukkit.towny.object.TownBlock)3 SiegeSide (com.gmail.goosius.siegewar.enums.SiegeSide)2 BannerControlSession (com.gmail.goosius.siegewar.objects.BannerControlSession)2 Nation (com.palmergames.bukkit.towny.object.Nation)2 TownyPermissionSource (com.palmergames.bukkit.towny.permissions.TownyPermissionSource)2 HashSet (java.util.HashSet)2 ChatColor (org.bukkit.ChatColor)2 BattleSession (com.gmail.goosius.siegewar.objects.BattleSession)1 Siege (com.gmail.goosius.siegewar.objects.Siege)1 TownyUniverse (com.palmergames.bukkit.towny.TownyUniverse)1 BedExplodeEvent (com.palmergames.bukkit.towny.event.BedExplodeEvent)1 TownBlockSettingsChangedEvent (com.palmergames.bukkit.towny.event.TownBlockSettingsChangedEvent)1 PlayerDeniedBedUseEvent (com.palmergames.bukkit.towny.event.player.PlayerDeniedBedUseEvent)1 PlotToggleExplosionEvent (com.palmergames.bukkit.towny.event.plot.toggle.PlotToggleExplosionEvent)1 PlotToggleFireEvent (com.palmergames.bukkit.towny.event.plot.toggle.PlotToggleFireEvent)1