Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

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

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

    netipok Ньюби

    Баллы:
    1
    Имя в Minecraft:
    UserGames_
    Задача: Есть куб размером 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}
     

    Вложения:

  2. Хостинг MineCraft
    <
  3. Akat

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

    Баллы:
    61
    Имя в Minecraft:
    2FORWORD2
    Вряд ли тут люди будут бесплатно делать за тебя готовый код, но если ещё актуально, то вот:

    Код:
    public void calculateSides(Location centralBlock, int size) {
            int centralBlockX = centralBlock.getBlockX();
            int centralBlockY = centralBlock.getBlockY();
            int centralBlockZ = centralBlock.getBlockZ();
    
            Map<String, List<Location>> coordinates = new HashMap<>();
            int halfSize = size / 2;
    
            for (int side = 0; side < 6; side++) {
                List<Location> locations = new ArrayList<>();
                String sideName = "";
    
                switch (side) {
                    case 0:
                        sideName = "Top";
                        for (int x = -halfSize + 1; x <= halfSize - 1; x++) {
                            for (int z = -halfSize + 1; z <= halfSize - 1; z++) {
                                locations.add(new Location(centralBlock.getWorld(), centralBlockX + x, centralBlockY + halfSize, centralBlockZ + z));
                            }
                        }
                        break;
                    case 1:
                        sideName = "Bottom";
                        for (int x = -halfSize + 1; x <= halfSize - 1; x++) {
                            for (int z = -halfSize + 1; z <= halfSize - 1; z++) {
                                locations.add(new Location(centralBlock.getWorld(), centralBlockX + x, centralBlockY - halfSize, centralBlockZ + z));
                            }
                        }
                        break;
                    case 2:
                        sideName = "East";
                        for (int y = -halfSize + 1; y <= halfSize - 1; y++) {
                            for (int z = -halfSize + 1; z <= halfSize - 1; z++) {
                                locations.add(new Location(centralBlock.getWorld(), centralBlockX + halfSize, centralBlockY + y, centralBlockZ + z));
                            }
                        }
                        break;
                    case 3:
                        sideName = "West";
                        for (int y = -halfSize + 1; y <= halfSize - 1; y++) {
                            for (int z = -halfSize + 1; z <= halfSize - 1; z++) {
                                locations.add(new Location(centralBlock.getWorld(), centralBlockX - halfSize, centralBlockY + y, centralBlockZ + z));
                            }
                        }
                        break;
                    case 4:
                        sideName = "North";
                        for (int x = -halfSize + 1; x <= halfSize - 1; x++) {
                            for (int y = -halfSize + 1; y <= halfSize - 1; y++) {
                                locations.add(new Location(centralBlock.getWorld(), centralBlockX + x, centralBlockY + y, centralBlockZ - halfSize));
                            }
                        }
                        break;
                    case 5:
                        sideName = "South";
                        for (int x = -halfSize + 1; x <= halfSize - 1; x++) {
                            for (int y = -halfSize + 1; y <= halfSize - 1; y++) {
                                locations.add(new Location(centralBlock.getWorld(), centralBlockX + x, centralBlockY + y, centralBlockZ + halfSize));
                            }
                        }
                        break;
                }
                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());
                }
            }
        }
     

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