2017-05-20 23:52:52 +02:00
|
|
|
package us.tastybento.bskyblock;
|
2017-05-20 23:09:53 +02:00
|
|
|
|
2017-07-06 19:21:38 +02:00
|
|
|
import org.bukkit.plugin.PluginManager;
|
2017-05-20 23:09:53 +02:00
|
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
2017-08-13 03:51:48 +02:00
|
|
|
|
2017-07-30 19:57:49 +02:00
|
|
|
import us.tastybento.bskyblock.commands.AdminCommand;
|
2017-06-11 01:08:21 +02:00
|
|
|
import us.tastybento.bskyblock.commands.IslandCommand;
|
2017-05-21 08:03:17 +02:00
|
|
|
import us.tastybento.bskyblock.database.BSBDatabase;
|
2017-05-31 16:32:36 +02:00
|
|
|
import us.tastybento.bskyblock.database.managers.PlayersManager;
|
2017-11-21 01:05:52 +01:00
|
|
|
import us.tastybento.bskyblock.database.managers.island.IslandsManager;
|
2017-06-10 23:03:41 +02:00
|
|
|
import us.tastybento.bskyblock.generators.IslandWorld;
|
2017-07-06 19:21:38 +02:00
|
|
|
import us.tastybento.bskyblock.listeners.JoinLeaveListener;
|
2017-12-29 18:11:14 +01:00
|
|
|
import us.tastybento.bskyblock.listeners.PanelListenerManager;
|
2018-02-02 17:18:56 +01:00
|
|
|
import us.tastybento.bskyblock.lists.Flags;
|
2017-12-28 14:49:27 +01:00
|
|
|
import us.tastybento.bskyblock.managers.AddonsManager;
|
2017-12-11 21:55:42 +01:00
|
|
|
import us.tastybento.bskyblock.managers.CommandsManager;
|
2018-01-01 01:41:19 +01:00
|
|
|
import us.tastybento.bskyblock.managers.FlagsManager;
|
2017-12-22 13:22:33 +01:00
|
|
|
import us.tastybento.bskyblock.managers.LocalesManager;
|
2018-01-28 21:47:17 +01:00
|
|
|
import us.tastybento.bskyblock.managers.RanksManager;
|
2017-05-20 23:09:53 +02:00
|
|
|
|
|
|
|
/**
|
2017-05-20 23:52:52 +02:00
|
|
|
* Main BSkyBlock class - provides an island minigame in the sky
|
2018-02-02 05:30:57 +01:00
|
|
|
* @author tastybento
|
2017-05-20 23:09:53 +02:00
|
|
|
* @author Poslovitch
|
|
|
|
*/
|
2018-01-02 03:32:59 +01:00
|
|
|
public class BSkyBlock extends JavaPlugin {
|
2017-06-12 01:30:34 +02:00
|
|
|
|
2017-05-20 23:52:52 +02:00
|
|
|
private static BSkyBlock plugin;
|
2017-10-23 04:08:34 +02:00
|
|
|
|
2017-05-20 23:09:53 +02:00
|
|
|
// Databases
|
|
|
|
private PlayersManager playersManager;
|
|
|
|
private IslandsManager islandsManager;
|
2017-06-12 01:30:34 +02:00
|
|
|
|
2017-05-20 23:09:53 +02:00
|
|
|
// Metrics
|
|
|
|
private Metrics metrics;
|
2017-05-24 17:10:49 +02:00
|
|
|
|
2017-12-11 21:55:42 +01:00
|
|
|
// Managers
|
|
|
|
private CommandsManager commandsManager;
|
2017-12-22 13:22:33 +01:00
|
|
|
private LocalesManager localesManager;
|
2017-12-28 14:49:27 +01:00
|
|
|
private AddonsManager addonsManager;
|
2018-01-01 01:41:19 +01:00
|
|
|
private FlagsManager flagsManager;
|
2018-01-07 00:23:01 +01:00
|
|
|
private IslandWorld islandWorldManager;
|
2018-01-28 21:47:17 +01:00
|
|
|
private RanksManager ranksManager;
|
2018-01-07 00:23:01 +01:00
|
|
|
|
|
|
|
// Settings
|
|
|
|
Settings settings;
|
|
|
|
|
2017-10-22 04:53:07 +02:00
|
|
|
|
2017-05-20 23:09:53 +02:00
|
|
|
@Override
|
|
|
|
public void onEnable(){
|
2018-01-07 23:43:37 +01:00
|
|
|
// Save the default config from config.yml
|
|
|
|
saveDefaultConfig();
|
2017-05-20 23:09:53 +02:00
|
|
|
plugin = this;
|
2018-01-07 23:43:37 +01:00
|
|
|
|
2018-01-07 00:23:01 +01:00
|
|
|
settings = new Settings();
|
2018-01-07 23:43:37 +01:00
|
|
|
// Load settings from config.yml. This will check if there are any issues with it too.
|
2018-01-06 04:58:08 +01:00
|
|
|
try {
|
2018-01-07 23:43:37 +01:00
|
|
|
//settings.saveSettings();
|
2018-01-07 00:23:01 +01:00
|
|
|
settings = settings.loadSettings();
|
2018-01-07 23:43:37 +01:00
|
|
|
} catch (Exception e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Save a backup of settings to the database so it can be checked next time
|
|
|
|
try {
|
|
|
|
settings.saveBackup();
|
2018-01-06 04:58:08 +01:00
|
|
|
} catch (Exception e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
2018-01-07 00:23:01 +01:00
|
|
|
|
|
|
|
playersManager = new PlayersManager(this);
|
|
|
|
islandsManager = new IslandsManager(this);
|
2018-01-28 21:47:17 +01:00
|
|
|
ranksManager = new RanksManager(this);
|
2018-01-07 00:23:01 +01:00
|
|
|
|
|
|
|
// Load metrics
|
|
|
|
metrics = new Metrics(plugin);
|
|
|
|
registerCustomCharts();
|
|
|
|
|
|
|
|
// Set up commands
|
|
|
|
commandsManager = new CommandsManager();
|
|
|
|
new IslandCommand();
|
|
|
|
new AdminCommand();
|
|
|
|
|
|
|
|
// These items have to be loaded when the server has done 1 tick.
|
|
|
|
// Note Worlds are not loaded this early, so any Locations or World reference will be null
|
|
|
|
// at this point. Therefore, the 1 tick scheduler is required.
|
2018-02-02 05:30:57 +01:00
|
|
|
getServer().getScheduler().runTask(this, () -> {
|
|
|
|
// Create the world if it does not exist
|
|
|
|
islandWorldManager = new IslandWorld(plugin);
|
|
|
|
|
|
|
|
getServer().getScheduler().runTask(plugin, () -> {
|
|
|
|
// Load islands from database
|
|
|
|
islandsManager.load();
|
|
|
|
|
|
|
|
localesManager = new LocalesManager(plugin);
|
|
|
|
//TODO localesManager.registerLocales(plugin);
|
|
|
|
|
|
|
|
// Register Listeners
|
|
|
|
registerListeners();
|
|
|
|
|
|
|
|
// Load Flags
|
|
|
|
flagsManager = new FlagsManager(plugin);
|
2018-02-03 20:54:33 +01:00
|
|
|
new Flags(plugin);
|
2018-02-02 05:30:57 +01:00
|
|
|
|
|
|
|
// Load addons
|
|
|
|
addonsManager = new AddonsManager(plugin);
|
|
|
|
addonsManager.enableAddons();
|
|
|
|
|
|
|
|
// Save islands & players data asynchronously every X minutes
|
|
|
|
getSettings().setDatabaseBackupPeriod(10 * 60 * 20);
|
|
|
|
plugin.getServer().getScheduler().runTaskTimer(plugin, () -> {
|
|
|
|
playersManager.save(true);
|
|
|
|
islandsManager.save(true);
|
|
|
|
}, getSettings().getDatabaseBackupPeriod(), getSettings().getDatabaseBackupPeriod());
|
|
|
|
});
|
2018-01-07 00:23:01 +01:00
|
|
|
});
|
2017-05-20 23:09:53 +02:00
|
|
|
}
|
2017-05-24 17:10:49 +02:00
|
|
|
|
2018-01-07 00:23:01 +01:00
|
|
|
|
|
|
|
|
2017-12-11 20:15:48 +01:00
|
|
|
private void registerListeners() {
|
2017-07-07 07:00:21 +02:00
|
|
|
PluginManager manager = getServer().getPluginManager();
|
|
|
|
// Player join events
|
|
|
|
manager.registerEvents(new JoinLeaveListener(this), this);
|
2017-12-29 18:11:14 +01:00
|
|
|
manager.registerEvents(new PanelListenerManager(), this);
|
2017-07-07 07:00:21 +02:00
|
|
|
}
|
|
|
|
|
2017-05-20 23:09:53 +02:00
|
|
|
@Override
|
2017-12-28 15:29:32 +01:00
|
|
|
public void onDisable() {
|
|
|
|
addonsManager.disableAddons();
|
2017-05-20 23:09:53 +02:00
|
|
|
// Save data
|
|
|
|
playersManager.shutdown();
|
|
|
|
islandsManager.shutdown();
|
|
|
|
}
|
2017-05-24 17:10:49 +02:00
|
|
|
|
2017-08-18 16:05:35 +02:00
|
|
|
private void registerCustomCharts(){
|
2017-05-20 23:09:53 +02:00
|
|
|
metrics.addCustomChart(new Metrics.SingleLineChart("islands_count") {
|
2017-05-24 17:10:49 +02:00
|
|
|
|
2017-05-20 23:09:53 +02:00
|
|
|
@Override
|
|
|
|
public int getValue() {
|
|
|
|
return islandsManager.getCount();
|
|
|
|
}
|
|
|
|
});
|
2017-05-24 17:10:49 +02:00
|
|
|
|
2017-05-20 23:09:53 +02:00
|
|
|
metrics.addCustomChart(new Metrics.SingleLineChart("created_islands") {
|
2017-05-24 17:10:49 +02:00
|
|
|
|
2017-05-20 23:09:53 +02:00
|
|
|
@Override
|
|
|
|
public int getValue() {
|
|
|
|
int created = islandsManager.metrics_getCreatedCount();
|
|
|
|
islandsManager.metrics_setCreatedCount(0);
|
|
|
|
return created;
|
|
|
|
}
|
|
|
|
});
|
2017-05-24 17:10:49 +02:00
|
|
|
|
2017-05-20 23:09:53 +02:00
|
|
|
metrics.addCustomChart(new Metrics.SimplePie("default_locale") {
|
2017-05-24 17:10:49 +02:00
|
|
|
|
2017-05-20 23:09:53 +02:00
|
|
|
@Override
|
|
|
|
public String getValue() {
|
2018-01-07 00:23:01 +01:00
|
|
|
return getSettings().getDefaultLanguage();
|
2017-05-20 23:09:53 +02:00
|
|
|
}
|
|
|
|
});
|
2017-05-24 17:10:49 +02:00
|
|
|
|
2017-05-20 23:09:53 +02:00
|
|
|
metrics.addCustomChart(new Metrics.SimplePie("database") {
|
2017-05-24 17:10:49 +02:00
|
|
|
|
2017-05-20 23:09:53 +02:00
|
|
|
@Override
|
|
|
|
public String getValue() {
|
2018-01-07 04:40:25 +01:00
|
|
|
return BSBDatabase.getDatabase().toString();
|
2017-05-20 23:09:53 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2017-05-24 17:10:49 +02:00
|
|
|
|
2017-05-20 23:09:53 +02:00
|
|
|
/**
|
|
|
|
* Returns the player database
|
|
|
|
* @return the player database
|
|
|
|
*/
|
|
|
|
public PlayersManager getPlayers(){
|
|
|
|
return playersManager;
|
|
|
|
}
|
2017-05-24 17:10:49 +02:00
|
|
|
|
2017-05-20 23:09:53 +02:00
|
|
|
/**
|
|
|
|
* Returns the island database
|
|
|
|
* @return the island database
|
|
|
|
*/
|
|
|
|
public IslandsManager getIslands(){
|
|
|
|
return islandsManager;
|
|
|
|
}
|
2017-06-11 01:08:21 +02:00
|
|
|
|
2017-12-28 04:16:13 +01:00
|
|
|
public static BSkyBlock getInstance() {
|
2017-06-11 01:08:21 +02:00
|
|
|
return plugin;
|
|
|
|
}
|
|
|
|
|
2018-01-01 01:41:19 +01:00
|
|
|
/**
|
|
|
|
* @return the Commands manager
|
|
|
|
*/
|
2017-12-11 21:55:42 +01:00
|
|
|
public CommandsManager getCommandsManager() {
|
|
|
|
return commandsManager;
|
|
|
|
}
|
|
|
|
|
2018-01-01 01:41:19 +01:00
|
|
|
/**
|
|
|
|
* @return the Locales manager
|
|
|
|
*/
|
2017-12-22 13:22:33 +01:00
|
|
|
public LocalesManager getLocalesManager() {
|
|
|
|
return localesManager;
|
|
|
|
}
|
|
|
|
|
2018-01-01 01:41:19 +01:00
|
|
|
/**
|
|
|
|
* @return the Addons manager
|
|
|
|
*/
|
|
|
|
public AddonsManager getAddonsManager() {
|
|
|
|
return addonsManager;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the Flags manager
|
|
|
|
*/
|
|
|
|
public FlagsManager getFlagsManager() {
|
|
|
|
return flagsManager;
|
|
|
|
}
|
|
|
|
|
2018-01-07 00:23:01 +01:00
|
|
|
/**
|
|
|
|
* @return the settings
|
|
|
|
*/
|
|
|
|
public Settings getSettings() {
|
|
|
|
return settings;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the Island World Manager
|
|
|
|
*/
|
|
|
|
public IslandWorld getIslandWorldManager() {
|
|
|
|
return islandWorldManager;
|
|
|
|
}
|
|
|
|
|
2018-01-28 21:47:17 +01:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the ranksManager
|
|
|
|
*/
|
|
|
|
public RanksManager getRanksManager() {
|
|
|
|
return ranksManager;
|
|
|
|
}
|
|
|
|
|
2017-05-20 23:09:53 +02:00
|
|
|
}
|