Помогите Спавн сундука в рандомном месте

  • Автор темы Автор темы ShishKA
  • Дата начала Дата начала

ShishKA

Участник
Баллы
31
Имя в Minecraft
LoveKartoshka
Помогите плиз, по команде должен спавнится сундук в рандомном месте мира.
 
Помогите плиз, по команде должен спавнится сундук в рандомном месте мира.
java.util.Random
Код:
World w = Bukkit.getWorld("world");
Location loc = new Location(w, RANDOM_X, RANDOM_Y, RANDOM_Z);
Block b = w.getBlockAt(loc);
b.setType(Material.CHEST);

Я особо не знаю как пользоваться этой библиотекой, но я думаю что можно так:
Код:
int x = new Random().nextInt(100000);
int y = new Random().nextInt(256);
int z = new Random().nextInt(100000);

Я только что проверил оно возращает только положительно число.
Я думаю что это можно исправить таким кодом:
Код:
Random random = new Random();
int randomX, y, randomZ;
boolean x, z;
       
x = random.nextBoolean();
z = random.nextBoolean();
       
randomX = random.nextInt(100000);
randomZ = random.nextInt(100000);
y = random.nextInt(256);
       
if (!x) {
    randomX = -randomX;
}
if (!z) {
    randomZ = -randomZ;
}
 
Последнее редактирование:
java.util.Random
Код:
World w = Bukkit.getWorld("world");
Location loc = new Location(w, RANDOM_X, RANDOM_Y, RANDOM_Z);
Block b = w.getBlockAt(loc);
b.setType(Material.CHEST);

Я особо не знаю как пользоваться этой библиотекой, но я думаю что можно так:
Код:
int x = new Random().nextInt(100000);
int y = new Random().nextInt(256);
int z = new Random().nextInt(100000);

Я только что проверил оно возращает только положительно число.
Я думаю что это можно исправить таким кодом:
Код:
Random random = new Random();
int randomX, y, randomZ;
boolean x, z;
     
x = random.nextBoolean();
z = random.nextBoolean();
     
randomX = random.nextInt(100000);
randomZ = random.nextInt(100000);
y = random.nextInt(256);
     
if (!x) {
    randomX = -randomX;
}
if (!z) {
    randomZ = -randomZ;
}
1. Используйте ThreadLocalRandom.
2. Генерируйте координаты так: ThreadLocalRandom.current().nextInt(-минимум, максимум);
3. Если нужно генерировать только на самой высокой точке в данной локации, то устанавливайте Y: getHighestBlockAt().getLocation().getY(); (возможно нужно добавить +1, нет возможности проверить)
 
Как то так.
Код:
    public Location random(Location сenter, int radius) {
        ThreadLocalRandom rd = ThreadLocalRandom.current();
        int x = rd.nextInt(radius + 1) - radius / 2;
        int z = rd.nextInt(radius + 1) - radius / 2;
        Location loc = сenter.clone();
        loc.add(x, 0, z);
        int y = loc.getWorld().getHighestBlockYAt(loc.getBlockX(), loc.getBlockZ());
        loc.setY(y + 1);
        return loc;
    }
 
Назад
Верх