use of com.palmergames.bukkit.towny.object.Translatable in project SiegeWar by TownyAdvanced.
the class SiegeWarCommand method parseSiegeWarNextSessionCommand.
private void parseSiegeWarNextSessionCommand(Player player) {
BattleSession session = BattleSession.getBattleSession();
if (session.isActive())
Messaging.sendMsg(player, Translatable.of("msg_session_is_active_now"));
else {
Translatable message = Translatable.of("msg_next_session_cannot_be_determined");
if (session.getScheduledStartTime() != null) {
long timeRemaining = session.getScheduledStartTime() - System.currentTimeMillis();
message = Translatable.of("msg_next_siege_session_in_minutes", TimeMgmt.getFormattedTimeValue(timeRemaining));
}
Messaging.sendMsg(player, message);
}
}
use of com.palmergames.bukkit.towny.object.Translatable in project SiegeWar by TownyAdvanced.
the class SiegeWarNotificationUtil method informSiegeParticipants.
public static void informSiegeParticipants(Siege siege, Translatable... message) {
try {
// Build list of who to inform
Nation nation;
Set<Nation> nationsToInform = new HashSet<>();
Set<Town> townsToInform = new HashSet<>();
// Attackers
if (siege.getAttacker() instanceof Nation) {
// Attacker is a nation
nation = (Nation) siege.getAttacker();
nationsToInform.add(nation);
nationsToInform.addAll(nation.getMutualAllies());
} else if (((Town) siege.getAttacker()).hasNation()) {
// Attacker is a nation town
nation = ((Town) siege.getAttacker()).getNation();
nationsToInform.add(nation);
nationsToInform.addAll(nation.getMutualAllies());
} else {
// Attacker is a non-nation town
townsToInform.add((Town) siege.getAttacker());
}
// Defenders
if (siege.getDefender() instanceof Nation) {
// Defender is a nation
nation = (Nation) siege.getDefender();
nationsToInform.add(nation);
nationsToInform.addAll(nation.getMutualAllies());
} else if (((Town) siege.getDefender()).hasNation()) {
// Defender is a nation town
nation = ((Town) siege.getDefender()).getNation();
nationsToInform.add(nation);
nationsToInform.addAll(nation.getMutualAllies());
} else {
// Defender is a non-nation town
townsToInform.add((Town) siege.getDefender());
}
// Inform required towns and nations
for (Nation nationToInform : nationsToInform) {
for (Translatable line : message) if (line != null)
TownyMessaging.sendPrefixedNationMessage(nationToInform, line);
}
for (Town townToInform : townsToInform) {
for (Translatable line : message) if (line != null)
TownyMessaging.sendPrefixedTownMessage(townToInform, line);
}
// Inform battlefield observers
for (Player player : Bukkit.getOnlinePlayers()) {
if (player.hasPermission(SiegeWarPermissionNodes.SIEGEWAR_NOTIFICATIONS_ALL.getNode())) {
for (Translatable line : message) if (line != null)
Messaging.sendMsg(player, line);
}
}
} catch (Exception e) {
SiegeWar.severe("Problem informing siege participants");
SiegeWar.severe("Message : " + message);
e.printStackTrace();
}
}
use of com.palmergames.bukkit.towny.object.Translatable in project SiegeWar by TownyAdvanced.
the class SiegeWarBannerControlUtil method evaluateExistingBannerControlSessions.
private static void evaluateExistingBannerControlSessions(Siege siege) {
String inProgressMessage;
String remainingSessionTime;
ChatColor bossBarMessageColor = ChatColor.valueOf(SiegeWarSettings.getBannerControlCaptureMessageColor().toUpperCase());
if (!BattleSession.getBattleSession().isActive())
return;
for (BannerControlSession bannerControlSession : siege.getBannerControlSessions().values()) {
try {
// Check if session failed
if (!doesPlayerMeetBasicSessionRequirements(siege, bannerControlSession.getPlayer(), bannerControlSession.getResident())) {
siege.removeBannerControlSession(bannerControlSession);
Translatable errorMessage = SiegeWarSettings.isTrapWarfareMitigationEnabled() ? Translatable.of("msg_siege_war_banner_control_session_failure_with_altitude") : Translatable.of("msg_siege_war_banner_control_session_failure");
BossBarUtil.removeBannerCapBossBar(bannerControlSession.getPlayer());
Messaging.sendMsg(bannerControlSession.getPlayer(), errorMessage);
// Update beacon
CosmeticUtil.evaluateBeacon(bannerControlSession.getPlayer(), siege);
// Remove glowing effect
if (bannerControlSession.getPlayer().hasPotionEffect(PotionEffectType.GLOWING)) {
Bukkit.getScheduler().scheduleSyncDelayedTask(SiegeWar.getSiegeWar(), new Runnable() {
@Override
public void run() {
bannerControlSession.getPlayer().removePotionEffect(PotionEffectType.GLOWING);
}
});
}
continue;
}
// Check if session is in progress or succeeded. Countdown accurate to 1 second, not less
if ((System.currentTimeMillis() / 1000) < (bannerControlSession.getSessionEndTime() / 1000)) {
// Session still in progress
remainingSessionTime = TimeMgmt.getFormattedTimeValue(bannerControlSession.getSessionEndTime() - System.currentTimeMillis());
inProgressMessage = bossBarMessageColor + Translatable.of("msg_siege_war_banner_control_remaining_session_time", remainingSessionTime).forLocale(bannerControlSession.getPlayer());
BossBarUtil.updateBannerCapBossBar(bannerControlSession.getPlayer(), inProgressMessage, bannerControlSession);
} else {
// Session success
siege.removeBannerControlSession(bannerControlSession);
// Update beacon
CosmeticUtil.evaluateBeacon(bannerControlSession.getPlayer(), siege);
// Remove bossbar
BossBarUtil.removeBannerCapBossBar(bannerControlSession.getPlayer());
// Remove glowing effect
if (bannerControlSession.getPlayer().hasPotionEffect(PotionEffectType.GLOWING)) {
Bukkit.getScheduler().scheduleSyncDelayedTask(SiegeWar.getSiegeWar(), new Runnable() {
@Override
public void run() {
bannerControlSession.getPlayer().removePotionEffect(PotionEffectType.GLOWING);
}
});
}
// Update siege
if (bannerControlSession.getSiegeSide() == siege.getBannerControllingSide()) {
// Player contributes to ongoing banner control
siege.addBannerControllingResident(bannerControlSession.getResident());
Messaging.sendMsg(bannerControlSession.getPlayer(), Translatable.of("msg_siege_war_banner_control_session_success"));
} else {
// Player gains banner control for their side
boolean reversal = false;
if (siege.getBannerControllingSide() != SiegeSide.NOBODY && bannerControlSession.getSiegeSide() != siege.getBannerControllingSide()) {
reversal = true;
// Apply reversal bonus if required setting is enabled
if (SiegeWarSettings.isWarSiegeBannerControlReversalBonusEnabled()) {
siege.setNumberOfBannerControlReversals(siege.getNumberOfBannerControlReversals() + 1);
}
}
siege.clearBannerControllingResidents();
siege.setBannerControllingSide(bannerControlSession.getSiegeSide());
siege.addBannerControllingResident(bannerControlSession.getResident());
// Inform player
Messaging.sendMsg(bannerControlSession.getPlayer(), Translatable.of("msg_siege_war_banner_control_session_success"));
// Inform town/nation participants
Translatable[] message = new Translatable[2];
if (reversal) {
if (bannerControlSession.getSiegeSide() == SiegeSide.ATTACKERS) {
message[0] = Translatable.of("msg_siege_war_banner_control_reversed_by_attacker", siege.getTown().getFormattedName());
} else {
message[0] = Translatable.of("msg_siege_war_banner_control_reversed_by_defender", siege.getTown().getFormattedName());
}
if (SiegeWarSettings.isWarSiegeBannerControlReversalBonusEnabled()) {
double battlePointMultiplierDouble = siege.getNumberOfBannerControlReversals() * SiegeWarSettings.getWarSiegeBannerControlReversalBonusFactor();
DecimalFormat decimalFormat = new DecimalFormat("#.##");
message[1] = Translatable.of("msg_siege_war_banner_control_reversal_bonus", decimalFormat.format(battlePointMultiplierDouble));
}
} else {
if (bannerControlSession.getSiegeSide() == SiegeSide.ATTACKERS) {
message[0] = Translatable.of("msg_siege_war_banner_control_gained_by_attacker", siege.getTown().getFormattedName());
} else {
message[0] = Translatable.of("msg_siege_war_banner_control_gained_by_defender", siege.getTown().getFormattedName());
}
}
SiegeWarNotificationUtil.informSiegeParticipants(siege, message);
}
}
} catch (Exception e) {
SiegeWar.severe("Problem evaluating banner control session for player " + bannerControlSession.getPlayer().getName());
}
}
}
use of com.palmergames.bukkit.towny.object.Translatable in project Towny by TownyAdvanced.
the class TownyPlayerListener method onPlayerBlowsUpBedOrRespawnAnchor.
/**
* Handles clicking on beds in the nether/respawn anchors in the overworld sending blocks to a map so we can track when explosions occur from beds.
* Spigot API's BlockExplodeEvent#getBlock() always returns AIR for beds/anchors exploding, which is why this is necessary.
* @param event PlayerInteractEvent
*/
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerBlowsUpBedOrRespawnAnchor(PlayerInteractEvent event) {
if (plugin.isError()) {
event.setCancelled(true);
return;
}
if (!TownyAPI.getInstance().isTownyWorld(event.getPlayer().getWorld()))
return;
Block block = event.getClickedBlock();
Player player = event.getPlayer();
if (event.hasBlock()) {
Location blockLoc = block.getLocation();
/*
* Catches respawn anchors blowing up and allows us to track their explosions.
*/
if (block.getType().name().equals("RESPAWN_ANCHOR")) {
org.bukkit.block.data.type.RespawnAnchor anchor = ((org.bukkit.block.data.type.RespawnAnchor) block.getBlockData());
if (anchor.getCharges() == 4)
BukkitTools.getPluginManager().callEvent(new BedExplodeEvent(player, blockLoc, null, block.getType()));
return;
}
/*
* Catches beds blowing up and allows us to track their explosions.
*/
if (Tag.BEDS.isTagged(block.getType()) && player.getWorld().getEnvironment().equals(Environment.NETHER)) {
org.bukkit.block.data.type.Bed bed = ((org.bukkit.block.data.type.Bed) block.getBlockData());
BukkitTools.getPluginManager().callEvent(new BedExplodeEvent(player, blockLoc, block.getRelative(bed.getFacing()).getLocation(), block.getType()));
return;
}
/*
* Prevents setting the spawn point of the player using beds,
* except in allowed plots (personally-owned and Inns)
*/
if (Tag.BEDS.isTagged(block.getType()) && event.getAction() == Action.RIGHT_CLICK_BLOCK) {
if (!TownySettings.getBedUse())
return;
boolean isOwner = false;
boolean isInnPlot = false;
boolean isEnemy = false;
Translatable denialMessage = Translatable.of("msg_err_cant_use_bed");
if (!TownyAPI.getInstance().isWilderness(blockLoc)) {
TownBlock townblock = TownyAPI.getInstance().getTownBlock(blockLoc);
Resident resident = TownyUniverse.getInstance().getResident(player.getUniqueId());
Town town = townblock.getTownOrNull();
if (resident == null || town == null)
return;
isOwner = townblock.isOwner(resident);
isInnPlot = townblock.getType() == TownBlockType.INN;
// Prevent enemies and outlaws using the Inn plots.
if (CombatUtil.isEnemyTownBlock(player, townblock.getWorldCoord()) || town.hasOutlaw(resident)) {
isEnemy = true;
denialMessage = Translatable.of("msg_err_no_sleep_in_enemy_inn");
}
}
if (isEnemy || !isOwner && !isInnPlot) {
// The player is not allowed to use the bed.
// Fire a cancellable event prior to us denying bed use.
PlayerDeniedBedUseEvent pdbue = new PlayerDeniedBedUseEvent(player, blockLoc, isEnemy, denialMessage);
Bukkit.getPluginManager().callEvent(pdbue);
if (!pdbue.isCancelled()) {
event.setCancelled(true);
TownyMessaging.sendErrorMsg(player, pdbue.getDenialMessage());
}
}
}
}
}
use of com.palmergames.bukkit.towny.object.Translatable in project Towny by TownyAdvanced.
the class TownyPlayerListener method sendSafeModeMessage.
private void sendSafeModeMessage(Player player) {
try {
Translatable tipMsg = player.isOp() || player.hasPermission("towny.admin") ? Translatable.of("msg_safe_mode_admin") : Translatable.of("msg_safe_mode_player");
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_safe_mode_base"), tipMsg);
} catch (Exception e) {
// Safemode is affecting Towny's ability to use Translatables.
String msg = player.isOp() || player.hasPermission("towny.admin") ? "Check the server's console for more information." : "Tell an admin to check the server's console.";
player.sendMessage(ChatColor.RED + "[Towny] [Error] Towny is locked in Safe Mode due to an error! " + msg);
}
}
Aggregations