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

Помогите Получить блоки из схематика

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

Статус темы:
Закрыта.
  1. Автор темы
    Kurumi

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

    Баллы:
    76
    Надо получить все блоки из схематика и как-то их "пометить". Неважно, записав в лист их локации или повесить какой-нибудь тэг.

    Нужно это для того, чтобы при поломке блока игроком проверять, вставлен ли был этот блок схематиком или нет.

    Знатоки, направьте на путь истинный
     
  2. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    А как вставляется схематик?
     
  3. Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    Используй api WE тут есть код от которого можно оттолкнуться http://rubukkit.org/threads/teleport-na-arenu.128026/#post-1392216
     
  4. Автор темы
    Kurumi

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

    Баллы:
    76
    Код:
     final ClipboardFormat format = ClipboardFormats.findByFile(file);
            try (final ClipboardReader reader = format.getReader(new FileInputStream(file))) {
                final Clipboard clipboard = reader.read();
                try (final EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(adaptedWorld, -1)) {
                    final Operation operation = new ClipboardHolder(clipboard).createPaste(editSession).to(BlockVector3.at(most.getX() + config.getInt("offset.x"), most.getY() + config.getInt("offset.y"), most.getZ() + config.getInt("offset.z"))).ignoreAirBlocks(true).build();
                    try {
                        Operations.complete(operation);
                        editSession.flushSession();
                    }
                    catch (WorldEditException ex) {
                        ex.printStackTrace();
                    }
                }
            }
            catch (FileNotFoundException ex2) {
                ex2.printStackTrace();
            }
     
  5. Автор темы
    Kurumi

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

    Баллы:
    76
    от чего там можно оттолкнуться? Опиши словами техническую особенность
     
  6. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    В РеА очень много легаси, но триггер на изменения WE реализован - может подойдёт для какого-то референса, но отличить "свою" сессию от "чужой" в ивенте, на первый взгляд, невозможно. Там реализовано так - сделать враппер для существующего Extent'а, и подменить его в ивенте. В методе setBlock враппера можно записывать координаты блоков.
     
  7. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Как я и писал - не отличить свою сессию от какой-то другой.
     
  8. Автор темы
    Kurumi

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

    Баллы:
    76
    Выхода вообще нет?
     
  9. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Речь про получение блоков из схематика. Описанный метод будет отдавать вообще все изменения WE.
    Честно? Без понятия. В EditSessionFactory и EditSessionBuilder можно своего Actor добавить. В теории, можно было бы реализовать своего актёра и сверять в ивенте по своему классу, но не знаю, дружит ли WE с такими делами вообще.
     
    Последнее редактирование: 1 ноя 2021
  10. alexandrage

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

    Баллы:
    173
    Ну других способов логирования я не знаю. Сами тогда ищите.
     
  11. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Если не сработает, можно попробовать заранее просчитать блоки из полученного клипборда, добавив координаты относительно локации.
     
  12. Автор темы
    Kurumi

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

    Баллы:
    76
    Решил свою проблему другим способлм. Всем спасибо
     
Статус темы:
Закрыта.

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