Server.java 5.1 KB

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