With error method to make soup

Discussion in 'Plugin Development' started by @DriftCoder, Jul 22, 2015.

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

    @DriftCoder

    I added this code to my plugin to the player when the player clicks in the soup he regenerate life but happens that from time to time it fails and generates an error in the console

    Console error:

    Code:
    package br.driftracingpvp.plugin;
    
    import org.bukkit.Material;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    
    public class Soup implements Listener {
       
        public Main plugin;
    
        public Soup(Main plugin) {
            this.plugin = plugin;
        }
       
        @EventHandler
        public void getClickSoup(PlayerInteractEvent event) {
            if ((event.getAction() == Action.RIGHT_CLICK_AIR) || (event.getAction() == Action.RIGHT_CLICK_BLOCK)) {
                int heal = 7;
                int feed = 7;
                if (event.getPlayer().getItemInHand().getType() == Material.MUSHROOM_SOUP) {
                    ItemStack bowl = new ItemStack(Material.BOWL, 1);
                    ItemMeta meta = bowl.getItemMeta();
                    if ((event.getPlayer().getHealth() < 20) && (event.getPlayer().getHealth() > 0)) {
                        if (event.getPlayer().getHealth() < 20 - heal + 1) {
                            event.getPlayer().getItemInHand().setType(Material.BOWL);
                            event.getPlayer().getItemInHand().setItemMeta(meta);
                            event.getPlayer().setItemInHand(bowl);
                            event.getPlayer().setHealth(event.getPlayer().getHealth() + heal);
                        } else if ((event.getPlayer().getHealth() < 20) && (event.getPlayer().getHealth() > 20 - heal)) {
                            event.getPlayer().setHealth(20);
                            event.getPlayer().getItemInHand().setType(Material.BOWL);
                            event.getPlayer().getItemInHand().setItemMeta(meta);
                            event.getPlayer().setItemInHand(bowl);
                        }
                    } else if ((event.getPlayer().getHealth() == 20) && (event.getPlayer().getFoodLevel() < 20)) {
                        if (event.getPlayer().getFoodLevel() < 20 - feed + 1) {
                            event.getPlayer().setFoodLevel(event.getPlayer().getFoodLevel() + feed);
                            event.getPlayer().getItemInHand().setType(Material.BOWL);
                            event.getPlayer().getItemInHand().setItemMeta(meta);
                            event.getPlayer().setItemInHand(bowl);
                        } else
                            if ((event.getPlayer().getFoodLevel() < 20) && (event.getPlayer().getFoodLevel() > 20 - feed)) {
                            event.getPlayer().setFoodLevel(20);
                            event.getPlayer().getItemInHand().setType(Material.BOWL);
                            event.getPlayer().getItemInHand().setItemMeta(meta);
                            event.getPlayer().setItemInHand(bowl);
                        }
                    }
                }
            }
        }
    }
    
    What can it be?
     
  2. Offline

    xMrPoi

    at br.driftracingpvp.plugin.Soup.getClickSoup(Soup.java:32)
    Caused by: java.lang.IllegalArgumentException: Health must be between 0 and 20.0
     
  3. @DriftCoder
    An easy fix for what @xMrPoi said, use Math.min(current health + heal, player.getMaxHealth())
     
  4. Offline

    @DriftCoder

    @megamichiel I could not understand how to resolve the error by using your logic
     
  5. Offline

    xMrPoi

    @DriftCoder somewhere in your code, you are setting the players health to something greater than 20 which is stated in the stack trace. @megamichiel 's method would always be setting it to a maximum of the player's max health, even if it were greater.
     
Thread Status:
Not open for further replies.

Share This Page