Автоматическая регистрация объектов с методами-ресиверами событий

Статус
В этой теме нельзя размещать новые ответы.
Версия Minecraft
1.7.10

mayakplay

SpringFlomaster
217
3
160
Проблема: С ростом мода разрастается количество обработчиков событий мейн превращается в блевотную последовательность регистрации кучи обработчиков событий.

Есть ли на форуме умельцы, которые сделали автоматическую регистрацию своих классов, как EventHandler?

Вопрос из личного интереса
Отмечу лучшим ответом самое интересное решение


Код:
MinecraftForge.EVENT_BUS.register(someInstance);
FMLCommonHandler.instance().bus().register(someInstance);
 
Последнее редактирование:
Решение
Ну как тебе сказать))

Java:
@ForgeEventHandler
public class IngameUiService implements IIngameUiService {

    private final List<AbstractIngameUiLayer> layers;

    @Autowired
    public IngameUiService(List<AbstractIngameUiLayer> layers) {
        this.layers = layers;
    }
...
Наворотят всякого, а потом неудобно им. Полюбому ж из этого класса будет создавать объект, что мешает у него в конструкторе написать EVENT_BUS.register(this)?

timaxa007

Модератор
5,831
409
672
Как на счёт посмотреть исходники как работает аннотация Mod?
Типа ASM'ом ищешь нужную аннотацию и выполняешь какие-то действия.
Я точно не знаю. В любом случаи нужно будет подбирать определённый код для своих нужд.

Я бы всё равно-бы наверное делал на подобия Hook'ов от @GloomyFolken'а.
 
2,505
81
397
Ловишь ивент FMLConstructionEvent. Он вылетает до аналогичного FMLPreInitializationEvent.
Там внутри есть ASMDataTable. FML туда собирает аннотации абсолютно всех загруженных (и не загруженных) классов в среде. Оттуда можно достать классы, которые помечены твоей аннотацией, создать их инстансы (или достать статический инстанс) и зарегать там, где нужно. Это почти самый быстрый способ.
 

mayakplay

SpringFlomaster
217
3
160
Ловишь ивент FMLConstructionEvent. Он вылетает до аналогичного FMLPreInitializationEvent.
Там внутри есть ASMDataTable. FML туда собирает аннотации абсолютно всех загруженных (и не загруженных) классов в среде. Оттуда можно достать классы, которые помечены твоей аннотацией, создать их инстансы (или достать статический инстанс) и зарегать там, где нужно. Это почти самый быстрый способ.

Более подробный вариант того, что было выше. Ок, а если конструктор принимает параметры?
 

mayakplay

SpringFlomaster
217
3
160

CumingSoon

Местный стендапер
1,634
12
269
Более подробный вариант того, что было выше. Ок, а если конструктор принимает параметры?
Ну и как тогда загрузчик должен догадаться, какие параметры передать?
 

mayakplay

SpringFlomaster
217
3
160
Последнее редактирование:
7,099
324
1,510
А нужно ли конструктору принимать параметр?
 

mayakplay

SpringFlomaster
217
3
160
7,099
324
1,510
А какой конкретный юзкейс?
~~~
Если значения из конфига нужно предавать, то можно всегда передавать весь конфиг, если есть такой конструктор, а уже в конструкторе доставать нужные переменные
 
1,111
47
420
Кстати, ответ на твой вопрос, хоть и не лучший, был выше!
ладно вот тут обидно
Если ты хочешь писать свои велосипеды потому что считаешь что guice громоздкий, это не целесообразно.
Во-первых ты задолбаешься писать свой аналог
Во-вторых твой аналог будет не таким юзабельным
В-третьих я почти уверен что твой аналог будет медленней

Какого черта разводить дискуссии на ровном месте?
Го еще такую темку: "Эх как же было б здорово если была б такая тулза которая умела б объект в json и обратно переводить"
 
1,038
57
229
такая тулза которая умела б объект в json и обратно переводить
уже есть.
Тема наверное была бы хорошей, если бы находилась в модах или ресурсах. И автор планировал поделиться своим решением на последние версии forge
но... 1.7.10, да кому нужно это решение.
Вы бы ещё 1.0.0 вспомнили для таких вот вопросов.
 

mayakplay

SpringFlomaster
217
3
160
Последнее редактирование:
3,005
192
592
1,111
47
420
Складывается ощущение, что ты понятия не имеешь, о чем говоришь))
Извините, но я злой.
По моему мнению ты сравнил Spring и Guice. Если ты этого не делал, извини.
Так вот, guice и spring вещи разные и никак не заменяют друг друга. Сравнивать эти вещи смешно.
Change my mind
 

mayakplay

SpringFlomaster
217
3
160
Статус
В этой теме нельзя размещать новые ответы.
Сверху