Search in sources :

Example 76 with NotRegisteredException

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();
    }
}
Also used : NotRegisteredException(com.palmergames.bukkit.towny.exceptions.NotRegisteredException) ArrayList(java.util.ArrayList) TownyException(com.palmergames.bukkit.towny.exceptions.TownyException) EconomyException(com.palmergames.bukkit.towny.exceptions.EconomyException) CellUnderAttack(com.palmergames.bukkit.towny.war.flagwar.CellUnderAttack) TownClaim(com.palmergames.bukkit.towny.tasks.TownClaim) EventHandler(org.bukkit.event.EventHandler)

Example 77 with NotRegisteredException

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) {
    }
}
Also used : NotRegisteredException(com.palmergames.bukkit.towny.exceptions.NotRegisteredException) TownBlock(com.palmergames.bukkit.towny.object.TownBlock)

Example 78 with NotRegisteredException

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);
}
Also used : Nation(com.palmergames.bukkit.towny.object.Nation) Player(org.bukkit.entity.Player) WorldCoord(com.palmergames.bukkit.towny.object.WorldCoord) NotRegisteredException(com.palmergames.bukkit.towny.exceptions.NotRegisteredException) Resident(com.palmergames.bukkit.towny.object.Resident) TownBlock(com.palmergames.bukkit.towny.object.TownBlock)

Example 79 with NotRegisteredException

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;
}
Also used : EconomyException(com.palmergames.bukkit.towny.exceptions.EconomyException) NotRegisteredException(com.palmergames.bukkit.towny.exceptions.NotRegisteredException) CellAttackEvent(com.palmergames.bukkit.towny.war.flagwar.events.CellAttackEvent) TownyException(com.palmergames.bukkit.towny.exceptions.TownyException)

Example 80 with NotRegisteredException

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;
}
Also used : NotRegisteredException(com.palmergames.bukkit.towny.exceptions.NotRegisteredException) Town(com.palmergames.bukkit.towny.object.Town) TownBlock(com.palmergames.bukkit.towny.object.TownBlock)

Aggregations

NotRegisteredException (com.palmergames.bukkit.towny.exceptions.NotRegisteredException)80 TownyException (com.palmergames.bukkit.towny.exceptions.TownyException)38 TownBlock (com.palmergames.bukkit.towny.object.TownBlock)31 TownyWorld (com.palmergames.bukkit.towny.object.TownyWorld)27 Resident (com.palmergames.bukkit.towny.object.Resident)24 AlreadyRegisteredException (com.palmergames.bukkit.towny.exceptions.AlreadyRegisteredException)19 Player (org.bukkit.entity.Player)18 Town (com.palmergames.bukkit.towny.object.Town)17 ArrayList (java.util.ArrayList)17 EventHandler (org.bukkit.event.EventHandler)17 WorldCoord (com.palmergames.bukkit.towny.object.WorldCoord)14 Nation (com.palmergames.bukkit.towny.object.Nation)11 EconomyException (com.palmergames.bukkit.towny.exceptions.EconomyException)9 PlayerCache (com.palmergames.bukkit.towny.object.PlayerCache)9 IOException (java.io.IOException)9 Location (org.bukkit.Location)9 Entity (org.bukkit.entity.Entity)9 LivingEntity (org.bukkit.entity.LivingEntity)8 Coord (com.palmergames.bukkit.towny.object.Coord)7 BlockLocation (com.palmergames.bukkit.towny.regen.block.BlockLocation)7