Find a block in range of a player?

Discussion in 'Plugin Development' started by Prominentc, Mar 5, 2013.

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

    Prominentc

    Ok, so I have a lock picking plugin and I want to do a check to make sure a player is picking a sign that is above a door:

    These below checks work to make sure a sign is on a chest or a wooden door (lower wooden door) but with lockette you can place a [Private] sign above a door on a block, so adding a check for this is impossible unless I can do a check to find out if there is a door in range below the sign.

    Code:
        private boolean blockIsConnectedToPickableItem(Block b) {
            Boolean flag = false;
            if(b.getRelative(BlockFace.NORTH).getType().equals(Material.CHEST)){
                flag = true;
            }else if(b.getRelative(BlockFace.WEST).getType().equals(Material.CHEST)){
                flag = true;
            }else if(b.getRelative(BlockFace.EAST).getType().equals(Material.CHEST)){
                flag = true;
            }else if(b.getRelative(BlockFace.SOUTH).getType().equals(Material.CHEST)){
                flag = true;
            }else if(b.getRelative(BlockFace.NORTH).getType().equals(Material.WOODEN_DOOR)){
                flag = true;
            }else if(b.getRelative(BlockFace.WEST).getType().equals(Material.WOODEN_DOOR)){
                flag = true;
            }else if(b.getRelative(BlockFace.EAST).getType().equals(Material.WOODEN_DOOR)){
                flag = true;
            }else if(b.getRelative(BlockFace.SOUTH).getType().equals(Material.WOODEN_DOOR)){
                flag = true;
            }
            if(flag){
                return true;
            }
            return false;
        }
    Can anyone help or offer ideas?
     
  2. Offline

    chasechocolate

    Well, for above the door, the sign is a block above, and one block forward, so check the BlockFace, and then subtract 1 from the Y, and then check for door.
     
  3. Offline

    Prominentc

    Thanks but how would I do that? In relation to my code above?

    Total newb here, I started meddling with java yesterday and it took all day to figure out how to generate class files from java files :/ :'(

    Here is my complete code for that file:

    Code:
    package me.danslayerx.pick;
     
    import java.util.HashSet;
    import java.util.Random;
     
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.block.Block;
    import org.bukkit.block.BlockFace;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
     
    import com.massivecraft.factions.Board;
    import com.massivecraft.factions.FLocation;
    import com.massivecraft.factions.FPlayer;
    import com.massivecraft.factions.Faction;
     
    public class PickLockEvents implements Listener {
       
        static HashSet<String> cooldown = new HashSet<String>();
       
        @EventHandler(priority=EventPriority.HIGHEST)
        public void pickLockInteraction(PlayerInteractEvent e){
           
            Player p = e.getPlayer();
           
            if(e.getAction() != Action.LEFT_CLICK_BLOCK){
                return;
            }
           
            if(!p.hasPermission("PickLock.Use")){
                return;
            }
           
            if(playerIsLockPicking(p, e.getClickedBlock())){
               
                if(GetObject.factionProtectionEnabled()){
                   
                    e.setCancelled(true);
                   
                    Faction faction = Board.getFactionAt(new FLocation(e.getClickedBlock().getLocation()));
                   
                    if(!faction.isNone()){
                       
                        if(!p.hasPermission("PickLock.Faction")){
                            p.sendMessage(ChatColor.RED + "You are not able to pick this lock in the faction " + faction.getTag() + ".");
                            return;
                        }
                       
                        for(FPlayer fp : faction.getFPlayers()){
                            if(Bukkit.getPlayer(fp.getName()).hasPermission("PickLock.Faction.Immunity")){
                               
                                p.sendMessage(ChatColor.RED + "The faction " + faction.getTag() + " has locks that are impossible to pick!");
                                return;
                            }
                        }
                       
                    }
                }
               
               
                if(GetObject.cooldownEnabled()){
                   
                    if(cooldown.contains(p.getName())){
                        p.sendMessage(ChatColor.RED + "Picklocking is on cooldown.");
                        return;
                    }
                   
                    scheduleDelay(p);
                }
                   
                    int Rand = new Random().nextInt(GetObject.getPickLockChance());
                   
                    if(Rand != 1){
                       
                        p.sendMessage(ChatColor.RED + GetObject.getFailMessage());
                        if(GetObject.removeItemEnabled()){
                           
                            if(p.getItemInHand().getAmount() > 1){
                                p.getItemInHand().setAmount(p.getItemInHand().getAmount()-1);
                            }else{
                                p.setItemInHand(null);
                            }
                           
                            p.sendMessage(ChatColor.RED + "You break your picklock!");
                           
                        }
                        if(GetObject.withdrawMoneyFailedEnabled()){
                           
                            if(Main.economy.getBalance(p.getName()) >= GetObject.getWithdrawFailedAmount()){
                                Main.economy.withdrawPlayer(p.getName(), GetObject.getWithdrawFailedAmount());
                                p.sendMessage(ChatColor.RED + "For failing this pick lock attempt you lost $" + GetObject.getWithdrawFailedAmount() + ".");
                            }
                           
                        }
                        return;
                    }
                   
                    p.sendMessage(ChatColor.GREEN + GetObject.getSuccessMessage());
                   
                    e.getClickedBlock().breakNaturally();
                   
                    if(GetObject.withdrawSuccessMoneyEnabled()){
                       
                            if(Main.economy.getBalance(p.getName()) >= GetObject.getWithdrawSuccessAmount()){
                                Main.economy.withdrawPlayer(p.getName(), GetObject.getWithdrawSuccessAmount());
                                p.sendMessage(ChatColor.GREEN + "For picking this lock you lost $" + GetObject.getWithdrawSuccessAmount() + ".");
                            }
                       
                    }
                   
                   
     
               
            }
           
        }
     
        private void scheduleDelay(final Player p) {
            int time = GetObject.getCooldownTimer();
            cooldown.add(p.getName());
            Main.p.getServer().getScheduler().scheduleSyncDelayedTask(Main.p, new Runnable() {
                @Override
                public void run(){
           
                    cooldown.remove(p.getName());   
                   
                }                               
        }, time * 20L);
           
        }
     
        private boolean playerIsLockPicking(Player p, Block block) {
                if(p.getItemInHand().getTypeId() == GetObject.getLockPick()){
                    if(block.getTypeId() == 68){
                        if(blockIsConnectedToChest(block)){
                        return true;
                        }
                    }
                }
            return false;
        }
     
        private boolean blockIsConnectedToChest(Block b) {
            Boolean flag = false;
            if(b.getRelative(BlockFace.NORTH).getType().equals(Material.CHEST)){
                flag = true;
            }else if(b.getRelative(BlockFace.WEST).getType().equals(Material.CHEST)){
                flag = true;
            }else if(b.getRelative(BlockFace.EAST).getType().equals(Material.CHEST)){
                flag = true;
            }else if(b.getRelative(BlockFace.SOUTH).getType().equals(Material.CHEST)){
                flag = true;
            }else if(b.getRelative(BlockFace.NORTH).getType().equals(Material.WOODEN_DOOR)){
    flag = true;
    }else if(b.getRelative(BlockFace.WEST).getType().equals(Material.WOODEN_DOOR)){
    flag = true;
    }else if(b.getRelative(BlockFace.EAST).getType().equals(Material.WOODEN_DOOR)){
    flag = true;
    }else if(b.getRelative(BlockFace.SOUTH).getType().equals(Material.WOODEN_DOOR)){
    flag = true;
    }
            if(flag){
                return true;
            }
            return false;
        }
     
    }
    
    Anyone know how to do this?:(

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 31, 2016
Thread Status:
Not open for further replies.

Share This Page