Search in sources :

Example 6 with TownyPermissionSource

use of com.palmergames.bukkit.towny.permissions.TownyPermissionSource in project Towny by TownyAdvanced.

the class TownyCommand method parseTownyCommand.

private void parseTownyCommand(CommandSender sender, String[] split) {
    TownyPermissionSource permSource = TownyUniverse.getInstance().getPermissionSource();
    if (split.length == 0) {
        HelpMenu.GENERAL_HELP.send(sender);
        return;
    } else if (split[0].equalsIgnoreCase("?") || split[0].equalsIgnoreCase("help")) {
        HelpMenu.HELP.send(sender);
        return;
    }
    Player player = null;
    TownyWorld world = null;
    if (sender instanceof Player) {
        player = (Player) sender;
        world = TownyAPI.getInstance().getTownyWorld(player.getWorld());
    }
    try {
        switch(split[0].toLowerCase(Locale.ROOT)) {
            case "map":
                {
                    catchConsole(sender);
                    if (!permSource.testPermission(sender, PermissionNodes.TOWNY_COMMAND_TOWNY_MAP.getNode()))
                        throw new TownyException(Translatable.of("msg_err_command_disable"));
                    if (split.length > 1 && split[1].equalsIgnoreCase("big"))
                        TownyAsciiMap.generateAndSend(plugin, player, 18);
                    else if (split.length > 1 && split[1].equalsIgnoreCase("hud"))
                        HUDManager.toggleMapHud(player);
                    else
                        showMap(player);
                    break;
                }
            case "prices":
                {
                    Town town = null;
                    if (!TownyEconomyHandler.isActive())
                        throw new TownyException(Translatable.of("msg_err_no_economy"));
                    if (split.length > 1) {
                        town = TownyUniverse.getInstance().getTown(split[1]);
                        if (town == null) {
                            TownyMessaging.sendErrorMsg(player, Translatable.of("msg_err_not_registered_1", split[1]));
                            return;
                        }
                    } else if (player != null) {
                        Resident resident = TownyAPI.getInstance().getResident(player);
                        if (resident != null)
                            town = resident.getTownOrNull();
                    }
                    for (String line : getTownyPrices(town, Translation.getLocale(sender))) TownyMessaging.sendMessage(sender, line);
                    break;
                }
            case "switches":
                {
                    catchConsole(sender);
                    if (world == null || !world.isUsingTowny())
                        throw new TownyException(Translatable.of("msg_err_usingtowny_disabled"));
                    Resident resident = getResidentOrThrow(player.getUniqueId());
                    ResidentUtil.openSelectionGUI(resident, SelectionGUI.SelectionType.SWITCHES);
                    break;
                }
            case "itemuse":
                {
                    catchConsole(sender);
                    if (world == null || !world.isUsingTowny())
                        throw new TownyException(Translatable.of("msg_err_usingtowny_disabled"));
                    Resident resident = getResidentOrThrow(player.getUniqueId());
                    ResidentUtil.openSelectionGUI(resident, SelectionGUI.SelectionType.ITEMUSE);
                    break;
                }
            case "allowedblocks":
                {
                    catchConsole(sender);
                    if (world == null || !world.isUsingTowny())
                        throw new TownyException(Translatable.of("msg_err_usingtowny_disabled"));
                    Resident resident = getResidentOrThrow(player.getUniqueId());
                    ResidentUtil.openSelectionGUI(resident, SelectionGUI.SelectionType.ALLOWEDBLOCKS);
                    break;
                }
            case "wildsblocks":
                {
                    catchConsole(sender);
                    if (world == null || !world.isUsingTowny())
                        throw new TownyException(Translatable.of("msg_err_usingtowny_disabled"));
                    Resident resident = getResidentOrThrow(player.getUniqueId());
                    ResidentUtil.openGUIInventory(resident, world.getUnclaimedZoneIgnoreMaterials(), Translatable.of("gui_title_towny_wildsblocks").forLocale(player));
                    break;
                }
            case "plotclearblocks":
                {
                    catchConsole(sender);
                    if (world == null || !world.isUsingTowny())
                        throw new TownyException(Translatable.of("msg_err_usingtowny_disabled"));
                    Resident resident = getResidentOrThrow(player.getUniqueId());
                    ResidentUtil.openGUIInventory(resident, world.getPlotManagementMayorDelete(), Translatable.of("gui_title_towny_plotclear").forLocale(player));
                    break;
                }
            case "top":
                {
                    parseTopCommand(sender, StringMgmt.remFirstArg(split));
                    break;
                }
            case "tree":
                {
                    catchPlayer(sender);
                    if (!permSource.testPermission(sender, PermissionNodes.TOWNY_COMMAND_TOWNY_TREE))
                        throw new TownyException(Translatable.of("msg_err_command_disable"));
                    for (String line : TownyUniverse.getInstance().getTreeString(0)) TownyMessaging.sendMessage(sender, line);
                    break;
                }
            case "time":
                {
                    if (!permSource.testPermission(sender, PermissionNodes.TOWNY_COMMAND_TOWNY_TIME))
                        throw new TownyException(Translatable.of("msg_err_command_disable"));
                    TownyMessaging.sendMsg(sender, Translatable.of("msg_time_until_a_new_day").append(TimeMgmt.formatCountdownTime(TimeMgmt.townyTime(true))));
                    break;
                }
            case "universe":
                {
                    if (!permSource.testPermission(sender, PermissionNodes.TOWNY_COMMAND_TOWNY_UNIVERSE))
                        throw new TownyException(Translatable.of("msg_err_command_disable"));
                    for (String line : getUniverseStats(Translation.getLocale(sender))) TownyMessaging.sendMessage(sender, line);
                    break;
                }
            case "version":
            case "v":
                {
                    if (!permSource.testPermission(sender, PermissionNodes.TOWNY_COMMAND_TOWNY_VERSION))
                        throw new TownyException(Translatable.of("msg_err_command_disable"));
                    if (TownyUpdateChecker.shouldShowNotification()) {
                        TownyMessaging.sendMsg(sender, Translatable.of("msg_latest_version", plugin.getVersion(), TownyUpdateChecker.getNewVersion()));
                    } else {
                        TownyMessaging.sendMsg(sender, Translatable.of("msg_towny_version", plugin.getVersion()));
                        if (TownyUpdateChecker.hasCheckedSuccessfully())
                            TownyMessaging.sendMsg(sender, Translatable.of("msg_up_to_date"));
                    }
                    break;
                }
            case "spy":
                {
                    catchConsole(sender);
                    if (!permSource.testPermission(sender, PermissionNodes.TOWNY_CHAT_SPY.getNode()))
                        throw new TownyException(Translatable.of("msg_err_command_disable"));
                    Resident resident = getResidentOrThrow(player.getUniqueId());
                    resident.toggleMode(split, true);
                    break;
                }
            default:
                {
                    if (TownyCommandAddonAPI.hasCommand(CommandType.TOWNY, split[0]))
                        TownyCommandAddonAPI.getAddonCommand(CommandType.TOWNY, split[0]).execute(sender, "towny", split);
                    else
                        TownyMessaging.sendErrorMsg(sender, Translatable.of("msg_err_invalid_sub"));
                }
        }
    } catch (TownyException e) {
        TownyMessaging.sendErrorMsg(sender, e.getMessage(sender));
    }
}
Also used : Player(org.bukkit.entity.Player) Town(com.palmergames.bukkit.towny.object.Town) Resident(com.palmergames.bukkit.towny.object.Resident) TownyPermissionSource(com.palmergames.bukkit.towny.permissions.TownyPermissionSource) TownyWorld(com.palmergames.bukkit.towny.object.TownyWorld) TownyException(com.palmergames.bukkit.towny.exceptions.TownyException)

