- Баллы
- 96
- Имя в Minecraft
- sqdFendy
Что мне нужно? Заполнить определенную область блоками, похожая команда есть в WE //set, но мне нужен сам код как это сделать?
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Тебе нужна формула, которая чаще всего выражается циклами, примеры можешь глянуть в WE, там есть и кубоид и сфера и полая сфера.После прохождения по формуле добавляешь в массив с типом Location каждый входящий блок.Дальше заполняешь эти значения нужным блоком.Что мне нужно? Заполнить определенную область блоками, похожая команда есть в WE //set, но мне нужен сам код как это сделать?
слишком костыль.Тебе нужна формула, которая чаще всего выражается циклами, примеры можешь глянуть в WE, там есть и кубоид и сфера и полая сфера.После прохождения по формуле добавляешь в массив с типом Location каждый входящий блок.Дальше заполняешь эти значения нужным блоком.
Вот код из алгоритма выше, только создает кубоид он на блоке(targetBlock), на который мы смотрим:слишком костыль.
Vector
Block targetBlock = getTargetBlock(player, 100);
for (int x = 0; x < 5; x++)
for (int y = 0; y < 5; y++)
for (int z = 0; z < 5; z++) {
int targetX = targetBlock.getX();
int targetY = targetBlock.getY();
int targetZ = targetBlock.getZ();
Location blockLocation = new Location(targetBlock.getWorld(), targetX + x, targetY + y, targetZ + z);
blockLocation.getBlock().setType(Material.BRICK);
}

Вот код из алгоритма выше, только создает кубоид он на блоке(targetBlock), на который мы смотрим:
Вот результат выполнения:Java:Block targetBlock = getTargetBlock(player, 100); for (int x = 0; x < 5; x++) for (int y = 0; y < 5; y++) for (int z = 0; z < 5; z++) { int targetX = targetBlock.getX(); int targetY = targetBlock.getY(); int targetZ = targetBlock.getZ(); Location blockLocation = new Location(targetBlock.getWorld(), targetX + x, targetY + y, targetZ + z); blockLocation.getBlock().setType(Material.BRICK); }
Как реализовать через Vector?
Вот код из алгоритма выше, только создает кубоид он на блоке(targetBlock), на который мы смотрим:
Вот результат выполнения:Java:Block targetBlock = getTargetBlock(player, 100); for (int x = 0; x < 5; x++) for (int y = 0; y < 5; y++) for (int z = 0; z < 5; z++) { int targetX = targetBlock.getX(); int targetY = targetBlock.getY(); int targetZ = targetBlock.getZ(); Location blockLocation = new Location(targetBlock.getWorld(), targetX + x, targetY + y, targetZ + z); blockLocation.getBlock().setType(Material.BRICK); }
Как реализовать через Vector?
Это радиус.У меня кастомная реализация этого метода, так как стандартный устарел и может работать неправильно.Благодарствую, завтра попробую.
Можно еще уточнить. Что означает цифра 100, в получении блока на который смотрит игрок?
if (getTargetBlock(player, 100) != null && getTargetBlock(player, 100).getType() != Material.AIR) {
Block targetBlock = getTargetBlock(player, 100);
ArrayList<Location> locationBlocks = new ArrayList<>();
for (int x = 0; x < 5; x++)
for (int y = 0; y < 5; y++)
for (int z = 0; z < 5; z++) {
int targetX = targetBlock.getX();
int targetY = targetBlock.getY();
int targetZ = targetBlock.getZ();
locationBlocks.add(new Location(targetBlock.getWorld(), targetX + x, targetY + y, targetZ + z));
locationBlocks.add(new Location(targetBlock.getWorld(), targetX + x, targetY - y, targetZ - z));
locationBlocks.add(new Location(targetBlock.getWorld(), targetX + x, targetY - y, targetZ + z));
locationBlocks.add(new Location(targetBlock.getWorld(), targetX + x, targetY + y, targetZ - z));
locationBlocks.add(new Location(targetBlock.getWorld(), targetX - x, targetY - y, targetZ - z));
locationBlocks.add(new Location(targetBlock.getWorld(), targetX - x, targetY + y, targetZ - z));
locationBlocks.add(new Location(targetBlock.getWorld(), targetX - x, targetY - y, targetZ + z));
locationBlocks.add(new Location(targetBlock.getWorld(), targetX - x, targetY + y, targetZ + z));
}
for(Location blockLoc : locationBlocks)
blockLoc.getBlock().setType(Material.BRICK);
}
Удваиваю. Четыре цикла в основном быстрее трёх.Тут важна производительность, от нее и следует отталкиваться.
Кому интересно, проведет юнит тесты, покопается.