Search in sources :

Example 21 with Translator

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

the class PlaceBlock method evaluateSiegeWarPlaceBlockRequest.

/**
 * Evaluates a block placement request.
 * If the block is a standing banner or chest, this method calls an appropriate private method.
 *
 * @param player The player placing the block
 * @param block The block about to be placed
 * @param event The event object related to the block placement
 */
public static void evaluateSiegeWarPlaceBlockRequest(Player player, Block block, TownyBuildEvent event) {
    final Translator translator = Translator.locale(Translation.getLocale(player));
    try {
        // Ensure siege is enabled in this world
        if (!TownyAPI.getInstance().getTownyWorld(block.getWorld()).isWarAllowed())
            return;
        // If the event is in a town and was cancelled by towny, SW might un-cancel the event via wall breaching
        if (event.isCancelled() && SiegeWarSettings.isWallBreachingEnabled() && !TownyAPI.getInstance().isWilderness(block)) {
            Town town = TownyAPI.getInstance().getTown(block.getLocation());
            if (!SiegeController.hasActiveSiege(town))
                // SW doesn't un-cancel events in unsieged towns
                return;
            // Ensure player has permission
            if (!TownyUniverse.getInstance().getPermissionSource().testPermission(event.getPlayer(), SiegeWarPermissionNodes.SIEGEWAR_NATION_SIEGE_USE_BREACH_POINTS.getNode())) {
                event.setMessage(translator.of("msg_err_action_disable"));
                return;
            }
            // No wall breaching outside battle sessions
            if (!BattleSession.getBattleSession().isActive()) {
                event.setMessage(translator.of("msg_err_cannot_breach_without_battle_session"));
                return;
            }
            // Ensure player is on the town-hostile siege side
            Resident resident = TownyAPI.getInstance().getResident(event.getPlayer());
            if (resident == null)
                return;
            Siege siege = SiegeController.getSiege(town);
            if (!SiegeWarAllegianceUtil.isPlayerOnTownHostileSide(event.getPlayer(), resident, siege))
                return;
            // Ensure there are enough breach points
            if (siege.getWallBreachPoints() < SiegeWarSettings.getWallBreachingBlockPlacementCost()) {
                event.setMessage(translator.of("msg_err_not_enough_breach_points_for_action", SiegeWarSettings.getWallBreachingBlockPlacementCost(), siege.getFormattedBreachPoints()));
                return;
            }
            // Ensure height is ok
            if (!SiegeWarWallBreachUtil.validateBreachHeight(block, town, siege)) {
                event.setMessage(translator.of("msg_err_cannot_breach_at_this_height", SiegeWarSettings.getWallBreachingHomeblockBreachHeightLimitMin(), SiegeWarSettings.getWallBreachingHomeblockBreachHeightLimitMax()));
                return;
            }
            // Ensure the material is ok to place
            if (!SiegeWarSettings.getWallBreachingPlaceBlocksWhitelist().contains(block.getType())) {
                event.setMessage(translator.of("msg_err_breaching_cannot_place_this_material"));
                return;
            }
            // IF we get here, it is a wall breach!!
            // Reduce breach points
            siege.setWallBreachPoints(siege.getWallBreachPoints() - SiegeWarSettings.getWallBreachingBlockPlacementCost());
            // Un-cancel the event
            event.setCancelled(false);
            // Send message to player
            event.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(ChatColor.RED + translator.of("msg_wall_breach_successful")));
            return;
        }
        // Enforce Anti-Trap warfare build block if below siege banner altitude.
        if (SiegeWarSettings.isTrapWarfareMitigationEnabled() && SiegeWarDistanceUtil.isLocationInActiveTimedPointZoneAndBelowSiegeBannerAltitude(event.getBlock().getLocation())) {
            event.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(ChatColor.DARK_RED + translator.of("msg_err_cannot_alter_blocks_below_banner_in_timed_point_zone")));
            event.setCancelled(true);
            return;
        }
        Material mat = block.getType();
        // Standing Banner placement
        if (Tag.BANNERS.isTagged(mat) && !mat.toString().contains("_W")) {
            try {
                if (evaluatePlaceStandingBanner(player, block))
                    event.setCancelled(false);
            } catch (TownyException e1) {
                Messaging.sendErrorMsg(player, e1.getMessage());
            }
            return;
        }
        // Chest placement
        if (mat == Material.CHEST || mat == Material.TRAPPED_CHEST) {
            try {
                evaluatePlaceChest(player, block);
            } catch (TownyException e) {
                Messaging.sendErrorMsg(player, e.getMessage());
            }
            return;
        }
        // Check for forbidden siegezone block placement
        if (SiegeWarSettings.getSiegeZoneWildernessForbiddenBlockMaterials().contains(mat) && TownyAPI.getInstance().isWilderness(block) && SiegeWarDistanceUtil.isLocationInActiveSiegeZone(block.getLocation())) {
            throw new TownyException(translator.of("msg_war_siege_zone_block_placement_forbidden"));
        }
    } catch (TownyException e) {
        event.setCancelled(true);
        event.setMessage(e.getMessage());
    }
}
Also used : TextComponent(net.md_5.bungee.api.chat.TextComponent) Translator(com.palmergames.bukkit.towny.object.Translator) Town(com.palmergames.bukkit.towny.object.Town) Resident(com.palmergames.bukkit.towny.object.Resident) Material(org.bukkit.Material) Siege(com.gmail.goosius.siegewar.objects.Siege) TownyException(com.palmergames.bukkit.towny.exceptions.TownyException)

Aggregations

Translator (com.palmergames.bukkit.towny.object.Translator)21 TownyException (com.palmergames.bukkit.towny.exceptions.TownyException)12 Nation (com.palmergames.bukkit.towny.object.Nation)9 Siege (com.gmail.goosius.siegewar.objects.Siege)6 Resident (com.palmergames.bukkit.towny.object.Resident)6 Town (com.palmergames.bukkit.towny.object.Town)6 Coord (com.palmergames.bukkit.towny.object.Coord)5 PreSiegeCampEvent (com.gmail.goosius.siegewar.events.PreSiegeCampEvent)4 SiegeCamp (com.gmail.goosius.siegewar.objects.SiegeCamp)4 ArrayList (java.util.ArrayList)4 EventHandler (org.bukkit.event.EventHandler)3 TextComponent (com.palmergames.adventure.text.TextComponent)2 TownyUniverse (com.palmergames.bukkit.towny.TownyUniverse)2 TextComponent (net.md_5.bungee.api.chat.TextComponent)2 Scoreboard (org.bukkit.scoreboard.Scoreboard)2 SiegeStatus (com.gmail.goosius.siegewar.enums.SiegeStatus)1 TownBlock (com.palmergames.bukkit.towny.object.TownBlock)1 TownBlockType (com.palmergames.bukkit.towny.object.TownBlockType)1 DecimalFormat (java.text.DecimalFormat)1 Material (org.bukkit.Material)1