LegendaryWarp: /setwarp command error?

Discussion in 'Plugin Development' started by WTFIRETRUCK7, Feb 23, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    WTFIRETRUCK7

    Hello Again, I am working on updating my LegendaryWarp plugin, and I got that almost completed, But when I do /setwarp warptest, I just get /setwarp [WarpName] and it doesn't set-

    This is the code under setwarp
    MainClass

    Code:
        if (cmd.equalsIgnoreCase("setwarp")) {
          this.worker.warpAdd(sender, args[0]);
          return true;

    WarpT Class
    Code:
      public void warpAdd(CommandSender sender, String warp)
      {
        if (!(sender instanceof Player)) {
          sender.sendMessage(ChatColor.AQUA + "You have to be a player!");
          return;
        }
     
        if (!this.fWarps.exists()) {
          try {
            this.fWarps.createNewFile();
          } catch (Exception e) {
            System.out.println("Cannot create file " + this.fWarps.getName() + " - " + e.getMessage());
            sender.sendMessage(ChatColor.RED + "Setting warp failed! >:[");
            return;
          }
        }
     
        if (!warpRemoveInternal(warp)) {
          sender.sendMessage(ChatColor.RED + "Setting warp failed! >:[");
          return;
        }
     
        Player player = (Player)sender;
        Location loc = player.getLocation();
        try {
          FileWriter wrt = new FileWriter(this.fWarps, true);
          wrt.write(warp + ":" +
            loc.getX() + ":" +
            loc.getY() + ":" +
            loc.getZ() + ":" +
            loc.getYaw() + ":" +
            loc.getPitch() + ":" +
            player.getWorld().getName() + "\n");
     
          wrt.close();
        } catch (Exception e) {
          System.out.println("Unexpected error " + e.getMessage());
          sender.sendMessage(ChatColor.RED + "Setting warp failed!");
          return;
        }
    Thanks!
     
  2. Offline

    Nitnelave

    give us the whole onCommand method, or at least more relevant parts of the code, because here we cannot know why it says "/setwarp[WarpName]", given that is isn't in the code you've shown.
     
  3. Offline

    WTFIRETRUCK7

    It doesn't actually say [warpname] It shows the usage of the command.

    Main Class

    Code:
    package us.chasemostat.legendarywarp;
     
    import java.io.File;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.plugin.PluginDescriptionFile;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class LegendaryWarp extends JavaPlugin
    {
      private WarpT worker;
     
      public void onEnable()
      {
        PluginDescriptionFile pdfFile = getDescription();
     
        File dir = getDataFolder();
        if (!dir.exists()) {
          dir.mkdir();
          if (!dir.exists()) {
            System.out.println("Cannot create plugin directory for " + pdfFile.getName() + "!");
            return;
          }
        }
        this.worker = new WarpT(getServer(), getDataFolder());
        System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!");
      }
     
      public void onDisable() {
        PluginDescriptionFile pdfFile = getDescription();
        System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " stopping...");
      }
    //start commands
      public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args)
      {
        String cmd = command.getName();
        if (cmd.equalsIgnoreCase("warplist")) {
          this.worker.warpList(sender);
          return true;
        }
        if (cmd.equalsIgnoreCase("worldlist")) { //start world commands
          this.worker.worldList(sender);
          return true;
        }
        if (args.length == 0)
          return false;
        if (cmd.equalsIgnoreCase("warpto")) {
          this.worker.warpTo(sender, args[0], args.length > 1 ? args[1] : null);
          return true;
        }
        if (cmd.equalsIgnoreCase("warpremove")) {
          this.worker.warpRemove(sender, args[0]); //need to fix this
          return true;
        }
        if (cmd.equalsIgnoreCase("setwarp")) {
          this.worker.warpAdd(sender, args[0]);
          return true;
        }
        if (cmd.equalsIgnoreCase("world")) {
          this.worker.worldTo(sender, args[0], args.length > 1 ? args[1] : null); //tp to a world, still buggy
          return true;
        }
        return false;
      }
    }
    WarpT Class

    Code:
    package us.chasemostat.legendarywarp;
     
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.PrintWriter;
    import java.util.Scanner;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.Server;
    import org.bukkit.World;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
     
    public class WarpT
    {
      private Server server;
      private File fWarps;
      private File fTmp;
     
      public WarpT(Server server, File folder)
      {
        this.server = server;
        this.fWarps = new File(folder, "warps.yml");
        this.fTmp = new File(folder, "warps.tmp");
      }
     
      public void warpList(CommandSender sender)
      {
        if (!this.fWarps.exists()) {
          sender.sendMessage(ChatColor.RED + "No warps available >:[");
          return;
        }
        try {
          Scanner scanner = new Scanner(new FileReader(this.fWarps));
          String buffer = ChatColor.AQUA + "Available warps: " + ChatColor.WHITE;
          while (scanner.hasNextLine()) {
            String[] items = scanner.nextLine().split(":");
            if (items.length > 0) {
              if (buffer.length() + items[0].length() + 2 >= 256) {
                sender.sendMessage(buffer);
                buffer = items[0] + ", ";
              } else {
                buffer = buffer + items[0] + ", ";
              }
            }
          }
          sender.sendMessage(buffer);
          scanner.close();
        } catch (Exception e) {
          System.out.println("Cannot create file " + this.fWarps.getName() + " - " + e.getMessage());
          sender.sendMessage(ChatColor.RED + "Listing warps failed! D:<");
        }
      }
     
      public void warpTo(CommandSender sender, String warp, String playerName)
      {
        Player player = null;
        if (playerName != null) {
          Player player1 = this.server.getPlayer(playerName);
          if (player1 == null) {
            sender.sendMessage(ChatColor.RED + "Unknown player " + ChatColor.WHITE + playerName);
            return;
          }
        }
        else
        {
          if (!(sender instanceof Player)) {
            sender.sendMessage(ChatColor.AQUA + "You have to be a player!");
            return;
          }
          player = (Player)sender;
        }
     
        if (!this.fWarps.exists()) {
          sender.sendMessage(ChatColor.AQUA + "No warps available");
          return;
        }
        try
        {
          boolean found = false;
          Scanner scanner = new Scanner(new FileReader(this.fWarps));
          while (scanner.hasNextLine()) {
            String[] cur = scanner.nextLine().split(":");
            if ((cur.length >= 6) && (cur[0].equalsIgnoreCase(warp))) {
              double x = Double.parseDouble(cur[1]);
              double y = Double.parseDouble(cur[2]);
              double z = Double.parseDouble(cur[3]);
              float yaw = Float.parseFloat(cur[4]);
              float pitch = Float.parseFloat(cur[5]);
              World world1;
              if (cur.length == 7) world1 = this.server.getWorld(cur[6]); else {
                world1 = (World)this.server.getWorlds().get(0);
              }
              Location loc = new Location(world1, x, y, z, yaw, pitch);
              player.teleport(loc);
              player.sendMessage(ChatColor.AQUA + "Warped to: " + ChatColor.WHITE + warp);
              found = true;
              break;
            }
          }
          scanner.close();
          if (!found) player.sendMessage(ChatColor.RED + "No such warp: " + ChatColor.WHITE + warp);
        }
        catch (Exception e) {
          System.out.println("Cannot parse file " + this.fWarps.getName() + " - " + e.getMessage());
          sender.sendMessage(ChatColor.RED + "Warp failed!");
        }
      }
     
      public void warpAdd(CommandSender sender, String warp)
      {
        if (!(sender instanceof Player)) {
          sender.sendMessage(ChatColor.AQUA + "You have to be a player!");
          return;
        }
     
        if (!this.fWarps.exists()) {
          try {
            this.fWarps.createNewFile();
          } catch (Exception e) {
            System.out.println("Cannot create file " + this.fWarps.getName() + " - " + e.getMessage());
            sender.sendMessage(ChatColor.RED + "Setting warp failed! >:[");
            return;
          }
        }
     
        if (!warpRemoveInternal(warp)) {
          sender.sendMessage(ChatColor.RED + "Setting warp failed! >:[");
          return;
        }
     
        Player player = (Player)sender;
        Location loc = player.getLocation();
        try {
          FileWriter wrt = new FileWriter(this.fWarps, true);
          wrt.write(warp + ":" +
            loc.getX() + ":" +
            loc.getY() + ":" +
            loc.getZ() + ":" +
            loc.getYaw() + ":" +
            loc.getPitch() + ":" +
            player.getWorld().getName() + "\n");
     
          wrt.close();
        } catch (Exception e) {
          System.out.println("Unexpected error " + e.getMessage());
          sender.sendMessage(ChatColor.RED + "Setting warp failed!");
          return;
        }
        player.sendMessage(ChatColor.AQUA + "Warp: " + ChatColor.WHITE +  warp + ChatColor.RED + " has been set :D");
      }
     
      public void warpRemove(CommandSender sender, String warp)
      {
        if (!this.fWarps.exists()) {
          sender.sendMessage(ChatColor.RED + "No warps available :[");
          return;
        }
        if (warpRemoveInternal(warp))
          sender.sendMessage(ChatColor.RED + "Warp " + ChatColor.WHITE + warp + ChatColor.RED + " removed :P");
        else
          sender.sendMessage(ChatColor.RED + "Removing " + ChatColor.WHITE + " failed");
      }
     
      private boolean warpRemoveInternal(String name)
      {
        try
        {
          boolean found = false;
          Scanner scanner = new Scanner(new FileReader(this.fWarps));
          while (scanner.hasNextLine()) {
            String[] warp = scanner.nextLine().split(":");
            if ((warp.length >= 1) && (warp[0].equalsIgnoreCase(name))) {
              found = true;
              break;
            }
          }
          scanner.close();
     
          if (!found) {
            return true;
          }
     
          PrintWriter wrt = new PrintWriter(new FileWriter(this.fTmp));
          BufferedReader rdr = new BufferedReader(new FileReader(this.fWarps));
          while ((rdr.readLine()) != null)
          {
            String line1 = null;
            @SuppressWarnings("null")
            String[] warp = line1.split(":");
            if ((warp.length >= 1) && (warp[0].equalsIgnoreCase(name))) {
              continue;
            }
            wrt.println(line1);
          }
     
          wrt.close();
          rdr.close();
          if (!this.fWarps.delete()) {
            System.out.println("Cannot delete D:" + this.fWarps.getName());
            return false;
          }
          if (!this.fTmp.renameTo(this.fWarps)) {
            System.out.println("Cannot rename D:" + this.fTmp.getName() + " to " + this.fWarps.getName());
            return false;
          }
        } catch (Exception e) {
          System.out.println("Unexpected error D: " + e.getMessage());
          return false;
        }
        return true;
      }
     
      public boolean worldList(CommandSender sender)
      {
        sender.sendMessage(ChatColor.AQUA + "Available worlds:" + ChatColor.WHITE);
        for (World w : this.server.getWorlds()) {
          sender.sendMessage(w.getName());
        }
        return true;
      }
     
      public void worldTo(CommandSender sender, String world, String playerName)
      {
        Player player = null;
        if (playerName != null) {
          Player player1 = this.server.getPlayer(playerName);
          if (player1 == null) {
            sender.sendMessage(ChatColor.RED + "Unknown player " + ChatColor.WHITE + playerName);
            return;
          }
        }
        else
        {
          if (!(sender instanceof Player)) {
            sender.sendMessage(ChatColor.AQUA + "You have to be a player!");
            return;
          }
          player = (Player)sender;
        }
     
        World w = this.server.getWorld(world);
        if (w == null) {
          player.sendMessage(ChatColor.RED + "No such world: " + ChatColor.WHITE + world);
          return;
        }
        player.teleport(w.getSpawnLocation());
      }
     
    public static void saveData() {
        // TODO Auto-generated method stub
       
    }
     
    public static Object getData() {
        // TODO Auto-generated method stub
        return null;
    }
    }
     
  4. Offline

    Nitnelave

    If it displays the usage, it's because onCommand returned false.
    Add some debug messages to see if it is the args.length == 0 that returns false, and if you get in the block cmd.equals("setwarp");
     
  5. Offline

    WTFIRETRUCK7

    Uhh debug? sorry, I am new too plugins...
     
  6. Offline

    Nitnelave

    Logger log = Logger.getLogger ("Minecraft");
    And then to display a message, you simply do
    log.info ("your message");

    So basically, I'd like you to display a message before the args.length == 0 check and inside the cmd.equals("setwarp");
     
  7. Offline

    WTFIRETRUCK7

    I honestly just do not get that last part at all, sorry...

    Do i need too change something here?

    if (cmd.equalsIgnoreCase("setwarp")) {
    this.worker.warpAdd(sender, args[0]);
    return true;

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 31, 2016
  8. Offline

    Nitnelave

    Code:
        if (cmd.equalsIgnoreCase("worldlist")) { //start world commands
          this.worker.worldList(sender);
          return true;
        }
     if (args.length == 0)
          return false;
    log.info ("args length check passed");
     if (cmd.equalsIgnoreCase("warpto")) {
          this.worker.warpTo(sender, args[0], args.length > 1 ? args[1] : null);
          return true;
        }
        if (cmd.equalsIgnoreCase("warpremove")) {
          this.worker.warpRemove(sender, args[0]); //need to fix this
          return true;
        }
        if (cmd.equalsIgnoreCase("setwarp")) {
    log.info ("setwarp command detected");
     this.worker.warpAdd(sender, args[0]);
          return true;
        }
    
     
  9. Offline

    WTFIRETRUCK7

    log cannot be resolved
     
  10. Offline

    Nitnelave

    Logger log = Logger.getLogger ("Minecraft");
    Put that in your class.
     
Thread Status:
Not open for further replies.

Share This Page