Exemplo n.º 1
0
  @Override
  public void run(Server server, User user, String commandLabel, String[] args) throws Exception {
    if (args.length < 1) {
      throw new NotEnoughArgumentsException();
      // TODO: user.sendMessage("§7Mobs: Zombie PigZombie Skeleton Slime Chicken Pig Monster Spider
      // Creeper Ghast Squid Giant Cow Sheep Wolf");
    }

    String[] mountparts = args[0].split(",");
    String[] parts = mountparts[0].split(":");
    String mobType = parts[0];
    mobType = mobType.equalsIgnoreCase("PigZombie") ? "PigZombie" : Util.capitalCase(mobType);
    String mobData = null;
    if (parts.length == 2) {
      mobData = parts[1];
    }
    String mountType = null;
    String mountData = null;
    if (mountparts.length > 1) {
      parts = mountparts[1].split(":");
      mountType = parts[0];
      mountType =
          mountType.equalsIgnoreCase("PigZombie") ? "PigZombie" : Util.capitalCase(mountType);
      if (parts.length == 2) {
        mountData = parts[1];
      }
    }

    if (ess.getSettings().getProtectPreventSpawn(mobType.toLowerCase())
        || (mountType != null
            && ess.getSettings().getProtectPreventSpawn(mountType.toLowerCase()))) {
      throw new Exception(Util.i18n("unableToSpawnMob"));
    }

    Entity spawnedMob = null;
    Mob mob = null;
    Entity spawnedMount = null;
    Mob mobMount = null;

    mob = Mob.fromName(mobType);
    if (mob == null) {
      throw new Exception(Util.i18n("invalidMob"));
    }
    int[] ignore = {8, 9};
    Block block = (new TargetBlock(user, 300, 0.2, ignore)).getTargetBlock();
    if (block == null) {
      user.sendMessage(Util.i18n("unableToSpawnMob"));
      return;
    }
    Location loc = block.getLocation();
    Location sloc = Util.getSafeDestination(loc);
    try {
      spawnedMob = mob.spawn(user, server, sloc);
    } catch (MobException e) {
      user.sendMessage(Util.i18n("unableToSpawnMob"));
      return;
    }

    if (mountType != null) {
      mobMount = Mob.fromName(mountType);
      if (mobMount == null) {
        user.sendMessage(Util.i18n("invalidMob"));
        return;
      }
      try {
        spawnedMount = mobMount.spawn(user, server, loc);
      } catch (MobException e) {
        user.sendMessage(Util.i18n("unableToSpawnMob"));
        return;
      }
      spawnedMob.setPassenger(spawnedMount);
    }
    if (mobData != null) {
      changeMobData(mob.name, spawnedMob, mobData, user);
    }
    if (spawnedMount != null && mountData != null) {
      changeMobData(mobMount.name, spawnedMount, mountData, user);
    }
    if (args.length == 2) {
      int mobCount = Integer.parseInt(args[1]);
      int serverLimit = ess.getSettings().getSpawnMobLimit();
      if (mobCount > serverLimit) {
        mobCount = serverLimit;
        user.sendMessage(Util.i18n("mobSpawnLimit"));
      }

      try {
        for (int i = 1; i < mobCount; i++) {
          spawnedMob = mob.spawn(user, server, loc);
          if (mobMount != null) {
            try {
              spawnedMount = mobMount.spawn(user, server, loc);
            } catch (MobException e) {
              user.sendMessage(Util.i18n("unableToSpawnMob"));
              return;
            }
            spawnedMob.setPassenger(spawnedMount);
          }
          if (mobData != null) {
            changeMobData(mob.name, spawnedMob, mobData, user);
          }
          if (spawnedMount != null && mountData != null) {
            changeMobData(mobMount.name, spawnedMount, mountData, user);
          }
        }
        user.sendMessage(
            args[1] + " " + mob.name.toLowerCase() + mob.suffix + " " + Util.i18n("spawned"));
      } catch (MobException e1) {
        throw new Exception(Util.i18n("unableToSpawnMob"), e1);
      } catch (NumberFormatException e2) {
        throw new Exception(Util.i18n("numberRequired"), e2);
      } catch (NullPointerException np) {
        throw new Exception(Util.i18n("soloMob"), np);
      }
    } else {
      user.sendMessage(mob.name + " " + Util.i18n("spawned"));
    }
  }