Search in sources :

Example 1 with Translatable

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);
    }
}
Also used : BattleSession(com.gmail.goosius.siegewar.objects.BattleSession) Translatable(com.palmergames.bukkit.towny.object.Translatable)

Example 2 with Translatable

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();
    }
}
Also used : Nation(com.palmergames.bukkit.towny.object.Nation) Player(org.bukkit.entity.Player) Town(com.palmergames.bukkit.towny.object.Town) Translatable(com.palmergames.bukkit.towny.object.Translatable) HashSet(java.util.HashSet)

Example 3 with Translatable

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());
        }
    }
}
Also used : BannerControlSession(com.gmail.goosius.siegewar.objects.BannerControlSession) DecimalFormat(java.text.DecimalFormat) Translatable(com.palmergames.bukkit.towny.object.Translatable) ChatColor(org.bukkit.ChatColor) TownyException(com.palmergames.bukkit.towny.exceptions.TownyException)

Example 4 with Translatable

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());
                }
            }
        }
    }
}
Also used : Player(org.bukkit.entity.Player) Translatable(com.palmergames.bukkit.towny.object.Translatable) Town(com.palmergames.bukkit.towny.object.Town) Block(org.bukkit.block.Block) TownBlock(com.palmergames.bukkit.towny.object.TownBlock) Resident(com.palmergames.bukkit.towny.object.Resident) TownBlock(com.palmergames.bukkit.towny.object.TownBlock) BedExplodeEvent(com.palmergames.bukkit.towny.event.BedExplodeEvent) PlayerDeniedBedUseEvent(com.palmergames.bukkit.towny.event.player.PlayerDeniedBedUseEvent) Location(org.bukkit.Location) EventHandler(org.bukkit.event.EventHandler)

Example 5 with Translatable

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);
    }
}
Also used : Translatable(com.palmergames.bukkit.towny.object.Translatable) NotRegisteredException(com.palmergames.bukkit.towny.exceptions.NotRegisteredException)

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