Search in sources :

Example 6 with Translatable

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

the class InviteCommand method sendInviteList.

public static void sendInviteList(Player player, List<Invite> list, int page, boolean fromSender) {
    if (page < 0) {
        TownyMessaging.sendErrorMsg(player, Translatable.of("msg_err_negative"));
        return;
    } else if (page == 0) {
        TownyMessaging.sendErrorMsg(player, Translatable.of("msg_error_must_be_int"));
        return;
    }
    int total = (int) Math.ceil(((double) list.size()) / ((double) 10));
    if (page > total) {
        return;
    }
    List<String> invitesFormatted = new ArrayList<>();
    int iMax = page * 10;
    if ((page * 10) > list.size()) {
        iMax = list.size();
    }
    Translatable object = null;
    for (int i = (page - 1) * 10; i < iMax; i++) {
        Invite invite = list.get(i);
        String name = invite.getDirectSender().getName();
        // If it's from the sender, do it differently
        String output = null;
        if (fromSender) {
            output = Colors.Blue + invite.getReceiver().getName() + Colors.Gray + " - " + Colors.Green + name;
            if (invite.getSender() instanceof Town) {
                // If it's sent by a town to a resident
                object = Translatable.of("player_sing");
            }
            if (invite.getSender() instanceof Nation) {
                if (invite.getReceiver() instanceof Town) {
                    object = Translatable.of("town_sing");
                }
                if (invite.getReceiver() instanceof Nation) {
                    object = Translatable.of("nation_sing");
                }
            }
        } else {
            // So it's not from the sender, then it's from the receiver so
            output = Colors.Blue + invite.getSender().getName() + Colors.Gray + " - " + Colors.Green + name;
            if (invite.getReceiver() instanceof Resident) {
                object = Translatable.of("town_sing");
            }
            if (invite.getReceiver() instanceof Town || invite.getReceiver() instanceof Nation) {
                object = Translatable.of("nation_sing");
            }
        }
        invitesFormatted.add(output);
    }
    TownyMessaging.sendMessage(player, ChatTools.formatList(Translatable.of("invite_plu").forLocale(player), Colors.Blue + object.forLocale(player) + Colors.Gray + " - " + Colors.LightBlue + Translatable.of("invite_sent_by").forLocale(player), invitesFormatted, Translatable.of("LIST_PAGE", page, total).forLocale(player)));
}
Also used : Nation(com.palmergames.bukkit.towny.object.Nation) Town(com.palmergames.bukkit.towny.object.Town) ArrayList(java.util.ArrayList) Resident(com.palmergames.bukkit.towny.object.Resident) Translatable(com.palmergames.bukkit.towny.object.Translatable) Invite(com.palmergames.bukkit.towny.invites.Invite)

Example 7 with Translatable

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

the class OnPlayerLogin method warningMessage.

/**
 * Send a warning message if the town or nation is due to be deleted.
 *
 * @param resident Resident to send the warning to.
 * @param town Town which the resident is part of.
 * @param nation Nation which the town is a part of or null.
 */
private void warningMessage(Resident resident, Town town, Nation nation) {
    if (town.hasUpkeep()) {
        double upkeep = TownySettings.getTownUpkeepCost(town);
        if (upkeep > 0 && !town.getAccount().canPayFromHoldings(upkeep)) {
            /*
				 *  Warn that the town is due to be deleted/bankrupted.
				 */
            if (TownySettings.isTownBankruptcyEnabled()) {
                Translatable msg = !town.isBankrupt() ? // Town will be bankrupt next time upkeep is taken.
                Translatable.of("msg_warning_bankrupt", town.getName()) : // Town is already bankrupt.
                Translatable.of("msg_your_town_is_bankrupt");
                TownyMessaging.sendMsg(resident, msg);
            } else {
                TownyMessaging.sendMsg(resident, Translatable.of("msg_warning_delete", town.getName()));
            }
        }
    }
    if (nation != null) {
        double upkeep = TownySettings.getNationUpkeepCost(nation);
        if (upkeep > 0 && !nation.getAccount().canPayFromHoldings(upkeep)) {
            /*
				 *  Warn that the nation is due to be deleted.
				 */
            TownyMessaging.sendMsg(resident, Translatable.of("msg_warning_delete", nation.getName()));
        }
    }
}
Also used : Translatable(com.palmergames.bukkit.towny.object.Translatable)

Example 8 with Translatable

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

the class PlotCommand method plotGroupToggle.

