public float getOffencePower(FreeColGameObject attacker,
                                 FreeColGameObject defender) {
        float result = 0.0f;
        if (attacker == null) {
            throw new IllegalStateException("Null attacker");
        } else if (combatIsAttackMeasurement(attacker, defender)
            || combatIsAttack(attacker, defender)
            || combatIsSettlementAttack(attacker, defender)) {
            result = FeatureContainer.applyModifierSet(0,
                    attacker.getGame().getTurn(),
                    getOffensiveModifiers(attacker, defender));

        } else if (combatIsBombard(attacker, defender)) {
            Settlement attackerSettlement = (Settlement) attacker;
            if (attackerSettlement.hasAbility("model.ability.bombardShips")) {
                for (Unit unit : attackerSettlement.getTile().getUnitList()) {
                    if (unit.hasAbility(Ability.BOMBARD)) {
                        result += unit.getType().getOffence();
                    }
                }
            }
            if (result > MAXIMUM_BOMBARD_POWER) result = MAXIMUM_BOMBARD_POWER;
        } else {
            throw new IllegalArgumentException("Bogus combat");
        }
        return result;
    }