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

Плагин [MECH/FUN] ReActions - Что? Тогда? Иначе! [BukkitDev]

Тема в разделе "Релизы плагинов", создана пользователем fromgate, 16 июл 2013.

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

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Я как-то так и сделал. Удалил AdminCmd и по мере необходимости добавлял активаторы.
    Хотел даже как-то выложить результат, но потом после какой-то возни удалил папку с тестовым сервером и подвиг не повторил ;)
     
  2. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    @AtomicScience
    Вот, как я себе представлял новый ReActions. Покажу на примере, когда сущность получает повреждение от блока:
    Перейдём сначала к документации:
    https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/entity/EntityDamageByBlockEvent.html

    Событие имеет вид:
    public EntityDamageByBlockEvent(Block damager,
    Entity damagee,
    EntityDamageEvent.DamageCause cause,
    double damage)
    Подглядим, какие методы он использует:
    damager: Можно узнать на какой блок наступила сущность
    damagee: Какая сущность получила урон
    cause: Причина урона
    damage: Можно узнать, значение нанесённого урона
    Существуют также родительские методы, такие как:
    setCancelled: Отменить событие

    Как в этом случае может выглядеть активатор:

    Код:
    Activator_name:
      event: EntityDamageByBlockEvent
      damager: block:{type:MAGMA} | ALL # Сравниваем блок, установленный в конфиге с блоком, на который наступила сущность
      damagee: PLAYER|ZOMBIE|..|ALL # Сравниваем сущность, установленную в конфиге с сущностью, которая получила урон
      cause: BLOCK_EXPLOSION|ALL # Сравниваем причину урона, установленную в конфиге с причиной, которая которая вызвала урон
      damage: 0..20 # Если необходимо, сравниваем полученное повреждение
      setCancelled: true|false # можем отменить событие или оставить
     
      flags: []
      actions: []
      reactions: []
    
    Иными словами, зная событие и методы, которые в нём используются, мы можем отловить всё что угодно. При этом не нужно будет тратить время на разработку активатора с новым событием. Единственное, придётся разработать обработку всех этих методов, которые входят во все события. Что хорошо, их не так много.

    Что касается флагов и действий, то я ещё не думал как реализовать, возможно таким же образом.

    Спасибо.
     
  3. Cornettess

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

    Баллы:
    61
    Имя в Minecraft:
    CraftZzzzzz
    ============================
    НЕ РОБИТ
     
  4. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Покажи активатор, с которым ты спавнишь моба.

    Это настолько годно, что прям "Ух". Тогда бы пришлось перелопатить каждый ивент, но максимальное подтвердит фразу
    Однако setCancelled я бы таки оставил в действиях
     
  5. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    На самом деле это как раз то чего я хотел избежать.
    Это будет значительное усложнение плагина с точки зрения пользователя. По сути, оперируя параметрами на таком уровне... уже надо писать плагины. Или использовать VarScript, который как раз шёл по такому пути развития и в результате получилась отличная среда программирования для Майнкрафта.
     
  6. AtomicScience

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

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    Но если эту обработку эвента "запихать" в отдельный файл, то все будет отлично - и пользователю хорошо, пнужно будет просто узнать названия новых активаторов/флагов/действий, и разработчику несложно что-то подправить или обновить
     
  7. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @AtomicScience
    Если синтаксис активатора будет таким:
    Код:
    Activator_name:
      event: EntityDamageByBlockEvent
      damager: block:{type:MAGMA} | ALL # Сравниваем блок, установленный в конфиге с блоком, на который наступила сущность
      damagee: PLAYER|ZOMBIE|..|ALL # Сравниваем сущность, установленную в конфиге с сущностью, которая получила урон
      cause: BLOCK_EXPLOSION|ALL # Сравниваем причину урона, установленную в конфиге с причиной, которая которая вызвала урон
      damage: 0..20 # Если необходимо, сравниваем полученное повреждение
      setCancelled: true|false # можем отменить событие или оставить
    То начальные условия для пользователя плагином резко повышаются. А мне сейчас регулярно пишут люди, которые имя видео, в котором всё разжевано, не могут привязать телепортацию к кнопке.
     
  8. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Тогда оставить идею активаторов(BLOCK_CLICK, MOB_DAMAGE etc.), но сделать больше временных переменных и больше флагов для проверки - COMPARE явно недостаточно, а пихать временные переменные в персональные переменные, и только потом их проверять(больше, меньше, регулярка) порой слишком медленно.
     
  9. Lalki

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

    Баллы:
    66
    Можно сделать так, чтобы активатор Inventory_click срабатывал только на n слот хотбара?
     
  10. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Мне не совсем понятно, что вы хотите. Но могу предложить активатор, который покажет при каких действиях он срабатывает. После чего вы сами без труда настроите активатор под ваши нужды:
    Код:
    INVENTORY_CLICK:
      ic_event:
        click-type: ANY
        action-type: ANY
        inventory-type: ANY
        slot-type: ANY
        key: ANY
        actions:
        - 'message=&aclick: &r%click%'
        - 'message=&baction: &r%action%'
        - 'message=&cinventory: &r%inventory%'
        - 'message=&dslot: &r%slot%'
        - 'message=&6item: &r%item%'
        - 'message=&6key: &r%key%'
        - 'message=&6itemkey: &r%itemkey%'
    
     
  11. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Ну так потому что после занесения активатора в файл 'delayed-actions' не сохраняются временные плейсхолдеры, действующие в этом активаторе. Не знаю баг это, или "так надо"... Но пофиксить желательно.
     
  12. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Мб я что то упускаю... Разве есть возможность создавать персональные переменные в отдельных файлах под каждого игрока ??
     
  13. Koksik891

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

    Баллы:
    61
    Имя в Minecraft:
    Koksik891
    Пожалуйста сделайте для готовых меню отдельный каталог
     
  14. Lalki

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

    Баллы:
    66
    Функции которая мне нужна нет(( нужно чтобы активатор проверял номер слота
     
  15. Lalki

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

    Баллы:
    66
    Почему активатор ITEM_CLICK не срабатывает на предметы с описанием, хотя в item прописано такое же описание?
     
  16. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Найди нужные номера слотов через активатор, который тебе дали.
    Потом проверяй через флаг FLAG_SET с COMPARE, и запихни там-сям сравнивание %slot% с нужными слотами.
    Если не понял - могу показать пример.

    Покажи активатор и скрин предмета, подскажу мб
     
  17. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Я упустил это, думал, что такая проверка есть, но ошибался. Теперь есть такая проверка.

    Build #132
    • Обновлён INVENTORY_CLICK активатор. Добавлена проверка слота в инвентаре.
    Тестируем:
    Код:
     INVENTORY_CLICK:
       ic_event:
        click-type: ANY
        action-type: ANY
        inventory-type: ANY
        slot-type: ANY
        key: ANY
        slot: ANY
        actions:
        - 'message=&aclick: &r%click%'
        - 'message=&baction: &r%action%'
        - 'message=&cinventory: &r%inventory%'
        - 'message=&dslot-type: &r%slotType%'
        - 'message=&6item: &r%item%'
        - 'message=&6key: &r%key%'
        - 'message=&6itemkey: &r%itemkey%'
        - 'message=&6slot: &r%slot%'
    
     
  18. Lalki

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

    Баллы:
    66
    Спасибо!
     
  19. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Ууу... Когда начинаются такие разногласия в фундаментальном видении будущего проекта у разработчиков - жди беды.
     
    Последнее редактирование: 3 сен 2017
  20. Jeff_Michael

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

    Баллы:
    88
    Skype:
    Jeff_Michael14
    Имя в Minecraft:
    Jeff_Michael
    Возможно я немного не так выразился. Я имел ввиду, что это надо организовать на уровне плагина, самим разработчикам ReActions. Я пару раз поднимал этот вопрос, но меня послали в MySQL.
    Но с БД невсегда удобно работать.
     

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