11package de .timmi6790 .mcmod ;
22
33import de .timmi6790 .mcmod .command .CommandManager ;
4- import de .timmi6790 .mcmod .datatypes .TaskScheduler ;
54import de .timmi6790 .mcmod .listeners .events .EventListener ;
65import de .timmi6790 .mcmod .listeners .events .MineplexEventListener ;
76import de .timmi6790 .mcmod .modules .AbstractModule ;
8- import de .timmi6790 .mcmod .modules .community .CommunityModule ;
97import de .timmi6790 .mcmod .tabsupport .TabSupportManager ;
8+ import de .timmi6790 .mcmod .utilities .TaskScheduler ;
109import lombok .Getter ;
10+ import lombok .extern .log4j .Log4j2 ;
1111import net .minecraftforge .common .MinecraftForge ;
1212import net .minecraftforge .common .config .Configuration ;
1313import net .minecraftforge .fml .common .Mod ;
1414import net .minecraftforge .fml .common .Mod .EventHandler ;
1515import net .minecraftforge .fml .common .event .FMLInitializationEvent ;
1616import net .minecraftforge .fml .common .event .FMLPreInitializationEvent ;
17+ import org .reflections .Reflections ;
1718
1819import java .io .File ;
1920import java .util .HashMap ;
2021import java .util .Map ;
2122import java .util .Optional ;
23+ import java .util .Set ;
2224
2325@ Mod (
24- modid = Reference .MODID , name = Reference .NAME , version = Reference .VERSION ,
26+ modid = Reference .MODID ,
27+ name = Reference .NAME ,
28+ version = Reference .VERSION ,
2529 acceptedMinecraftVersions = Reference .MC_VERSION ,
26- guiFactory = Reference .GUI_FACTORY_CLASS , clientSideOnly = true
30+ guiFactory = Reference .GUI_FACTORY_CLASS ,
31+ clientSideOnly = true
2732)
33+ @ Log4j2
2834public class McMod {
29- private static final Map <String , AbstractModule > modules = new HashMap <>();
35+ private static final Map <Class <? extends AbstractModule > , AbstractModule > modules = new HashMap <>();
3036 @ Getter
3137 private static final ModCache modCache = new ModCache ();
3238 @ Getter
@@ -41,16 +47,16 @@ public class McMod {
4147
4248 private static void addModules (final AbstractModule ... modules ) {
4349 for (final AbstractModule module : modules ) {
44- McMod .modules .put (module .getName (). toLowerCase (), module );
50+ McMod .modules .put (module .getClass (), module );
4551 }
4652 }
4753
48- public static Optional < AbstractModule > getModule (final String name ) {
49- return Optional .ofNullable (modules .get (name . toLowerCase () ));
54+ public static < T extends AbstractModule > Optional < T > getModule (final Class < T > clazz ) {
55+ return ( Optional < T >) Optional .ofNullable (modules .get (clazz ));
5056 }
5157
52- public static AbstractModule getModuleOrThrow (final String name ) {
53- return getModule (name ).orElseThrow (RuntimeException ::new );
58+ public static < T extends AbstractModule > T getModuleOrThrow (final Class < T > clazz ) {
59+ return getModule (clazz ).orElseThrow (RuntimeException ::new );
5460 }
5561
5662 public static void registerEvents (final Object ... events ) {
@@ -67,26 +73,32 @@ public static void unRegisterEvents(final Object... events) {
6773
6874 @ EventHandler
6975 public void preInit (final FMLPreInitializationEvent event ) {
70- McMod .addModules (
71- new CommunityModule ()
72- );
76+ final Reflections reflections = new Reflections ("de.timmi6790.mcmod.modules" );
77+ final Set <Class <? extends AbstractModule >> modules = reflections .getSubTypesOf (AbstractModule .class );
78+ for (final Class <? extends AbstractModule > module : modules ) {
79+ try {
80+ addModules (module .getConstructor ().newInstance ());
81+ } catch (final Exception e ) {
82+ log .error (String .format ("Error while trying to initialize module %s." , module ), e );
83+ }
84+ }
7385
7486 configDirectory = event .getModConfigurationDirectory ().toString ();
7587 if (configuration == null ) {
7688 final File path = new File (configDirectory + "/" + Reference .MODID + ".cfg" );
7789 configuration = new Configuration (path );
7890 }
7991
80- for (final AbstractModule module : modules .values ()) {
81- System . out . printf ("PreInnit module %s%n " , module .getName ());
92+ for (final AbstractModule module : McMod . modules .values ()) {
93+ log . info ("PreInnit module {} " , module .getName ());
8294 module .preInit (event );
8395 }
8496 }
8597
8698 @ EventHandler
8799 public void init (final FMLInitializationEvent event ) {
88100 for (final AbstractModule module : modules .values ()) {
89- System . out . printf ("Innit module %s%n " , module .getName ());
101+ log . info ("Innit module {} " , module .getName ());
90102 module .init (event );
91103 }
92104
0 commit comments