1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Получить координаты всех блоков всех сторон куба

Тема в разделе "Разработка плагинов для новичков", создана пользователем UserGames, 20 июл 2023.

  1. Автор темы
    UserGames

    UserGames Активный участник

    Баллы:
    61
    Задача: Есть куб размером 5x5x5, внутри он пустой, у него всегда будет черная обводка, но цвет стороны может быть разный (скрин приложил ниже). По координатам центрального блока в кубе мне надо получить координаты каждого блока каждой из сторон, не учитывая обводку.

    Я написал код, который с этим справляется, но я в ручную прописывал все координаты. Для куба 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}
     

    Вложения:

Поделиться этой страницей