certain tools to harvest something

Discussion in 'Plugin Development' started by kieranmclean, Jun 6, 2013.

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

    kieranmclean

    Hello, I was wondering how could I get the player when he punches dirt.. for example when he punches dirt, the plugin will cancel the action and send a message saying You cannot destroy dirt without the proper tools.. and make it so you can only harvest dirt with a shovel obviously, any kind of shovel

    Thanks!
     
  2. Offline

    inventorman101

    You should create an eventlistener and listen to block break/place events and if they brake a block && and have the right tool then the event is passed else it is canceled along with a message.
     
  3. Offline

    kieranmclean

    Alright I'll try this after school thanks.
     
  4. Offline

    inventorman101

  5. Offline

    kieranmclean

    inventorman101

    I got this, how can I add the player can only break the crops with a hoe?

    Code:
    package me.kieran.harvest;
     
    import java.util.logging.Logger;
    import org.bukkit.Bukkit;
    import org.bukkit.entity.Player;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class Harvest extends JavaPlugin implements Listener {
        private static final Logger log = Logger.getLogger("Minecraft");
        public static Harvest plugin;
     
        @Override
        public void onEnable(){
            log.info("Harvest has been enabled.");
            Bukkit.getPluginManager().registerEvents(this, this);
         
        }
     
        @Override
        public void onDisable(){
            log.info("Harvest has been disabled.");
           
        }
       
        @EventHandler
        public void onBlockBreak(BlockBreakEvent event){
            if(event.getBlock().getType() == Material.CROPS){
                Player player = event.getPlayer();
                player.sendMessage(ChatColor.DARK_GRAY + ".");
                    event.setCancelled(true);
            }
        }
    }
    Thanks
     
  6. Offline

    Drkmaster83

    Do an if check checking if the player.getItemInHand().getType() is equal to the Material.<material>_HOE. If so, allow the event. Else, cancel the event and send the message.
     
  7. Offline

    kieranmclean

    I got this now, but whenever I try to break a crop it says I can't but I still break it... am I missing a return; somewhere?

    I tried it after
    Code:
                player.sendMessage(ChatColor.DARK_GRAY + "I need the correct tools for this..");
                    event.setCancelled(true);
    But it just gave me an error in eclipse..
    Drkmaster83

    Code:
    package me.kieran.harvest;
     
    import java.util.logging.Logger;
    import org.bukkit.Bukkit;
    import org.bukkit.entity.Player;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class Harvest extends JavaPlugin implements Listener {
        private static final Logger log = Logger.getLogger("Minecraft");
        public static Harvest plugin;
     
        @Override
        public void onEnable(){
            log.info("Harvest has been enabled.");
            Bukkit.getPluginManager().registerEvents(this, this);
         
        }
     
        @Override
        public void onDisable(){
            log.info("Harvest has been disabled.");
           
        }
       
        @EventHandler
        public void onBlockBreak(BlockBreakEvent event){
            if(event.getBlock().getType() == Material.CROPS){
                Player player = event.getPlayer();
                player.sendMessage(ChatColor.DARK_GRAY + "I need the correct tools for this..");
                    event.setCancelled(true);
                   
                    if(player.getItemInHand().getType() == Material.WOOD_HOE);
                    event.setCancelled(false);
            }
        }
    }
     
  8. Offline

    Drkmaster83

    Code:
    package me.kieran.harvest;
     
    import java.util.logging.Logger;
    import org.bukkit.Bukkit;
    import org.bukkit.entity.Player;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class Harvest extends JavaPlugin implements Listener 
    {
        private static final Logger log = Logger.getLogger("Minecraft");
        public static Harvest plugin;
     
        @Override
        public void onEnable()
        {
            log.info("Harvest has been enabled.");
            Bukkit.getPluginManager().registerEvents(this, this);
        }
     
        @Override
        public void onDisable()
        {
            log.info("Harvest has been disabled.");
        }
       
        @EventHandler
        public void onBlockBreak(BlockBreakEvent event)
        {
            if(event.getBlock().getType() == Material.CROPS)
            {
                Player player = event.getPlayer();
                if(player.getItemInHand().getType() == Material.WOOD_HOE)
                {
                    return; //The Event is already allowed unless cancelled by another plugin.
                }
                else
                {
                    event.setCancelled(true);
                    player.sendMessage(ChatColor.DARK_GRAY + "I need the correct tools for this.. (WOOD HOE!)");
                }
            }
        }
    }
    Your mistake was not creating brackets for your if statement:
    Code:
    @EventHandler
        public void onBlockBreak(BlockBreakEvent event){
            if(event.getBlock().getType() == Material.CROPS){
                Player player = event.getPlayer();
                player.sendMessage(ChatColor.DARK_GRAY + "I need the correct tools for this.."); //Put this in an else statement. Or do an if statement checking if the item in hand is NOT a wood hoe.
                    event.setCancelled(true); //Make sure this is inside the brackets of an if statement or method, or else the action will always be cancelled.
                   
                    if(player.getItemInHand().getType() == Material.WOOD_HOE); //Bring this to the top, make a bracket for it.
                    event.setCancelled(false); //There's no need for this. I'd just return;.
            }
        }
     
  9. Offline

    Lecrayen

    Code:
    @EventHandler
        public void onBlockBreak(BlockBreakEvent event){
            if(event.getBlock().getType() == Material.CROPS){
                if(player.getItemInHand().getType() == Material.WOODEN_HOE){
                     return;
                }
                event.getPlayer().sendMessage(ChatColor.DARK_GRAY + "I need the correct tools for this.."); 
                event.setCancelled(true); 
            }
        }
     
  10. Offline

    Drkmaster83

    Why, yes, that is what I posted. except for you are wrong. It will execute
    Code:
    event.getPlayer().sendMessage(ChatColor.DARK_GRAY + "I need the correct tools for this..");
                event.setCancelled(true);
    
    No matter what, which is a bad thing.
     
  11. Offline

    kieranmclean

    Thanks guys it works now :)
     
Thread Status:
Not open for further replies.

Share This Page