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

Помогите Сохранение схематиков с кастомным Origin

Тема в разделе "Разработка плагинов для новичков", создана пользователем LuckyZeeRo, 17 окт 2018.

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

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Всем привет :)
    Столкнулся с такой проблемкой, которую не могу решить уже достаточное количество времени. Суть задачи - сохранить определенный регион в схематик с кастомным origin (точкой, относительно которой будет сохранен регион), по умолчанию это нижний угол. Используя при этом FAWE.

    Сама проблема такова, что схематик сохраняется, но при вставке блоков нет, вставляется чисто воздух там, где должны быть блоки. Вот такой код у меня примерно:
    Код:
    public static Schematic saveSchematic(World world, Cuboid cuboid, Point origin, File destination) {
        Vector min = cuboid.getFrom().getAsBlockVector();
        Vector max = cuboid.getTo().getAsBlockVector();
        com.sk89q.worldedit.world.World worldEditWorld = FaweAPI.getWorld(world.getName());
        
        CuboidRegion region = new CuboidRegion(worldEditWorld, min, max);
        Clipboard clipboard = new BlockArrayClipboard(region);
        clipboard.setOrigin(origin.getAsBlockVector());
        
        Schematic schem = new Schematic(clipboard);
        try {
            schem.save(destination, ClipboardFormat.SCHEMATIC);
            return schem;
        } catch (IOException ex) {
            throw new AssertionError("Cannot save schematic '" + destination.getName() + "'.", ex);
        }
    }
    То есть все работает хорошо, кроме того, что блоки не сохраняет, весь регион идет как воздух. Для сравнения и информации приведу пример кода, который работает как надо, но origin поставлен по умолчанию:
    Код:
    public static Schematic saveSchematic(World world, Cuboid cuboid, File destination) {
        Vector min = cuboid.getFrom().getAsBlockVector();
        Vector max = cuboid.getTo().getAsBlockVector();
        com.sk89q.worldedit.world.World worldEditWorld = FaweAPI.getWorld(world.getName());
        
        CuboidRegion region = new CuboidRegion(worldEditWorld, min, max);
        Schematic schem = new Schematic(region);
        try {
            schem.save(destination, ClipboardFormat.SCHEMATIC);
            return schem;
        } catch (IOException ex) {
            throw new AssertionError("Cannot save schematic '" + destination.getName() + "'.", ex);
        }
    }
    Версия 1.12.2, FAWE 20.9
    Я так понимаю, что в Clipboard скорее заносится только инфа про регион, а блоки нужно заполнять вручную. Если это так, то как это сделать адекватным способом?
     
  2. Автор темы
    LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    * bump *

    Попробовал еще проделать махинации с вещами, взятых из команды //copy. Не получилось. Тот же результат - пустой клипборд.
    Код:
    public static Schematic saveSchematic(World world, Cuboid cuboid, Point origin, File destination) {
        Vector min = cuboid.getFrom().getAsBlockVector();
        Vector max = cuboid.getTo().getAsBlockVector();
        com.sk89q.worldedit.world.World worldEditWorld = FaweAPI.getWorld(world.getName());
       
        CuboidRegion region = new CuboidRegion(worldEditWorld, min, max);
        Clipboard clipboard = new BlockArrayClipboard(region);
        clipboard.setOrigin(origin.getAsBlockVector());
       
        EditSession session = new EditSessionBuilder(world.getName()).fastmode(true).build();
        ForwardExtentCopy copy = new ForwardExtentCopy(session, region, min, clipboard, max);
        copy.setCopyEntities(false);
        copy.setCopyBiomes(false);
       
        try {
            Operations.completeLegacy(copy);
            Schematic schem = new Schematic(clipboard);
            schem.save(destination, ClipboardFormat.SCHEMATIC);
            return schem;
        } catch (Exception ex) {
            throw new AssertionError("Cannot save schematic '" + destination.getName() + "'.", ex);
        }
    }
     

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