package regalowl.hyperconomy; import java.io.File; import java.util.logging.Logger; import net.milkbowl.vault.Vault; import net.milkbowl.vault.economy.Economy; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.event.HandlerList; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.ServicePriority; import org.bukkit.plugin.java.JavaPlugin; import regalowl.databukkit.CommonFunctions; import regalowl.databukkit.DataBukkit; import regalowl.databukkit.FileTools; import regalowl.databukkit.SQLRead; import regalowl.databukkit.SQLWrite; import regalowl.databukkit.YamlHandler; public class HyperConomy extends JavaPlugin implements DataLoadListener { public static HyperConomy hc; public static HyperAPI hyperAPI; public static HyperEconAPI hyperEconAPI; public static HyperObjectAPI hyperObjectAPI; private EconomyManager em; private DataBukkit db; private YamlHandler yh; private Log l; private InfoSignHandler isign; private _Command commandhandler; private History hist; private Notification not; private ItemDisplayFactory itdi; private SQLWrite sw; private SQLRead sr; private ChestShop cs; private FrameShopHandler fsh; private HyperLock hl; private LanguageFile L; private Logger log = Logger.getLogger("Minecraft"); private Economy economy; private HyperEventHandler heh; private boolean enabled; private boolean useExternalEconomy; private boolean vaultInstalled; private CommonFunctions cf; private FileTools ft; private ConsoleSettings cos; @Override public void onLoad() { load(); } @Override public void onEnable() { enable(); } @Override public void onDisable() { disable(false); } private void load() { enabled = false; hc = this; hyperAPI = new HyperAPI(); hyperEconAPI = new HyperEconAPI(); hyperObjectAPI = new HyperObjectAPI(); db = new DataBukkit(this); cf = db.getCommonFunctions(); ft = db.getFileTools(); yh = db.getYamlHandler(); yh.copyFromJar("categories"); yh.copyFromJar("config"); yh.copyFromJar("objects"); yh.copyFromJar("composites"); yh.registerFileConfiguration("categories"); yh.registerFileConfiguration("composites"); yh.registerFileConfiguration("config"); yh.registerFileConfiguration("displays"); yh.registerFileConfiguration("objects"); yh.registerFileConfiguration("shops"); yh.registerFileConfiguration("signs"); yh.registerFileConfiguration("temp"); L = new LanguageFile(); hl = new HyperLock(true, false, false); new UpdateYML(); heh = new HyperEventHandler(); heh.registerDataLoadListener(this); hookVault(); } private void enable() { HandlerList.unregisterAll(this); em = new EconomyManager(); FileConfiguration config = yh.gFC("config"); if (config.getBoolean("config.sql-connection.use-mysql")) { String username = config.getString("config.sql-connection.username"); String password = config.getString("config.sql-connection.password"); int port = config.getInt("config.sql-connection.port"); String host = config.getString("config.sql-connection.host"); String database = config.getString("config.sql-connection.database"); db.enableMySQL(host, database, username, password, port); } db.createDatabase(); sw = db.getSQLWrite(); sr = db.getSQLRead(); if (config.getBoolean("config.log-sql-statements")) { sw.setLogSQL(true); } setupExternalEconomy(); logEconomyState(); em.load(); l = new Log(this); commandhandler = new _Command(); not = new Notification(); new TransactionSign(); yh.startSaveTask(config.getLong("config.saveinterval")); cs = new ChestShop(); cos = new ConsoleSettings("default"); } public void onDataLoad() { hist = new History(); itdi = new ItemDisplayFactory(); registerCommands(); isign = new InfoSignHandler(); isign.updateSigns(); fsh = new FrameShopHandler(); enabled = true; hl.setLoadLock(false); } public void disable(boolean protect) { unHookVault(); enabled = false; HandlerList.unregisterAll(this); if (itdi != null) { itdi.unloadDisplays(); } if (hist != null) { hist.stopHistoryLog(); } if (db != null) { db.shutDown(); db = null; } getServer().getScheduler().cancelTasks(this); if (em != null) { em.clearData(); } if (protect) { new DisabledProtection(); } if (heh != null) { heh.clearListeners(); } } public void restart() { disable(true); load(); enable(); } private void registerCommands() { Bukkit.getServer().getPluginCommand("addcategory").setExecutor(new Addcategory()); Bukkit.getServer().getPluginCommand("additem").setExecutor(new Additem()); Bukkit.getServer().getPluginCommand("manageshop").setExecutor(new Manageshop()); Bukkit.getServer().getPluginCommand("ymladditem").setExecutor(new Ymladditem()); Bukkit.getServer().getPluginCommand("hcset").setExecutor(new Hcset()); Bukkit.getServer().getPluginCommand("hcdelete").setExecutor(new Hcdelete()); Bukkit.getServer().getPluginCommand("hctest").setExecutor(new Hctest()); Bukkit.getServer().getPluginCommand("frameshop").setExecutor(new Frameshopcommand()); } public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (hl.loadLock()) { hl.sendLockMessage(sender); return true; } try { if (cmd.getName().equalsIgnoreCase("lockshop") && !hl.fullLock()) { try { if (args.length == 0) { if (hl.playerLock()) { hl.setPlayerLock(false); sender.sendMessage(L.get("SHOP_UNLOCKED")); return true; } else if (!hl.playerLock()) { hl.setPlayerLock(true); sender.sendMessage(L.get("SHOP_LOCKED")); return true; } else { sender.sendMessage(L.get("FIX_YML_FILE")); return true; } } else { sender.sendMessage(L.get("LOCKSHOP_INVALID")); return true; } } catch (Exception e) { sender.sendMessage(L.get("LOCKSHOP_INVALID")); return true; } } else if (cmd.getName().equalsIgnoreCase("hc")) { if ((args.length == 0 && !hl.isLocked(sender)) || (args.length >= 1 && !args[0].equalsIgnoreCase("enable") && !args[0].equalsIgnoreCase("disable") && !hl.isLocked(sender))) { new Hc(sender, args); return true; } else { if (sender.hasPermission("hyperconomy.admin")) { if (args.length == 1 && args[0].equalsIgnoreCase("enable") && hl.fullLock()) { load(); enable(); sender.sendMessage(L.get("HC_HYPERCONOMY_ENABLED")); sender.sendMessage(L.get("FILES_RELOADED")); sender.sendMessage(L.get("SHOP_UNLOCKED")); return true; } else if (args.length == 1 && args[0].equalsIgnoreCase("disable") && !hl.fullLock()) { sender.sendMessage(L.get("HC_HYPERCONOMY_DISABLED")); sender.sendMessage(L.get("SHOP_LOCKED")); hl.setPlayerLock(true); hl.setFullLock(true); disable(true); return true; } } } } if ((!hl.isLocked(sender))) { boolean result = commandhandler.handleCommand(sender, cmd, label, args); return result; } else { sender.sendMessage(L.get("GLOBAL_SHOP_LOCKED")); return true; } } catch (Exception e) { if (db != null) { db.writeError(e, "Unhandled command exception."); return true; } else { e.printStackTrace(); return true; } } } private void hookVault() { Plugin vault = this.getServer().getPluginManager().getPlugin("Vault"); if (vault != null & vault instanceof Vault) { vaultInstalled = true; } else { vaultInstalled = false; } useExternalEconomy = yh.getFileConfiguration("config").getBoolean("config.use-external-economy-plugin"); if (!vaultInstalled) { useExternalEconomy = false; } if (vaultInstalled && yh.gFC("config").getBoolean("config.hook-internal-economy-into-vault")) { getServer().getServicesManager().register(Economy.class, new Economy_HyperConomy(), this, ServicePriority.Highest); log.info("[HyperConomy]Internal economy hooked into Vault."); } } private void unHookVault() { if (!vaultInstalled) { return; } RegisteredServiceProvider<Economy> eco = getServer().getServicesManager().getRegistration(Economy.class); if (eco != null) { Economy registeredEconomy = eco.getProvider(); if (registeredEconomy != null && registeredEconomy.getName().equalsIgnoreCase("HyperConomy")) { getServer().getServicesManager().unregister(eco.getProvider()); log.info("[HyperConomy]Internal economy unhooked from Vault."); } } } public void setupExternalEconomy() { if (!useExternalEconomy || !vaultInstalled) {return;} RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); if (economyProvider == null) { useExternalEconomy = false; return; } economy = economyProvider.getProvider(); if (economy == null) { useExternalEconomy = false; return; } if (economy.getName().equalsIgnoreCase("HyperConomy")) { useExternalEconomy = false; return; } } private void logEconomyState() { if (useExternalEconomy) { log.info("[HyperConomy]Using external economy plugin via Vault."); } else { log.info("[HyperConomy]Using internal economy plugin."); } } public HyperLock getHyperLock() { return hl; } public YamlHandler getYamlHandler() { return yh; } public YamlHandler gYH() { return yh; } public EconomyManager getEconomyManager() { return em; } public Economy getEconomy() { if (economy == null) { setupExternalEconomy(); } return economy; } public Log getLog() { return l; } public Notification getNotify() { return not; } public InfoSignHandler getInfoSignHandler() { return isign; } public SQLWrite getSQLWrite() { return sw; } public SQLRead getSQLRead() { return sr; } public ItemDisplayFactory getItemDisplay() { return itdi; } public History getHistory() { return hist; } public LanguageFile getLanguageFile() { return L; } public Logger log() { return log; } public boolean enabled() { return enabled; } public ChestShop getChestShop() { return cs; } public FrameShopHandler getFrameShopHandler() { return fsh; } public DataBukkit getDataBukkit() { return db; } public DataBukkit gDB() { return db; } public CommonFunctions getCommonFunctions() { return cf; } public CommonFunctions gCF() { return cf; } public FileTools getFileTools() { return ft; } public ConsoleSettings getConsoleSettings() { return cos; } public HyperEventHandler getHyperEventHandler() { return heh; } public boolean useExternalEconomy() { return useExternalEconomy; } public String getFolderPath() { String folderpath = ft.getJarPath() + File.separator + "plugins" + File.separator + "HyperConomy"; return folderpath; } }