Why this plugin doesn't work?

Discussion in 'Plugin Development' started by HazmatDemon, Mar 4, 2018.

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

    HazmatDemon

    so basically the only one command work is "dirt"

    "play" and "console" are not giving any errors




    Code:
    package me.neqs.test;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.PlayerInventory;
    
    
    public class Main extends JavaPlugin {
       
        public void onEnable() {
            Bukkit.getLogger().info("[Test]Starting...");
           
           
        }
           
           
        public void onDisable() {
            Bukkit.getLogger().info("[Test]Closing...");
           
       
        }
       
        @Override
       
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
            if(cmd.getName().equalsIgnoreCase("dirt")){
                if(sender instanceof Player){
                    Player p = (Player) sender;
                    PlayerInventory inventory = p.getInventory();
                    inventory.addItem(new ItemStack(Material.DIRT, 10));
                    return true;
                   
                   
                }
               
                if(label.equalsIgnoreCase("play")){
                    if(sender instanceof Player){
                        Player p = (Player) sender;
                        p.sendMessage("Full list of commands");
                        p.sendMessage("/play - shows this menu help");
                        p.sendMessage("1");
                        p.sendMessage("2");
                        p.sendMessage("3");
                        p.sendMessage("4");
                        p.sendMessage("5");
                    }
                   
            }
            if(cmd.getName().equalsIgnoreCase("console")){
                sender.sendMessage("You are the console");
           
            }
           
           
       
           
        }
            return false;
       
    }
    
    }
    
     
  2. Offline

    timtower Administrator Administrator Moderator

    Moved to plugin development

    @HazmatDemon The play check is within the dirt block, move it out, and check with cmd.getName there.
    Same for console.
     
  3. Offline

    HazmatDemon

    so it means i have to create new class?
     
  4. Offline

    timtower Administrator Administrator Moderator

    Never said that.
    You need to check your blocks and scope
     
  5. Offline

    AntonioC94

    @HazmatDemon You need to register your commands in "onEnable"
     
  6. Offline

    timtower Administrator Administrator Moderator

    Not if it is the main class.
     
    RcExtract likes this.
  7. Offline

    HazmatDemon

    Its the main class :)
    and I have fixed this already:
    Code:
    package me.neqs.test;
    
    import java.util.logging.Logger;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.PlayerInventory;
    
    
    public class Main extends JavaPlugin {
      
        public final Logger logger = Logger.getLogger("Minecraft");
        public static Main plugin;
        int counter = 0;
      
        @Override
        public void onEnable() {
            Bukkit.getLogger().info("[Test]Starting...");
        }
          
        @Override  
        public void onDisable() {
            Bukkit.getLogger().info("[Test]Closing...");
      
        }
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
            Player p = (Player) sender;
            if(label.equalsIgnoreCase("dirt")){          
                    PlayerInventory inventory = p.getInventory();
                    inventory.addItem(new ItemStack(Material.DIRT, 10));
                    p.sendMessage("You recived 10 Dirt");
              
                }
          
            if(label.equalsIgnoreCase("diam")){
                if(p.isOp()){
                    PlayerInventory inventory1 = p.getInventory();
                    inventory1.addItem(new ItemStack(Material.DIAMOND, 20));
                    p.sendMessage("You ricived 20 diamonds");
            }else{
                if(!(p.isOp())){
                    p.sendMessage("You cant use this command");
                }
            }
          
            }
            return false;
        }
      
            {
        }
    }
            
    Thanks for help :)
     
  8. Offline

    timtower Administrator Administrator Moderator

    @HazmatDemon Don't use label, use cmd.getName() instead.
    Don't cast to Player without checking if the sender is one.

    public final Logger logger = Logger.getLogger("Minecraft");
    public static Main plugin;
    int counter = 0;

    Remove those 3 variables
    Don't log your own plugins.

    If you log: JavaPlugin#getLogger()
     
  9. Offline

    HazmatDemon

    Code:
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
            Player p = (Player) sender;
            if(sender instanceof Player);
            if(cmd.getName().equalsIgnoreCase("dirt")){           
                    PlayerInventory inventory = p.getInventory();
                    inventory.addItem(new ItemStack(Material.DIRT, 10));
                    p.sendMessage("You recived 10 Dirt");
               
                }
           
            if(cmd.getName().equalsIgnoreCase("diam")){
                if(p.isOp()){
                    PlayerInventory inventory1 = p.getInventory();
                    inventory1.addItem(new ItemStack(Material.DIAMOND, 20));
                    p.sendMessage("You ricived 20 diamonds");
            }else{
                if(!(p.isOp())){
                    p.sendMessage("You cant use this command");
    Replaces label with cmd.getName()
    I think u meant "if(sender instanceof Player)" line
    I also removed this 3 lines (somehow they addes by themself ;O)

    Thank you so much for helping me :)
     
  10. Offline

    timtower Administrator Administrator Moderator

    @HazmatDemon That new if statement does nothing.
    The check should be before the casting
     
Thread Status:
Not open for further replies.

Share This Page