2
0

mcMMO.java 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638
  1. package com.gmail.nossr50;
  2. import com.gmail.nossr50.config.ConfigManager;
  3. import com.gmail.nossr50.config.CoreSkillsConfig;
  4. import com.gmail.nossr50.config.MainConfig;
  5. import com.gmail.nossr50.config.experience.ExperienceConfig;
  6. import com.gmail.nossr50.config.hocon.database.ConfigSectionCleaning;
  7. import com.gmail.nossr50.config.hocon.database.ConfigSectionMySQL;
  8. import com.gmail.nossr50.config.hocon.party.ConfigSectionPartyExperienceSharing;
  9. import com.gmail.nossr50.config.hocon.party.ConfigSectionPartyLevel;
  10. import com.gmail.nossr50.config.hocon.playerleveling.ConfigLeveling;
  11. import com.gmail.nossr50.config.hocon.scoreboard.ConfigScoreboard;
  12. import com.gmail.nossr50.database.DatabaseManager;
  13. import com.gmail.nossr50.database.DatabaseManagerFactory;
  14. import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
  15. import com.gmail.nossr50.datatypes.skills.subskills.acrobatics.Roll;
  16. import com.gmail.nossr50.listeners.*;
  17. import com.gmail.nossr50.party.PartyManager;
  18. import com.gmail.nossr50.runnables.SaveTimerTask;
  19. import com.gmail.nossr50.runnables.backups.CleanBackupsTask;
  20. import com.gmail.nossr50.runnables.commands.NotifySquelchReminderTask;
  21. import com.gmail.nossr50.runnables.database.UserPurgeTask;
  22. import com.gmail.nossr50.runnables.party.PartyAutoKickTask;
  23. import com.gmail.nossr50.runnables.player.ClearRegisteredXPGainTask;
  24. import com.gmail.nossr50.runnables.player.PlayerProfileLoadingTask;
  25. import com.gmail.nossr50.runnables.player.PowerLevelUpdatingTask;
  26. import com.gmail.nossr50.runnables.skills.BleedTimerTask;
  27. import com.gmail.nossr50.skills.alchemy.Alchemy;
  28. import com.gmail.nossr50.skills.repair.repairables.RepairableManager;
  29. import com.gmail.nossr50.skills.salvage.salvageables.SalvageableManager;
  30. import com.gmail.nossr50.util.ChimaeraWing;
  31. import com.gmail.nossr50.util.LogFilter;
  32. import com.gmail.nossr50.util.Misc;
  33. import com.gmail.nossr50.util.Permissions;
  34. import com.gmail.nossr50.util.blockmeta.chunkmeta.ChunkManager;
  35. import com.gmail.nossr50.util.blockmeta.chunkmeta.ChunkManagerFactory;
  36. import com.gmail.nossr50.util.commands.CommandRegistrationManager;
  37. import com.gmail.nossr50.util.experience.FormulaManager;
  38. import com.gmail.nossr50.util.player.UserManager;
  39. import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
  40. import com.gmail.nossr50.util.skills.RankUtils;
  41. import com.gmail.nossr50.worldguard.WorldGuardManager;
  42. import net.shatteredlands.shatt.backup.ZipLibrary;
  43. import org.bstats.bukkit.Metrics;
  44. import org.bukkit.Bukkit;
  45. import org.bukkit.entity.Player;
  46. import org.bukkit.event.HandlerList;
  47. import org.bukkit.metadata.FixedMetadataValue;
  48. import org.bukkit.plugin.PluginManager;
  49. import org.bukkit.plugin.java.JavaPlugin;
  50. import java.io.File;
  51. import java.io.IOException;
  52. public class mcMMO extends JavaPlugin {
  53. public static final String COMPATIBLE_SERVER_SOFTWARE = "Spigot, Paper";
  54. public static final String INCOMPATIBLE_SERVER_SOFTWARE = "CraftBukkit";
  55. public static final String COMPATIBLE_MINECRAFT_VERSIONS = "1.13.2";
  56. /* Managers */
  57. private static ChunkManager placeStore;
  58. private static ConfigManager configManager;
  59. //private static ModManager modManager;
  60. private static DatabaseManager databaseManager;
  61. private static FormulaManager formulaManager;
  62. /*private static HolidayManager holidayManager;*/
  63. //private static UpgradeManager upgradeManager;
  64. /* File Paths */
  65. private static String mainDirectory;
  66. private static String flatFileDirectory;
  67. private static String usersFile;
  68. private static String modDirectory;
  69. public static mcMMO p;
  70. // Jar Stuff
  71. public static File mcmmo;
  72. /* Plugin Checks */
  73. private static boolean healthBarPluginEnabled;
  74. // XP Event Check
  75. private boolean xpEventEnabled;
  76. /* Metadata Values */
  77. public static final String FISH_HOOK_REF_METAKEY = "mcMMO: Fish Hook Tracker";
  78. public static final String CUSTOM_DAMAGE_METAKEY = "mcMMO: Custom Damage";
  79. public final static String entityMetadataKey = "mcMMO: Spawned Entity";
  80. public final static String blockMetadataKey = "mcMMO: Piston Tracking";
  81. public final static String furnaceMetadataKey = "mcMMO: Tracked Furnace";
  82. public final static String tntMetadataKey = "mcMMO: Tracked TNT";
  83. public final static String funfettiMetadataKey = "mcMMO: Funfetti";
  84. public final static String tntsafeMetadataKey = "mcMMO: Safe TNT";
  85. public final static String customNameKey = "mcMMO: Custom Name";
  86. public final static String customVisibleKey = "mcMMO: Name Visibility";
  87. public final static String droppedItemKey = "mcMMO: Tracked Item";
  88. public final static String infiniteArrowKey = "mcMMO: Infinite Arrow";
  89. public final static String bowForceKey = "mcMMO: Bow Force";
  90. public final static String arrowDistanceKey = "mcMMO: Arrow Distance";
  91. public final static String doubleDrops = "mcMMO: Double Drops";
  92. public final static String tripleDrops = "mcMMO: Triple Drops";
  93. //public final static String customDamageKey = "mcMMO: Custom Damage";
  94. public final static String disarmedItemKey = "mcMMO: Disarmed Item";
  95. public final static String playerDataKey = "mcMMO: Player Data";
  96. public final static String greenThumbDataKey = "mcMMO: Green Thumb";
  97. public final static String databaseCommandKey = "mcMMO: Processing Database Command";
  98. public final static String bredMetadataKey = "mcMMO: Bred Animal";
  99. public static FixedMetadataValue metadataValue;
  100. /**
  101. * Things to be run when the plugin is enabled.
  102. */
  103. @Override
  104. public void onEnable() {
  105. try {
  106. p = this;
  107. getLogger().setFilter(new LogFilter(this));
  108. //DEBUG
  109. /*getLogger().info(Bukkit.getBukkitVersion());
  110. getLogger().info(Bukkit.getVersion());*/
  111. metadataValue = new FixedMetadataValue(this, true);
  112. PluginManager pluginManager = getServer().getPluginManager();
  113. healthBarPluginEnabled = pluginManager.getPlugin("HealthBar") != null;
  114. //upgradeManager = new UpgradeManager();
  115. setupFilePaths();
  116. //modManager = new ModManager();
  117. loadConfigFiles();
  118. if (healthBarPluginEnabled) {
  119. getLogger().info("HealthBar plugin found, mcMMO's healthbars are automatically disabled.");
  120. }
  121. if (pluginManager.getPlugin("NoCheatPlus") != null && pluginManager.getPlugin("CompatNoCheatPlus") == null) {
  122. getLogger().warning("NoCheatPlus plugin found, but CompatNoCheatPlus was not found!");
  123. getLogger().warning("mcMMO will not work properly alongside NoCheatPlus without CompatNoCheatPlus");
  124. }
  125. databaseManager = DatabaseManagerFactory.getDatabaseManager();
  126. registerEvents();
  127. registerCoreSkills();
  128. registerCustomRecipes();
  129. if(getConfigManager().getConfigParty().isPartySystemEnabled())
  130. PartyManager.loadParties();
  131. formulaManager = new FormulaManager();
  132. /*holidayManager = new HolidayManager();*/
  133. for (Player player : getServer().getOnlinePlayers()) {
  134. new PlayerProfileLoadingTask(player).runTaskLaterAsynchronously(mcMMO.p, 1); // 1 Tick delay to ensure the player is marked as online before we begin loading
  135. }
  136. debug("Version " + getDescription().getVersion() + " is enabled!");
  137. scheduleTasks();
  138. CommandRegistrationManager.registerCommands();
  139. placeStore = ChunkManagerFactory.getChunkManager(); // Get our ChunkletManager
  140. if (mcMMO.getConfigManager().getConfigParty().getPTP().isPtpWorldBasedPermissions()) {
  141. Permissions.generateWorldTeleportPermissions();
  142. }
  143. //Populate Ranked Skill Maps (DO THIS LAST)
  144. RankUtils.populateRanks();
  145. //If anonymous statistics are enabled then use them
  146. if(getConfigManager().getConfigMetrics().isAllowAnonymousUsageStatistics()) {
  147. Metrics metrics;
  148. metrics = new Metrics(this);
  149. metrics.addCustomChart(new Metrics.SimplePie("version", () -> getDescription().getVersion()));
  150. if(!configManager.getConfigLeveling().getConfigSectionLevelingGeneral().getConfigSectionLevelScaling().isRetroModeEnabled())
  151. metrics.addCustomChart(new Metrics.SimplePie("scaling", () -> "Standard"));
  152. else
  153. metrics.addCustomChart(new Metrics.SimplePie("scaling", () -> "Retro"));
  154. //Simplified Server Software Tracking
  155. if(Bukkit.getServer().getVersion().contains("paper"))
  156. metrics.addCustomChart(new Metrics.SimplePie("Server_software", () -> "Paper"));
  157. else if(Bukkit.getServer().getVersion().contains("spigot") && !Bukkit.getServer().getVersion().contains("paper"))
  158. metrics.addCustomChart(new Metrics.SimplePie("Server_software", () -> "Spigot"));
  159. else if(Bukkit.getServer().getVersion().contains("bukkit"))
  160. metrics.addCustomChart(new Metrics.SimplePie("Server_software", () -> "CraftBukkit"));
  161. else
  162. metrics.addCustomChart(new Metrics.SimplePie("Server_software", () -> "Unknown"));
  163. }
  164. }
  165. catch (Throwable t) {
  166. getLogger().severe("There was an error while enabling mcMMO!");
  167. t.printStackTrace();
  168. getLogger().severe("End of error report for mcMMO");
  169. getLogger().info("Please do not replace the mcMMO jar while the server is running.");
  170. //getServer().getPluginManager().disablePlugin(this);
  171. }
  172. /*if(isIncompatibleVersion(Bukkit.getVersion(), Bukkit.getBukkitVersion()))
  173. {
  174. getLogger().severe("mcMMO is not supported for your current server software and or Minecraft version");
  175. if(isServerSoftwareIncompatible(Bukkit.getVersion()))
  176. {
  177. getLogger().severe("mcMMO does not recognize your server software as being compatible!");
  178. getLogger().severe("Compatible Server Software: "+ COMPATIBLE_SERVER_SOFTWARE);
  179. getLogger().severe("Incompatible Server Software: "+ INCOMPATIBLE_SERVER_SOFTWARE);
  180. }
  181. if(isServerMinecraftVersionIncompatible(Bukkit.getBukkitVersion()))
  182. {
  183. getLogger().severe("mcMMO does not recognize your Minecraft Version as being compatible!");
  184. getLogger().severe("Compatible Minecraft Versions: "+ COMPATIBLE_MINECRAFT_VERSIONS);
  185. getLogger().info("TIP: Paper and Spigot are extensions of CraftBukkit and are completely safe to upgrade to from CraftBukkit, please consider upgrading.");
  186. }
  187. }*/
  188. }
  189. private boolean isIncompatibleVersion(String serverSoftwareString, String serverVersionString)
  190. {
  191. if (isServerSoftwareIncompatible(serverSoftwareString))
  192. return true;
  193. if (isServerMinecraftVersionIncompatible(serverVersionString))
  194. return true;
  195. return false;
  196. }
  197. private boolean isServerMinecraftVersionIncompatible(String serverVersionString) {
  198. if(!serverVersionString.contains("1.13.2"))
  199. return true;
  200. return false;
  201. }
  202. private boolean isServerSoftwareIncompatible(String serverSoftwareString) {
  203. if(!serverSoftwareString.contains("paper") && !serverSoftwareString.contains("spigot"))
  204. return true;
  205. return false;
  206. }
  207. @Override
  208. public void onLoad()
  209. {
  210. if(getServer().getPluginManager().getPlugin("WorldGuard") != null)
  211. WorldGuardManager.getInstance().registerFlags();
  212. }
  213. /**
  214. * Things to be run when the plugin is disabled.
  215. */
  216. @Override
  217. public void onDisable() {
  218. try {
  219. Alchemy.finishAllBrews(); // Finish all partially complete AlchemyBrewTasks to prevent vanilla brewing continuation on restart
  220. UserManager.saveAll(); // Make sure to save player information if the server shuts down
  221. UserManager.clearAll();
  222. PartyManager.saveParties(); // Save our parties
  223. //TODO: Needed?
  224. if(mcMMO.getScoreboardSettings().getScoreboardsEnabled())
  225. ScoreboardManager.teardownAll();
  226. formulaManager.saveFormula();
  227. /*holidayManager.saveAnniversaryFiles();*/
  228. placeStore.saveAll(); // Save our metadata
  229. placeStore.cleanUp(); // Cleanup empty metadata stores
  230. }
  231. catch (NullPointerException e) { e.printStackTrace(); }
  232. debug("Canceling all tasks...");
  233. getServer().getScheduler().cancelTasks(this); // This removes our tasks
  234. debug("Unregister all events...");
  235. HandlerList.unregisterAll(this); // Cancel event registrations
  236. if (mcMMO.getConfigManager().getConfigAutomatedBackups().isZipBackupsEnabled()) {
  237. // Remove other tasks BEFORE starting the Backup, or we just cancel it straight away.
  238. try {
  239. ZipLibrary.mcMMOBackup();
  240. }
  241. catch (IOException e) {
  242. getLogger().severe(e.toString());
  243. }
  244. catch (Throwable e) {
  245. if (e instanceof NoClassDefFoundError) {
  246. getLogger().severe("Backup class not found!");
  247. getLogger().info("Please do not replace the mcMMO jar while the server is running.");
  248. }
  249. else {
  250. getLogger().severe(e.toString());
  251. }
  252. }
  253. }
  254. databaseManager.onDisable();
  255. //Unload configs last
  256. configManager.unloadAllConfigsAndRegisters();
  257. debug("Was disabled."); // How informative!
  258. }
  259. public static String getMainDirectory() {
  260. return mainDirectory;
  261. }
  262. public static String getFlatFileDirectory() {
  263. return flatFileDirectory;
  264. }
  265. public static String getUsersFilePath() {
  266. return usersFile;
  267. }
  268. public static String getModDirectory() {
  269. return modDirectory;
  270. }
  271. public boolean isXPEventEnabled() {
  272. return xpEventEnabled;
  273. }
  274. public void setXPEventEnabled(boolean enabled) {
  275. this.xpEventEnabled = enabled;
  276. }
  277. public void toggleXpEventEnabled() {
  278. xpEventEnabled = !xpEventEnabled;
  279. }
  280. public void debug(String message) {
  281. getLogger().info("[Debug] " + message);
  282. }
  283. public static FormulaManager getFormulaManager() {
  284. return formulaManager;
  285. }
  286. /*public static HolidayManager getHolidayManager() {
  287. return holidayManager;
  288. }*/
  289. public static ChunkManager getPlaceStore() {
  290. return placeStore;
  291. }
  292. public static RepairableManager getRepairableManager() {
  293. return configManager.getRepairableManager();
  294. }
  295. public static SalvageableManager getSalvageableManager() {
  296. return configManager.getSalvageableManager();
  297. }
  298. public static DatabaseManager getDatabaseManager() {
  299. return databaseManager;
  300. }
  301. /**
  302. * Returns settings for MySQL from the users config
  303. * @return settings for MySQL from the users config
  304. */
  305. public static ConfigSectionMySQL getMySQLConfigSettings()
  306. {
  307. return configManager.getConfigDatabase().getConfigSectionMySQL();
  308. }
  309. /**
  310. * Returns settings for Player Leveling from the users config
  311. * @return settings for Player Leveling from the users config
  312. */
  313. public static ConfigLeveling getPlayerLevelingSettings()
  314. {
  315. return configManager.getConfigLeveling();
  316. }
  317. /**
  318. * Returns settings for Database cleaning from the users config
  319. * @return settings for Database cleaning from the users config
  320. */
  321. public static ConfigSectionCleaning getDatabaseCleaningSettings()
  322. {
  323. return configManager.getConfigDatabase().getConfigSectionCleaning();
  324. }
  325. /**
  326. * Returns settings for Party XP sharing from the users config
  327. * @return settings for the Party XP sharing from the users config
  328. */
  329. public static ConfigSectionPartyExperienceSharing getPartyXPShareSettings()
  330. {
  331. return configManager.getConfigParty().getPartyXP().getPartyExperienceSharing();
  332. }
  333. /**
  334. * Returns settings for Party Leveling from the users config
  335. * @return settings for the Party Leveling from the users config
  336. */
  337. public static ConfigSectionPartyLevel getPartyLevelSettings()
  338. {
  339. return configManager.getConfigParty().getPartyXP().getPartyLevel();
  340. }
  341. /**
  342. * Returns settings for Scoreboards from the users config
  343. * @return settings for Scoreboards from the users config
  344. */
  345. public static ConfigScoreboard getScoreboardSettings()
  346. {
  347. return configManager.getConfigScoreboard();
  348. }
  349. /*public static ModManager getModManager() {
  350. return modManager;
  351. }*/
  352. /*public static UpgradeManager getUpgradeManager() {
  353. return upgradeManager;
  354. }*/
  355. @Deprecated
  356. public static void setDatabaseManager(DatabaseManager databaseManager) {
  357. mcMMO.databaseManager = databaseManager;
  358. }
  359. public static boolean isHealthBarPluginEnabled() {
  360. return healthBarPluginEnabled;
  361. }
  362. /**
  363. * Setup the various storage file paths
  364. */
  365. private void setupFilePaths() {
  366. mcmmo = getFile();
  367. mainDirectory = getDataFolder().getPath() + File.separator;
  368. flatFileDirectory = mainDirectory + "flatfile" + File.separator;
  369. usersFile = flatFileDirectory + "mcmmo.users";
  370. modDirectory = mainDirectory + "mods" + File.separator;
  371. fixFilePaths();
  372. }
  373. private void fixFilePaths() {
  374. File oldFlatfilePath = new File(mainDirectory + "FlatFileStuff" + File.separator);
  375. File oldModPath = new File(mainDirectory + "ModConfigs" + File.separator);
  376. if (oldFlatfilePath.exists()) {
  377. if (!oldFlatfilePath.renameTo(new File(flatFileDirectory))) {
  378. getLogger().warning("Failed to rename FlatFileStuff to flatfile!");
  379. }
  380. }
  381. if (oldModPath.exists()) {
  382. if (!oldModPath.renameTo(new File(modDirectory))) {
  383. getLogger().warning("Failed to rename ModConfigs to mods!");
  384. }
  385. }
  386. File oldArmorFile = new File(modDirectory + "armor.yml");
  387. File oldBlocksFile = new File(modDirectory + "blocks.yml");
  388. File oldEntitiesFile = new File(modDirectory + "entities.yml");
  389. File oldToolsFile = new File(modDirectory + "tools.yml");
  390. if (oldArmorFile.exists()) {
  391. if (!oldArmorFile.renameTo(new File(modDirectory + "armor.default.yml"))) {
  392. getLogger().warning("Failed to rename armor.yml to armor.default.yml!");
  393. }
  394. }
  395. if (oldBlocksFile.exists()) {
  396. if (!oldBlocksFile.renameTo(new File(modDirectory + "blocks.default.yml"))) {
  397. getLogger().warning("Failed to rename blocks.yml to blocks.default.yml!");
  398. }
  399. }
  400. if (oldEntitiesFile.exists()) {
  401. if (!oldEntitiesFile.renameTo(new File(modDirectory + "entities.default.yml"))) {
  402. getLogger().warning("Failed to rename entities.yml to entities.default.yml!");
  403. }
  404. }
  405. if (oldToolsFile.exists()) {
  406. if (!oldToolsFile.renameTo(new File(modDirectory + "tools.default.yml"))) {
  407. getLogger().warning("Failed to rename tools.yml to tools.default.yml!");
  408. }
  409. }
  410. File currentFlatfilePath = new File(flatFileDirectory);
  411. currentFlatfilePath.mkdirs();
  412. }
  413. private void loadConfigFiles() {
  414. configManager = new ConfigManager();
  415. configManager.loadConfigs();
  416. }
  417. private void registerEvents() {
  418. PluginManager pluginManager = getServer().getPluginManager();
  419. // Register events
  420. pluginManager.registerEvents(new PlayerListener(this), this);
  421. pluginManager.registerEvents(new BlockListener(this), this);
  422. pluginManager.registerEvents(new EntityListener(this), this);
  423. pluginManager.registerEvents(new InventoryListener(this), this);
  424. pluginManager.registerEvents(new SelfListener(this), this);
  425. pluginManager.registerEvents(new WorldListener(this), this);
  426. }
  427. /**
  428. * Registers core skills
  429. * This enables the skills in the new skill system
  430. */
  431. private void registerCoreSkills() {
  432. /*
  433. * Acrobatics skills
  434. */
  435. if(CoreSkillsConfig.getInstance().isPrimarySkillEnabled(PrimarySkillType.ACROBATICS))
  436. {
  437. System.out.println("[mcMMO]" + " enabling Acrobatics Skills");
  438. //TODO: Should do this differently
  439. Roll roll = new Roll();
  440. CoreSkillsConfig.getInstance().isSkillEnabled(roll);
  441. InteractionManager.registerSubSkill(new Roll());
  442. }
  443. }
  444. private void registerCustomRecipes() {
  445. getServer().getScheduler().scheduleSyncDelayedTask(this, () -> {
  446. if (MainConfig.getInstance().getChimaeraEnabled()) {
  447. getServer().addRecipe(ChimaeraWing.getChimaeraWingRecipe());
  448. }
  449. }, 40);
  450. }
  451. private void scheduleTasks() {
  452. // Periodic save timer (Saves every 10 minutes by default)
  453. long saveIntervalTicks = Math.max(1200, (getConfigManager().getConfigDatabase().getConfigSectionDatabaseGeneral().getSaveIntervalMinutes() * (20 * 60)));
  454. new SaveTimerTask().runTaskTimer(this, saveIntervalTicks, saveIntervalTicks);
  455. // Cleanup the backups folder
  456. new CleanBackupsTask().runTaskAsynchronously(mcMMO.p);
  457. // Bleed timer (Runs every 0.5 seconds)
  458. new BleedTimerTask().runTaskTimer(this, Misc.TICK_CONVERSION_FACTOR, (Misc.TICK_CONVERSION_FACTOR / 2));
  459. // Old & Powerless User remover
  460. long purgeIntervalTicks = getConfigManager().getConfigDatabase().getConfigSectionCleaning().getPurgeInterval() * 60L * 60L * Misc.TICK_CONVERSION_FACTOR;
  461. if (mcMMO.getDatabaseCleaningSettings().isOnlyPurgeAtStartup()) {
  462. new UserPurgeTask().runTaskLaterAsynchronously(this, 2 * Misc.TICK_CONVERSION_FACTOR); // Start 2 seconds after startup.
  463. }
  464. else if (purgeIntervalTicks > 0) {
  465. new UserPurgeTask().runTaskTimerAsynchronously(this, purgeIntervalTicks, purgeIntervalTicks);
  466. }
  467. //Party System Stuff
  468. if(mcMMO.configManager.getConfigParty().isPartySystemEnabled())
  469. {
  470. // Automatically remove old members from parties
  471. long kickIntervalTicks = getConfigManager().getConfigParty().getPartyCleanup().getPartyAutoKickHoursInterval() * 60L * 60L * Misc.TICK_CONVERSION_FACTOR;
  472. if (kickIntervalTicks == 0) {
  473. new PartyAutoKickTask().runTaskLater(this, 2 * Misc.TICK_CONVERSION_FACTOR); // Start 2 seconds after startup.
  474. }
  475. else if (kickIntervalTicks > 0) {
  476. new PartyAutoKickTask().runTaskTimer(this, kickIntervalTicks, kickIntervalTicks);
  477. }
  478. }
  479. // Update power level tag scoreboards
  480. new PowerLevelUpdatingTask().runTaskTimer(this, 2 * Misc.TICK_CONVERSION_FACTOR, 2 * Misc.TICK_CONVERSION_FACTOR);
  481. /*if (getHolidayManager().nearingAprilFirst()) {
  482. new CheckDateTask().runTaskTimer(this, 10L * Misc.TICK_CONVERSION_FACTOR, 1L * 60L * 60L * Misc.TICK_CONVERSION_FACTOR);
  483. }*/
  484. // Clear the registered XP data so players can earn XP again
  485. if (ExperienceConfig.getInstance().getDiminishedReturnsEnabled()) {
  486. new ClearRegisteredXPGainTask().runTaskTimer(this, 60, 60);
  487. }
  488. if(configManager.getConfigNotifications().getConfigNotificationGeneral().isPlayerTips())
  489. {
  490. new NotifySquelchReminderTask().runTaskTimer(this, 60, ((20 * 60) * 60));
  491. }
  492. }
  493. /*private void checkModConfigs() {
  494. if (!MainConfig.getInstance().getToolModsEnabled()) {
  495. getLogger().warning("Cauldron implementation found, but the custom tool config for mcMMO is disabled!");
  496. getLogger().info("To enable, set Mods.Tool_Mods_Enabled to TRUE in config.yml.");
  497. }
  498. if (!MainConfig.getInstance().getArmorModsEnabled()) {
  499. getLogger().warning("Cauldron implementation found, but the custom armor config for mcMMO is disabled!");
  500. getLogger().info("To enable, set Mods.Armor_Mods_Enabled to TRUE in config.yml.");
  501. }
  502. if (!MainConfig.getInstance().getBlockModsEnabled()) {
  503. getLogger().warning("Cauldron implementation found, but the custom block config for mcMMO is disabled!");
  504. getLogger().info("To enable, set Mods.Block_Mods_Enabled to TRUE in config.yml.");
  505. }
  506. if (!MainConfig.getInstance().getEntityModsEnabled()) {
  507. getLogger().warning("Cauldron implementation found, but the custom entity config for mcMMO is disabled!");
  508. getLogger().info("To enable, set Mods.Entity_Mods_Enabled to TRUE in config.yml.");
  509. }
  510. }*/
  511. /**
  512. * Checks if this plugin is using retro mode
  513. * Retro mode is a 0-1000 skill system
  514. * Standard mode is scaled for 1-100
  515. * @return true if retro mode is enabled
  516. */
  517. public static boolean isRetroModeEnabled() {
  518. return configManager.isRetroMode();
  519. }
  520. public static ConfigManager getConfigManager() {
  521. return configManager;
  522. }
  523. }