@EventHandler(priority = EventPriority.HIGHEST) public void onBlockBreak(BlockBreakEvent event) { if(event.isCancelled()) return; if(Survival.allowedBlocks.contains(event.getBlock().getType())) { ArmorStand drop = dropSeat(event.getBlock(), (Stairs)event.getBlock().getState().getData()); for(Entity e : drop.getNearbyEntities(0.5, 0.5, 0.5)) { if(e != null && e instanceof ArmorStand && e.getCustomName() == "Chair") e.remove(); } drop.remove(); } }
private int getChairWidth(Block block, BlockFace face) { int width = 0; // Go through the blocks next to the clicked block and check if there are any further stairs. for(int i = 1; i <= Survival.settings.getInt("Mechanics.Chairs.MaxChairWidth"); i++) { Block relative = block.getRelative(face, i); if(Survival.allowedBlocks.contains(relative.getType()) && ((Stairs)relative.getState().getData()).getDescendingDirection() == ((Stairs)block.getState().getData()).getDescendingDirection()) width++; else break; } return width; }
private boolean checkSign(Block block, BlockFace face) { // Go through the blocks next to the clicked block and check if are signs on the end. for(int i = 1; true; i++) { Block relative = block.getRelative(face, i); if(!(Survival.allowedBlocks.contains(relative.getType())) || (block instanceof Stairs && ((Stairs)relative.getState().getData()).getDescendingDirection() != ((Stairs)block.getState().getData()).getDescendingDirection())) { switch(relative.getType()) { case SIGN: case WALL_SIGN: case SIGN_POST: case ITEM_FRAME: case PAINTING: case TRAP_DOOR: case IRON_TRAPDOOR: return true; default: return false; } } } }
private ArmorStand dropSeat(Block chair, Stairs stairs) { Location location = chair.getLocation().add(0.5, (-0.7 - 0.5), 0.5); switch(stairs.getDescendingDirection()) { case NORTH: location.setYaw(180); break; case EAST: location.setYaw(270); break; case SOUTH: location.setYaw(0); break; case WEST: location.setYaw(90); default: } ArmorStand drop = (ArmorStand)location.getWorld().spawnEntity(location, EntityType.ARMOR_STAND); drop.setCustomName("Chair"); drop.setVelocity(new Vector(0, 0, 0)); drop.setGravity(false); drop.setVisible(false); return drop; }
private int getChairWidth(Block block, BlockFace face) { int width = 0; for (int i = 1; i <= 4; i++) { Block relative = block.getRelative(face, i); if (relative.getState().getData() instanceof Stairs) { if (isValidChair(relative) && ((Stairs) relative.getState().getData()).getDescendingDirection() == ((Stairs) block.getState().getData()).getDescendingDirection()) { width++; } else { break; } } } return width; }
private boolean isChair(Block block) { BlockFace[] faces = {BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST}; Stairs stair = (Stairs)block.getState().getData(); for(BlockFace face : faces) { if(stair.getFacing() == face) { return true; } } return false; }
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; }
public void setStairs(int x, int y, int z, BlockFace dir, Material mat) { Block b = world.getBlockAt(x, y, z); b.setType(mat); Stairs matStairs = new Stairs(mat); matStairs.setFacingDirection(dir); b.setData(matStairs.getData()); }
/** * @return if we are on a stair. */ public static boolean isOnStair(Location location) { return hasBlock(location, Stairs.class); }
/** * @return if we are on a stair but its lower than 0.3 */ public static boolean isOnStairJump(Location location) { return hasBlock(location, Stairs.class, 1); }
@Deprecated public Stairs(int type) { }
public Stairs(Material type) { }
@Deprecated public Stairs(int type, byte data) { }
@Deprecated public Stairs(Material type, byte data) { }
public Stairs clone() { return null; }