Ejemplo n.º 1
0
 private Optional<ChunkCoordinates> findValidTombstoneLocation(EntityPlayer player) {
   final int maxRadius = 100;
   /** Search an increasing square box (only check edge) for a valid location */
   for (int radius = 0; radius < maxRadius; radius++) {
     List<ChunkCoordinates> validLocations = new ArrayList<ChunkCoordinates>();
     validLocations.addAll(searchXPlaneAt(-radius, radius, player));
     validLocations.addAll(searchXPlaneAt(radius, radius, player));
     validLocations.addAll(searchZPlaneAt(-radius, radius, player));
     validLocations.addAll(searchZPlaneAt(radius, radius, player));
     validLocations.addAll(searchYPlaneAt(-radius, radius, player));
     validLocations.addAll(searchYPlaneAt(radius, radius, player));
     ChunkCoordinates closestPoint = null;
     float bestDistance = 0;
     for (ChunkCoordinates chunkCoordinates : validLocations) {
       if (closestPoint != null) {
         float distance =
             chunkCoordinates.getDistanceSquared(
                 (int) player.posX, (int) player.posY, (int) player.posZ);
         if (distance < bestDistance) {
           bestDistance = distance;
           closestPoint = chunkCoordinates;
         }
       } else {
         closestPoint = chunkCoordinates;
         bestDistance =
             closestPoint.getDistanceSquared(
                 (int) player.posX, (int) player.posY, (int) player.posZ);
       }
     }
     if (closestPoint != null) {
       return Optional.of(closestPoint);
     }
   }
   return Optional.absent();
 }