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

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

Discussion in 'Разработка плагинов для новичков' started by netipok, Jul 20, 2023.

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

    netipok Ньюби

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

    Я написал код, который с этим справляется, но я в ручную прописывал все координаты. Для куба 5x5x5 это не проблема, а вот если куб будет 7x7x7 или выше, вручную придётся прописать в несколько, а то и десятков раз больше, еще и есть вероятность ошибится.

    Прошу знающих людей помочь в написании улучшенного кода, чтобы он независимо от размера мог выводить то что я описал выше. (размер я буду знать, поэтому его можно использовать)

    Мой код и вывод я приложил ниже.

    Code:
       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());
                }
            }
        }
    Code:
    [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}
     

    Attached Files:

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

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

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

    Code:
    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());
                }
            }
        }
     

Share This Page