package net.obnoxint.mcdev.omclib;
import java.io.File;
import net.obnoxint.mcdev.omclib.metrics.OmcLibMetricsFeature;
import net.obnoxint.util.RuntimeUtils;
import net.obnoxint.util.VersionNumber;
import net.obnoxint.util.VersionNumber.Versioned;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
public final class OmcLibPlugin extends JavaPlugin implements Versioned {
public static final String PLUGIN_NAME = "omc-lib";
private static OmcLibPlugin instance = null;
private static final String CLASSPATH = "plugins" + File.separator + "omc-lib.jar";
public static OmcLibPlugin getInstance() {
return instance;
}
/**
* Prepares the classpath of the execution environment for products depending on omc-lib.
*
* @return true if the class path was modified.
*/
private static void prepareClassPath() {
RuntimeUtils.removeFromClassPath(CLASSPATH);
RuntimeUtils.addToClassPath(CLASSPATH);
}
private VersionNumber versionNumber;
private UIDProvider uidProvider;
private OmcLibFeatureManager featureManager;
private PlayerPropertiesManager playerPropertiesManager;
private OmcCommandExecutor commandExecutor;
private File dataFolder = null;
public OmcLibPlugin() {
prepareClassPath();
instance = this;
}
public OmcCommandExecutor getCommandExecutor() {
return commandExecutor;
}
/**
* Returns the folder that the plugin data's files are located in. If the folder doesn't exist it will be created.
*
* @return The folder.
*/
@Override
public File getDataFolder() {
if (dataFolder == null) {
dataFolder = super.getDataFolder();
if (!dataFolder.exists()) {
dataFolder.mkdirs();
}
}
return dataFolder;
}
public OmcLibFeatureManager getFeatureManager() {
return featureManager;
}
public OmcLibMetricsFeature getMetricsFeature() {
return (OmcLibMetricsFeature) featureManager.getFeature(ImplementedFeature.METRICS.getName());
}
public PlayerProperties getPlayerProperties(final Player player) {
return playerPropertiesManager.getPlayerProperties(player);
}
public UIDProvider getUidProvider() {
return uidProvider;
}
@Override
public VersionNumber getVersionNumber() {
return versionNumber;
}
@Override
public void onDisable() {
featureManager.setFeatureActive(false);
playerPropertiesManager.storeAllPlayerProperties();
instance = null;
}
@Override
public void onEnable() {
versionNumber = VersionNumber.fromString(getDescription().getVersion());
uidProvider = new UIDProvider(this);
playerPropertiesManager = new PlayerPropertiesManager(this);
featureManager = new OmcLibFeatureManager(this);
commandExecutor = new OmcCommandExecutor();
getCommand("omc").setExecutor(commandExecutor);
}
}