All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bukkit.block.BlockFace Maven / Gradle / Ivy

package org.bukkit.block;

/**
 * Represents the face of a block
 */
public enum BlockFace {
  NORTH(0, 0, -1),
  EAST(1, 0, 0),
  SOUTH(0, 0, 1),
  WEST(-1, 0, 0),
  UP(0, 1, 0),
  DOWN(0, -1, 0),
  NORTH_EAST(NORTH, EAST),
  NORTH_WEST(NORTH, WEST),
  SOUTH_EAST(SOUTH, EAST),
  SOUTH_WEST(SOUTH, WEST),
  WEST_NORTH_WEST(WEST, NORTH_WEST),
  NORTH_NORTH_WEST(NORTH, NORTH_WEST),
  NORTH_NORTH_EAST(NORTH, NORTH_EAST),
  EAST_NORTH_EAST(EAST, NORTH_EAST),
  EAST_SOUTH_EAST(EAST, SOUTH_EAST),
  SOUTH_SOUTH_EAST(SOUTH, SOUTH_EAST),
  SOUTH_SOUTH_WEST(SOUTH, SOUTH_WEST),
  WEST_SOUTH_WEST(WEST, SOUTH_WEST),
  SELF(0, 0, 0);

  private final int modX;
  private final int modY;
  private final int modZ;

  BlockFace(final int modX, final int modY, final int modZ) {
    this.modX = modX;
    this.modY = modY;
    this.modZ = modZ;
  }

  BlockFace(final BlockFace face1, final BlockFace face2) {
    this.modX = face1.getModX() + face2.getModX();
    this.modY = face1.getModY() + face2.getModY();
    this.modZ = face1.getModZ() + face2.getModZ();
  }

  /**
   * Get the amount of X-coordinates to modify to get the represented block
   *
   * @return Amount of X-coordinates to modify
   */
  public int getModX() {
    return modX;
  }

  /**
   * Get the amount of Y-coordinates to modify to get the represented block
   *
   * @return Amount of Y-coordinates to modify
   */
  public int getModY() {
    return modY;
  }

  /**
   * Get the amount of Z-coordinates to modify to get the represented block
   *
   * @return Amount of Z-coordinates to modify
   */
  public int getModZ() {
    return modZ;
  }

  public BlockFace getOppositeFace() {
    switch (this) {
      case NORTH:
        return BlockFace.SOUTH;

      case SOUTH:
        return BlockFace.NORTH;

      case EAST:
        return BlockFace.WEST;

      case WEST:
        return BlockFace.EAST;

      case UP:
        return BlockFace.DOWN;

      case DOWN:
        return BlockFace.UP;

      case NORTH_EAST:
        return BlockFace.SOUTH_WEST;

      case NORTH_WEST:
        return BlockFace.SOUTH_EAST;

      case SOUTH_EAST:
        return BlockFace.NORTH_WEST;

      case SOUTH_WEST:
        return BlockFace.NORTH_EAST;

      case WEST_NORTH_WEST:
        return BlockFace.EAST_SOUTH_EAST;

      case NORTH_NORTH_WEST:
        return BlockFace.SOUTH_SOUTH_EAST;

      case NORTH_NORTH_EAST:
        return BlockFace.SOUTH_SOUTH_WEST;

      case EAST_NORTH_EAST:
        return BlockFace.WEST_SOUTH_WEST;

      case EAST_SOUTH_EAST:
        return BlockFace.WEST_NORTH_WEST;

      case SOUTH_SOUTH_EAST:
        return BlockFace.NORTH_NORTH_WEST;

      case SOUTH_SOUTH_WEST:
        return BlockFace.NORTH_NORTH_EAST;

      case WEST_SOUTH_WEST:
        return BlockFace.EAST_NORTH_EAST;

      case SELF:
        return BlockFace.SELF;
    }

    return BlockFace.SELF;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy