예제 #1
0
  public void onCannonDamage(int damage, CannonProjectile projectile) throws CivException {
    this.hitpoints -= damage;

    Resident resident = projectile.whoFired;
    if (hitpoints <= 0) {
      for (BlockCoord coord : this.controlPoints.keySet()) {
        ControlPoint cp = this.controlPoints.get(coord);
        if (cp != null) {
          if (cp.getHitpoints() > CannonProjectile.controlBlockHP) {
            cp.damage(cp.getHitpoints() - 1);
            this.hitpoints = this.getMaxHitPoints() / 2;
            StructureBlock hit = CivGlobal.getStructureBlock(coord);
            onControlBlockCannonDestroy(cp, CivGlobal.getPlayer(resident), hit);
            CivMessage.sendCiv(
                getCiv(),
                "Our "
                    + this.getDisplayName()
                    + " has been hit by a cannon and a control block was set to "
                    + CannonProjectile.controlBlockHP
                    + " HP!");
            CivMessage.sendCiv(
                getCiv(),
                "Our "
                    + this.getDisplayName()
                    + " has regenerated "
                    + this.getMaxHitPoints() / 2
                    + " HP! If it drops to zero, we will lose another Control Point.");
            return;
          }
        }
      }

      CivMessage.sendCiv(
          getCiv(),
          "Our "
              + this.getDisplayName()
              + " is out of hitpoints, walls can be destroyed by cannon and TNT blasts!");
      hitpoints = 0;
    }

    CivMessage.sendCiv(
        getCiv(),
        "Our "
            + this.getDisplayName()
            + " has been hit by a cannon! ("
            + this.hitpoints
            + "/"
            + this.getMaxHitPoints()
            + ")");
  }
예제 #2
0
  public void onControlBlockHit(ControlPoint cp, World world, Player player, StructureBlock hit) {
    world.playSound(hit.getCoord().getLocation(), Sound.ANVIL_USE, 0.2f, 1);
    world.playEffect(hit.getCoord().getLocation(), Effect.MOBSPAWNER_FLAMES, 0);

    CivMessage.send(
        player,
        CivColor.LightGray
            + "Damaged Control Block ("
            + cp.getHitpoints()
            + " / "
            + cp.getMaxHitpoints()
            + ")");
    CivMessage.sendTown(
        hit.getTown(), CivColor.Yellow + "One of our Town Hall's Control Points is under attack!");
  }
예제 #3
0
  @Override
  public void onDamage(
      int amount, World world, Player player, BlockCoord coord, BuildableDamageBlock hit) {

    ControlPoint cp = this.controlPoints.get(coord);
    Resident resident = CivGlobal.getResident(player);

    if (!resident.canDamageControlBlock()) {
      CivMessage.send(
          player,
          CivColor.Rose
              + "Cannot damage control blocks due to missing/invalid Town Hall or Capitol structure.");
      return;
    }

    if (cp != null) {
      if (!cp.isDestroyed()) {

        if (resident.isControlBlockInstantBreak()) {
          cp.damage(cp.getHitpoints());
        } else {
          cp.damage(amount);
        }

        if (cp.isDestroyed()) {
          onControlBlockDestroy(cp, world, player, (StructureBlock) hit);
        } else {
          onControlBlockHit(cp, world, player, (StructureBlock) hit);
        }
      } else {
        CivMessage.send(player, CivColor.Rose + "Control Block already destroyed.");
      }

    } else {
      CivMessage.send(
          player,
          CivColor.Rose
              + "Cannot Damage "
              + this.getDisplayName()
              + ", go after the control points!");
    }
  }