package nl.iobyte.themepark; import nl.iobyte.menuapi.MenuAPI; import nl.iobyte.themepark.api.ThemeParkAPI; import nl.iobyte.themepark.api.config.enums.StorageKey; import nl.iobyte.themepark.commands.ThemeParkCommand; import nl.iobyte.themepark.listeners.*; import nl.iobyte.themepark.logger.ThemeParkLogger; import nl.iobyte.themepark.utils.UpdateManager; import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import java.lang.reflect.Method; public class ThemePark extends JavaPlugin { private static ThemePark instance; private final ThemeParkAPI api = new ThemeParkAPI(); private boolean disabling = false; public void onEnable() { instance = this; api.enable(); loadCommands(); loadListeners(); loadTrainCarts(); loadUpdateManager(); } private void loadCommands() { new ThemeParkCommand(); } private void loadListeners() { PluginManager pm = Bukkit.getPluginManager(); pm.registerEvents(new PlayerListener(), this); pm.registerEvents(new RegionListener(), this); pm.registerEvents(new AttractionListener(), this); pm.registerEvents(new StatusListener(), this); pm.registerEvents(new RideCountListener(), this); pm.registerEvents(new StatusSignListener(), this); pm.registerEvents(new GeneralListener(), this); MenuAPI.register(this); } private void loadTrainCarts() { try { Plugin plugin = Bukkit.getPluginManager().getPlugin("Train_Carts"); if (plugin != null && plugin.isEnabled()) { Class clazz = Class.forName("com.bergerkiller.bukkit.tc.signactions.SignAction"); Class sign = Class.forName("nl.iobyte.themepark.traincarts.RideCountSign"); Method method = clazz.getMethod("register", clazz); method.invoke(clazz, sign.getDeclaredConstructor().newInstance()); } } catch (Exception e) { System.out.println("["+getName()+"] Unable to hook into TrainCarts"); } } private void loadUpdateManager() { if(!api.getConfigurationManager().getBoolean(StorageKey.UPDATE_CHECK_ENABLED)) return; UpdateManager manager = new UpdateManager(this, 48648); manager.handleResponse((response, version) -> { switch (response) { case LATEST: getLogger().info("You're running the latest version("+version.get()+")"); break; case THIS_NEWER: getLogger().info("You're running a newer version("+version.get()+")"); break; case UNAVAILABLE: getLogger().info("Unable to check for updates"); break; case FOUND_NEW: getLogger().info("Found newer version("+version.get()+")"); if(!api.getConfigurationManager().getBoolean(StorageKey.UPDATE_DOWNLOAD_ENABLED)) return; manager.handleDownloadResponse((downloadResponse, fileName) -> { switch (downloadResponse) { case DONE: getLogger().info("Update downloaded! If you restart your server, it will be loaded. Filename: " + fileName); break; case ERROR: getLogger().severe("Something went wrong when trying downloading the latest version."); break; case UNAVAILABLE: getLogger().warning("Unable to download the latest version."); break; } }).runUpdate(); } }).check(); } public void onDisable() { disabling = true; api.disable(); instance = null; } public static ThemePark getInstance() { return instance; } public ThemeParkAPI getAPI() { return api; } public boolean isDisabling() { return disabling; } }