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

Помогите Как генерировать остров для игрока?

Тема в разделе "Разработка плагинов для новичков", создана пользователем KostyanDeveloper, 12 май 2020.

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

    KostyanDeveloper Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    KostyanChannel
    Здравствуйте, я хочу генерировать остров для игрока (по типу SkyBlock), допустим есть схематика острова. Как можно сделать, чтобы при создании острова она вставилась в пустое место в мире (расстояние примерно 48 чанков между ними) и телепортировало игрока туда?
     
  2. Thin_Troll

    Thin_Troll Активный участник Пользователь

    Баллы:
    76
    самопис
    Смотреть раздел, да, да. косяк
     
    Последнее редактирование: 14 май 2020
  3. Lemar98

    Lemar98 Активный участник Пользователь

    Баллы:
    76
    А раздел какой?)
     
  4. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Делаешь свой ChunkGenerator, проверяешь если X и Z координаты чанка делятся на 48 без остатка, если делятся - вставляешь схематик через WE API.
     
  5. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    А нахера тогда делать свой генератор :D? Если структуру он все равно ставить не умеет.
     
  6. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Генератор чтоб мир был пустым, а со структурой то можно разобраться - гайдов по схематкам WE полно.
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Изи.
    Код:
    public class Schem {
        public static void paste(Location start, File file)
                throws IOException {
            CompoundNBT schem = CompressedStreamTools.readCompressed(new FileInputStream(file));
            CompoundNBT meta = schem.getCompound("Metadata");
            Location pos = start
                    .add(new Vector(meta.getInt("WEOffsetX"), meta.getInt("WEOffsetY"), meta.getInt("WEOffsetZ")));
            byte[] blockData = schem.getByteArray("BlockData");
            CompoundNBT palette = schem.getCompound("Palette");
            Map<Integer, String> paletteMap = new HashMap<Integer, String>();
            for (String set : palette.keySet()) {
                paletteMap.put(palette.getInt(set), set);
            }
            ListNBT blockEntities = schem.getList("BlockEntities", 10);
            int i = 0;
            // set block
            for (int y = 0; y < schem.getShort("Height"); ++y) {
                for (int z = 0; z < schem.getShort("Length"); ++z) {
                    for (int x = 0; x < schem.getShort("Width"); ++x) {
                        BlockData data = Bukkit.createBlockData(paletteMap.get((int) blockData[i]));
                        pos.getWorld().getBlockAt(pos.getBlockX() + x, pos.getBlockY() + y, pos.getBlockZ() + z)
                                .setBlockData(data);
                        i++;
                    }
                }
            }
            // set inventory
            for (INBT inbt : blockEntities) {
                CompoundNBT blockEntity = (CompoundNBT) inbt;
                int[] Pos = blockEntity.getIntArray("Pos");
                for (INBT inbt2 : blockEntity.getList("Items", 10)) {
                    CompoundNBT stack = (CompoundNBT) inbt2;
                    Block block = pos.getWorld().getBlockAt(pos.getBlockX() + Pos[0], pos.getBlockY() + Pos[1],
                            pos.getBlockZ() + Pos[2]);
                    BlockState state = block.getState();
                    ItemStack item = SchemNMS.getItemStack(stack);
                    if (state instanceof Container) {
                        Container container = (Container) state;
                        container.getSnapshotInventory().setItem(stack.getInt("Slot"), item);
                        state.update();
                    }
                }
            }
        }
    }
    Код:
    public class SchemNMS {
        public static ItemStack getItemStack(CompoundNBT stack) {
            try {
                return CraftItemStack
                        .asBukkitCopy(net.minecraft.server.v1_15_R1.ItemStack.a(MojangsonParser.parse(stack.toString())));
            } catch (CommandSyntaxException e) {
                e.printStackTrace();
                return new ItemStack(Material.AIR);
            }
        }
    }
     

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