@Override
 public MapTile[] getTiles(Location loc0, Location loc1) {
   DynmapWorld world = MapManager.mapman.getWorld(loc0.getWorld().getName());
   HashSet<MapTile> tiles = new HashSet<MapTile>();
   Vector3D blocks[] = new Vector3D[] {new Vector3D(), new Vector3D()};
   /* Get ordered point - 0=minX,Y,Z, 1=maxX,Y,Z */
   if (loc0.getBlockX() < loc1.getBlockX()) {
     blocks[0].x = loc0.getBlockX();
     blocks[1].x = loc1.getBlockX() + 1;
   } else {
     blocks[0].x = loc1.getBlockX();
     blocks[1].x = loc0.getBlockX() + 1;
   }
   if (loc0.getBlockY() < loc1.getBlockY()) {
     blocks[0].y = loc0.getBlockY();
     blocks[1].y = loc1.getBlockY() + 1;
   } else {
     blocks[0].y = loc1.getBlockY();
     blocks[1].y = loc0.getBlockY() + 1;
   }
   if (loc0.getBlockZ() < loc1.getBlockZ()) {
     blocks[0].z = loc0.getBlockZ();
     blocks[1].z = loc1.getBlockZ() + 1;
   } else {
     blocks[0].z = loc1.getBlockZ();
     blocks[1].z = loc0.getBlockZ() + 1;
   }
   Vector3D corner = new Vector3D();
   Vector3D tcorner = new Vector3D();
   int mintilex = Integer.MAX_VALUE;
   int maxtilex = Integer.MIN_VALUE;
   int mintiley = Integer.MAX_VALUE;
   int maxtiley = Integer.MIN_VALUE;
   /* Loop through corners of the prism */
   for (int i = 0; i < 2; i++) {
     corner.x = blocks[i].x;
     for (int j = 0; j < 2; j++) {
       corner.y = blocks[j].y;
       for (int k = 0; k < 2; k++) {
         corner.z = blocks[k].z;
         world_to_map.transform(corner, tcorner); /* Get map coordinate of corner */
         int tx = (int) Math.floor(tcorner.x / tileWidth);
         int ty = (int) Math.floor(tcorner.y / tileWidth);
         if (mintilex > tx) mintilex = tx;
         if (maxtilex < tx) maxtilex = tx;
         if (mintiley > ty) mintiley = ty;
         if (maxtiley < ty) maxtiley = ty;
       }
     }
   }
   /* Now, add the tiles for the ranges - not perfect, but it works (some extra tiles on corners possible) */
   for (int i = mintilex; i <= maxtilex; i++) {
     for (int j = mintiley; j < maxtiley; j++) {
       addTile(tiles, world, i, j);
     }
   }
   return tiles.toArray(new MapTile[tiles.size()]);
 }
  @Override
  public MapTile[] getTiles(Location loc) {
    DynmapWorld world = MapManager.mapman.getWorld(loc.getWorld().getName());
    HashSet<MapTile> tiles = new HashSet<MapTile>();
    Vector3D block = new Vector3D();
    block.setFromLocation(loc); /* Get coordinate for block */
    Vector3D corner = new Vector3D();
    /* Loop through corners of the cube */
    for (int i = 0; i < 2; i++) {
      double inity = block.y;
      for (int j = 0; j < 2; j++) {
        double initz = block.z;
        for (int k = 0; k < 2; k++) {
          world_to_map.transform(block, corner); /* Get map coordinate of corner */
          addTile(
              tiles,
              world,
              (int) Math.floor(corner.x / tileWidth),
              (int) Math.floor(corner.y / tileHeight));

          block.z += 1;
        }
        block.z = initz;
        block.y += 1;
      }
      block.y = inity;
      block.x += 1;
    }
    return tiles.toArray(new MapTile[tiles.size()]);
  }