What's wrong in this code?! It wont fire the command!

Discussion in 'Plugin Development' started by TheHadDad, Apr 20, 2017.

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

    TheHadDad

    When I use /cc, or /cmc, it should pretty much send me a message in chat that is empty, to clear the chat. The message is sent many times so that all of it gets cleared. I did some stuff in the code for the config file and now when I try using it, nothing happens. Nothing is logged in console (other than the fact i used the command /cc) and nothing is being fired. Can you please tell me why? I need an immediate response please because I have school tomorrow and this is probably the last of my coding.

    Class MenuInv.java:
    Code:
    package me.thehaddad.leyton;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.event.Listener;
    import org.bukkit.plugin.Plugin;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    
    
    public class MenuInv extends JavaPlugin implements Listener {
        private Menu menu;
        Plugin plugin;
        FileConfiguration config = getConfig();
       
        public void onEnable() {
            if (!config.contains("Globalchatclearmsg")) {
                config.set("Globalchatclearmsg", "§cChat Cleared!");
            }
            if (!config.contains("Clientchatclearmsg")) {
                config.set("Clientchatclearmsg", "§cChat Cleared!");
            }
            config.options().copyDefaults(true);
            saveConfig();
            menu = new Menu(this);
            PluginManager pm = Bukkit.getServer().getPluginManager();
            pm.registerEvents(this, this);
        }
       
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (cmd.getName().equalsIgnoreCase("ci") || cmd.getName().equalsIgnoreCase("clearinventory")) {
                if (sender instanceof Player) {
                    Player p = (Player) sender;
                menu.show(p);
                return true;
                }
            }
            if (cmd.getName().equalsIgnoreCase("spiritclear")) {
                if (sender instanceof Player) {
                    Player p = (Player) sender;
                p.sendMessage(ChatColor.BLUE + "Spirit Clear Commands:");
                p.sendMessage(ChatColor.DARK_AQUA + "/clearinventory" + ChatColor.BOLD + "-" + ChatColor.DARK_BLUE + "Clears your inventory!");
                p.sendMessage(ChatColor.DARK_AQUA + "/clearmychat" + ChatColor.BOLD + "-" + ChatColor.DARK_BLUE + "Clears your own chat!");
                p.sendMessage(ChatColor.DARK_AQUA + "/clearchat" + ChatColor.BOLD + "-" + ChatColor.DARK_BLUE + "Clears global chat!");
            }
                if (cmd.getName().equalsIgnoreCase("spiritc")) {
                    if (sender instanceof Player) {
                        Player p = (Player) sender;
                    if (args.length == 1) {
                        if (args[1].equals("reload")) {
                            plugin.reloadConfig();
                            p.sendMessage(ChatColor.BLUE + "Successfully reloaded the config.");
                        }
                        }
                    }
                }
            if (cmd.getName().equalsIgnoreCase("clearchat")) {
                for(int i = 0; i < 50; i++) {
                Bukkit.getServer().broadcastMessage("");
                }
                Bukkit.getServer().broadcastMessage(config.getString("Globalchatclearmsg"));
            }
            if (cmd.getName().equalsIgnoreCase("clearmychat")) {
                Player p = (Player) sender;
                for(int i = 0; i < 50; i++) {
                p.sendMessage("");
                }
                p.sendMessage(config.getString("Clientchatclearmsg"));
            }
            }
            return true;
            }
    }



    Plugin.yml :

    Code:
    name: SpiritClear
    author: TheHadDad
    main: me.thehaddad.leyton.MenuInv
    version: 1.0
    commands:
        ci:
          description: Clear your inventory!
          command: /ci
          permission: spirit.clear
        clearinventory:
          description: Clear your inventory!
          command: /clearinventory
          permission: spirit.clear
        clearchat:
          description: Clear the global chat!
          command: /clearchat
          aliases: [cc]
          permission: spirit.clearchat.global
        clearmychat:
          description: Clear your own chat!
          command: /clearmychat
          aliases: [cmc]
          permission: spirit.clearchat.own
        spiritclear:
          description: SpiritClear commands!
          command: /spiritclear
        spiritc:
          description: Reload!!
          command: /spiritc


    ALSO! The /ci and /clearinventory works fine. It must be a problem within the command.
     
  2. Offline

    timtower Administrator Administrator Moderator

    @TheHadDad There are aliases for commands that are the same.
    Might be better to do instead of having multiple commands that do the same thing.
    Print the cmd.getName() to the console.
     
  3. Offline

    TheHadDad

    @timtower
    What do you mean by print cmd.getName() to the console? Print the stack trace? Print a message or something to the console to see if it's being fired?

    also edit:
    Code:
        public void delay(final Player p) {
            Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
                public void run() {
                    p.sendMessage(tp + " " + ChatColor.BLUE + "in " + ChatColor.RED + "5");
                    p.sendMessage(tp + " " + ChatColor.BLUE + "in " + ChatColor.RED + "4");
                    p.sendMessage(tp + " " + ChatColor.BLUE + "in " + ChatColor.RED + "3");
                    p.sendMessage(tp + " " + ChatColor.BLUE + "in " + ChatColor.RED + "2");
                    p.sendMessage(tp + " " + ChatColor.BLUE + "in " + ChatColor.RED + "1");
                }
            }, 20L);
        }

    this all gets fired at the same time when i set it to 20 ticks?






    EDITTTTT :
    Code:
            if (cmd.getName().equalsIgnoreCase("clearmychat")) {
                Bukkit.getServer().getConsoleSender().sendMessage("this was fired");
                Player p = (Player) sender;
                for(int i = 0; i < 50; i++) {
                p.sendMessage("");
                }
                p.sendMessage(config.getString("Clientchatclearmsg"));
            }
            }
    I didnt get a message to console

    BUT! The permission works, i deopped myself and tried it and it said I wasnt allowed to.
     
    Last edited: Apr 20, 2017
  4. The problem here is: You set a timer for 1 Second. After that second, everything in "run" will be fired. So of course, you will see all messages at the same time.
    If you want to have a counter, do smt like:
    Code:
    int taskID;
    public void delay(final Player p) {
      taskID = Bukkit.getScheduler().scheduleSyncRepeatingTask(this,
      new Runnable() {
        int time = 5;
        public void run() {
          p.sendMessage(tp + " " + ChatColor.BLUE + "in " + ChatColor.RED + time);
          time--;
          if (time <= 0){
            canceltask();
          }
        }
      }, 0L, 20L);
    }
    
    void cancelTask(){
      Bukkit.getScheduler().cancelTask(taskID);
    }
     
  5. Offline

    TheHadDad

    @Ermueldor i found that out already XD Bit of a long reply but ty for the counter <3

    Can you help me with the main code pls
     
  6. Offline

    MrGriefer_

    Why are you checking if the sender is a player every command? Your problem is with your plugin.yml, change it to:
    HTML:
    clearchat:
          description: Clear the global chat!
          aliases: cc
    Take a look at this wiki page it might help: http://bukkit.gamepedia.com/Plugin_YAML
     
  7. Offline

    TheHadDad

    @MrGriefer_
    My plugin.yml is fine, I changed it and /cc doesn't work.


    Currently:
    Code:
    name: SpiritClear
    author: TheHadDad
    main: me.thehaddad.leyton.MenuInv
    version: 1.0
    commands:
        ci:
          description: Clear your inventory!
          permission: spirit.clear
          aliases: clearinventory
        clearchat:
          description: Clear the global chat!
          aliases: cc
          permission: spirit.clearchat.global
        clearchat:
          description: Clear the global chat!
          aliases: cc
          permission: spirit.clearchat.own
        spiritclear:
          description: SpiritClear commands!
        spiritc:
          description: Reload!!
     
  8. Offline

    MrGriefer_

    Did you read the link I sent? Just do the same thing as the link says. Permissions shouldn't be in the commands section.
     
  9. Offline

    timtower Administrator Administrator Moderator

    @TheHadDad Why do you have clearchat twice?

    @MrGriefer_
     
  10. Offline

    MrGriefer_

    Oh lol didn't think you could do that.
     
  11. Offline

    TheHadDad

    still doesnt work
     
Thread Status:
Not open for further replies.

Share This Page