Command /murder bringing up the Unknown command message in console

Discussion in 'Plugin Development' started by ipwntnt, Feb 2, 2013.

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

    ipwntnt

    I've recently been trying to develop a plugin called Overpowered, and seeing as I have very little knowledge of programming, I decided to follow a tutorial on the Bukkit wiki. I made a main class with that single method detailing /murder. I've registered the /murder command in the plugin.yml, but it still comes up with
    Unknown command. Type "help" for help.
    Any suggestions?
    Code:
    package com.gmail.<myusername>.Overpowered;
     
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public final class MainOverpowered extends JavaPlugin {
       
        @Override
        public void onEnable() {
            getLogger().info("onEnable has been invoked.");
            getLogger().info("Starting custom plugin...");
            }
            public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args ) {
                if (cmd.getName().equalsIgnoreCase("murder"));
                Player target = sender.getServer().getPlayer(args[0]);
                target.setHealth(0);
            return false;
            }
     
        @Override
        public void onDisable() {
            getLogger().info("onDisable has been invoked.");
        }
    }
    
     
  2. Offline

    Drew1080

    ipwntnt
    If you have made a seperate class to handle the /murder command put this in your onEnable()
    getCommand("murder").setExecutor(new classNamehere());
     
  3. Offline

    ipwntnt

    Yeah, ok, but I've decided to put all this back into the main class; you can see my code above. I will remember that though, you can probably tell I am a noob with programming and the only thing I know how to program properly is Scratch, and that isn't even a real programming language.

    Drew1080

    Actually, what would be the code for exporting the command to another class?
    I'm using this command as the basis for all my other ideas, so I want to be able to run the commands from separate classes. Thanks.

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

    Drew1080

    ipwntnt
    You don't put your onCommand() in your onEnable() method, move it below your onDisable() method
    Code:
    package com.gmail.<myusername>.Overpowered;
     
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public final class MainOverpowered extends JavaPlugin {
     
        @Override
        public void onEnable() {
            getLogger().info("onEnable has been invoked.");
            getLogger().info("Starting custom plugin...");
            }
     
        @Override
        public void onDisable() {
            getLogger().info("onDisable has been invoked.");
        }
     
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args ) {
                if (cmd.getName().equalsIgnoreCase("murder"));
                Player target = sender.getServer().getPlayer(args[0]);
                target.setHealth(0);
            return false;
            }
    }
    ipwntnt
    If you wish to move it to another class do this:

    Your main class:
    Code:
    package com.gmail.<myusername>.Overpowered;
     
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public final class MainOverpowered extends JavaPlugin {
     
        @Override
        public void onEnable() {
            getCommand("murder").setExecutor(new SomeClass());
            getLogger().info("onEnable has been invoked.");
            getLogger().info("Starting custom plugin...");
            }
     
        @Override
        public void onDisable() {
            getLogger().info("onDisable has been invoked.");
        }
     
    }
    Now your command class:

    Code:
    package com.gmail.<myusername>.Overpowered;
     
     
    public final class SomeClass implements CommandExecutor{
     
      public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args ) {
                if (cmd.getName().equalsIgnoreCase("murder")){
                Player target = sender.getServer().getPlayer(args[0]);
                target.setHealth(0);
                }
            return false;
            }
     
    }
    Also you had a semi-colon after your if statement in your command.

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

    ipwntnt

    Drew1080
    Why would you put it below onDisable? Have to know :)
     
  6. Offline

    Drew1080

    ipwntnt
    You can put it anywhere in the class you want it just wont work if you try to stick a method inside a method eg onCommand() inside onDisable() or onEnable()
     
  7. Offline

    ipwntnt

    Oh, thanks. Also a BIG thanks for helping a noob like me

    Drew1080
    By putting the command in a separate class, are we threading the plugin?

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

    Drew1080

    ipwntnt
    No you are not creating a separate thread to run the command. Minecraft and CraftBukkit are only single threaded.
     
  9. Offline

    ipwntnt

    Drew1080
    Ok, when I tried to deploy the plugin it came up with an error saying that the MurderCommandExecutor constructor is undefined, but I don't understand this.
    Code:
    //code for main class Overpowered.java
    package com.gmail.eugenelee456.Overpowered;
     
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public final class Overpowered extends JavaPlugin {
     
        @Override
        public void onEnable() {
         
            getCommand("murder").setExecutor(new MurderCommandExecutor(this));
         
            getLogger().info("onEnable has been invoked.");
         
            getLogger().info("Starting custom plugin...");
    }
        @Override
        public void onDisable() {
         
            getLogger().info("onDisable has been invoked.");
         
        }
     
    }
    
    Code:
    //code for Murder command class
    package com.gmail.eugenelee456.Overpowered;
     
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
     
    public final class MurderCommandExecutor implements CommandExecutor {
     
        @SuppressWarnings("unused")
        private Overpowered plugin;
        public MurderCommandExecutor() {
            this.plugin = plugin;
        }
     
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (cmd.getName().equalsIgnoreCase("murder")) {
                Player target = sender.getServer().getPlayer(args[0]);
                target.setHealth(0); 
                }
            return false;
        }
     
    }
    
    This complete idiot needs desperate help.
     
  10. Offline

    Drew1080

    ipwntnt
    Change this in the class overpowered:
    Code:
    public MurderCommandExecutor() {
            this.plugin = plugin;
        }
    to:

    Code:
    public MurderCommandExecutor(Overpowered instance) {
            this.plugin = instance;
        }
    Or you can choose whatever name you want it doesnt need to be named instance
     
  11. Offline

    ipwntnt

    Drew1080
    D:\eotherdoc>java -Xmx1024M -Xms1024M -jar craftbukkit-1.4.7-R1.0.jar nogui
    210 recipes
    27 achievements
    12:12:51 [INFO] Starting minecraft server version 1.4.7
    12:12:51 [INFO] Loading properties
    12:12:51 [INFO] Default game type: CREATIVE
    12:12:51 [INFO] Generating keypair
    12:12:52 [INFO] Starting Minecraft server on *:25565
    12:12:52 [INFO] This server is running CraftBukkit version git-Bukkit-1.4.7-R1.0
    -b2624jnks (MC: 1.4.7) (Implementing API version 1.4.7-R1.0)
    12:12:52 [INFO] [Overpowered] Loading Overpowered v0.1
    12:12:52 [INFO] Preparing level "Jimothy Manor-"
    12:12:52 [INFO] Preparing start region for level 0 (Seed: 1828258537916129440)
    12:12:53 [INFO] Preparing start region for level 1 (Seed: 1828258537916129440)
    12:12:53 [INFO] Preparing spawn area: 16%
    12:12:53 [INFO] Preparing start region for level 2 (Seed: 1828258537916129440)
    12:12:53 [INFO] [Overpowered] Enabling Overpowered v0.1
    12:12:53 [SEVERE] Error occurred while enabling Overpowered v0.1 (Is it up to da
    te?)
    java.lang.NullPointerException
    at com.gmail.eugenelee456.Overpowered.Overpowered.onEnable(Overpowered.j
    ava:13)
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader
    .java:457)
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManage
    r.java:381)
    at org.bukkit.craftbukkit.v1_4_R1.CraftServer.loadPlugin(CraftServer.jav
    a:282)
    at org.bukkit.craftbukkit.v1_4_R1.CraftServer.enablePlugins(CraftServer.
    java:264)
    at net.minecraft.server.v1_4_R1.MinecraftServer.j(MinecraftServer.java:3
    21)
    at net.minecraft.server.v1_4_R1.MinecraftServer.e(MinecraftServer.java:3
    00)
    at net.minecraft.server.v1_4_R1.MinecraftServer.a(MinecraftServer.java:2
    59)
    at net.minecraft.server.v1_4_R1.DedicatedServer.init(DedicatedServer.jav
    a:149)
    at net.minecraft.server.v1_4_R1.MinecraftServer.run(MinecraftServer.java
    :399)
    at net.minecraft.server.v1_4_R1.ThreadServerApplication.run(SourceFile:8
    49)
    12:12:53 [INFO] Server permissions file permissions.yml is empty, ignoring it
    12:12:54 [INFO] Done (1.546s)! For help, type "help" or "?"
    WHYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

    Drew1080
    I did what you said. My life is being screwed up by coding, and I definitely do not know what the error message means.
    Code:
    //code from Overpowered.java
    package com.gmail.eugenelee456.Overpowered;
     
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public final class Overpowered extends JavaPlugin {
       
        @Override
        public void onEnable() {
           
            getCommand("murder").setExecutor(new MurderCommandExecutor(this));
           
            getLogger().info("onEnable has been invoked.");
           
            getLogger().info("Starting custom plugin...");
    }
        @Override
        public void onDisable() {
           
            getLogger().info("onDisable has been invoked.");
           
        }
       
    }
    Code:
    //code from MurderCOmmandExecutor
    package com.gmail.eugenelee456.Overpowered;
     
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
     
    public final class MurderCommandExecutor implements CommandExecutor {
       
        @SuppressWarnings("unused")
        private Overpowered plugin;
        public MurderCommandExecutor(Overpowered instance) {
            this.plugin = instance;
        }
     
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (cmd.getName().equalsIgnoreCase("murder")) {
                Player target = sender.getServer().getPlayer(args[0]);
                target.setHealth(0);   
                }
            return false;
        }
     
    }
    
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 31, 2016
  12. Offline

    Drew1080

    ipwntnt
    Whats line 13 then in Overpowered.java
     
  13. Offline

    ipwntnt

    getCommand("murder").setExecutor(new MurderCommandExecutor(this));
     
  14. Offline

    Drew1080

    Why do you have an un-used suppress warning above your MurderCommandExecutor constructor for? Try removing it.
     
  15. Offline

    ipwntnt

    package com.gmail.eugenelee456.Overpowered;

    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;

    public final class Overpowered extends JavaPlugin {

    @Override
    public void onEnable() {

    getCommand("murder").setExecutor(new MurderCommandExecutor(this));

    getLogger().info("onEnable has been invoked.");

    getLogger().info("Starting custom plugin...");
    }
    @Override
    public void onDisable() {

    getLogger().info("onDisable has been invoked.");

    }

    }

    Drew1080
    Whats the prob with ln 13 in Overpowered.java? and i removed the Suppresswarning, it says that The value of the field MurderCommandExecutor.plugin is not used

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

    Drew1080

    Yes you have to use the plugin cast you made to the Main class somewhere else in your commandexecutor class.
    This should be your main class:

    Code:
    //code from Overpowered.java
    package com.gmail.eugenelee456.Overpowered;
     
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class Overpowered extends JavaPlugin {
     
        @Override
        public void onEnable() {
       
            getCommand("murder").setExecutor(new MurderCommandExecutor());
       
            getLogger().info("onEnable has been invoked.");
       
            getLogger().info("Starting custom plugin...");
    }
        @Override
        public void onDisable() {
       
            getLogger().info("onDisable has been invoked.");
       
        }
     
    }
    and your CommandExecutor class:

    Code:
    //code from MurderCOmmandExecutor
    package com.gmail.eugenelee456.Overpowered;
     
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
     
    public class MurderCommandExecutor implements CommandExecutor {
     
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (cmd.getName().equalsIgnoreCase("murder")) {
                Player target = sender.getServer().getPlayer(args[0]);
                target.setHealth(0);
                      return true;
                }
            return false;
        }
     
    }
    I just tested the above code and it works for me.
    Make sure you have the command registered in your plugin,.yml as well.
     
  17. Offline

    ipwntnt

    It's still coming up with the problem that The constructor MurderCommandExecutor is undefined. Can you tell me what this actually means?
     
  18. Offline

    Drew1080

    It means there are not any constructors define for the class MuderCommandExecutor.
    Could you please post the code that you are using. And your plugin.yml
     
  19. Offline

    ipwntnt

    D:\eotherdoc>java -Xmx1024M -Xms1024M -jar craftbukkit-1.4.7-R1.0.jar nogui
    210 recipes
    27 achievements
    12:52:26 [INFO] Starting minecraft server version 1.4.7
    12:52:26 [INFO] Loading properties
    12:52:26 [INFO] Default game type: CREATIVE
    12:52:26 [INFO] Generating keypair
    12:52:26 [INFO] Starting Minecraft server on *:25565
    12:52:26 [INFO] This server is running CraftBukkit version git-Bukkit-1.4.7-R1.0
    -b2624jnks (MC: 1.4.7) (Implementing API version 1.4.7-R1.0)
    12:52:27 [INFO] [Overpowered] Loading Overpowered v0.1
    12:52:27 [INFO] Preparing level "Jimothy Manor-"
    12:52:27 [INFO] Preparing start region for level 0 (Seed: 1828258537916129440)
    12:52:28 [INFO] Preparing start region for level 1 (Seed: 1828258537916129440)
    12:52:28 [INFO] Preparing spawn area: 36%
    12:52:28 [INFO] Preparing start region for level 2 (Seed: 1828258537916129440)
    12:52:28 [INFO] [Overpowered] Enabling Overpowered v0.1
    12:52:28 [SEVERE] Error occurred while enabling Overpowered v0.1 (Is it up to da
    te?)
    java.lang.NullPointerException
    at com.gmail.eugenelee456.Overpowered.Overpowered.onEnable(Overpowered.j
    ava:13)
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader
    .java:457)
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManage
    r.java:381)
    at org.bukkit.craftbukkit.v1_4_R1.CraftServer.loadPlugin(CraftServer.jav
    a:282)
    at org.bukkit.craftbukkit.v1_4_R1.CraftServer.enablePlugins(CraftServer.
    java:264)
    at net.minecraft.server.v1_4_R1.MinecraftServer.j(MinecraftServer.java:3
    21)
    at net.minecraft.server.v1_4_R1.MinecraftServer.e(MinecraftServer.java:3
    00)
    at net.minecraft.server.v1_4_R1.MinecraftServer.a(MinecraftServer.java:2
    59)
    at net.minecraft.server.v1_4_R1.DedicatedServer.init(DedicatedServer.jav
    a:149)
    at net.minecraft.server.v1_4_R1.MinecraftServer.run(MinecraftServer.java
    :399)
    at net.minecraft.server.v1_4_R1.ThreadServerApplication.run(SourceFile:8
    49)
    12:52:28 [INFO] Server permissions file permissions.yml is empty, ignoring it
    12:52:28 [INFO] Done (1.480s)! For help, type "help" or "?"
    >
     
  20. Offline

    Drew1080

    ipwntnt
    I said post the code you are using and your plugin.yml not your stacktrace.
     
  21. Offline

    ipwntnt

    <Edit by Moderator: Redacted mediafire url>

    There it is

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

    JayzaSapphire

    You're null pointer is caused by your command not being registered properly in your plugin.yml.
     
  23. Offline

    Drew1080

    ipwntnt
    Please, post your plugin.yml file, not the compiled version of the plugin and not the stacktrace.
    B.T.W That link is broken.
     
  24. Offline

    ipwntnt

    is it? how else am i to send my stuff to you, i just made that link
     
  25. Offline

    Drew1080

    Just post here you plugin.yml you dont have to send the file just post here the file contents.
     
  26. Offline

    ipwntnt

    the link isn't broken and it contains both the source and the plugin.yml. You just have to poke around i guess.
    What does it say when you click it?

    name: Overpowered
    main: com.gmail.eugenelee456.Overpowered.Overpowered
    version: 0.1
    commands:
    murder:
    description: This is a command to kill the target player. Player has to be online.
    usage: /murder [player]
    permission: Overpowered.murder
    permission-message: You do not have the guts to perform this command.

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

    Drew1080

    The file you attempted to download is an archive that is damaged or possibly encrypted. MediaFire does not support unlimited downloads of broken or encrypted archives and the limit for this file has been reached. This file may only be distributed from a premium account.
     
  28. Offline

    ipwntnt

    WHATTTTT??!!!!
    Well you got the plugin.yml and I just copied the code you said worked
     
  29. Offline

    Drew1080

    Thats the error that it gives me.
     
  30. Offline

    ipwntnt

    yh i see
    Is there anything with the plugin.yml? At the end of the line specifying the main class, do i have to do .java as well?
     
Thread Status:
Not open for further replies.

Share This Page