mcMMO.java 25 KB

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