Solved Main Class won't register events

Discussion in 'Plugin Development' started by arwrock, Jul 14, 2014.

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

    arwrock

    Hello, I am developing a plugin where when a player drinks a potion with a specified display name, he will be given effects. However, when I test it out, and drink the "Beer", it doesn't even give me a test message I want it to.
    Here is my code:
    Code:
    public class Main extends JavaPlugin implements Listener{
        public int drinkID;
        public String itemName;
        public ItemStack potion = new ItemStack(Material.POTION,1);
        public ItemMeta meta = potion.getItemMeta();
       
        public void onEnable(){
            getLogger().info("Remember to check bukkit for the latest versions of DrinkCraft!");
            File file = new File(getDataFolder() + File.separator + "config.yml");
           
           
            if (!file.exists()){
     
            getConfig().addDefault("Drinks.1.name" , "Beer");
            getConfig().addDefault("Drinks.1.effect" , "12");
            getConfig().addDefault("Drinks.1.time" , "120");//adding default settings
     
            //Save the default settings
            getConfig().options().copyDefaults(true);
            saveConfig();
            } else {
            CheckConfig();
            saveConfig();
            reloadConfig();   
     
        } 
        }
       
        public void onDisable(){
           
        }
       
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
            if(cmd.getName().equalsIgnoreCase("drink")){
                if(args.length >= 3){
                    sender.sendMessage("Too many arguments!");
                    return false;
                }
                if(args.length == 2){
                    if(args[0].equalsIgnoreCase("give")){
                        drinkID = Integer.parseInt(args[1]);
                        if(sender instanceof Player){
                            if(sender.hasPermission("drinkcraft.give")){
                                itemName = (String) getConfig().get("Drinks."+drinkID+".name");
                                meta.setDisplayName(itemName);
                                potion.setItemMeta(meta);
                                PlayerInventory inventory = ((Player) sender).getInventory();
                                inventory.addItem(potion);
                                return true;
                               
                            }
                        }
                        else{
                            sender.sendMessage("You must be a player to execute this command.");
                            return false;
                        }
                    }
                }
                else{
                sender.sendMessage("/drink list | Lists all drinks./drink give <number> | Gives you a certain drink.");
                sender.sendMessage("/drink give <id> | Gives you the drink specified.");
                sender.sendMessage("DrinkCraft made by Arwrock.");
                return true;
                }
            }
            return false;
        }
        public void CheckConfig() {
           
            if(getConfig().get("Drinks.1.name") == null){
                getConfig().set("Drinks.1.name" , "Beer");
                getConfig().set("Drinks.1.effect" , "1");
                getConfig().set("Drinks.1.time" , "120");//reset the setting
                saveConfig();
                reloadConfig();
     
            }
     
        }
        public void potionDrink(PlayerItemConsumeEvent e){
            Player p = e.getPlayer();
            if(e.getItem() == potion){
                p.sendMessage("Hey");
            }
            String name = e.getItem().getItemMeta().getDisplayName();
            int effect = getConfig().getInt("Drinks."+name+"effect");
            int effectTime = getConfig().getInt("Drinks."+name+"time");
            if(effect == 1){
                p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,effectTime,1));
            }
            if(effect == 2){
                p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW,effectTime,1));
            }
    I didn't continue because it goes on through all the effects. But I've got no errors, so it's a logical error. Thanks in advance!
     
  2. Offline

    Zettelkasten

    You need to register it in the plugin manager so Bukkit knows you want to register them. Therefore add to your onEnable() method:
    Code:java
    1. Bukkit.getPluginManager().registerEvents(this, this);


    and add annotations for the methods that should be called when an event occours:

    Code:java
    1. @EventHandler
    2. public void potionDrink(PlayerItemConsumeEvent e) { ... }
     
    arwrock and jthort like this.
  3. Offline

    arwrock

    Sorry if this is a stupid question, but getPluginManager() is apparently "undefined for the type Main".

    EDIT: It doesn't show any errors with getServer().getPluginManager() but it still doesnt send me the message.
     
  4. Offline

    Zettelkasten

    arwrock Sorry, of cause it is Bukkit.getPluginManager() or getServer().getPluginManager().
     
  5. Offline

    arwrock

    It still doesn't work. But thanks for the fast replies. ;)

    EDIT: I found out the problem is somewhere in the getConfig but I don't know how to solve it.
    POST EDIT: Solved it! Thanks!
     
Thread Status:
Not open for further replies.

Share This Page