Механика работы приоритета слушателя ивента

Версия Minecraft
1.15.2

Sainthozier

Стрелочник
627
11
371
Всем привет.

Понадобилось совершить некие манипуляции с приоритетами слушателей событий, а именно:
а) сделать так, чтобы конкретно мой listener выполнялся первым из всего списка;
б) сделать так, чтобы конкретно мой listener выполнялся последним из всего списка.

Для чего? Объясняю. Мне требуется создать свой обработчик события, который в теории уже может быть реализован в других модах, но немного с другой логикой. И мне нужно сделать так, чтобы моя логика имела наивысший приоритет. Абстрактный пример: в моде "А" в ивенте ItemPickupEvent игроку выдаётся гм при подборе палки; в моём же моде в ивенте ItemPickupEvent при подборе палки меня банит на курсе. И вот мне нужно сделать так, чтобы именно мой обработчик срабатывал первым.
Возня с приоритетами и различные тесты не дали никаких результатов. Я по фасту сбилдил 10 джарников с одним ивентом, но с разными приоритетами и расплакался:
1.jpg

Естественно я полез и посмотрел на то, что там сделали чуваки из forge. И, честно говоря, не хочу даже пытаться это модифицировать. Во-первых, я некоторые моменты так и не уяснил(как определяется порядок обработчиков с одинаковым приоритетом), ибо слепой, а во-вторых, не хочу сломать что-то. Может будут идеи у кого-то какие-нибудь? Если кто-то захочет сам чекнуть, то вот список классов в 1.15.2, где упоминается приоритет: net.minecraftforge.eventbus.ASMEventHandler, net.minecraftforge.eventbus.EventBus, net.minecraftforge.eventbus.ListenerList.

P.S. Версию указал 1.15.2, т.к. работал и проверял именно на ней. Но по факту нужна будет и 1.12. Если после неё ничего не изменилось в плане ивентов(я не проверял), то для 1.12+ актуально.
P.S.S. И переименуйте кто-то тему плиз, у меня щас голова не может в название.
 
В 1.12.2 вообще приоритетов вроде нету. В 1.12.2 я бы предложила сделать хук в место, где выполняется вызывается эвент и после него(да 2 * 100500 хуков) и вызывала там свои. 100% гарантия нужного порядка. См. Собственные события. См. Хуклиба с якорями.
 
В 1.12.2 вообще приоритетов вроде нету.
Есть.
А если нужен порядок, для первого ставь высший, для последнего низший(если у чужого мода не стоит высший приоритет(обычно ставят нормальный, либо не пишут его вовсе)). Если не поможет - хуки.
 
Расскажи, в учебнике про это ни слова.
Есть кое-что за пределами учебника да что там учебник, даже на форуме об этом темка есть
Так ему уже не помогло...
На скрине видно, что сначала срабатывают события с высоким приоритетом, далее вызываются остальные по убыванию приоритета. Если в чужом коде кто-то поставил такие же приоритеты на свои эвенты, тут хз, на ум приходят только хуки.
 
Назад
Сверху