Module.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package me.km.api;
  2. import java.lang.reflect.InvocationTargetException;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import me.km.PackageHelper;
  6. import me.km.databank.SimpleDataBank;
  7. import net.minecraft.util.text.TextFormatting;
  8. import net.minecraftforge.common.MinecraftForge;
  9. import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
  10. import net.minecraftforge.fml.common.eventhandler.EventBus;
  11. public class Module extends MessageSender
  12. {
  13. private final HashMap<String, ModuleCommand> commands;
  14. private final String mname;
  15. private final HashMap<Class, ModuleListener> events;
  16. private SimpleDataBank bank;
  17. public Module(String mname, String prefix, TextFormatting color)
  18. {
  19. commands = new HashMap<>();
  20. this.mname = mname;
  21. super.registerPrefix(prefix, color);
  22. events = new HashMap<>();
  23. bank = null;
  24. super.sendToConsole("Das Modul " + color + mname + TextFormatting.RESET + " wurde geladen.");
  25. }
  26. //--------------------------------------------------------------------------
  27. // Allgemeine Rückgaben
  28. //--------------------------------------------------------------------------
  29. public String getName()
  30. {
  31. return mname;
  32. }
  33. //--------------------------------------------------------------------------
  34. // DataBank
  35. //--------------------------------------------------------------------------
  36. public void setDataBank(SimpleDataBank bank)
  37. {
  38. this.bank = bank;
  39. this.sendToConsole("Die Datenbank wurde geladen.");
  40. }
  41. @SuppressWarnings("unchecked")
  42. public <T extends SimpleDataBank> T getDataBank(Class<T> c)
  43. {
  44. return (T) bank;
  45. }
  46. //--------------------------------------------------------------------------
  47. // Command-Methoden
  48. //--------------------------------------------------------------------------
  49. public void registerCommand(FMLServerStartingEvent e, ModuleCommand command)
  50. {
  51. e.registerServerCommand(command);
  52. if(commands.put(command.getName(), command) != null)
  53. {
  54. this.sendToConsole("Der Command '" + command.getName() + "' wurde ein weiteres Mal geladen.");
  55. }
  56. }
  57. @SuppressWarnings("unchecked")
  58. public void registerCommands(FMLServerStartingEvent e, String packageName)
  59. {
  60. PackageHelper.getClasses(packageName).stream().filter(c -> ModuleCommand.class.isAssignableFrom(c)).forEach((Class c) ->
  61. {
  62. try
  63. {
  64. ModuleCommand command = (ModuleCommand) c.getDeclaredConstructor(Module.class).newInstance(this);
  65. registerCommand(e, command);
  66. }
  67. catch(ClassCastException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex)
  68. {
  69. this.sendToConsole("Die Klasse '" + c + "' wurde nicht geladen.");
  70. }
  71. });
  72. this.sendToConsole("Alle Commands wurden geladen.");
  73. }
  74. public ModuleCommand getCommand(String name)
  75. {
  76. return commands.get(name);
  77. }
  78. @SuppressWarnings("unchecked")
  79. public <T extends ModuleCommand> T getCommand(Class<T> c)
  80. {
  81. return (T) commands.get(c.getSimpleName().substring(7).toLowerCase());
  82. }
  83. //--------------------------------------------------------------------------
  84. // Event-Methoden
  85. //--------------------------------------------------------------------------
  86. @SuppressWarnings("unchecked")
  87. public void registerEvents(String packageName)
  88. {
  89. EventBus bus = MinecraftForge.EVENT_BUS;
  90. PackageHelper.getClasses(packageName).stream().filter(c -> ModuleListener.class.isAssignableFrom(c)).forEach((Class c) ->
  91. {
  92. try
  93. {
  94. ModuleListener l = (ModuleListener) c.getDeclaredConstructor(Module.class).newInstance(this);
  95. events.put(c, l);
  96. bus.register(l);
  97. }
  98. catch(NoSuchMethodException | ClassCastException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex)
  99. {
  100. this.sendToConsole("Fehler bei " + c);
  101. this.sendToConsole(ex.toString());
  102. }
  103. });
  104. this.sendToConsole("Alle Events wurden geladen.");
  105. }
  106. @SuppressWarnings("unchecked")
  107. public <T extends ModuleListener> T getEvent(Class<T> c)
  108. {
  109. return (T) events.get(c);
  110. }
  111. }