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

Статус
В этой теме нельзя размещать новые ответы.
Версия 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)?
Как на счёт посмотреть исходники как работает аннотация Mod?
Типа ASM'ом ищешь нужную аннотацию и выполняешь какие-то действия.
Я точно не знаю. В любом случаи нужно будет подбирать определённый код для своих нужд.

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

Более подробный вариант того, что было выше. Ок, а если конструктор принимает параметры?
 
Более подробный вариант того, что было выше. Ок, а если конструктор принимает параметры?
Ну и как тогда загрузчик должен догадаться, какие параметры передать?
 
Последнее редактирование:
А нужно ли конструктору принимать параметр?
 
А какой конкретный юзкейс?
~~~
Если значения из конфига нужно предавать, то можно всегда передавать весь конфиг, если есть такой конструктор, а уже в конструкторе доставать нужные переменные
 
Кстати, ответ на твой вопрос, хоть и не лучший, был выше!
ладно вот тут обидно
Если ты хочешь писать свои велосипеды потому что считаешь что guice громоздкий, это не целесообразно.
Во-первых ты задолбаешься писать свой аналог
Во-вторых твой аналог будет не таким юзабельным
В-третьих я почти уверен что твой аналог будет медленней

Какого черта разводить дискуссии на ровном месте?
Го еще такую темку: "Эх как же было б здорово если была б такая тулза которая умела б объект в json и обратно переводить"
 
такая тулза которая умела б объект в json и обратно переводить
уже есть.
Тема наверное была бы хорошей, если бы находилась в модах или ресурсах. И автор планировал поделиться своим решением на последние версии forge
но... 1.7.10, да кому нужно это решение.
Вы бы ещё 1.0.0 вспомнили для таких вот вопросов.
 
Последнее редактирование:
Складывается ощущение, что ты понятия не имеешь, о чем говоришь))
Извините, но я злой.
По моему мнению ты сравнил Spring и Guice. Если ты этого не делал, извини.
Так вот, guice и spring вещи разные и никак не заменяют друг друга. Сравнивать эти вещи смешно.
Change my mind
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху