/** * Find a {@link CartMechanismBlocks} from an unknown starting block. * * @param block The block to search from. * @return The CartMechanismBlocks, if found */ public static Optional<CartMechanismBlocks> find(Location<World> block) { if (SignUtil.isSign(block)) { return findBySign(block); } else if (BlockUtil.isTrack(block.getBlockType())) { return findByRail(block); } else { return findByBase(block); } }
/** * Find a {@link CartMechanismBlocks} from a sign. * * @param block The sign to search from. * @return The CartMechanismBlocks, if found */ public static Optional<CartMechanismBlocks> findBySign(Location<World> block) { if (!SignUtil.isSign(block)) { return Optional.empty(); } if (BlockUtil.isTrack(block.getRelative(Direction.UP).getRelative(Direction.UP).getBlockType())) { return Optional.of(new CartMechanismBlocks( block.getRelative(Direction.UP).getRelative(Direction.UP), block.getRelative(Direction.UP), block)); } else if (BlockUtil.isTrack(block.getRelative(Direction.UP).getRelative(Direction.UP).getRelative(Direction.UP).getBlockType())) { return Optional.of(new CartMechanismBlocks( block.getRelative(Direction.UP).getRelative(Direction.UP).getRelative(Direction.UP), block.getRelative(Direction.UP).getRelative(Direction.UP), block)); } else if (BlockUtil.isTrack(block.getRelative(SignUtil.getBack(block)).getRelative(Direction.UP).getBlockType())) { return Optional.of(new CartMechanismBlocks( block.getRelative(SignUtil.getBack(block)).getRelative(Direction.UP), block.getRelative(SignUtil.getBack(block)), block)); } else { return Optional.empty(); } }
if (!BlockUtil.isTrack(block.getBlockType())) { return Optional.empty();