Example 7 with TownyPermissionSource

use of com.palmergames.bukkit.towny.permissions.TownyPermissionSource 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)

Aggregations

Town (com.palmergames.bukkit.towny.object.Town)7 TownyPermissionSource (com.palmergames.bukkit.towny.permissions.TownyPermissionSource)7 TownyException (com.palmergames.bukkit.towny.exceptions.TownyException)6 Resident (com.palmergames.bukkit.towny.object.Resident)5 Player (org.bukkit.entity.Player)5 TownBlockSettingsChangedEvent (com.palmergames.bukkit.towny.event.TownBlockSettingsChangedEvent)4 PlotToggleExplosionEvent (com.palmergames.bukkit.towny.event.plot.toggle.PlotToggleExplosionEvent)3 PlotToggleFireEvent (com.palmergames.bukkit.towny.event.plot.toggle.PlotToggleFireEvent)3 PlotToggleMobsEvent (com.palmergames.bukkit.towny.event.plot.toggle.PlotToggleMobsEvent)3 PlotTogglePvpEvent (com.palmergames.bukkit.towny.event.plot.toggle.PlotTogglePvpEvent)3 AlreadyRegisteredException (com.palmergames.bukkit.towny.exceptions.AlreadyRegisteredException)3 TownBlock (com.palmergames.bukkit.towny.object.TownBlock)3 Translatable (com.palmergames.bukkit.towny.object.Translatable)3 PlotPreChangeTypeEvent (com.palmergames.bukkit.towny.event.PlotPreChangeTypeEvent)2 PlotTrustAddEvent (com.palmergames.bukkit.towny.event.plot.PlotTrustAddEvent)2 PlotTrustRemoveEvent (com.palmergames.bukkit.towny.event.plot.PlotTrustRemoveEvent)2 PermissionData (com.palmergames.bukkit.towny.object.PermissionData)2 PlotGroup (com.palmergames.bukkit.towny.object.PlotGroup)2 TownBlockOwner (com.palmergames.bukkit.towny.object.TownBlockOwner)2 TownBlockType (com.palmergames.bukkit.towny.object.TownBlockType)2