use of com.palmergames.bukkit.towny.exceptions.NotRegisteredException in project Towny by ElgarL.
the class TownyWarCustomListener method onCellWonEvent.
@EventHandler(priority = EventPriority.LOWEST)
public void onCellWonEvent(CellWonEvent event) {
CellUnderAttack cell = event.getCellAttackData();
TownyUniverse universe = plugin.getTownyUniverse();
try {
Resident attackingResident = TownyUniverse.getDataSource().getResident(cell.getNameOfFlagOwner());
Town attackingTown = attackingResident.getTown();
Nation attackingNation = attackingTown.getNation();
WorldCoord worldCoord = TownyWar.cellToWorldCoord(cell);
universe.removeWarZone(worldCoord);
TownBlock townBlock = worldCoord.getTownBlock();
Town defendingTown = townBlock.getTown();
// Payments
double amount = 0;
String moneyTranserMsg = null;
if (TownySettings.isUsingEconomy()) {
try {
String reasonType;
if (townBlock.isHomeBlock()) {
amount = TownyWarConfig.getWonHomeblockReward();
reasonType = "Homeblock";
} else {
amount = TownyWarConfig.getWonTownblockReward();
reasonType = "Townblock";
}
if (amount > 0) {
// Defending Town -> Attacker (Pillage)
String reason = String.format("War - Won Enemy %s (Pillage)", reasonType);
amount = Math.min(amount, defendingTown.getHoldingBalance());
defendingTown.payTo(amount, attackingResident, reason);
// Message
moneyTranserMsg = String.format(TownySettings.getLangString("msg_enemy_war_area_won_pillage"), attackingResident.getFormattedName(), TownyEconomyHandler.getFormattedBalance(amount), defendingTown.getFormattedName());
} else if (amount < 0) {
// Attacker -> Defending Town (Rebuild cost)
// Inverse the amount so it's positive.
amount = -amount;
String reason = String.format("War - Won Enemy %s (Rebuild Cost)", reasonType);
if (!attackingResident.payTo(amount, defendingTown, reason)) {
// Could Not Pay Defending Town the Rebuilding Cost.
TownyMessaging.sendGlobalMessage(String.format(TownySettings.getLangString("msg_enemy_war_area_won"), attackingResident.getFormattedName(), (attackingNation.hasTag() ? attackingNation.getTag() : attackingNation.getFormattedName()), cell.getCellString()));
}
// Message
moneyTranserMsg = String.format(TownySettings.getLangString("msg_enemy_war_area_won_rebuilding"), attackingResident.getFormattedName(), TownyEconomyHandler.getFormattedBalance(amount), defendingTown.getFormattedName());
}
} catch (EconomyException x) {
x.printStackTrace();
}
}
// Defender loses townblock
TownyUniverse.getDataSource().removeTownBlock(townBlock);
// Attacker Claim Automatically
try {
List<WorldCoord> selection = new ArrayList<WorldCoord>();
selection.add(worldCoord);
TownCommand.checkIfSelectionIsValid(attackingTown, selection, false, 0, false);
new TownClaim(plugin, null, attackingTown, selection, false, true, false).start();
} catch (TownyException te) {
// Couldn't claim it.
}
// Cleanup
plugin.updateCache(worldCoord);
// Event Message
TownyMessaging.sendGlobalMessage(String.format(TownySettings.getLangString("msg_enemy_war_area_won"), attackingResident.getFormattedName(), (attackingNation.hasTag() ? attackingNation.getTag() : attackingNation.getFormattedName()), cell.getCellString()));
// Money Transfer message.
if (TownySettings.isUsingEconomy()) {
if (amount != 0 && moneyTranserMsg != null) {
try {
TownyMessaging.sendResidentMessage(attackingResident, moneyTranserMsg);
} catch (TownyException e) {
}
TownyMessaging.sendTownMessage(defendingTown, moneyTranserMsg);
}
}
} catch (NotRegisteredException e) {
e.printStackTrace();
}
}
use of com.palmergames.bukkit.towny.exceptions.NotRegisteredException in project Towny by ElgarL.
the class War method remove.
public void remove(Town attacker, Town town) throws NotRegisteredException {
townScored(attacker, TownySettings.getWarPointsForTown());
for (TownBlock townBlock : town.getTownBlocks()) remove(townBlock.getWorldCoord());
warringTowns.remove(town);
try {
if (!townsLeft(town.getNation()))
eliminate(town.getNation());
} catch (NotRegisteredException e) {
}
}
use of com.palmergames.bukkit.towny.exceptions.NotRegisteredException in project Towny by ElgarL.
the class WarTimerTask method run.
@Override
public void run() {
//TODO: check if war has ended and end gracefully
if (!warEvent.isWarTime()) {
warEvent.end();
universe.clearWarEvent();
plugin.resetCache();
TownyMessaging.sendDebugMsg("War ended.");
return;
}
int numPlayers = 0;
for (Player player : BukkitTools.getOnlinePlayers()) {
if (player != null) {
numPlayers += 1;
TownyMessaging.sendDebugMsg("[War] " + player.getName() + ": ");
try {
Resident resident = TownyUniverse.getDataSource().getResident(player.getName());
if (resident.hasNation()) {
Nation nation = resident.getTown().getNation();
TownyMessaging.sendDebugMsg("[War] hasNation");
if (nation.isNeutral()) {
if (warEvent.isWarringNation(nation))
warEvent.nationLeave(nation);
continue;
}
TownyMessaging.sendDebugMsg("[War] notNeutral");
if (!warEvent.isWarringNation(nation))
continue;
TownyMessaging.sendDebugMsg("[War] warringNation");
//TODO: Cache player coord & townblock
WorldCoord worldCoord = new WorldCoord(player.getWorld().getName(), Coord.parseCoord(player));
if (!warEvent.isWarZone(worldCoord))
continue;
TownyMessaging.sendDebugMsg("[War] warZone");
if (player.getLocation().getBlockY() < TownySettings.getMinWarHeight())
continue;
TownyMessaging.sendDebugMsg("[War] aboveMinHeight");
//universe.getWorld(player.getWorld().getName()).getTownBlock(worldCoord);
TownBlock townBlock = worldCoord.getTownBlock();
if (nation == townBlock.getTown().getNation() || townBlock.getTown().getNation().hasAlly(nation))
continue;
TownyMessaging.sendDebugMsg("[War] notAlly");
//Enemy nation
warEvent.damage(resident.getTown(), townBlock);
TownyMessaging.sendDebugMsg("[War] damaged");
}
} catch (NotRegisteredException e) {
continue;
}
}
}
TownyMessaging.sendDebugMsg("[War] # Players: " + numPlayers);
}
use of com.palmergames.bukkit.towny.exceptions.NotRegisteredException in project Towny by ElgarL.
the class TownyWar method callAttackCellEvent.
public static boolean callAttackCellEvent(Towny plugin, Player player, Block block, WorldCoord worldCoord) throws TownyException {
int topY = block.getWorld().getHighestBlockYAt(block.getX(), block.getZ()) - 1;
if (block.getY() < topY)
throw new TownyException(TownySettings.getLangString("msg_err_enemy_war_must_be_placed_above_ground"));
TownyUniverse universe = plugin.getTownyUniverse();
Resident attackingResident;
Town landOwnerTown, attackingTown;
Nation landOwnerNation, attackingNation;
TownBlock townBlock;
try {
attackingResident = TownyUniverse.getDataSource().getResident(player.getName());
attackingTown = attackingResident.getTown();
attackingNation = attackingTown.getNation();
} catch (NotRegisteredException e) {
throw new TownyException(TownySettings.getLangString("msg_err_dont_belong_nation"));
}
try {
landOwnerTown = worldCoord.getTownBlock().getTown();
townBlock = worldCoord.getTownBlock();
landOwnerNation = landOwnerTown.getNation();
} catch (NotRegisteredException e) {
throw new TownyException(TownySettings.getLangString("msg_err_enemy_war_not_part_of_nation"));
}
// Check Neutrality
if (landOwnerNation.isNeutral())
throw new TownyException(String.format(TownySettings.getLangString("msg_err_enemy_war_is_neutral"), landOwnerNation.getFormattedName()));
if (!TownyUniverse.getPermissionSource().isTownyAdmin(player) && attackingNation.isNeutral())
throw new TownyException(String.format(TownySettings.getLangString("msg_err_enemy_war_is_neutral"), attackingNation.getFormattedName()));
// Check Minimum Players Online
checkIfTownHasMinOnlineForWar(landOwnerTown);
checkIfNationHasMinOnlineForWar(landOwnerNation);
checkIfTownHasMinOnlineForWar(attackingTown);
checkIfNationHasMinOnlineForWar(attackingNation);
// Check that attack takes place on the edge of a town
if (TownyWarConfig.isAttackingBordersOnly() && !AreaSelectionUtil.isOnEdgeOfOwnership(landOwnerTown, worldCoord))
throw new TownyException(TownySettings.getLangString("msg_err_enemy_war_not_on_edge_of_town"));
// Check that the user can pay for the warflag + fines from losing/winning.
double costToPlaceWarFlag = TownyWarConfig.getCostToPlaceWarFlag();
if (TownySettings.isUsingEconomy()) {
try {
double requiredAmount = costToPlaceWarFlag;
double balance = attackingResident.getHoldingBalance();
// Check that the user can pay for the warflag.
if (balance < costToPlaceWarFlag)
throw new TownyException(String.format(TownySettings.getLangString("msg_err_insuficient_funds_warflag"), TownyEconomyHandler.getFormattedBalance(costToPlaceWarFlag)));
// Check that the user can pay the fines from losing/winning all future warflags.
int activeFlagCount = getNumActiveFlags(attackingResident.getName());
double defendedAttackCost = TownyWarConfig.getDefendedAttackReward() * (activeFlagCount + 1);
double attackWinCost = 0;
double amount;
amount = TownyWarConfig.getWonHomeblockReward();
double homeBlockFine = amount < 0 ? -amount : 0;
amount = TownyWarConfig.getWonTownblockReward();
double townBlockFine = amount < 0 ? -amount : 0;
// Error would be caught when actually taking the money when the plot has been won.
if (townBlock.isHomeBlock())
attackWinCost = homeBlockFine + activeFlagCount * townBlockFine;
else
attackWinCost = (activeFlagCount + 1) * townBlockFine;
if (defendedAttackCost > 0 && attackWinCost > 0) {
// There could be a fine
String reason;
double cost;
if (defendedAttackCost > attackWinCost) {
// Worst case scenario that all attacks are defended.
requiredAmount += defendedAttackCost;
cost = defendedAttackCost;
reason = TownySettings.getLangString("name_defended_attack");
} else {
// Worst case scenario that all attacks go through, but is forced to pay a rebuilding fine.
requiredAmount += attackWinCost;
cost = attackWinCost;
reason = TownySettings.getLangString("name_rebuilding");
}
// Check if player can pay in worst case scenario.
if (balance < requiredAmount)
throw new TownyException(String.format(TownySettings.getLangString("msg_err_insuficient_funds_future"), TownyEconomyHandler.getFormattedBalance(cost), String.format("%d %s", activeFlagCount + 1, reason + "(s)")));
}
} catch (EconomyException e) {
throw new TownyException(e.getError());
}
}
// Call Event (and make sure an attack isn't already under way)
CellAttackEvent cellAttackEvent = new CellAttackEvent(plugin, player, block);
plugin.getServer().getPluginManager().callEvent(cellAttackEvent);
if (cellAttackEvent.isCancelled()) {
if (cellAttackEvent.hasReason())
throw new TownyException(cellAttackEvent.getReason());
else
return false;
}
// Pay for war flag
if (TownySettings.isUsingEconomy()) {
// Skip payment + message if no cost.
if (costToPlaceWarFlag > 0) {
try {
attackingResident.pay(costToPlaceWarFlag, "War - WarFlag Cost");
TownyMessaging.sendResidentMessage(attackingResident, String.format(TownySettings.getLangString("msg_enemy_war_purchased_warflag"), TownyEconomyHandler.getFormattedBalance(costToPlaceWarFlag)));
} catch (EconomyException e) {
e.printStackTrace();
}
}
}
// Set yourself as target's enemy so they can retaliate.
if (!landOwnerNation.hasEnemy(attackingNation)) {
landOwnerNation.addEnemy(attackingNation);
plugin.getTownyUniverse();
TownyUniverse.getDataSource().saveNation(landOwnerNation);
}
// Update Cache
universe.addWarZone(worldCoord);
plugin.updateCache(worldCoord);
TownyMessaging.sendGlobalMessage(String.format(TownySettings.getLangString("msg_enemy_war_area_under_attack"), landOwnerTown.getFormattedName(), worldCoord.toString(), attackingResident.getFormattedName()));
return true;
}
use of com.palmergames.bukkit.towny.exceptions.NotRegisteredException in project Towny by ElgarL.
the class PlayerCacheUtil method getPermission.
/**
* Test if the player has permission to perform a certain action at this
* WorldCoord.
*
* @param player
* @param status
* @param pos
* @param id
* @param data
* @param action
* @return true if allowed.
*/
private static boolean getPermission(Player player, TownBlockStatus status, WorldCoord pos, Integer blockId, byte data, TownyPermission.ActionType action) {
if (// || plugin.isTownyAdmin(player)) // status == TownBlockStatus.ADMIN ||
status == TownBlockStatus.OFF_WORLD || status == TownBlockStatus.WARZONE || status == TownBlockStatus.PLOT_OWNER || status == TownBlockStatus.TOWN_OWNER)
return true;
if (status == TownBlockStatus.NOT_REGISTERED) {
cacheBlockErrMsg(player, TownySettings.getLangString("msg_cache_block_error"));
return false;
}
if (status == TownBlockStatus.LOCKED) {
cacheBlockErrMsg(player, TownySettings.getLangString("msg_cache_block_error_locked"));
return false;
}
TownBlock townBlock = null;
Town playersTown = null;
Town targetTown = null;
try {
playersTown = TownyUniverse.getDataSource().getResident(player.getName()).getTown();
} catch (NotRegisteredException e1) {
}
try {
townBlock = pos.getTownBlock();
targetTown = townBlock.getTown();
} catch (NotRegisteredException e) {
try {
// Wilderness Permissions
if (status == TownBlockStatus.UNCLAIMED_ZONE) {
if (TownyUniverse.getPermissionSource().hasWildOverride(pos.getTownyWorld(), player, blockId, data, action)) {
return true;
} else {
// Don't have permission to build/destroy/switch/item_use here
cacheBlockErrMsg(player, String.format(TownySettings.getLangString("msg_cache_block_error_wild"), action.toString()));
return false;
}
}
} catch (NotRegisteredException e2) {
TownyMessaging.sendErrorMsg(player, "Error updating " + action.toString() + " permission.");
return false;
}
}
// Allow admins to have ALL permissions over towns.
if (TownyUniverse.getPermissionSource().isTownyAdmin(player))
return true;
if (townBlock.hasResident()) {
/*
* Check town overrides before testing plot permissions
*/
if (targetTown.equals(playersTown) && (TownyUniverse.getPermissionSource().hasOwnTownOverride(player, blockId, data, action))) {
return true;
} else if (!targetTown.equals(playersTown) && (TownyUniverse.getPermissionSource().hasAllTownOverride(player, blockId, data, action))) {
return true;
} else if (status == TownBlockStatus.PLOT_FRIEND) {
if (townBlock.getPermissions().getResidentPerm(action)) {
if (townBlock.getType() == TownBlockType.WILDS) {
try {
if (TownyUniverse.getPermissionSource().unclaimedZoneAction(pos.getTownyWorld(), blockId, action))
return true;
} catch (NotRegisteredException e) {
}
} else {
return true;
}
}
cacheBlockErrMsg(player, String.format(TownySettings.getLangString("msg_cache_block_error_plot"), "friends", action.toString()));
return false;
} else if (status == TownBlockStatus.PLOT_ALLY) {
if (townBlock.getPermissions().getAllyPerm(action)) {
if (townBlock.getType() == TownBlockType.WILDS) {
try {
if (TownyUniverse.getPermissionSource().unclaimedZoneAction(pos.getTownyWorld(), blockId, action))
return true;
} catch (NotRegisteredException e) {
}
} else {
return true;
}
}
cacheBlockErrMsg(player, String.format(TownySettings.getLangString("msg_cache_block_error_plot"), "allies", action.toString()));
return false;
} else {
if (townBlock.getPermissions().getOutsiderPerm(action)) {
if (townBlock.getType() == TownBlockType.WILDS) {
try {
if (TownyUniverse.getPermissionSource().unclaimedZoneAction(pos.getTownyWorld(), blockId, action))
return true;
} catch (NotRegisteredException e) {
}
} else {
return true;
}
}
cacheBlockErrMsg(player, String.format(TownySettings.getLangString("msg_cache_block_error_plot"), "outsiders", action.toString()));
return false;
}
}
// Town Permissions
if (status == TownBlockStatus.TOWN_RESIDENT) {
/*
* Check town overrides before testing town permissions
*/
if (targetTown.equals(playersTown) && (TownyUniverse.getPermissionSource().hasTownOwnedOverride(player, blockId, data, action))) {
return true;
} else if (!targetTown.equals(playersTown) && (TownyUniverse.getPermissionSource().hasAllTownOverride(player, blockId, data, action))) {
return true;
} else if (townBlock.getPermissions().getResidentPerm(action)) {
if (townBlock.getType() == TownBlockType.WILDS) {
try {
if (TownyUniverse.getPermissionSource().unclaimedZoneAction(pos.getTownyWorld(), blockId, action))
return true;
} catch (NotRegisteredException e) {
}
} else {
return true;
}
}
cacheBlockErrMsg(player, String.format(TownySettings.getLangString("msg_cache_block_error_town_resident"), action.toString()));
return false;
} else if (status == TownBlockStatus.TOWN_ALLY) {
/*
* Check town overrides before testing town permissions
*/
if (targetTown.equals(playersTown) && (TownyUniverse.getPermissionSource().hasOwnTownOverride(player, blockId, data, action))) {
return true;
} else if (!targetTown.equals(playersTown) && (TownyUniverse.getPermissionSource().hasAllTownOverride(player, blockId, data, action))) {
return true;
} else if (townBlock.getPermissions().getAllyPerm(action)) {
if (townBlock.getType() == TownBlockType.WILDS) {
try {
if (TownyUniverse.getPermissionSource().unclaimedZoneAction(pos.getTownyWorld(), blockId, action))
return true;
} catch (NotRegisteredException e) {
}
} else {
return true;
}
}
cacheBlockErrMsg(player, String.format(TownySettings.getLangString("msg_cache_block_error_town_allies"), action.toString()));
return false;
} else if (status == TownBlockStatus.OUTSIDER || status == TownBlockStatus.ENEMY) {
/*
* Check town overrides before testing town permissions
*/
if (TownyUniverse.getPermissionSource().hasAllTownOverride(player, blockId, data, action)) {
return true;
} else if (townBlock.getPermissions().getOutsiderPerm(action)) {
if (townBlock.getType() == TownBlockType.WILDS) {
try {
if (TownyUniverse.getPermissionSource().unclaimedZoneAction(pos.getTownyWorld(), blockId, action))
return true;
} catch (NotRegisteredException e) {
}
} else {
return true;
}
}
cacheBlockErrMsg(player, String.format(TownySettings.getLangString("msg_cache_block_error_town_outsider"), action.toString()));
return false;
}
TownyMessaging.sendErrorMsg(player, "Error updating " + action.toString() + " permission.");
return false;
}
Aggregations