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());
}
}
Aggregations