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

Помогите Кастомный wg флаг

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

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

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

    Баллы:
    76
    Мне нужно сделать один кастомный флаг для вг, который будет разрешать/запрещать работу поршней.
    Вроде бы есть такой флаг в вг, но он, почему-то, не фурычит.

    Я почитал вики wg, там рассказывалось, что нужно создавать и подгружать свои флаги до включения сервера, в методе onLoad, а реализовывать их нужно использую handler от wg. Я посмотрел пример реализации некоторых флагов и до сих пор не въехал, как заставить мой флаг разрешать/запрещать поршням работать... Помогите, пожалуйста
     
  2. alexandrage

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

    Баллы:
    173
    В ивенте wg
    @EventHandler(priority = EventPriority.LOWEST)
    event.setResult(Result.ALLOW);
     
  3. Автор темы
    Kurumi

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

    Баллы:
    76
    У меня есть вот это чудо
    Код:
     @EventHandler(priority = EventPriority.LOWEST)
        public void onPiston(UseBlockEvent event) {
            for(Block block : event.getBlocks()) {
                if(getRegion(block.getLocation()) != null) {
                    ProtectedRegion region = getRegion(block.getLocation());
                    if(region.getFlag(Main.getPistonExtendFlag()) == null && !region.getFlag(Main.getPistonExtendFlag()).toString().equals("DENY")) {
                        event.setResult(Event.Result.ALLOW);
                    } else {
                        event.setResult(Event.Result.DENY);
                    }
                }
            }
        }
    трабл в том, что я не могу туда даже ничего поставить, если этот флаг там deny. То есть, мне нужно проверять, что с блоками взаимодействует ПОРШЕНЬ, а как это сделать я не знаю. event.getCause().getFirstBlock() - возвращает NPE. Как я могу проверить, что блок толкает поршень?
     
  4. Автор темы
    Kurumi

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

    Баллы:
    76
    Хелпаните плез, срочняком надо докодить =(
     
  5. Thin_Troll

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

    Баллы:
    76
    в WGExtender есть функция pistonmove, но там не флаг.
    из сурсов ты можешь взять логику работы запрета.
     
  6. Автор темы
    Kurumi

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

    Баллы:
    76
    ничего подобного там не нашел
     
  7. Автор темы
    Kurumi

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

    Баллы:
    76
    Все что мне нужно - запретить действие поршня если мой флаг deny и разрешить, если он allow. Но, почему-то, ивент вообще не отменяется, хотя все проверки проходит...
    Код:
    @EventHandler(priority = EventPriority.LOWEST)
    public void onPiston(UseBlockEvent event) {
        if (event.getOriginalEvent().getEventName().equals("BlockPistonExtendEvent")) {
            System.out.println("call event");
            for (Block block : event.getBlocks()) {
                System.out.println("parsing blocks...");
                if(getRegion(block.getLocation()) != null && getRegion(block.getLocation()).getFlag(Main.getPistonExtendFlag()).toString().equals("ALLOW")) {
                    System.out.println("flag allow");
                    event.setResult(Event.Result.ALLOW);
                } else {
                    System.out.println("flag deny");
                    event.setResult(Event.Result.DENY);
                }
            }
        }
    }
    
     
  8. alexandrage

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

    Баллы:
    173
    А ивент то точно вызывается на поршнях? Может тебе нужен обычный из ведра ивент.
    Да и на запрет поршня в регионе и так есть уже флаг. К чему велик?
     
  9. Автор темы
    Kurumi

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

    Баллы:
    76
    Я сделал небольшой костыль. В бакитовском ивенте block piston extend я вызываю ивент вг - use block event. В use block event от вг я проверяю оригинальный ивент, если поршень - делаю свои проверки.

    Обычный ивент из ведра робит, но в нем я не могу запретить поршню двигаться, если мой флаг deny

    Такой флаг есть, да, но как я писал в шапке - он нерабочий
     
  10. alexandrage

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

    Баллы:
    173
    Ну вот и юзай обычный ивент.
     
  11. alexandrage

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

    Баллы:
    173
    Да и проверка у тебя какая то уeбaнскaя.
    RegionQuery#testState(location, associable, flag)
     
  12. Автор темы
    Kurumi

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

    Баллы:
    76
    Так я и пишу о тгм, что я не могу в ведроивенте запретить/разрешить взаимодействие с регионом. Я хз как. setCanceled(false) не робит.

    Ну а проверка хз чем тебе не нравится. Все работает. Если бы раньше знал про твой регион квери, зающал бы его. На вг адекватной документации, как я считаю, нет. Приходится пользать по сурсам этого говна и искать то что надо
     
  13. alexandrage

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

    Баллы:
    173
    Подсмотрел бы в том же wgex. Все там нормально проверяется и отменяется. Без твоих костылей с не правильным ивентом из wg, который еще и все сломает. Если кто то подписан на этот ивент и ожидает он него совсем другое.
     
  14. alexandrage

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

    Баллы:
    173
    Чекнул встроенный флаг pistons deny. Все так же работает как часы. К чему все эти костыли с велосипедом, не понятно.
     
  15. Автор темы
    Kurumi

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

    Баллы:
    76
    1.12.2 у меня версия. Вг 6.2.2. Ставлю в регионе pistons deny - они работают. Либо я чего-то не понимаю, либо на моей версии флаг явно не работает. Тем более мне нужно, чтобы игроки могли толкать блоки из региона 1 в региона 2 и наоборот. Гриферский сервер. Но надо запретить такую возможность на том же самом спавне, для этого мне и нужен ивент
     
  16. alexandrage

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

    Баллы:
    173
    Ну pistons deny как раз и нужен тебе. Все поршни в этом регионе перестанут блоки двигать.
    Да и причем тут версия? Этот флаг там давно и все еще работает.
     
  17. Автор темы
    Kurumi

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

    Баллы:
    76
    так не работает он лол
     
  18. alexandrage

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

    Баллы:
    173
    Работает он.
     
  19. Автор темы
    Kurumi

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

    Баллы:
    76
    из __global__ толкаю поршень в регион test. Несмотря на то, что и в глобале и в тесте стоит pistonts:allow, поршень не срабатывает
     
  20. alexandrage

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

    Баллы:
    173
    А ничего что флаг на запрет, а не на разрешение? Он по умолчанию не блокирует поршни.
     
Статус темы:
Закрыта.

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