package tv.mineinthebox.essentials.events.chairs; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Arrow; import org.bukkit.entity.EntityType; 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.material.Stairs; import tv.mineinthebox.essentials.xEssentials; import tv.mineinthebox.essentials.interfaces.XPlayer; public class ChairEvent implements Listener { private final xEssentials pl; public ChairEvent(xEssentials pl) { this.pl = pl; } @EventHandler public void onInteract(PlayerInteractEvent e) { if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { if(isChair(e.getClickedBlock())) { XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(e.getPlayer().getName()); Arrow arrow = (Arrow) e.getPlayer().getWorld().spawnEntity(e.getClickedBlock().getLocation().add(0.50, 0, 0.50), EntityType.ARROW); arrow.setPassenger(e.getPlayer()); xp.setInChair(true); e.setCancelled(true); } } } private boolean isChair(Block block) { if(block.getState().getData() instanceof Stairs) { Stairs stair = (Stairs) block.getState().getData(); BlockFace pos1; BlockFace pos2; if(!stair.isInverted()) { switch(stair.getFacing()) { case EAST: pos1 = BlockFace.NORTH; pos2 = BlockFace.SOUTH; if(block.getRelative(pos1).getType() == Material.WALL_SIGN && block.getRelative(pos2).getType() == Material.WALL_SIGN) { return true; } case NORTH: pos1 = BlockFace.EAST; pos2 = BlockFace.WEST; if(block.getRelative(pos1).getType() == Material.WALL_SIGN && block.getRelative(pos2).getType() == Material.WALL_SIGN) { return true; } case SOUTH: pos1 = BlockFace.EAST; pos2 = BlockFace.WEST; if(block.getRelative(pos1).getType() == Material.WALL_SIGN && block.getRelative(pos2).getType() == Material.WALL_SIGN) { return true; } case WEST: pos1 = BlockFace.NORTH; pos2 = BlockFace.SOUTH; if(block.getRelative(pos1).getType() == Material.WALL_SIGN && block.getRelative(pos2).getType() == Material.WALL_SIGN) { return true; } default: break; } } } return false; } }