Есть код на поиск локации но дело в том что он чаще всего занимает время более секунды а я видел где это занимает максимум 366 миллисекунд
Java:
public Location getRandomSolidAllowedLocation(Random random, int xMin, int xMax, int zMin, int zMax, World world, int centerX, int centerZ, int yMax, int yMin, Collection<Material> blockList, int maxTry){
if(world == null || random == null || maxTry < 1) return null;
long startTime = System.nanoTime();
for(int tryFind = 0; tryFind < maxTry; tryFind++){
Location location = generalRtpComponent.getRandomLocation(xMin,xMax,zMin,zMax,random,centerX,centerZ,world);
Chunk chunk = location.getChunk();
if(!chunk.isLoaded()) chunk.load();
if(!world.getWorldBorder().isInside(location)) continue;
location = generalRtpComponent.getSolidLocation(location,yMax,yMin);
if(location == null) continue;
if(blockList.contains(location.getBlock().getType())) continue;
location.setY(location.getBlockY()+1);
long endTime = System.nanoTime();
long duration = (endTime - startTime) / 1_000_000;
System.out.println("Время выполнения метода: " + duration + " мс");
return location;
}
return null;
}
public Location getSolidLocation(Location location, int yMax, int yMin){
for(int y = yMax;y > yMin;y--){
location.setY(y);
Material material = location.getBlock().getType();
if(material.isAir()) continue;
return location;
}
return null;
}
public Location getRandomLocation(int xMin, int xMax, int zMin, int zMax, Random random, int centerX, int centerZ, World world){
int x = SimpleUtil.rndInt(xMin,xMax,random);
int z = SimpleUtil.rndInt(zMin,zMax,random);
int xSign = (random.nextBoolean() ? -1 : 1);
int zSign = (random.nextBoolean() ? -1 : 1);
x = centerX + (x * xSign);
z = centerZ + (z * zSign);
return new Location(world,x,0,z);
}