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

KostyanDeveloper

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
KostyanChannel
Здравствуйте, я хочу генерировать остров для игрока (по типу SkyBlock), допустим есть схематика острова. Как можно сделать, чтобы при создании острова она вставилась в пустое место в мире (расстояние примерно 48 чанков между ними) и телепортировало игрока туда?
 
самопис
Смотреть раздел, да, да. косяк
 
Последнее редактирование:
Здравствуйте, я хочу генерировать остров для игрока (по типу SkyBlock), допустим есть схематика острова. Как можно сделать, чтобы при создании острова она вставилась в пустое место в мире (расстояние примерно 48 чанков между ними) и телепортировало игрока туда?
Делаешь свой ChunkGenerator, проверяешь если X и Z координаты чанка делятся на 48 без остатка, если делятся - вставляешь схематик через WE API.
 
Делаешь свой ChunkGenerator, проверяешь если X и Z координаты чанка делятся на 48 без остатка, если делятся - вставляешь схематик через WE API.
А нахера тогда делать свой генератор :D? Если структуру он все равно ставить не умеет.
 
А нахера тогда делать свой генератор :D? Если структуру он все равно ставить не умеет.
Генератор чтоб мир был пустым, а со структурой то можно разобраться - гайдов по схематкам WE полно.
 
Генератор чтоб мир был пустым, а со структурой то можно разобраться - гайдов по схематкам WE полно.
Изи.
Код:
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);
        }
    }
}
 
Назад
Верх