Ejemplo n.º 1
0
  @Override
  public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    if (cmd.getName().equalsIgnoreCase("dmarker")) {
      return MarkerAPIImpl.onCommand(this, sender, cmd, commandLabel, args);
    }
    if (!cmd.getName().equalsIgnoreCase("dynmap")) return false;
    Player player = null;
    if (sender instanceof Player) player = (Player) sender;
    /* Re-parse args - handle doublequotes */
    args = parseArgs(args, sender);

    if (args == null) return false;

    if (args.length > 0) {
      String c = args[0];
      if (!commands.contains(c)) {
        return false;
      }

      if (c.equals("render") && checkPlayerPermission(sender, "render")) {
        if (player != null) {
          int invalidates = mapManager.touch(player.getLocation(), "render");
          sender.sendMessage(
              "Queued "
                  + invalidates
                  + " tiles"
                  + (invalidates == 0 ? " (world is not loaded?)" : "..."));
        } else {
          sender.sendMessage("Command can only be issued by player.");
        }
      } else if (c.equals("radiusrender") && checkPlayerPermission(sender, "radiusrender")) {
        if (player != null) {
          int radius = 0;
          String mapname = null;
          if (args.length > 1) {
            radius = Integer.parseInt(args[1]); /* Parse radius */
            if (radius < 0) radius = 0;
            if (args.length > 2) mapname = args[2];
          }
          Location loc = player.getLocation();
          if (loc != null) mapManager.renderWorldRadius(loc, sender, mapname, radius);
        } else {
          sender.sendMessage("Command can only be issued by player.");
        }
      } else if (c.equals("hide")) {
        if (args.length == 1) {
          if (player != null && checkPlayerPermission(sender, "hide.self")) {
            playerList.setVisible(player.getName(), false);
            sender.sendMessage("You are now hidden on Dynmap.");
          }
        } else if (checkPlayerPermission(sender, "hide.others")) {
          for (int i = 1; i < args.length; i++) {
            playerList.setVisible(args[i], false);
            sender.sendMessage(args[i] + " is now hidden on Dynmap.");
          }
        }
      } else if (c.equals("show")) {
        if (args.length == 1) {
          if (player != null && checkPlayerPermission(sender, "show.self")) {
            playerList.setVisible(player.getName(), true);
            sender.sendMessage("You are now visible on Dynmap.");
          }
        } else if (checkPlayerPermission(sender, "show.others")) {
          for (int i = 1; i < args.length; i++) {
            playerList.setVisible(args[i], true);
            sender.sendMessage(args[i] + " is now visible on Dynmap.");
          }
        }
      } else if (c.equals("fullrender") && checkPlayerPermission(sender, "fullrender")) {
        String map = null;
        if (args.length > 1) {
          for (int i = 1; i < args.length; i++) {
            int dot = args[i].indexOf(":");
            DynmapWorld w;
            String wname = args[i];
            if (dot >= 0) {
              wname = args[i].substring(0, dot);
              map = args[i].substring(dot + 1);
            }
            w = mapManager.getWorld(wname);
            if (w != null) {
              Location spawn = w.world.getSpawnLocation();
              Location loc =
                  new Location(
                      w.world,
                      w.configuration.getDouble("center/x", spawn.getX()),
                      w.configuration.getDouble("center/y", spawn.getY()),
                      w.configuration.getDouble("center/z", spawn.getZ()));
              mapManager.renderFullWorld(loc, sender, map);
            } else sender.sendMessage("World '" + wname + "' not defined/loaded");
          }
        } else if (player != null) {
          Location loc = player.getLocation();
          if (args.length > 1) map = args[1];
          if (loc != null) mapManager.renderFullWorld(loc, sender, map);
        } else {
          sender.sendMessage("World name is required");
        }
      } else if (c.equals("cancelrender") && checkPlayerPermission(sender, "cancelrender")) {
        if (args.length > 1) {
          for (int i = 1; i < args.length; i++) {
            World w = getServer().getWorld(args[i]);
            if (w != null) mapManager.cancelRender(w, sender);
            else sender.sendMessage("World '" + args[i] + "' not defined/loaded");
          }
        } else if (player != null) {
          Location loc = player.getLocation();
          if (loc != null) mapManager.cancelRender(loc.getWorld(), sender);
        } else {
          sender.sendMessage("World name is required");
        }
      } else if (c.equals("purgequeue") && checkPlayerPermission(sender, "purgequeue")) {
        mapManager.purgeQueue(sender);
      } else if (c.equals("reload") && checkPlayerPermission(sender, "reload")) {
        sender.sendMessage("Reloading Dynmap...");
        reload();
        sender.sendMessage("Dynmap reloaded");
      } else if (c.equals("stats") && checkPlayerPermission(sender, "stats")) {
        if (args.length == 1) mapManager.printStats(sender, null);
        else mapManager.printStats(sender, args[1]);
      } else if (c.equals("triggerstats") && checkPlayerPermission(sender, "stats")) {
        mapManager.printTriggerStats(sender);
      } else if (c.equals("resetstats") && checkPlayerPermission(sender, "resetstats")) {
        if (args.length == 1) mapManager.resetStats(sender, null);
        else mapManager.resetStats(sender, args[1]);
      } else if (c.equals("sendtoweb") && checkPlayerPermission(sender, "sendtoweb")) {
        String msg = "";
        for (int i = 1; i < args.length; i++) {
          msg += args[i] + " ";
        }
        this.sendBroadcastToWeb("dynmap", msg);
      }
      return true;
    }
    return false;
  }