Помогите Сгенерировать рандомную локацию в море

  • Автор темы Автор темы reZero
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

reZero

Активный участник
Пользователь
Баллы
76
Вопрос в шапке.
Пробую это
HTML:
private Location generateLocation() {
        Location resultLocation;
        do {
            final int randomX = getRandom(getMinX(), getMaxX());
            final int randomZ = getRandom(getMinZ(), getMaxZ());
            final World world = getWorld();
            resultLocation = new Location(world, randomX, world.getHighestBlockYAt(randomX, randomZ) + 2.0D, randomZ);
        } while (!resultLocation.getBlock().isLiquid());
        return resultLocation;
    }
HTML:
private int getRandom(final int min, final int max) {
        return ThreadLocalRandom.current().nextInt() * (max - min + 1) + min;
    }
Но это приводит к thread death.
Как мне решить задачу эффективнее?
 
Каждая проверка блока требует подгрузки чанка, и в итоге ты сотни таковых за раз прогружаешь. Ограничь количество попыток за раз и разраничь их шедулером.
return ThreadLocalRandom.current().nextInt() * (max - min + 1) + min;
Упрости до nextInt(min, max).
 
Не понимаю. До какого числа ограничить и как?
Как уже написал - шедулером. Можно runTaskTimer запустить. Сколько именно попыток делать - решай уж сам, тут я мало чем помогу, но для начала я бы ставил на 2-3. Как только место нашлось - task.cancel() и делать с локацией что нужно; иначе добивать количество попыток и позволить шедулеру перезапустить таску.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх