0

I've been developing for a CraftBukkit Minecraft server. This gives me a good API to work with. This API includes the onCommand method, which allows me to implement new commands.

I've just been trying to do that, but when I send a command such as /example arg0, for some reason I can't compare with arg0 from my code. I'm trying to check for when args[0] == "on", yet although args and args[0] are both defined and I set args[0] to "on", the comparison still returns false.

private CBPlugin pluginReference;

public NerfTntExecutor(CBPlugin plugin) {
    // (...)
    pluginReference = plugin;
}

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    if (sender.hasPermission("command.op.nerftnt")) {
        if(args.length > 0) {
            // (...)
            sender.sendMessage(args[0]);
            sender.sendMessage(args[0].getClass().getName());
            if(args[0] == "on")
                sender.sendMessage("true");
            return true;
        }
        else {
            sender.sendMessage("Not enough arguments!");
            return false;
        }
    }
    else {
        pluginReference.getLogger().info("No permission");
        return false;
    }
}

The sender.sendMessage calls display the data given back to the person who sent the command. In this case, args[0] is displayed as "on" and args[0].getClass().getName() gets shown as java.lang.String - the type of the argument. However, the next line if(args[0] == "on") is false.

Why is this? I seem to be comparing a String to another String, and they both have the same contents. Why should a comparison of the two return false?

ArtOfCode
  • 5,702
  • 5
  • 37
  • 56

0 Answers0