/*
  * Runs a set of tests to make sure that the given npch is able to be used for housing
  * for an NPC.
  *
  * Returns true if given npch meets requirements for living quarters.
  */
 public static boolean isHabitable(World worldIn, NPCHouse npch) {
   if (npch.isBuilding()) {
     if (BlockHelper.isInBox(worldIn, npch, Blocks.bed)) {
       if (BlockHelper.isInBox(worldIn, npch, Blocks.chest)) {
         if (BlockHelper.isInBox(worldIn, npch, Blocks.crafting_table)) {
           if (BlockHelper.isInBox(worldIn, npch, Blocks.torch)) {
             return true;
           }
         }
       }
     }
   }
   return false;
 }
 /*
  * This messy function is a work in progress.  It is a temporary setup for
  * placing a custom block from my mod over the door of the given npch.
  *
  * Returns the location of where the sign should be placed.
  *
  * Needs to be rewritten badly.
  */
 public static BlockPos placeBlockOverDoor(
     ItemStack stack,
     EntityPlayer playerIn,
     World worldIn,
     NPCHouse npch,
     String block_name,
     float hitX,
     float hitY,
     float hitZ) {
   String placeMe = ("bh_housing:" + block_name);
   BlockPos door = BlockHelper.findDoor(worldIn, npch);
   if (!door.equals(npch.getCorner(0))) {
     int north = npch.getCorner(0).getZ();
     int south = npch.getCorner(2).getZ();
     int west = npch.getCorner(0).getX();
     int east = npch.getCorner(1).getX();
     BlockPos placeHere = door;
     boolean shouldUse = false;
     EnumFacing direction = EnumFacing.NORTH;
     if (worldIn.getBlockState(placeHere).getBlock() instanceof NPCHouse_Block) {
       return placeHere;
     } else if (door.getX() == west) {
       placeHere = door.up().west();
       direction = EnumFacing.WEST;
     } else if (door.getX() == east) {
       placeHere = door.up().east();
       direction = EnumFacing.EAST;
     } else if (door.getZ() == north) {
       placeHere = door.up().north();
       direction = EnumFacing.NORTH;
     } else if (door.getZ() == south) {
       placeHere = door.up().south();
       direction = EnumFacing.SOUTH;
     }
     shouldUse =
         worldIn.setBlockState(
             placeHere,
             NPCHouse_Block.getBlockFromName(placeMe)
                 .getDefaultState()
                 .withProperty(NPCHouse_Block.FACING, direction),
             3);
     if (shouldUse) {
       --stack.stackSize;
       if (stack.stackSize == 0) {
         playerIn.destroyCurrentEquippedItem();
       }
       if (block_name == "npch_block") {
         NPCHouse_Block npchblock = (NPCHouse_Block) worldIn.getBlockState(placeHere).getBlock();
         npchblock.setNPCHouse(npch);
       }
       IBlockState temp = worldIn.getBlockState(placeHere);
       if (temp.getBlock().getRegistryName() == "npch_block") {
         ItemBlock.setTileEntityNBT(
             worldIn, playerIn, placeHere, new ItemStack(Block.getBlockFromName("npch_block"), 1));
       }
     }
     return placeHere;
   }
   return null;
 }
 /*
  * Returns the location of vanilla door within the bounds of NPCHouse npch.
  */
 public static BlockPos findDoor(World worldIn, NPCHouse npch) {
   Block a = Blocks.acacia_door;
   Block b = Blocks.birch_door;
   Block c = Blocks.dark_oak_door;
   Block d = Blocks.iron_door;
   Block e = Blocks.jungle_door;
   Block f = Blocks.oak_door;
   Block g = Blocks.spruce_door;
   List<Block> doors = new ArrayList();
   doors.add(a);
   doors.add(b);
   doors.add(c);
   doors.add(d);
   doors.add(e);
   doors.add(f);
   doors.add(g);
   BlockPos door = npch.getCorner(0);
   for (Block temp : doors) {
     door = BlockHelper.findInBox(worldIn, npch, temp);
     if (!door.equals(npch.getCorner(0))) {
       return door;
     }
   }
   return door;
 }
 /*
  * Returns true if the given block can be found inside the NPCHouse npch.
  */
 public static boolean isInBox(World worldIn, NPCHouse npch, Block block) {
   BlockPos pos = BlockHelper.findInBox(worldIn, npch, block);
   int x = pos.getX();
   int y = pos.getY();
   int z = pos.getZ();
   int a = npch.getCorner(0).getX();
   int b = npch.getCorner(0).getY();
   int c = npch.getCorner(0).getZ();
   if ((a == x) && (b == y) && (c == z)) {
     return false;
   }
   return true;
 }
 /*
  * Returns true if the given npch already has an occupant.
  */
 public static boolean hasOccupant(World worldIn, NPCHouse npch) {
   List<Entity> inHouse = new ArrayList();
   List<Entity> allEntities = worldIn.loadedEntityList;
   for (Entity ent : allEntities) {
     if (BlockHelper.isInside(worldIn, ent.getPosition(), npch)) {
       inHouse.add(ent);
     }
   }
   for (Entity inside : inHouse) {
     if (inside instanceof EntityNPC) {
       EntityNPC temp = (EntityNPC) inside;
       if (npch.isEqual(temp.getNPCHouse())) {
         return true;
       }
     }
   }
   return false;
 }
 /*
  * Returns true if a 2x2 or larger rectangle in the X-Y plane is a solid wooden rectangle
  */
 public static boolean isSolidEWWall(
     World worldIn, BlockPos ue, BlockPos uw, BlockPos de, BlockPos dw) {
   if (ue.equals(dw)) {
     return false;
   }
   int far_up = ue.getY();
   int far_east = ue.getX();
   int far_down = dw.getY();
   int far_west = dw.getX();
   for (int i = far_west; i <= far_east; i++) {
     for (int j = far_down; j <= far_up; j++) {
       BlockPos temp = new BlockPos(i, j, ue.getZ());
       if (!(BlockHelper.isWooden(worldIn, temp))) {
         return false;
       }
     }
   }
   return true;
 }
 /*
  * Returns true if a 2x2 or larger rectangle in the Y-Z plane is a solid wooden rectangle
  */
 public static boolean isSolidNSWall(
     World worldIn, BlockPos un, BlockPos us, BlockPos dn, BlockPos ds) {
   if (un.equals(ds)) {
     return false;
   }
   int far_up = un.getY();
   int far_north = un.getZ();
   int far_down = ds.getY();
   int far_south = ds.getZ();
   for (int i = far_north; i <= far_south; i++) {
     for (int j = far_down; j <= far_up; j++) {
       BlockPos temp = new BlockPos(un.getX(), j, i);
       if (!(BlockHelper.isWooden(worldIn, temp))) {
         return false;
       }
     }
   }
   return true;
 }
 /*
  * Returns true if a 2x2 or larger rectangle in the X-Z plane is a solid wooden rectangle
  */
 public static boolean isSolidPlatform(
     World worldIn, BlockPos ne, BlockPos nw, BlockPos se, BlockPos sw) {
   if (nw.equals(se)) {
     return false;
   }
   int far_east = ne.getX();
   int far_north = ne.getZ();
   int far_west = sw.getX();
   int far_south = sw.getZ();
   for (int i = far_north; i <= far_south; i++) {
     for (int j = far_west; j <= far_east; j++) {
       BlockPos temp = new BlockPos(j, ne.getY(), i);
       if (!(BlockHelper.isWooden(worldIn, temp))) {
         return false;
       }
     }
   }
   return true;
 }
 /*
  * Needs to be rewritten to return null instead of UNW corner of npch.
  *
  * Returns the Upper NorthWestern most BlockPos in the worldIn of a block inside of the NPCHouse npch
  */
 public static BlockPos findInBox(World worldIn, NPCHouse npch, Block block) {
   BlockPos pos = npch.getCorner(0);
   int far_east = npch.getCorner(1).getX();
   int far_west = npch.getCorner(0).getX();
   int far_up = npch.getCorner(0).getY();
   int far_down = npch.getCorner(4).getY();
   int far_north = npch.getCorner(0).getZ();
   int far_south = npch.getCorner(2).getZ();
   for (int i = far_north; i <= far_south; i++) {
     for (int j = far_west; j <= far_east; j++) {
       for (int k = far_down; k <= far_up; k++) {
         BlockPos temp = new BlockPos(j, k, i);
         // isn't catching the if statement
         if (BlockHelper.isBlockType(worldIn, temp, block)) {
           pos = temp;
         }
       }
     }
   }
   return pos;
 }
 /*
  * Temporary method for checking if the block at the location was made of wood.
  * I don't see much need for it in the future and expect depreciation soon.
  *
  * Returns true if block at given blockposition is made of wood.
  */
 public static boolean isWooden(World worldIn, BlockPos pos) {
   return BlockHelper.isMaterial(worldIn.getBlockState(pos), Material.wood);
 }
  /*
   * This function is used to determine if the player clicked on the inside of a solid wooden box.
   *
   * Returns NPCHouse of what you clicked on, whether it's a real building or not. The returned
   * NPCHouse has a boolean to indicate if it is a valid house or not.
   */
  public static NPCHouse isBox(World worldIn, BlockPos pos, EnumFacing side) {
    BlockPos une = pos, unw = pos, use = pos, usw = pos, dne = pos, dnw = pos, dse = pos, dsw = pos;
    boolean isBuilding = false;

    // D-U-N-S-W-E
    assess:
    switch (side.getIndex()) {
      case 0: // assume ceiling
        // while not wall && wood, go in direction to find wall
        // know is ceiling, so we can us a block at least 2 below  && can only click ceiling from
        // inside, so one in any Cardinal direction can be assumed as wood for wall checks
        // move east and west, checking if wall with 2 blocks down and 1 block north  (neCorner
        une = pos.north().east();
        unw = pos.north().west();
        use = pos.south().east();
        usw = pos.south().west();
        // make sure all start corners are actually wood, else fail
        if (!(BlockHelper.isWooden(worldIn, une)
            && BlockHelper.isWooden(worldIn, unw)
            && BlockHelper.isWooden(worldIn, use)
            && BlockHelper.isWooden(worldIn, usw))) {
          isBuilding = false;
          break assess;
        }
        // these are clearly not wooden, but we need them to check for walls, when they become
        // wooden, we have found walls
        dne = une.down();
        dnw = unw.down();
        dse = use.down();
        dsw = usw.down();
        if ((BlockHelper.isWooden(worldIn, dne)
            && BlockHelper.isWooden(worldIn, dnw)
            && BlockHelper.isWooden(worldIn, dse)
            && BlockHelper.isWooden(worldIn, dsw))) {
          isBuilding = false;
          break assess;
        }
        // move corners to find walls in order, north, south, east, west
        while (!BlockHelper.isSolidEWWall(worldIn, une, unw, dne, dnw)) {
          // if we're no longer looking at wood, then it's not a domicile, so fail
          if (!(BlockHelper.isWooden(worldIn, une) && BlockHelper.isWooden(worldIn, unw))) {
            isBuilding = false;
            break assess;
          }
          une = une.north();
          unw = unw.north();
          dne = dne.north();
          dnw = dnw.north();
        }
        while (!BlockHelper.isSolidEWWall(worldIn, use, usw, dse, dsw)) {
          // if we're no longer looking at wood, then it's not a domicile, so fail
          if (!(BlockHelper.isWooden(worldIn, use) && BlockHelper.isWooden(worldIn, usw))) {
            isBuilding = false;
            break assess;
          }
          use = use.south();
          usw = usw.south();
          dse = dse.south();
          dsw = dsw.south();
        }
        while (!BlockHelper.isSolidNSWall(worldIn, une, use, dne, dse)) {
          // if we're no longer looking at wood, then it's not a domicile, so fail
          if (!(BlockHelper.isWooden(worldIn, une) && BlockHelper.isWooden(worldIn, use))) {
            isBuilding = false;
            break assess;
          }
          une = une.east();
          use = use.east();
          dne = dne.east();
          dse = dse.east();
        }
        while (!BlockHelper.isSolidNSWall(worldIn, unw, usw, dnw, dsw)) {
          // if we're no longer looking at wood, then it's not a domicile, so fail
          if (!(BlockHelper.isWooden(worldIn, unw) && BlockHelper.isWooden(worldIn, usw))) {
            isBuilding = false;
            break assess;
          }
          unw = unw.west();
          usw = usw.west();
          dnw = dnw.west();
          dsw = dsw.west();
        }
        // We now have the real upper corners of the building, let's find out if we have a floor!
        // :)
        while (!BlockHelper.isSolidPlatform(worldIn, dne, dnw, dse, dsw)) {
          if (!(BlockHelper.isWooden(worldIn, dne)
              && BlockHelper.isWooden(worldIn, dnw)
              && BlockHelper.isWooden(worldIn, dse)
              && BlockHelper.isWooden(worldIn, dsw))) {
            // for some reason it's going past all of them and I've no f*****g clue why.

            isBuilding = false;
            break assess;
          }
          dne = dne.down();
          dnw = dnw.down();
          dse = dse.down();
          dsw = dsw.down();
        }
        // This should be all of our corners.  Let's run another check on every wall and floor just
        // to make sure its' not missing pieces on us.  :D
        if ((BlockHelper.isSolidPlatform(worldIn, une, unw, use, usw)
            && BlockHelper.isSolidPlatform(worldIn, dne, dnw, dse, dsw)
            && BlockHelper.isSolidEWWall(worldIn, une, unw, dne, dnw)
            && BlockHelper.isSolidEWWall(worldIn, use, usw, dse, dsw)
            && BlockHelper.isSolidNSWall(worldIn, une, use, dne, dse)
            && BlockHelper.isSolidNSWall(worldIn, unw, usw, dnw, dsw))) {
          isBuilding = true;
          break assess;
        }
        isBuilding = false;
        break assess;
      case 1: // assume floor
        dne = pos.north().east();
        dnw = pos.north().west();
        dse = pos.south().east();
        dsw = pos.south().west();
        if (!(BlockHelper.isWooden(worldIn, dne)
            && BlockHelper.isWooden(worldIn, dnw)
            && BlockHelper.isWooden(worldIn, dse)
            && BlockHelper.isWooden(worldIn, dsw))) {
          isBuilding = false;
          break assess;
        }
        une = dne.up();
        unw = dnw.up();
        use = dse.up();
        usw = dsw.up();
        if ((BlockHelper.isWooden(worldIn, une)
            && BlockHelper.isWooden(worldIn, unw)
            && BlockHelper.isWooden(worldIn, use)
            && BlockHelper.isWooden(worldIn, usw))) {
          isBuilding = false;
          break assess;
        }
        // Start finding Walls in order: N-S-E-W
        while (!BlockHelper.isSolidEWWall(worldIn, une, unw, dne, dnw)) {
          if (!(BlockHelper.isWooden(worldIn, dne) && BlockHelper.isWooden(worldIn, dnw))) {
            isBuilding = false;
            break assess;
          }
          une = une.north();
          unw = unw.north();
          dne = dne.north();
          dnw = dnw.north();
        }
        while (!BlockHelper.isSolidEWWall(worldIn, use, usw, dse, dsw)) {
          if (!(BlockHelper.isWooden(worldIn, dse) && BlockHelper.isWooden(worldIn, dsw))) {
            isBuilding = false;
            break assess;
          }
          use = use.south();
          usw = usw.south();
          dse = dse.south();
          dsw = dsw.south();
        }
        while (!BlockHelper.isSolidNSWall(worldIn, une, use, dne, dse)) {
          if (!(BlockHelper.isWooden(worldIn, dne) && BlockHelper.isWooden(worldIn, dse))) {
            isBuilding = false;
            break assess;
          }
          une = une.east();
          use = use.east();
          dne = dne.east();
          dse = dse.east();
        }
        while (!BlockHelper.isSolidNSWall(worldIn, unw, usw, dnw, dsw)) {
          if (!(BlockHelper.isWooden(worldIn, dnw) && BlockHelper.isWooden(worldIn, dsw))) {
            isBuilding = false;
            break assess;
          }
          unw = unw.west();
          usw = usw.west();
          dnw = dnw.west();
          dsw = dsw.west();
        }
        // Find the Roof!
        while (!BlockHelper.isSolidPlatform(worldIn, une, unw, use, usw)) {
          if (!(BlockHelper.isWooden(worldIn, une)
              && BlockHelper.isWooden(worldIn, unw)
              && BlockHelper.isWooden(worldIn, use)
              && BlockHelper.isWooden(worldIn, usw))) {
            isBuilding = false;
            break assess;
          }
          une = une.up();
          unw = unw.up();
          use = use.up();
          usw = usw.up();
        }
        if ((BlockHelper.isSolidPlatform(worldIn, une, unw, use, usw)
            && BlockHelper.isSolidPlatform(worldIn, dne, dnw, dse, dsw)
            && BlockHelper.isSolidEWWall(worldIn, une, unw, dne, dnw)
            && BlockHelper.isSolidEWWall(worldIn, use, usw, dse, dsw)
            && BlockHelper.isSolidNSWall(worldIn, une, use, dne, dse)
            && BlockHelper.isSolidNSWall(worldIn, unw, usw, dnw, dsw))) {
          isBuilding = true;
          break assess;
        }
        isBuilding = false;
        break assess;

      case 2: // assume ewWall (North facing side)
        use = pos.up().east();
        usw = pos.up().west();
        dse = pos.down().east();
        dsw = pos.down().west();
        if (!(BlockHelper.isWooden(worldIn, use)
            && BlockHelper.isWooden(worldIn, usw)
            && BlockHelper.isWooden(worldIn, dse)
            && BlockHelper.isWooden(worldIn, dsw))) {
          isBuilding = false;
          break assess;
        }
        une = use.north();
        unw = usw.north();
        dne = dse.north();
        dnw = dsw.north();
        if ((BlockHelper.isWooden(worldIn, une)
            && BlockHelper.isWooden(worldIn, unw)
            && BlockHelper.isWooden(worldIn, dne)
            && BlockHelper.isWooden(worldIn, dnw))) {
          isBuilding = false;
          break assess;
        }
        // First, we check Ceiling and Floor
        while (!BlockHelper.isSolidPlatform(worldIn, une, unw, use, usw)) {
          if (!(BlockHelper.isWooden(worldIn, use) && BlockHelper.isWooden(worldIn, usw))) {
            isBuilding = false;
            break assess;
          }
          une = une.up();
          unw = unw.up();
          use = use.up();
          usw = usw.up();
        }
        while (!BlockHelper.isSolidPlatform(worldIn, dne, dnw, dse, dsw)) {
          if (!(BlockHelper.isWooden(worldIn, dse) && BlockHelper.isWooden(worldIn, dsw))) {
            isBuilding = false;
            break assess;
          }
          dne = dne.down();
          dnw = dnw.down();
          dse = dse.down();
          dsw = dsw.down();
        }
        // Now we check the Eastern and Western Walls
        while (!BlockHelper.isSolidNSWall(worldIn, une, use, dne, dse)) {
          if (!(BlockHelper.isWooden(worldIn, use) && BlockHelper.isWooden(worldIn, dse))) {
            isBuilding = false;
            break assess;
          }
          une = une.east();
          use = use.east();
          dne = dne.east();
          dse = dse.east();
        }
        while (!BlockHelper.isSolidNSWall(worldIn, unw, usw, dnw, dsw)) {
          if (!(BlockHelper.isWooden(worldIn, usw) && BlockHelper.isWooden(worldIn, dsw))) {
            isBuilding = false;
            break assess;
          }
          unw = unw.west();
          usw = usw.west();
          dnw = dnw.west();
          dsw = dsw.west();
        }
        // Finally, we check for the North Wall
        while (!BlockHelper.isSolidEWWall(worldIn, une, unw, dne, dnw)) {
          if (!(BlockHelper.isWooden(worldIn, une)
              && BlockHelper.isWooden(worldIn, unw)
              && BlockHelper.isWooden(worldIn, dne)
              && BlockHelper.isWooden(worldIn, dnw))) {
            isBuilding = false;
            break assess;
          }
          une = une.north();
          unw = unw.north();
          dne = dne.north();
          dnw = dnw.north();
        }
        if ((BlockHelper.isSolidPlatform(worldIn, une, unw, use, usw)
            && BlockHelper.isSolidPlatform(worldIn, dne, dnw, dse, dsw)
            && BlockHelper.isSolidEWWall(worldIn, une, unw, dne, dnw)
            && BlockHelper.isSolidEWWall(worldIn, use, usw, dse, dsw)
            && BlockHelper.isSolidNSWall(worldIn, une, use, dne, dse)
            && BlockHelper.isSolidNSWall(worldIn, unw, usw, dnw, dsw))) {
          isBuilding = true;
          break assess;
        }
        isBuilding = false;
        break assess;
      case 3: // assume ewWall (South facing Wall - North wall of room)
        une = pos.up().east();
        unw = pos.up().west();
        dne = pos.down().east();
        dnw = pos.down().west();
        if (!(BlockHelper.isWooden(worldIn, une)
            && BlockHelper.isWooden(worldIn, unw)
            && BlockHelper.isWooden(worldIn, dne)
            && BlockHelper.isWooden(worldIn, dnw))) {
          isBuilding = false;
          break assess;
        }
        use = une.south();
        usw = unw.south();
        dse = dne.south();
        dsw = dnw.south();
        if ((BlockHelper.isWooden(worldIn, use)
            && BlockHelper.isWooden(worldIn, usw)
            && BlockHelper.isWooden(worldIn, dse)
            && BlockHelper.isWooden(worldIn, dsw))) {
          isBuilding = false;
          break assess;
        }
        // First, we check Ceiling and Floor
        while (!BlockHelper.isSolidPlatform(worldIn, une, unw, use, usw)) {
          if (!(BlockHelper.isWooden(worldIn, une) && BlockHelper.isWooden(worldIn, unw))) {
            isBuilding = false;
            break assess;
          }
          une = une.up();
          unw = unw.up();
          use = use.up();
          usw = usw.up();
        }
        while (!BlockHelper.isSolidPlatform(worldIn, dne, dnw, dse, dsw)) {
          if (!(BlockHelper.isWooden(worldIn, dne) && BlockHelper.isWooden(worldIn, dnw))) {
            isBuilding = false;
            break assess;
          }
          dne = dne.down();
          dnw = dnw.down();
          dse = dse.down();
          dsw = dsw.down();
        }
        // Now we check the Eastern and Western Walls
        while (!BlockHelper.isSolidNSWall(worldIn, une, use, dne, dse)) {
          if (!(BlockHelper.isWooden(worldIn, une) && BlockHelper.isWooden(worldIn, dne))) {
            isBuilding = false;
            break assess;
          }
          une = une.east();
          use = use.east();
          dne = dne.east();
          dse = dse.east();
        }
        while (!BlockHelper.isSolidNSWall(worldIn, unw, usw, dnw, dsw)) {
          if (!(BlockHelper.isWooden(worldIn, unw) && BlockHelper.isWooden(worldIn, dnw))) {
            isBuilding = false;
            break assess;
          }
          unw = unw.west();
          usw = usw.west();
          dnw = dnw.west();
          dsw = dsw.west();
        }
        // Finally, we check for the South Wall
        while (!BlockHelper.isSolidEWWall(worldIn, use, usw, dse, dsw)) {
          if (!(BlockHelper.isWooden(worldIn, use)
              && BlockHelper.isWooden(worldIn, usw)
              && BlockHelper.isWooden(worldIn, dse)
              && BlockHelper.isWooden(worldIn, dsw))) {
            isBuilding = false;
            break assess;
          }
          use = use.south();
          usw = usw.south();
          dse = dse.south();
          dsw = dsw.south();
        }
        if ((BlockHelper.isSolidPlatform(worldIn, une, unw, use, usw)
            && BlockHelper.isSolidPlatform(worldIn, dne, dnw, dse, dsw)
            && BlockHelper.isSolidEWWall(worldIn, une, unw, dne, dnw)
            && BlockHelper.isSolidEWWall(worldIn, use, usw, dse, dsw)
            && BlockHelper.isSolidNSWall(worldIn, une, use, dne, dse)
            && BlockHelper.isSolidNSWall(worldIn, unw, usw, dnw, dsw))) {
          isBuilding = true;
          break assess;
        }
        isBuilding = false;
        break assess;
      case 4: // assume nsWall (West Facing Wall - Eastern wall of room)
        une = pos.up().north();
        use = pos.up().south();
        dne = pos.down().north();
        dse = pos.down().south();
        if (!(BlockHelper.isWooden(worldIn, une)
            && BlockHelper.isWooden(worldIn, use)
            && BlockHelper.isWooden(worldIn, dne)
            && BlockHelper.isWooden(worldIn, dse))) {
          isBuilding = false;
          break assess;
        }
        unw = une.west();
        usw = use.west();
        dnw = dne.west();
        dsw = dse.west();
        if ((BlockHelper.isWooden(worldIn, unw)
            && BlockHelper.isWooden(worldIn, usw)
            && BlockHelper.isWooden(worldIn, dnw)
            && BlockHelper.isWooden(worldIn, dsw))) {
          isBuilding = false;
          break assess;
        }
        // First we check the Ceiling and Floor
        // First, we check Ceiling and Floor
        while (!BlockHelper.isSolidPlatform(worldIn, une, unw, use, usw)) {
          if (!(BlockHelper.isWooden(worldIn, une) && BlockHelper.isWooden(worldIn, use))) {
            isBuilding = false;
            break assess;
          }
          une = une.up();
          unw = unw.up();
          use = use.up();
          usw = usw.up();
        }
        while (!BlockHelper.isSolidPlatform(worldIn, dne, dnw, dse, dsw)) {
          if (!(BlockHelper.isWooden(worldIn, dne) && BlockHelper.isWooden(worldIn, dse))) {
            isBuilding = false;
            break assess;
          }
          dne = dne.down();
          dnw = dnw.down();
          dse = dse.down();
          dsw = dsw.down();
        }
        // Next we are gonna check the North and South Walls
        while (!BlockHelper.isSolidEWWall(worldIn, une, unw, dne, dnw)) {
          if (!(BlockHelper.isWooden(worldIn, une) && BlockHelper.isWooden(worldIn, dne))) {
            isBuilding = false;
            break assess;
          }
          une = une.north();
          unw = unw.north();
          dne = dne.north();
          dnw = dnw.north();
        }
        while (!BlockHelper.isSolidEWWall(worldIn, use, usw, dse, dsw)) {
          if (!(BlockHelper.isWooden(worldIn, use) && BlockHelper.isWooden(worldIn, dse))) {
            isBuilding = false;
            break assess;
          }
          use = use.south();
          usw = usw.south();
          dse = dse.south();
          dsw = dsw.south();
        }
        // Finally, we move West!
        while (!BlockHelper.isSolidNSWall(worldIn, unw, usw, dnw, dsw)) {
          if (!(BlockHelper.isWooden(worldIn, unw)
              && BlockHelper.isWooden(worldIn, usw)
              && BlockHelper.isWooden(worldIn, dnw)
              && BlockHelper.isWooden(worldIn, dsw))) {
            isBuilding = false;
            break assess;
          }
          unw = unw.west();
          usw = usw.west();
          dnw = dnw.west();
          dsw = dsw.west();
        }
        if ((BlockHelper.isSolidPlatform(worldIn, une, unw, use, usw)
            && BlockHelper.isSolidPlatform(worldIn, dne, dnw, dse, dsw)
            && BlockHelper.isSolidEWWall(worldIn, une, unw, dne, dnw)
            && BlockHelper.isSolidEWWall(worldIn, use, usw, dse, dsw)
            && BlockHelper.isSolidNSWall(worldIn, une, use, dne, dse)
            && BlockHelper.isSolidNSWall(worldIn, unw, usw, dnw, dsw))) {
          isBuilding = true;
          break assess;
        }
        isBuilding = false;
        break assess;
      case 5: // assume nsWall (East Facing Wall - Western wall of room)
        unw = pos.up().north();
        usw = pos.up().south();
        dnw = pos.down().north();
        dsw = pos.down().south();
        if (!(BlockHelper.isWooden(worldIn, unw)
            && BlockHelper.isWooden(worldIn, usw)
            && BlockHelper.isWooden(worldIn, dnw)
            && BlockHelper.isWooden(worldIn, dsw))) {
          isBuilding = false;
          break assess;
        }
        une = unw.east();
        use = usw.east();
        dne = dnw.east();
        dse = dsw.east();
        if ((BlockHelper.isWooden(worldIn, une)
            && BlockHelper.isWooden(worldIn, use)
            && BlockHelper.isWooden(worldIn, dne)
            && BlockHelper.isWooden(worldIn, dse))) {
          isBuilding = false;
          break assess;
        }
        // First we check the Ceiling and Floor
        // First, we check Ceiling and Floor
        while (!BlockHelper.isSolidPlatform(worldIn, une, unw, use, usw)) {
          if (!(BlockHelper.isWooden(worldIn, unw) && BlockHelper.isWooden(worldIn, usw))) {
            isBuilding = false;
            break assess;
          }
          une = une.up();
          unw = unw.up();
          use = use.up();
          usw = usw.up();
        }
        while (!BlockHelper.isSolidPlatform(worldIn, dne, dnw, dse, dsw)) {
          if (!(BlockHelper.isWooden(worldIn, dnw) && BlockHelper.isWooden(worldIn, dsw))) {
            isBuilding = false;
            break assess;
          }
          dne = dne.down();
          dnw = dnw.down();
          dse = dse.down();
          dsw = dsw.down();
        }
        // Next we are gonna check the North and South Walls
        while (!BlockHelper.isSolidEWWall(worldIn, une, unw, dne, dnw)) {
          if (!(BlockHelper.isWooden(worldIn, unw) && BlockHelper.isWooden(worldIn, dnw))) {
            isBuilding = false;
            break assess;
          }
          une = une.north();
          unw = unw.north();
          dne = dne.north();
          dnw = dnw.north();
        }
        while (!BlockHelper.isSolidEWWall(worldIn, use, usw, dse, dsw)) {
          if (!(BlockHelper.isWooden(worldIn, usw) && BlockHelper.isWooden(worldIn, dsw))) {
            isBuilding = false;
            break assess;
          }
          use = use.south();
          usw = usw.south();
          dse = dse.south();
          dsw = dsw.south();
        }
        // Finally, we move East!
        while (!BlockHelper.isSolidNSWall(worldIn, une, use, dne, dse)) {
          if (!(BlockHelper.isWooden(worldIn, une)
              && BlockHelper.isWooden(worldIn, use)
              && BlockHelper.isWooden(worldIn, dne)
              && BlockHelper.isWooden(worldIn, dse))) {
            isBuilding = false;
            break assess;
          }
          une = une.east();
          use = use.east();
          dne = dne.east();
          dse = dse.east();
        }
        if ((BlockHelper.isSolidPlatform(worldIn, une, unw, use, usw)
            && BlockHelper.isSolidPlatform(worldIn, dne, dnw, dse, dsw)
            && BlockHelper.isSolidEWWall(worldIn, une, unw, dne, dnw)
            && BlockHelper.isSolidEWWall(worldIn, use, usw, dse, dsw)
            && BlockHelper.isSolidNSWall(worldIn, une, use, dne, dse)
            && BlockHelper.isSolidNSWall(worldIn, unw, usw, dnw, dsw))) {
          isBuilding = true;
          break assess;
        }
        isBuilding = false;
        break assess;
    }
    NPCHouse house = new NPCHouse(unw, une, usw, use, dnw, dne, dsw, dse, isBuilding);
    return house;
  }