/**
 * Toggle the plot group flags for pvp/explosion/fire/mobs (if town/world
 * permissions allow)
 *
 * @param player - Player.
 * @param plotGroup - PlotObjectGroup object.
 * @param split  - Current command arguments.
 */
public void plotGroupToggle(Player player, PlotGroup plotGroup, String[] split) {
    TownyPermissionSource permSource = TownyUniverse.getInstance().getPermissionSource();
    if (split.length == 0 || split[0].equalsIgnoreCase("?")) {
        HelpMenu.PLOT_GROUP_TOGGLE.send(player);
    } else {
        try {
            // We need to keep an ending string to show the message only after the transaction is over,
            // to prevent chat log spam.
            Translatable endingMessage = null;
            Optional<Boolean> choice = Optional.empty();
            if (split.length == 2) {
                choice = BaseCommand.parseToggleChoice(split[1]);
            }
            for (TownBlock groupBlock : plotGroup.getTownBlocks()) {
                Town town = groupBlock.getTownOrNull();
                if (town == null)
                    continue;
                if (!permSource.testPermission(player, PermissionNodes.TOWNY_COMMAND_PLOT_TOGGLE.getNode(split[0].toLowerCase())))
                    throw new TownyException(Translatable.of("msg_err_command_disable"));
                if (split[0].equalsIgnoreCase("pvp")) {
                    // Make sure we are allowed to set these permissions.
                    toggleTest(player, groupBlock, StringMgmt.join(split, " "));
                    if (TownySettings.getPVPCoolDownTime() > 0 && !permSource.isTownyAdmin(player)) {
                        // Test to see if the pvp cooldown timer is active for the town this plot belongs to.
                        if (CooldownTimerTask.hasCooldown(town.getUUID().toString(), CooldownType.PVP))
                            throw new TownyException(Translatable.of("msg_err_cannot_toggle_pvp_x_seconds_remaining", CooldownTimerTask.getCooldownRemaining(town.getUUID().toString(), CooldownType.PVP)));
                        // Test to see if the pvp cooldown timer is active for this plot.
                        if (CooldownTimerTask.hasCooldown(groupBlock.getWorldCoord().toString(), CooldownType.PVP))
                            throw new TownyException(Translatable.of("msg_err_cannot_toggle_pvp_x_seconds_remaining", CooldownTimerTask.getCooldownRemaining(groupBlock.getWorldCoord().toString(), CooldownType.PVP)));
                    }
                    if (TownySettings.getOutsidersPreventPVPToggle() && choice.orElse(!groupBlock.getPermissions().pvp)) {
                        for (Player target : Bukkit.getOnlinePlayers()) {
                            if (!town.hasResident(target) && !player.getName().equals(target.getName()) && groupBlock.getWorldCoord().equals(WorldCoord.parseWorldCoord(target)))
                                throw new TownyException(Translatable.of("msg_cant_toggle_pvp_outsider_in_plot"));
                        }
                    }
                    PlotTogglePvpEvent plotTogglePvpEvent = new PlotTogglePvpEvent(groupBlock, player, choice.orElse(!groupBlock.getPermissions().pvp));
                    Bukkit.getPluginManager().callEvent(plotTogglePvpEvent);
                    if (plotTogglePvpEvent.isCancelled()) {
                        TownyMessaging.sendErrorMsg(player, plotTogglePvpEvent.getCancellationMsg());
                        return;
                    }
                    groupBlock.getPermissions().pvp = choice.orElse(!groupBlock.getPermissions().pvp);
                    // Add a cooldown timer for this plot.
                    if (TownySettings.getPVPCoolDownTime() > 0 && !permSource.isTownyAdmin(player))
                        CooldownTimerTask.addCooldownTimer(groupBlock.getWorldCoord().toString(), CooldownType.PVP);
                    endingMessage = Translatable.of("msg_changed_pvp", Translatable.of("msg_the_plot_group"), groupBlock.getPermissions().pvp ? Translatable.of("enabled") : Translatable.of("disabled"));
                } else if (split[0].equalsIgnoreCase("explosion")) {
                    // Make sure we are allowed to set these permissions.
                    toggleTest(player, groupBlock, StringMgmt.join(split, " "));
                    PlotToggleExplosionEvent plotToggleExplosionEvent = new PlotToggleExplosionEvent(groupBlock, player, choice.orElse(!groupBlock.getPermissions().explosion));
                    Bukkit.getPluginManager().callEvent(plotToggleExplosionEvent);
                    if (plotToggleExplosionEvent.isCancelled()) {
                        TownyMessaging.sendErrorMsg(player, plotToggleExplosionEvent.getCancellationMsg());
                        return;
                    }
                    groupBlock.getPermissions().explosion = choice.orElse(!groupBlock.getPermissions().explosion);
                    endingMessage = Translatable.of("msg_changed_expl", Translatable.of("msg_the_plot_group"), groupBlock.getPermissions().explosion ? Translatable.of("enabled") : Translatable.of("disabled"));
                } else if (split[0].equalsIgnoreCase("fire")) {
                    // Make sure we are allowed to set these permissions.
                    toggleTest(player, groupBlock, StringMgmt.join(split, " "));
                    PlotToggleFireEvent plotToggleFireEvent = new PlotToggleFireEvent(groupBlock, player, choice.orElse(!groupBlock.getPermissions().fire));
                    Bukkit.getPluginManager().callEvent(plotToggleFireEvent);
                    if (plotToggleFireEvent.isCancelled()) {
                        TownyMessaging.sendErrorMsg(player, plotToggleFireEvent.getCancellationMsg());
                        return;
                    }
                    groupBlock.getPermissions().fire = choice.orElse(!groupBlock.getPermissions().fire);
                    endingMessage = Translatable.of("msg_changed_fire", Translatable.of("msg_the_plot_group"), groupBlock.getPermissions().fire ? Translatable.of("enabled") : Translatable.of("disabled"));
                } else if (split[0].equalsIgnoreCase("mobs")) {
                    // Make sure we are allowed to set these permissions.
                    toggleTest(player, groupBlock, StringMgmt.join(split, " "));
                    PlotToggleMobsEvent plotToggleMobsEvent = new PlotToggleMobsEvent(groupBlock, player, choice.orElse(!groupBlock.getPermissions().mobs));
                    Bukkit.getPluginManager().callEvent(plotToggleMobsEvent);
                    if (plotToggleMobsEvent.isCancelled()) {
                        TownyMessaging.sendErrorMsg(player, plotToggleMobsEvent.getCancellationMsg());
                        return;
                    }
                    groupBlock.getPermissions().mobs = choice.orElse(!groupBlock.getPermissions().mobs);
                    endingMessage = Translatable.of("msg_changed_mobs", Translatable.of("msg_the_plot_group"), groupBlock.getPermissions().mobs ? Translatable.of("enabled") : Translatable.of("disabled"));
                } else {
                    TownyMessaging.sendErrorMsg(player, Translatable.of("msg_err_invalid_property", "plot"));
                    return;
                }
                groupBlock.setChanged(true);
                // Change settings event
                TownBlockSettingsChangedEvent event = new TownBlockSettingsChangedEvent(groupBlock);
                Bukkit.getServer().getPluginManager().callEvent(event);
                // Save
                groupBlock.save();
            }
            // Finally send the message.
            if (endingMessage != null)
                TownyMessaging.sendMsg(player, endingMessage);
        } catch (TownyException e) {
            TownyMessaging.sendErrorMsg(player, e.getMessage(player));
        } catch (Exception e) {
            TownyMessaging.sendErrorMsg(player, e.getMessage());
        }
    }
}
Also used : PlotToggleFireEvent(com.palmergames.bukkit.towny.event.plot.toggle.PlotToggleFireEvent) Player(org.bukkit.entity.Player) PlotToggleMobsEvent(com.palmergames.bukkit.towny.event.plot.toggle.PlotToggleMobsEvent) Translatable(com.palmergames.bukkit.towny.object.Translatable) PlotToggleExplosionEvent(com.palmergames.bukkit.towny.event.plot.toggle.PlotToggleExplosionEvent) AlreadyRegisteredException(com.palmergames.bukkit.towny.exceptions.AlreadyRegisteredException) TownyException(com.palmergames.bukkit.towny.exceptions.TownyException) TownyException(com.palmergames.bukkit.towny.exceptions.TownyException) Town(com.palmergames.bukkit.towny.object.Town) TownBlockSettingsChangedEvent(com.palmergames.bukkit.towny.event.TownBlockSettingsChangedEvent) TownyPermissionSource(com.palmergames.bukkit.towny.permissions.TownyPermissionSource) TownBlock(com.palmergames.bukkit.towny.object.TownBlock) PlotTogglePvpEvent(com.palmergames.bukkit.towny.event.plot.toggle.PlotTogglePvpEvent)

Example 9 with Translatable

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

the class PlayerDeath method evaluateSiegePlayerDeath.

/**
 * Evaluates a siege death event.
 * <p>
 * If the dead player is officially involved in a nearby siege,
 * - The opposing team gains battle points
 * - Their inventory items degrade a little (e.g. 20%)
 * <p>
 * The allegiance of the killer is not considered,
 * in order to allows for a wider range of siege-kill-tactics.
 * Examples:
 * - Players without towns can contribute to battle points
 * - Players from non-nation towns can contribute to battle points
 * - Players from secretly-allied nations can contribute to battle points
 * - Devices (cannons, traps, bombs etc.) can be used to gain battle points
 *
 * @param deadPlayer The player who died
 * @param playerDeathEvent The player death event
 */
public static void evaluateSiegePlayerDeath(Player deadPlayer, PlayerDeathEvent playerDeathEvent) {
    try {
        World world = playerDeathEvent.getEntity().getWorld();
        if (!TownyAPI.getInstance().isTownyWorld(world) || !TownyAPI.getInstance().getTownyWorld(world).isWarAllowed())
            return;
        TownyPermissionSource tps = TownyUniverse.getInstance().getPermissionSource();
        Resident deadResident = TownyUniverse.getInstance().getResident(deadPlayer.getUniqueId());
        if (deadResident == null || !deadResident.hasTown())
            return;
        /*
			 * Do an early permission test to avoid hitting the sieges list if
			 * it could never return a proper SiegeSide.
			 */
        if (!tps.testPermission(deadPlayer, SiegeWarPermissionNodes.SIEGEWAR_TOWN_SIEGE_BATTLE_POINTS.getNode()) && !tps.testPermission(deadPlayer, SiegeWarPermissionNodes.SIEGEWAR_NATION_SIEGE_BATTLE_POINTS.getNode()))
            return;
        Town deadResidentTown = deadResident.getTown();
        // Declare local variables
        Siege confirmedCandidateSiege = null;
        SiegeSide confirmedCandidateSiegePlayerSide = SiegeSide.NOBODY;
        double confirmedCandidateDistanceToPlayer = 0;
        double candidateSiegeDistanceToPlayer;
        SiegeSide candidateSiegePlayerSide;
        // Find nearest eligible siege
        for (Siege candidateSiege : SiegeController.getSieges()) {
            // Skip if siege is not active
            if (!candidateSiege.getStatus().isActive())
                continue;
            // Skip if player is not is siege-zone
            if (!SiegeWarDistanceUtil.isInSiegeZone(deadPlayer, candidateSiege))
                continue;
            // Is player eligible ?
            candidateSiegePlayerSide = SiegeWarAllegianceUtil.calculateCandidateSiegePlayerSide(deadPlayer, deadResidentTown, candidateSiege);
            if (candidateSiegePlayerSide == SiegeSide.NOBODY)
                continue;
            // Confirm candidate siege if it is 1st viable one OR closer than confirmed candidate
            candidateSiegeDistanceToPlayer = deadPlayer.getLocation().distance(candidateSiege.getFlagLocation());
            if (confirmedCandidateSiege == null || candidateSiegeDistanceToPlayer < confirmedCandidateDistanceToPlayer) {
                confirmedCandidateSiege = candidateSiege;
                confirmedCandidateSiegePlayerSide = candidateSiegePlayerSide;
                confirmedCandidateDistanceToPlayer = candidateSiegeDistanceToPlayer;
            }
        }
        // apply siege point penalty for the nearest one, and keep inventory
        if (confirmedCandidateSiege != null) {
            // Award penalty points w/ notification if siege is in progress
            if (confirmedCandidateSiege.getStatus() == SiegeStatus.IN_PROGRESS) {
                if (SiegeWarSettings.getWarSiegeDeathSpawnFireworkEnabled()) {
                    if (isBannerMissing(confirmedCandidateSiege.getFlagLocation()))
                        replaceMissingBanner(confirmedCandidateSiege.getFlagLocation());
                    Color bannerColor = ((Banner) confirmedCandidateSiege.getFlagLocation().getBlock().getState()).getBaseColor().getColor();
                    CosmeticUtil.spawnFirework(deadPlayer.getLocation().add(0, 2, 0), Color.RED, bannerColor, true);
                }
                boolean residentIsAttacker = confirmedCandidateSiegePlayerSide == SiegeSide.ATTACKERS;
                SiegeWarScoringUtil.awardPenaltyPoints(residentIsAttacker, deadPlayer, confirmedCandidateSiege);
            }
            // Keep and degrade inventory
            degradeInventory(playerDeathEvent);
            keepInventory(playerDeathEvent);
            // Keep level
            keepLevel(playerDeathEvent);
            if (confirmedCandidateSiege.getBannerControlSessions().containsKey(deadPlayer)) {
                // If the player that died had an ongoing session, remove it.
                confirmedCandidateSiege.removeBannerControlSession(confirmedCandidateSiege.getBannerControlSessions().get(deadPlayer));
                Translatable errorMessage = SiegeWarSettings.isTrapWarfareMitigationEnabled() ? Translatable.of("msg_siege_war_banner_control_session_failure_with_altitude") : Translatable.of("msg_siege_war_banner_control_session_failure");
                Messaging.sendMsg(deadPlayer, errorMessage);
            }
        }
    } catch (Exception e) {
        try {
            SiegeWar.severe("Error evaluating siege death for player " + deadPlayer.getName());
        } catch (Exception e2) {
            SiegeWar.severe("Error evaluating siege death (could not read player name)");
        }
        e.printStackTrace();
    }
}
Also used : Town(com.palmergames.bukkit.towny.object.Town) Color(org.bukkit.Color) Resident(com.palmergames.bukkit.towny.object.Resident) Translatable(com.palmergames.bukkit.towny.object.Translatable) TownyPermissionSource(com.palmergames.bukkit.towny.permissions.TownyPermissionSource) World(org.bukkit.World) SiegeSide(com.gmail.goosius.siegewar.enums.SiegeSide) Siege(com.gmail.goosius.siegewar.objects.Siege)

