setMaxHealth when custom item is eaten

Discussion in 'Plugin Development' started by ZderKi, Feb 15, 2019.

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

    ZderKi

    Okay so i made this "custom recipes" plugin and i want to make it that when the player eats the specific porkchop with specific enchants, meta, etc. it sets the players max health to 25... but the whole "if" part doesnt work... heres the code:

    Code:
    package me.zderki.customrecipes;
    
    import java.util.ArrayList;
    
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.player.PlayerItemConsumeEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.ShapedRecipe;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin {
    
        public void onEnable() {
            {
                ItemStack item = new ItemStack(Material.DIAMOND_AXE, 1);
                ItemMeta meta = item.getItemMeta();
    
                meta.setDisplayName(ChatColor.RED + "AXE OF ZEUS");
                ArrayList<String> lore = new ArrayList<String>();
                lore.add(ChatColor.AQUA + "Used by Zeus in the great god battle");
                meta.setLore(lore);
                meta.addEnchant(Enchantment.DAMAGE_ALL, 32678, true);
                meta.addEnchant(Enchantment.FIRE_ASPECT, 32678, true);
                item.setItemMeta(meta);
    
                ShapedRecipe r = new ShapedRecipe(item);
    
                r.shape("%B%","%*%"," * ");
    
                r.setIngredient('*', Material.BEDROCK);
                r.setIngredient('%', Material.DIAMOND_BLOCK);
                r.setIngredient('B', Material.IRON_BLOCK);
    
                getServer().addRecipe(r);
            }
    
            {
                ItemStack item2 = new ItemStack(Material.STICK, 1);
                ItemMeta meta2 = item2.getItemMeta();
    
                meta2.setDisplayName(ChatColor.GOLD + "THE STICK");
                ArrayList<String> lore2 = new ArrayList<String>();
                lore2.add(ChatColor.AQUA + "Used by ZderKi in the sumo battle!");
                meta2.setLore(lore2);
                meta2.addEnchant(Enchantment.KNOCKBACK, 32678, true);
                item2.setItemMeta(meta2);
    
                ShapedRecipe stickrecipe = new ShapedRecipe(item2);
    
                stickrecipe.shape("***","*%*","***");
    
                stickrecipe.setIngredient('*', Material.BEDROCK);
                stickrecipe.setIngredient('%', Material.STICK);
    
                getServer().addRecipe(stickrecipe);
            }
        }
    
        public void onDisable() {
    
        }
    
       
       
       
        @EventHandler
        public void onFoodConsume(PlayerItemConsumeEvent event){
    
    
            ItemStack item3 = new ItemStack(Material.GRILLED_PORK, 1);
            ItemMeta meta3 = item3.getItemMeta();
            meta3.setDisplayName(ChatColor.GOLD + "HEALTHY STEAK");
            ArrayList<String> lore3 = new ArrayList<String>();
            lore3.add(ChatColor.GOLD + "Used by ZderKi in the god battle!");
            meta3.setLore(lore3);
            meta3.addEnchant(Enchantment.SILK_TOUCH, 0, true);
    
            item3.setItemMeta(meta3);
    
            ShapedRecipe steakrecipe = new ShapedRecipe(item3);
    
            steakrecipe.shape("***","*%*","***");
    
            steakrecipe.setIngredient('*', Material.GOLD_BLOCK);
            steakrecipe.setIngredient('%', Material.PORK);
    
            getServer().addRecipe(steakrecipe);
           
            Player player = event.getPlayer();
            if(event.getItem().equals(item3)) {
               
                //"ate" just for testing purposes
                player.sendMessage("ate");
               
               
                player.setMaxHealth(25);
                player.setHealth(25);   
            }
           
           
        }
    }
    
    and the recipe doesnt work too this way (because it isnt in onEnable, but if i put it into onEnable i dont know how to make the event.getItem().equals part work) ... anybody knows how to make it work?

    Please help, thanks
     
  2. Online

    timtower Administrator Administrator Moderator

    @ZderKi You never register the event.
     
  3. Offline

    ZderKi

    wdym? how do i "register" it? sorry im kinda new to plugin making
     
  4. Offline

    KarimAKL

  5. Offline

    Tango_

    Be sure that the class implements Listener
     
    KarimAKL likes this.
  6. Offline

    ZderKi

  7. Online

    timtower Administrator Administrator Moderator

    Please post your updated code.
     
  8. Offline

    KarimAKL

    @ZderKi You probably still haven't registered the events, try reading the link i sent.
     
  9. Offline

    ZderKi

    Yeah i fixed it now... works fine with this code:
    Code:
    package me.zderki.customrecipes;
    
    import java.util.ArrayList;
    
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.Statistic;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerItemConsumeEvent;
    import org.bukkit.inventory.ItemFlag;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.ShapedRecipe;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin implements Listener {
    
        public void onEnable() {
            getServer().getPluginManager().registerEvents(this, this);
           
            {
                ItemStack item = new ItemStack(Material.DIAMOND_AXE, 1);
                ItemMeta meta = item.getItemMeta();
    
                meta.setDisplayName(ChatColor.RED + "AXE OF ZEUS");
                ArrayList<String> lore = new ArrayList<String>();
                lore.add(ChatColor.AQUA + "Used by Zeus in the great god battle");
                meta.setLore(lore);
                meta.addEnchant(Enchantment.DAMAGE_ALL, 32678, true);
                meta.addEnchant(Enchantment.FIRE_ASPECT, 32678, true);
                item.setItemMeta(meta);
    
                ShapedRecipe r = new ShapedRecipe(item);
    
                r.shape("%B%","%*%"," * ");
    
                r.setIngredient('*', Material.BEDROCK);
                r.setIngredient('%', Material.DIAMOND_BLOCK);
                r.setIngredient('B', Material.IRON_BLOCK);
    
                getServer().addRecipe(r);
            }
    
            {
                ItemStack item2 = new ItemStack(Material.STICK, 1);
                ItemMeta meta2 = item2.getItemMeta();
    
                meta2.setDisplayName(ChatColor.GOLD + "THE STICK");
                ArrayList<String> lore2 = new ArrayList<String>();
                lore2.add(ChatColor.AQUA + "Used by ZderKi in the sumo battle!");
                meta2.setLore(lore2);
                meta2.addEnchant(Enchantment.KNOCKBACK, 32678, true);
                
                item2.setItemMeta(meta2);
    
                ShapedRecipe stickrecipe = new ShapedRecipe(item2);
    
                stickrecipe.shape("***","*%*","***");
    
                stickrecipe.setIngredient('*', Material.BEDROCK);
                stickrecipe.setIngredient('%', Material.STICK);
    
                getServer().addRecipe(stickrecipe);
            }
            {
                ItemStack item3 = new ItemStack(Material.GRILLED_PORK, 1);
                ItemMeta meta3 = item3.getItemMeta();
    
                meta3.setDisplayName(ChatColor.GOLD + "HEALTHY STEAK");
                ArrayList<String> lore3 = new ArrayList<String>();
                lore3.add(ChatColor.AQUA + "testlore");
                meta3.setLore(lore3);
                meta3.addEnchant(Enchantment.SILK_TOUCH, 0, true);
                meta3.addItemFlags(ItemFlag.HIDE_ENCHANTS);
                item3.setItemMeta(meta3);
    
                ShapedRecipe steakrecipe = new ShapedRecipe(item3);
    
                steakrecipe.shape("*+*","a%b","*c*");
    
                steakrecipe.setIngredient('*', Material.DIAMOND_BLOCK);
                steakrecipe.setIngredient('+', Material.NETHER_STAR);
                steakrecipe.setIngredient('%', Material.PORK);
                steakrecipe.setIngredient('a', Material.PACKED_ICE);
                steakrecipe.setIngredient('b', Material.SEA_LANTERN);
                steakrecipe.setIngredient('c', Material.ENCHANTMENT_TABLE);
                getServer().addRecipe(steakrecipe);
            } 
        }
    
        public void onDisable() {
    
        }
    
        @EventHandler
        public void onFoodConsume(PlayerItemConsumeEvent event){
           
            Player player = event.getPlayer();
            ItemStack eItem = event.getItem();
           
            if(eItem.getType().equals(Material.GRILLED_PORK)
              && eItem.containsEnchantment(Enchantment.SILK_TOUCH)
              && eItem.hasItemMeta()
                    ) {
               
                //"ate" just for testing purposes
                //player.sendMessage("ate");
               
                if(player.getStatistic(Statistic.PLAYER_KILLS) >= 150 || player.isOp()) {
               
                player.setMaxHealth(30);
                player.setHealth(25);   
                } else {
                    player.sendMessage(ChatColor.RED + "OOPS! You dont have enough player kills! Try again when you have more than 150 of them!");
                    player.setHealth(player.getMaxHealth());
                }
            }
        }
       
       
       
    }
    
     
  10. Offline

    Dai_Kunai

    Why is there 3 extra pairs of brackets in onEnable() around each recipe. Just wondering... As far as I know, those wouldn't do anything...
     
  11. Offline

    Colinus999

    They are extra scopes. They sometimes make your code a lot cleaner. For example, you want to create three items:

    Normally, you would need 3 variables "item1", "item2", "item3". Assuming that you are only using the variable when creating it (and then maybe storing it in a List or HashMap), you only need one variable "item" in each scope. That's because the variable - when defined in a scope - is only valid in that scope.

    Did you implement debug messages for each of these checks?:
    Show Spoiler
    eItem.getType().equals(Material.GRILLED_PORK)
    eItem.containsEnchantment(Enchantment.SILK_TOUCH)
    eItem.hasItemMeta()


    If so, what do they say? I think that one of them must be false because your Listener setup is correct and should work.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Feb 23, 2019
    Chr0mosom3 likes this.
  12. Offline

    Chr0mosom3

Thread Status:
Not open for further replies.

Share This Page