Server.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package me.km;
  2. import me.hammerle.snuviscript.code.ISnuviLogger;
  3. import me.hammerle.snuviscript.config.SnuviConfig;
  4. import me.kcm.Hooks;
  5. import me.km.blockprotections.BlockProtectionBank;
  6. import me.km.blockprotections.BlockProtectionEvents;
  7. import me.km.blockprotections.DummyBlockProtection;
  8. import me.km.blockprotections.IBlockProtection;
  9. import me.km.databank.DataBank;
  10. import me.km.events.CustomEventCaller;
  11. import me.km.overrides.ModPlayerList;
  12. import me.km.permissions.ModCommandManager;
  13. import me.km.permissions.PermissionManager;
  14. import me.km.playerbank.DummyPlayerBank;
  15. import me.km.playerbank.IPlayerBank;
  16. import me.km.playerbank.PlayerBank;
  17. import me.km.playerbank.PlayerManager;
  18. import me.km.plots.ProtectionEvents;
  19. import me.km.plots.WorldPlotMap;
  20. import me.km.scheduler.SnuviScheduler;
  21. import me.km.snuviscript.SnuviLogger;
  22. import me.km.utils.ReflectionUtils;
  23. import net.minecraft.server.dedicated.DedicatedServer;
  24. import net.minecraftforge.api.distmarker.Dist;
  25. import net.minecraftforge.api.distmarker.OnlyIn;
  26. import net.minecraftforge.common.MinecraftForge;
  27. import me.km.snuviscript.CommandGiveUp;
  28. import me.km.snuviscript.CommandScript;
  29. import me.km.snuviscript.DummyScriptBank;
  30. import me.km.snuviscript.IScriptBank;
  31. import me.km.snuviscript.MinecraftFunctions;
  32. import me.km.snuviscript.ScriptBank;
  33. import me.km.snuviscript.ScriptEvents;
  34. import me.km.snuviscript.Scripts;
  35. import me.km.world.WorldEvents;
  36. @OnlyIn(Dist.DEDICATED_SERVER)
  37. public class Server
  38. {
  39. private static SnuviLogger logger;
  40. private static ModCommandManager commands;
  41. private static DedicatedServer server;
  42. private static SnuviScheduler scheduler;
  43. private static DataBank databank;
  44. private static Scripts scripts;
  45. public static ScriptEvents scriptEvents;
  46. private static WorldPlotMap plotMap;
  47. public static void onStart(DedicatedServer serverIn)
  48. {
  49. server = serverIn;
  50. logger = new SnuviLogger();
  51. SnuviConfig conf = new SnuviConfig(logger, "", "config");
  52. if(conf.exists())
  53. {
  54. conf.load();
  55. }
  56. boolean debug = conf.getBoolean("debug", false);
  57. // permissions
  58. PermissionManager perms = new PermissionManager(debug);
  59. logger.setPlayerLoggingData(server, perms);
  60. if(debug)
  61. {
  62. logger.print("------------------------------------------------");
  63. logger.print("Starting server in debug mode");
  64. logger.print("------------------------------------------------");
  65. }
  66. // scheduler
  67. scheduler = new SnuviScheduler(logger);
  68. // mod player list hook
  69. Hooks.setPlayerListFunction(ds ->
  70. {
  71. ds.setPlayerList(new ModPlayerList(ds));
  72. });
  73. // scripts
  74. scripts = new Scripts(logger, scheduler);
  75. scriptEvents = new ScriptEvents(scripts, server, perms);
  76. MinecraftForge.EVENT_BUS.register(scriptEvents);
  77. // command manager
  78. commands = new ModCommandManager(true, perms, scriptEvents, scripts, scheduler);
  79. ReflectionUtils.setCommandManager(server, commands);
  80. commands.registerCommand(new CommandGiveUp(scripts));
  81. commands.registerCommand(new CommandScript(scripts, server));
  82. // data base connection
  83. databank = new DataBank(logger, conf.getString("user", "root"), conf.getString("password", ""));
  84. if(!databank.openDataBankConnection())
  85. {
  86. logger.print("------------------------------------------------");
  87. logger.print("Starting server with dummy databank");
  88. logger.print("------------------------------------------------");
  89. }
  90. databank.startReconnecting(scheduler);
  91. // protections
  92. plotMap = new WorldPlotMap();
  93. scheduler.scheduleTask(() -> plotMap.read(server, logger));
  94. long time = 20 * 60 * 30; // all 30 minutes
  95. scheduler.scheduleRepeatingTask(() -> plotMap.save(), time, time);
  96. // block protections / player manager
  97. IBlockProtection blockProtection;
  98. IPlayerBank playerBank;
  99. if(databank.isDummyDatabank())
  100. {
  101. blockProtection = new DummyBlockProtection();
  102. playerBank = new DummyPlayerBank();
  103. }
  104. else
  105. {
  106. blockProtection = new BlockProtectionBank(databank);
  107. playerBank = new PlayerBank(databank);
  108. }
  109. MinecraftForge.EVENT_BUS.register(new ProtectionEvents(plotMap, perms));
  110. MinecraftForge.EVENT_BUS.register(new BlockProtectionEvents(blockProtection, perms));
  111. PlayerManager playerManager = new PlayerManager(logger, playerBank);
  112. MinecraftForge.EVENT_BUS.register(playerManager);
  113. CustomEventCaller customEventCaller = new CustomEventCaller(server, scheduler);
  114. scripts.setCustomEventCaller(customEventCaller);
  115. MinecraftForge.EVENT_BUS.register(customEventCaller);
  116. // scripts
  117. IScriptBank scriptBank;
  118. if(databank.isDummyDatabank())
  119. {
  120. scriptBank = new DummyScriptBank();
  121. }
  122. else
  123. {
  124. scriptBank = new ScriptBank(databank, playerManager);
  125. }
  126. MinecraftFunctions.registerFunctions(
  127. scripts.getScriptManager(), scripts, perms, scheduler, server, playerBank,
  128. customEventCaller, scriptBank, databank, blockProtection, plotMap, commands);
  129. MinecraftForge.EVENT_BUS.register(new WorldEvents());
  130. scripts.startScript("startscript");
  131. }
  132. public static void onStop()
  133. {
  134. scripts.startScript("endscript");
  135. scheduler.stop();
  136. scheduler.getWorker().stop();
  137. databank.closeDataBankConnection();
  138. }
  139. public static ISnuviLogger getLogger()
  140. {
  141. return logger;
  142. }
  143. }