Example 10 with Translatable

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

the class SiegeWarBannerControlUtil method evaluateNewBannerControlSessions.

private static void evaluateNewBannerControlSessions(Siege siege) {
    try {
        TownyUniverse universe = TownyUniverse.getInstance();
        Resident resident;
        for (Player player : Bukkit.getOnlinePlayers()) {
            resident = universe.getResident(player.getUniqueId());
            if (resident == null)
                throw new TownyException(Translation.of("msg_err_not_registered_1", player.getName()));
            if (!doesPlayerMeetBasicSessionRequirements(siege, player, resident))
                continue;
            if (!player.isOp() && player.hasPermission(SiegeWarPermissionNodes.SIEGEWAR_SIEGEZONE_CANNOT_GET_BANNER_CONTROL.getNode()))
                continue;
            if (!BattleSession.getBattleSession().isActive()) {
                Translatable message = Translatable.of("msg_war_siege_battle_session_break_cannot_get_banner_control", SiegeWarBattleSessionUtil.getFormattedTimeUntilNextBattleSessionStarts());
                Messaging.sendErrorMsg(player, message);
                continue;
            }
            if (siege.getBannerControlSessions().containsKey(player))
                // Player already has a control session
                continue;
            if (siege.getBannerControllingResidents().contains(resident))
                // Player already on the BC list
                continue;
            if (SiegeWarBattleSessionUtil.isBattleSessionCappingLimiterActiveForResident(resident)) {
                Translatable message = Translatable.of("msg_war_siege_max_daily_player_battle_sessions_reached_cannot_get_banner_control", SiegeWarSettings.getBattleSessionCappingLimiter(), SiegeWarBattleSessionUtil.getFormattedTimeUntilPlayerBattleSessionLimitExpires(resident));
                Messaging.sendErrorMsg(player, message);
                // Player is being limited by the battle session capping limiter
                continue;
            }
            SiegeSide siegeSide = SiegeWarAllegianceUtil.calculateCandidateSiegePlayerSide(player, resident.getTown(), siege);
            switch(siegeSide) {
                case ATTACKERS:
                    addNewBannerControlSession(siege, player, resident, SiegeSide.ATTACKERS);
                    break;
                case DEFENDERS:
                    addNewBannerControlSession(siege, player, resident, SiegeSide.DEFENDERS);
                    break;
                case NOBODY:
                    continue;
            }
        }
    } catch (Exception e) {
        SiegeWar.severe("Problem evaluating new banner control sessions");
        e.printStackTrace();
    }
}
Also used : Player(org.bukkit.entity.Player) Resident(com.palmergames.bukkit.towny.object.Resident) Translatable(com.palmergames.bukkit.towny.object.Translatable) TownyUniverse(com.palmergames.bukkit.towny.TownyUniverse) SiegeSide(com.gmail.goosius.siegewar.enums.SiegeSide) TownyException(com.palmergames.bukkit.towny.exceptions.TownyException) TownyException(com.palmergames.bukkit.towny.exceptions.TownyException)

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