UserGames
Активный участник
- Баллы
- 61
Задача: Есть куб размером 5x5x5, внутри он пустой, у него всегда будет черная обводка, но цвет стороны может быть разный (скрин приложил ниже). По координатам центрального блока в кубе мне надо получить координаты каждого блока каждой из сторон, не учитывая обводку.
Я написал код, который с этим справляется, но я в ручную прописывал все координаты. Для куба 5x5x5 это не проблема, а вот если куб будет 7x7x7 или выше, вручную придётся прописать в несколько, а то и десятков раз больше, еще и есть вероятность ошибится.
Прошу знающих людей помочь в написании улучшенного кода, чтобы он независимо от размера мог выводить то что я описал выше. (размер я буду знать, поэтому его можно использовать)
Мой код и вывод я приложил ниже.
Я написал код, который с этим справляется, но я в ручную прописывал все координаты. Для куба 5x5x5 это не проблема, а вот если куб будет 7x7x7 или выше, вручную придётся прописать в несколько, а то и десятков раз больше, еще и есть вероятность ошибится.
Прошу знающих людей помочь в написании улучшенного кода, чтобы он независимо от размера мог выводить то что я описал выше. (размер я буду знать, поэтому его можно использовать)
Мой код и вывод я приложил ниже.
Код:
private void calculateSides (Location centralBlock) {
int centralBlockX = centralBlock.getBlockX();
int centralBlockY = centralBlock.getBlockY();
int centralBlockZ = centralBlock.getBlockZ();
// Создаем Map для хранения координат каждой стороны
Map<String, List<Location>> coordinates = new HashMap<>();
// Перебираем каждую сторону куба
for (int side = 0; side < 6; side++) {
// Изменяем координаты в зависимости от стороны
int x = centralBlockX;
int y = centralBlockY;
int z = centralBlockZ;
boolean booleanX = true;
boolean booleanY = true;
boolean booleanZ = true;
String sideName = "";
switch (side) {
case 0: // Сторона "верх"
y += 2;
booleanY = false;
sideName = "Top";
break;
case 1: // Сторона "низ"
y -= 2;
booleanY = false;
sideName = "Bottom";
break;
case 2: // Сторона "восток"
x += 2;
booleanX = false;
sideName = "East";
break;
case 3: // Сторона "запад"
x -= 2;
booleanX = false;
sideName = "West";
break;
case 4: // Сторона "север"
z += 2;
booleanZ = false;
sideName = "North";
break;
case 5: // Сторона "юг"
z -= 2;
booleanZ = false;
sideName = "South";
break;
}
List<Location> locations = new ArrayList<>();
if(!booleanY) {
locations.add(new Location(centralBlock.getWorld(), x, y, z));
locations.add(new Location(centralBlock.getWorld(), x, y, z - 1));
locations.add(new Location(centralBlock.getWorld(), x, y, z + 1));
locations.add(new Location(centralBlock.getWorld(), x - 1, y, z));
locations.add(new Location(centralBlock.getWorld(), x - 1, y, z + 1));
locations.add(new Location(centralBlock.getWorld(), x - 1, y, z - 1));
locations.add(new Location(centralBlock.getWorld(), x + 1, y, z));
locations.add(new Location(centralBlock.getWorld(), x + 1, y, z - 1));
locations.add(new Location(centralBlock.getWorld(), x + 1, y, z + 1));
} else if (!booleanX) {
locations.add(new Location(centralBlock.getWorld(), x, y, z));
locations.add(new Location(centralBlock.getWorld(), x, y, z - 1));
locations.add(new Location(centralBlock.getWorld(), x, y, z + 1));
locations.add(new Location(centralBlock.getWorld(), x, y - 1, z));
locations.add(new Location(centralBlock.getWorld(), x, y - 1, z + 1));
locations.add(new Location(centralBlock.getWorld(), x, y - 1, z - 1));
locations.add(new Location(centralBlock.getWorld(), x, y + 1, z));
locations.add(new Location(centralBlock.getWorld(), x, y + 1, z - 1));
locations.add(new Location(centralBlock.getWorld(), x, y + 1, z + 1));
} else if (!booleanZ) {
locations.add(new Location(centralBlock.getWorld(), x, y, z));
locations.add(new Location(centralBlock.getWorld(), x - 1, y, z));
locations.add(new Location(centralBlock.getWorld(), x + 1, y, z));
locations.add(new Location(centralBlock.getWorld(), x, y - 1, z));
locations.add(new Location(centralBlock.getWorld(), x + 1, y - 1, z));
locations.add(new Location(centralBlock.getWorld(), x - 1, y - 1, z));
locations.add(new Location(centralBlock.getWorld(), x, y + 1, z));
locations.add(new Location(centralBlock.getWorld(), x - 1, y + 1, z));
locations.add(new Location(centralBlock.getWorld(), x + 1, y + 1, z));
}
coordinates.put(sideName, locations);
}
for (String key : coordinates.keySet()) {
Bukkit.getLogger().info(key);
for(Location location : coordinates.get(key)) {
Block block = location.getBlock();
Bukkit.getLogger().info("X - " + block.getX() + " Y - " + block.getY() + " Z - " + block.getZ() + " Block: " + block.toString());
}
}
}
Код:
[00:05:15 INFO]: Top
[00:05:15 INFO]: X - -10 Y - 99 Z - -7 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-10,y=99,z=-7,type=CONCRETE,data=11}
[00:05:15 INFO]: X - -10 Y - 99 Z - -8 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-10,y=99,z=-8,type=CONCRETE,data=11}
[00:05:15 INFO]: X - -10 Y - 99 Z - -6 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-10,y=99,z=-6,type=CONCRETE,data=11}
[00:05:15 INFO]: X - -11 Y - 99 Z - -7 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-11,y=99,z=-7,type=CONCRETE,data=11}
[00:05:15 INFO]: X - -11 Y - 99 Z - -6 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-11,y=99,z=-6,type=CONCRETE,data=11}
[00:05:15 INFO]: X - -11 Y - 99 Z - -8 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-11,y=99,z=-8,type=CONCRETE,data=11}
[00:05:15 INFO]: X - -9 Y - 99 Z - -7 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-9,y=99,z=-7,type=CONCRETE,data=11}
[00:05:15 INFO]: X - -9 Y - 99 Z - -8 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-9,y=99,z=-8,type=CONCRETE,data=11}
[00:05:15 INFO]: X - -9 Y - 99 Z - -6 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-9,y=99,z=-6,type=CONCRETE,data=11}[00:05:15 INFO]: West
[00:05:15 INFO]: X - -12 Y - 97 Z - -7 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-12,y=97,z=-7,type=CONCRETE,data=10}
[00:05:15 INFO]: X - -12 Y - 97 Z - -8 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-12,y=97,z=-8,type=CONCRETE,data=10}
[00:05:15 INFO]: X - -12 Y - 97 Z - -6 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-12,y=97,z=-6,type=CONCRETE,data=10}
[00:05:15 INFO]: X - -12 Y - 96 Z - -7 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-12,y=96,z=-7,type=CONCRETE,data=10}
[00:05:15 INFO]: X - -12 Y - 96 Z - -6 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-12,y=96,z=-6,type=CONCRETE,data=10}
[00:05:15 INFO]: X - -12 Y - 96 Z - -8 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-12,y=96,z=-8,type=CONCRETE,data=10}
[00:05:15 INFO]: X - -12 Y - 98 Z - -7 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-12,y=98,z=-7,type=CONCRETE,data=10}
[00:05:15 INFO]: X - -12 Y - 98 Z - -8 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-12,y=98,z=-8,type=CONCRETE,data=10}
[00:05:15 INFO]: X - -12 Y - 98 Z - -6 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-12,y=98,z=-6,type=CONCRETE,data=10}
[00:05:15 INFO]: South
[00:05:15 INFO]: X - -10 Y - 97 Z - -9 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-10,y=97,z=-9,type=CONCRETE,data=1}
[00:05:15 INFO]: X - -11 Y - 97 Z - -9 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-11,y=97,z=-9,type=CONCRETE,data=1}
[00:05:15 INFO]: X - -9 Y - 97 Z - -9 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-9,y=97,z=-9,type=CONCRETE,data=1}
[00:05:15 INFO]: X - -10 Y - 96 Z - -9 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-10,y=96,z=-9,type=CONCRETE,data=1}
[00:05:15 INFO]: X - -9 Y - 96 Z - -9 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-9,y=96,z=-9,type=CONCRETE,data=1}
[00:05:15 INFO]: X - -11 Y - 96 Z - -9 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-11,y=96,z=-9,type=CONCRETE,data=1}
[00:05:15 INFO]: X - -10 Y - 98 Z - -9 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-10,y=98,z=-9,type=CONCRETE,data=1}
[00:05:15 INFO]: X - -11 Y - 98 Z - -9 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-11,y=98,z=-9,type=CONCRETE,data=1}
[00:05:15 INFO]: X - -9 Y - 98 Z - -9 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-9,y=98,z=-9,type=CONCRETE,data=1}
[00:05:15 INFO]: Bottom
[00:05:15 INFO]: X - -10 Y - 95 Z - -7 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-10,y=95,z=-7,type=CONCRETE,data=14}
[00:05:15 INFO]: X - -10 Y - 95 Z - -8 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-10,y=95,z=-8,type=CONCRETE,data=14}
[00:05:15 INFO]: X - -10 Y - 95 Z - -6 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-10,y=95,z=-6,type=CONCRETE,data=14}
[00:05:15 INFO]: X - -11 Y - 95 Z - -7 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-11,y=95,z=-7,type=CONCRETE,data=14}
[00:05:15 INFO]: X - -11 Y - 95 Z - -6 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-11,y=95,z=-6,type=CONCRETE,data=14}
[00:05:15 INFO]: X - -11 Y - 95 Z - -8 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-11,y=95,z=-8,type=CONCRETE,data=14}
[00:05:15 INFO]: X - -9 Y - 95 Z - -7 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-9,y=95,z=-7,type=CONCRETE,data=14}
[00:05:15 INFO]: X - -9 Y - 95 Z - -8 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-9,y=95,z=-8,type=CONCRETE,data=14}
[00:05:15 INFO]: X - -9 Y - 95 Z - -6 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-9,y=95,z=-6,type=CONCRETE,data=14}
[00:05:15 INFO]: North
[00:05:15 INFO]: X - -10 Y - 97 Z - -5 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-10,y=97,z=-5,type=CONCRETE,data=4}
[00:05:15 INFO]: X - -11 Y - 97 Z - -5 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-11,y=97,z=-5,type=CONCRETE,data=4}
[00:05:15 INFO]: X - -9 Y - 97 Z - -5 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-9,y=97,z=-5,type=CONCRETE,data=4}
[00:05:15 INFO]: X - -10 Y - 96 Z - -5 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-10,y=96,z=-5,type=CONCRETE,data=4}
[00:05:15 INFO]: X - -9 Y - 96 Z - -5 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-9,y=96,z=-5,type=CONCRETE,data=4}
[00:05:15 INFO]: X - -11 Y - 96 Z - -5 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-11,y=96,z=-5,type=CONCRETE,data=4}
[00:05:15 INFO]: X - -10 Y - 98 Z - -5 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-10,y=98,z=-5,type=CONCRETE,data=4}
[00:05:15 INFO]: X - -11 Y - 98 Z - -5 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-11,y=98,z=-5,type=CONCRETE,data=4}
[00:05:15 INFO]: X - -9 Y - 98 Z - -5 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-9,y=98,z=-5,type=CONCRETE,data=4}
[00:05:15 INFO]: East
[00:05:15 INFO]: X - -8 Y - 97 Z - -7 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-8,y=97,z=-7,type=CONCRETE,data=2}
[00:05:15 INFO]: X - -8 Y - 97 Z - -8 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-8,y=97,z=-8,type=CONCRETE,data=2}
[00:05:15 INFO]: X - -8 Y - 97 Z - -6 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-8,y=97,z=-6,type=CONCRETE,data=2}
[00:05:15 INFO]: X - -8 Y - 96 Z - -7 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-8,y=96,z=-7,type=CONCRETE,data=2}
[00:05:15 INFO]: X - -8 Y - 96 Z - -6 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-8,y=96,z=-6,type=CONCRETE,data=2}
[00:05:15 INFO]: X - -8 Y - 96 Z - -8 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-8,y=96,z=-8,type=CONCRETE,data=2}
[00:05:15 INFO]: X - -8 Y - 98 Z - -7 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-8,y=98,z=-7,type=CONCRETE,data=2}
[00:05:15 INFO]: X - -8 Y - 98 Z - -8 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-8,y=98,z=-8,type=CONCRETE,data=2}
[00:05:15 INFO]: X - -8 Y - 98 Z - -6 Block: CraftBlock{chunk=CraftChunk{x=-1z=-1},x=-8,y=98,z=-6,type=CONCRETE,data=2}