package net.knarcraft.dynmapcitizens; import net.knarcraft.dynmapcitizens.formatting.DynmapCitizensTranslatableMessage; import net.knarcraft.dynmapcitizens.handler.VaultHandler; import net.knarcraft.dynmapcitizens.handler.trait.BlacksmithHandler; import net.knarcraft.dynmapcitizens.handler.trait.CitizensTraitHandler; import net.knarcraft.dynmapcitizens.handler.trait.MinstrelHandler; import net.knarcraft.dynmapcitizens.handler.trait.SentinelHandler; import net.knarcraft.dynmapcitizens.handler.trait.quests.QuestsHandler; import net.knarcraft.dynmapcitizens.settings.GlobalSettings; import net.knarcraft.knarlib.formatting.TranslatableTimeUnit; import net.knarcraft.knarlib.formatting.Translator; import org.bukkit.Bukkit; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.dynmap.DynmapAPI; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; @SuppressWarnings("unused") public final class DynmapCitizens extends JavaPlugin { private static DynmapCitizens instance; private static Translator translator; private DynmapAPI dynmapAPIInstance; private VaultHandler vaultHandler; private GlobalSettings globalSettings; private List traitHandlers; @Override public void onEnable() { DynmapCitizens.instance = this; //Initialize quest and dynmap APIs PluginManager pluginManager = Bukkit.getPluginManager(); Plugin dynmapPlugin = pluginManager.getPlugin("dynmap"); if (!(dynmapPlugin instanceof DynmapAPI dynmapAPI) || dynmapAPI.getMarkerAPI() == null) { this.getLogger().log(Level.SEVERE, "Could not initialize Dynmap"); this.onDisable(); return; } this.dynmapAPIInstance = dynmapAPI; this.globalSettings = new GlobalSettings(); FileConfiguration configuration = this.getConfig(); this.saveDefaultConfig(); configuration.options().copyDefaults(true); this.saveConfig(); this.reloadConfig(); configuration = this.getConfig(); this.globalSettings.load(configuration); //Load all messages translator = new Translator(); translator.registerMessageCategory(TranslatableTimeUnit.UNIT_SECOND); translator.registerMessageCategory(DynmapCitizensTranslatableMessage.SENTINEL_DESCRIPTION); translator.loadLanguages(this.getDataFolder(), "en"); //Initialize all enabled traits initializeTraitHandlers(configuration); //Schedule handlers to run periodically Bukkit.getScheduler().runTaskTimer(this, () -> { for (CitizensTraitHandler handler : this.traitHandlers) { if (handler.isEnabled()) { handler.updateMarkers(); } } }, 10 * 20, this.globalSettings.getUpdateAllMarkersDelay() * 20); this.vaultHandler = new VaultHandler(this.getServer().getServicesManager()); } @Override public void onDisable() { //TODO: Perhaps remove icons, just in case? } /** * Gets the translator to use for translation * * @return

The translator to use

*/ public static Translator getTranslator() { return translator; } /** * Gets the global settings for this plugin * * @return

The global settings for this plugin

*/ public GlobalSettings getGlobalSettings() { return this.globalSettings; } /** * Gets the Vault handler to use for anything Vault-related * * @return

The Vault handler

*/ public VaultHandler getVaultHandler() { return this.vaultHandler; } /** * Gets a reference to the Dynmap API * * @return

A reference to the Dynmap API

*/ public DynmapAPI getDynmapAPI() { return this.dynmapAPIInstance; } /** * Gets an instance of this plugin * * @return

An instance of this plugin

*/ public static DynmapCitizens getInstance() { return DynmapCitizens.instance; } /** * Initializes all trait handlers * * @param configuration

The configuration to read settings from

*/ private void initializeTraitHandlers(FileConfiguration configuration) { //Register all trait handlers this.traitHandlers = new ArrayList<>(); this.traitHandlers.add(new BlacksmithHandler()); this.traitHandlers.add(new QuestsHandler()); this.traitHandlers.add(new SentinelHandler()); this.traitHandlers.add(new MinstrelHandler()); //Load and initialize all enabled trait handlers for (CitizensTraitHandler handler : this.traitHandlers) { //Load configuration values from the config file handler.getSettings().load(configuration); //Check if the handler is enabled in the config before doing anything if (!handler.getSettings().isEnabled()) { getLogger().log(Level.INFO, handler + " is disabled"); continue; } //Initialize, and update markers if successfully enabled handler.initialize(); if (handler.isEnabled()) { getLogger().log(Level.INFO, handler + " is enabled"); handler.updateMarkers(); } } } }