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);
}
}
}
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);
}
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);
}
}
}
Aggregations