001/* This file is part of Vault. 002 003 Vault is free software: you can redistribute it and/or modify 004 it under the terms of the GNU Lesser General Public License as published by 005 the Free Software Foundation, either version 3 of the License, or 006 (at your option) any later version. 007 008 Vault is distributed in the hope that it will be useful, 009 but WITHOUT ANY WARRANTY; without even the implied warranty of 010 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 011 GNU Lesser General Public License for more details. 012 013 You should have received a copy of the GNU Lesser General Public License 014 along with Vault. If not, see <http://www.gnu.org/licenses/>. 015 */ 016package net.milkbowl.vault; 017 018import java.io.BufferedReader; 019import java.io.IOException; 020import java.io.InputStreamReader; 021import java.lang.reflect.InvocationTargetException; 022import java.lang.reflect.Method; 023import java.net.URL; 024import java.net.URLConnection; 025import java.util.Collection; 026import java.util.logging.Logger; 027 028import net.milkbowl.vault.chat.Chat; 029import net.milkbowl.vault.chat.plugins.Chat_DroxPerms; 030import net.milkbowl.vault.chat.plugins.Chat_GroupManager; 031import net.milkbowl.vault.chat.plugins.Chat_OverPermissions; 032import net.milkbowl.vault.chat.plugins.Chat_Permissions3; 033import net.milkbowl.vault.chat.plugins.Chat_PermissionsEx; 034import net.milkbowl.vault.chat.plugins.Chat_Privileges; 035import net.milkbowl.vault.chat.plugins.Chat_bPermissions; 036import net.milkbowl.vault.chat.plugins.Chat_bPermissions2; 037import net.milkbowl.vault.chat.plugins.Chat_iChat; 038import net.milkbowl.vault.chat.plugins.Chat_mChat; 039import net.milkbowl.vault.chat.plugins.Chat_mChatSuite; 040import net.milkbowl.vault.chat.plugins.Chat_zPermissions; 041import net.milkbowl.vault.chat.plugins.Chat_rscPermissions; 042import net.milkbowl.vault.economy.Economy; 043import net.milkbowl.vault.economy.plugins.Economy_3co; 044import net.milkbowl.vault.economy.plugins.Economy_AEco; 045import net.milkbowl.vault.economy.plugins.Economy_BOSE6; 046import net.milkbowl.vault.economy.plugins.Economy_BOSE7; 047import net.milkbowl.vault.economy.plugins.Economy_CommandsEX; 048import net.milkbowl.vault.economy.plugins.Economy_Craftconomy; 049import net.milkbowl.vault.economy.plugins.Economy_Craftconomy3; 050import net.milkbowl.vault.economy.plugins.Economy_CurrencyCore; 051import net.milkbowl.vault.economy.plugins.Economy_DigiCoin; 052import net.milkbowl.vault.economy.plugins.Economy_Dosh; 053import net.milkbowl.vault.economy.plugins.Economy_EconXP; 054import net.milkbowl.vault.economy.plugins.Economy_Essentials; 055import net.milkbowl.vault.economy.plugins.Economy_GoldIsMoney; 056import net.milkbowl.vault.economy.plugins.Economy_GoldIsMoney2; 057import net.milkbowl.vault.economy.plugins.Economy_GoldenChestEconomy; 058import net.milkbowl.vault.economy.plugins.Economy_Gringotts; 059import net.milkbowl.vault.economy.plugins.Economy_McMoney; 060import net.milkbowl.vault.economy.plugins.Economy_MineConomy; 061import net.milkbowl.vault.economy.plugins.Economy_MultiCurrency; 062import net.milkbowl.vault.economy.plugins.Economy_TAEcon; 063import net.milkbowl.vault.economy.plugins.Economy_XPBank; 064import net.milkbowl.vault.economy.plugins.Economy_eWallet; 065import net.milkbowl.vault.economy.plugins.Economy_iConomy4; 066import net.milkbowl.vault.economy.plugins.Economy_iConomy5; 067import net.milkbowl.vault.economy.plugins.Economy_iConomy6; 068import net.milkbowl.vault.economy.plugins.Economy_SDFEconomy; 069import net.milkbowl.vault.economy.plugins.Economy_Minefaconomy; 070import net.milkbowl.vault.permission.Permission; 071import net.milkbowl.vault.permission.plugins.Permission_DroxPerms; 072import net.milkbowl.vault.permission.plugins.Permission_GroupManager; 073import net.milkbowl.vault.permission.plugins.Permission_OverPermissions; 074import net.milkbowl.vault.permission.plugins.Permission_Permissions3; 075import net.milkbowl.vault.permission.plugins.Permission_PermissionsBukkit; 076import net.milkbowl.vault.permission.plugins.Permission_PermissionsEx; 077import net.milkbowl.vault.permission.plugins.Permission_Privileges; 078import net.milkbowl.vault.permission.plugins.Permission_SimplyPerms; 079import net.milkbowl.vault.permission.plugins.Permission_Starburst; 080import net.milkbowl.vault.permission.plugins.Permission_SuperPerms; 081import net.milkbowl.vault.permission.plugins.Permission_Xperms; 082import net.milkbowl.vault.permission.plugins.Permission_bPermissions; 083import net.milkbowl.vault.permission.plugins.Permission_bPermissions2; 084import net.milkbowl.vault.permission.plugins.Permission_zPermissions; 085import net.milkbowl.vault.permission.plugins.Permission_TotalPermissions; 086import net.milkbowl.vault.permission.plugins.Permission_rscPermissions; 087import net.milkbowl.vault.permission.plugins.Permission_KPerms; 088 089import org.bukkit.Bukkit; 090import org.bukkit.OfflinePlayer; 091import org.bukkit.command.Command; 092import org.bukkit.command.CommandSender; 093import org.bukkit.entity.Player; 094import org.bukkit.event.EventHandler; 095import org.bukkit.event.EventPriority; 096import org.bukkit.event.Listener; 097import org.bukkit.event.player.PlayerJoinEvent; 098import org.bukkit.event.server.PluginEnableEvent; 099import org.bukkit.permissions.PermissionDefault; 100import org.bukkit.plugin.Plugin; 101import org.bukkit.plugin.RegisteredServiceProvider; 102import org.bukkit.plugin.ServicePriority; 103import org.bukkit.plugin.ServicesManager; 104import org.bukkit.plugin.java.JavaPlugin; 105import org.json.simple.JSONArray; 106import org.json.simple.JSONObject; 107import org.json.simple.JSONValue; 108 109import com.nijikokun.register.payment.Methods; 110 111import net.milkbowl.vault.chat.plugins.Chat_TotalPermissions; 112import net.milkbowl.vault.economy.plugins.Economy_MiConomy; 113 114public class Vault extends JavaPlugin { 115 116 private static Logger log; 117 private Permission perms; 118 private String newVersionTitle = ""; 119 private double newVersion = 0; 120 private double currentVersion = 0; 121 private String currentVersionTitle = ""; 122 private ServicesManager sm; 123 private Metrics metrics; 124 private Vault plugin; 125 126 @Override 127 public void onDisable() { 128 // Remove all Service Registrations 129 getServer().getServicesManager().unregisterAll(this); 130 Bukkit.getScheduler().cancelTasks(this); 131 } 132 133 @Override 134 public void onEnable() { 135 plugin = this; 136 log = this.getLogger(); 137 currentVersionTitle = getDescription().getVersion().split("-")[0]; 138 currentVersion = Double.valueOf(currentVersionTitle.replaceFirst("\\.", "")); 139 sm = getServer().getServicesManager(); 140 // set defaults 141 getConfig().addDefault("update-check", true); 142 getConfig().options().copyDefaults(true); 143 saveConfig(); 144 145 // Load Vault Addons 146 loadEconomy(); 147 loadPermission(); 148 loadChat(); 149 150 getCommand("vault-info").setExecutor(this); 151 getCommand("vault-convert").setExecutor(this); 152 getServer().getPluginManager().registerEvents(new VaultListener(), this); 153 // Schedule to check the version every 30 minutes for an update. This is to update the most recent 154 // version so if an admin reconnects they will be warned about newer versions. 155 this.getServer().getScheduler().runTask(this, new Runnable() { 156 157 @Override 158 public void run() { 159 // Programmatically set the default permission value cause Bukkit doesn't handle plugin.yml properly for Load order STARTUP plugins 160 org.bukkit.permissions.Permission perm = getServer().getPluginManager().getPermission("vault.update"); 161 if (perm == null) 162 { 163 perm = new org.bukkit.permissions.Permission("vault.update"); 164 perm.setDefault(PermissionDefault.OP); 165 plugin.getServer().getPluginManager().addPermission(perm); 166 } 167 perm.setDescription("Allows a user or the console to check for vault updates"); 168 169 getServer().getScheduler().runTaskTimerAsynchronously(plugin, new Runnable() { 170 171 @Override 172 public void run() { 173 if (getServer().getConsoleSender().hasPermission("vault.update") && getConfig().getBoolean("update-check", true)) { 174 try { 175 newVersion = updateCheck(currentVersion); 176 log.info("Checking for Updates:"); 177 if (newVersion > currentVersion) { 178 log.warning("Stable Version: " + newVersionTitle + " is out!" + " You are still running version: " + currentVersionTitle); 179 log.warning("Update at: http://dev.bukkit.org/server-mods/vault"); 180 } else if (currentVersion > newVersion) { 181 log.info("Stable Version: " + newVersionTitle + " | Current Version: " + currentVersionTitle); 182 } else { 183 log.info("No new version available"); 184 } 185 } catch (Exception e) { 186 // ignore exceptions 187 } 188 } 189 } 190 }, 0, 432000); 191 192 } 193 194 }); 195 196 // Load up the Plugin metrics 197 try { 198 metrics = new Metrics(this); 199 metrics.findCustomData(); 200 metrics.start(); 201 } catch (IOException e) { 202 // ignore exception 203 } 204 log.info(String.format("[%s] Enabled Version %s", getDescription().getName(), getDescription().getVersion())); 205 } 206 207 /** 208 * Attempts to load Chat Addons 209 */ 210 private void loadChat() { 211 // Try to load PermissionsEx 212 hookChat("PermissionsEx", Chat_PermissionsEx.class, ServicePriority.Highest, "ru.tehkode.permissions.bukkit.PermissionsEx"); 213 214 // Try to load mChatSuite 215 hookChat("mChatSuite", Chat_mChatSuite.class, ServicePriority.Highest, "in.mDev.MiracleM4n.mChatSuite.mChatSuite"); 216 217 // Try to load mChat 218 hookChat("mChat", Chat_mChat.class, ServicePriority.Highest, "net.D3GN.MiracleM4n.mChat"); 219 220 // Try to load OverPermissions 221 hookChat("OverPermissions", Chat_OverPermissions.class, ServicePriority.Highest, "com.overmc.overpermissions.OverPermissions"); 222 223 // Try to load DroxPerms Chat 224 hookChat("DroxPerms", Chat_DroxPerms.class, ServicePriority.Lowest, "de.hydrox.bukkit.DroxPerms.DroxPerms"); 225 226 // Try to load bPermssions 2 227 hookChat("bPermssions2", Chat_bPermissions2.class, ServicePriority.Highest, "de.bananaco.bpermissions.api.ApiLayer"); 228 229 // Try to load bPermissions 1 230 hookChat("bPermissions", Chat_bPermissions.class, ServicePriority.Normal, "de.bananaco.permissions.info.InfoReader"); 231 232 // Try to load GroupManager 233 hookChat("GroupManager", Chat_GroupManager.class, ServicePriority.Normal, "org.anjocaido.groupmanager.GroupManager"); 234 235 // Try to load Permissions 3 (Yeti) 236 hookChat("Permissions3", Chat_Permissions3.class, ServicePriority.Normal, "com.nijiko.permissions.ModularControl"); 237 238 // Try to load iChat 239 hookChat("iChat", Chat_iChat.class, ServicePriority.Low, "net.TheDgtl.iChat.iChat"); 240 241 // Try to load zPermissions 242 hookChat("zPermissions", Chat_zPermissions.class, ServicePriority.Normal, "org.tyrannyofheaven.bukkit.zPermissions.model.EntityMetadata"); 243 244 // Try to load Privileges 245 hookChat("Privileges", Chat_Privileges.class, ServicePriority.Normal, "net.krinsoft.privileges.Privileges"); 246 247 // Try to load rscPermissions 248 hookChat("rscPermissions", Chat_rscPermissions.class, ServicePriority.Normal, "ru.simsonic.rscPermissions.MainPluginClass"); 249 250 //Try to load TotalPermissions 251 hookChat("TotalPermissions", Chat_TotalPermissions.class, ServicePriority.Normal, "net.ar97.totalpermissions.TotalPermissions"); 252 } 253 254 /** 255 * Attempts to load Economy Addons 256 */ 257 private void loadEconomy() { 258 // Try to load MiConomy 259 hookEconomy("MiConomy", Economy_MiConomy.class, ServicePriority.Normal, "com.gmail.bleedobsidian.miconomy.Main"); 260 261 // Try to load MiFaConomy 262 hookEconomy("MineFaConomy", Economy_Minefaconomy.class, ServicePriority.Normal, "me.coniin.plugins.minefaconomy.Minefaconomy"); 263 264 // Try to load MultiCurrency 265 hookEconomy("MultiCurrency", Economy_MultiCurrency.class, ServicePriority.Normal, "me.ashtheking.currency.Currency", "me.ashtheking.currency.CurrencyList"); 266 267 // Try to load MineConomy 268 hookEconomy("MineConomy", Economy_MineConomy.class, ServicePriority.Normal, "me.mjolnir.mineconomy.MineConomy"); 269 270 // Try to load AEco 271 hookEconomy("AEco", Economy_AEco.class, ServicePriority.Normal, "org.neocraft.AEco.AEco"); 272 273 // Try to load McMoney 274 hookEconomy("McMoney", Economy_McMoney.class, ServicePriority.Normal, "boardinggamer.mcmoney.McMoneyAPI"); 275 276 // Try to load Craftconomy 277 hookEconomy("CraftConomy", Economy_Craftconomy.class, ServicePriority.Normal, "me.greatman.Craftconomy.Craftconomy"); 278 279 // Try to load Craftconomy3 280 hookEconomy("CraftConomy3", Economy_Craftconomy3.class, ServicePriority.Normal, "com.greatmancode.craftconomy3.tools.interfaces.BukkitLoader"); 281 282 // Try to load eWallet 283 hookEconomy("eWallet", Economy_eWallet.class, ServicePriority.Normal, "me.ethan.eWallet.ECO"); 284 285 // Try to load 3co 286 hookEconomy("3co", Economy_3co.class, ServicePriority.Normal, "me.ic3d.eco.ECO"); 287 288 // Try to load BOSEconomy 6 289 hookEconomy("BOSEconomy6", Economy_BOSE6.class, ServicePriority.Normal, "cosine.boseconomy.BOSEconomy", "cosine.boseconomy.CommandManager"); 290 291 // Try to load BOSEconomy 7 292 hookEconomy("BOSEconomy7", Economy_BOSE7.class, ServicePriority.Normal, "cosine.boseconomy.BOSEconomy", "cosine.boseconomy.CommandHandler"); 293 294 // Try to load CurrencyCore 295 hookEconomy("CurrencyCore", Economy_CurrencyCore.class, ServicePriority.Normal, "is.currency.Currency"); 296 297 // Try to load Gringotts 298 hookEconomy("Gringotts", Economy_Gringotts.class, ServicePriority.Normal, "org.gestern.gringotts.Gringotts"); 299 300 // Try to load Essentials Economy 301 hookEconomy("Essentials Economy", Economy_Essentials.class, ServicePriority.Low, "com.earth2me.essentials.api.Economy", "com.earth2me.essentials.api.NoLoanPermittedException", "com.earth2me.essentials.api.UserDoesNotExistException"); 302 303 // Try to load iConomy 4 304 hookEconomy("iConomy 4", Economy_iConomy4.class, ServicePriority.High, "com.nijiko.coelho.iConomy.iConomy", "com.nijiko.coelho.iConomy.system.Account"); 305 306 // Try to load iConomy 5 307 hookEconomy("iConomy 5", Economy_iConomy5.class, ServicePriority.High, "com.iConomy.iConomy", "com.iConomy.system.Account", "com.iConomy.system.Holdings"); 308 309 // Try to load iConomy 6 310 hookEconomy("iConomy 6", Economy_iConomy6.class, ServicePriority.High, "com.iCo6.iConomy"); 311 312 // Try to load EconXP 313 hookEconomy("EconXP", Economy_EconXP.class, ServicePriority.Normal, "ca.agnate.EconXP.EconXP"); 314 315 // Try to load GoldIsMoney 316 hookEconomy("GoldIsMoney", Economy_GoldIsMoney.class, ServicePriority.Normal, "com.flobi.GoldIsMoney.GoldIsMoney"); 317 318 // Try to load GoldIsMoney2 319 hookEconomy("GoldIsMoney2", Economy_GoldIsMoney2.class, ServicePriority.Normal, "com.flobi.GoldIsMoney2.GoldIsMoney"); 320 321 // Try to load GoldenChestEconomy 322 hookEconomy("GoldenChestEconomy", Economy_GoldenChestEconomy.class, ServicePriority.Normal, "me.igwb.GoldenChest.GoldenChestEconomy"); 323 324 // Try to load Dosh 325 hookEconomy("Dosh", Economy_Dosh.class, ServicePriority.Normal, "com.gravypod.Dosh.Dosh"); 326 327 // Try to load CommandsEX Economy 328 hookEconomy("CommandsEX", Economy_CommandsEX.class, ServicePriority.Normal, "com.github.zathrus_writer.commandsex.api.EconomyAPI"); 329 330 // Try to load SDFEconomy Economy 331 hookEconomy("SDFEconomy", Economy_SDFEconomy.class, ServicePriority.Normal, "com.github.omwah.SDFEconomy.SDFEconomy"); 332 333 // Try to load XPBank 334 hookEconomy("XPBank", Economy_XPBank.class, ServicePriority.Normal, "com.gmail.mirelatrue.xpbank.XPBank"); 335 336 // Try to load TAEcon 337 hookEconomy("TAEcon", Economy_TAEcon.class, ServicePriority.Normal, "net.teamalpha.taecon.TAEcon"); 338 339 // Try to load DigiCoin 340 hookEconomy("DigiCoin", Economy_DigiCoin.class, ServicePriority.Normal, "co.uk.silvania.cities.digicoin.DigiCoin"); 341 } 342 343 /** 344 * Attempts to load Permission Addons 345 */ 346 private void loadPermission() { 347 // Try to load Starburst 348 hookPermission("Starburst", Permission_Starburst.class, ServicePriority.Highest, "com.dthielke.starburst.StarburstPlugin"); 349 350 // Try to load PermissionsEx 351 hookPermission("PermissionsEx", Permission_PermissionsEx.class, ServicePriority.Highest, "ru.tehkode.permissions.bukkit.PermissionsEx"); 352 353 // Try to load OverPermissions 354 hookPermission("OverPermissions", Permission_OverPermissions.class, ServicePriority.Highest, "com.overmc.overpermissions.OverPermissions"); 355 356 // Try to load PermissionsBukkit 357 hookPermission("PermissionsBukkit", Permission_PermissionsBukkit.class, ServicePriority.Normal, "com.platymuus.bukkit.permissions.PermissionsPlugin"); 358 359 // Try to load DroxPerms 360 hookPermission("DroxPerms", Permission_DroxPerms.class, ServicePriority.High, "de.hydrox.bukkit.DroxPerms.DroxPerms"); 361 362 // Try to load SimplyPerms 363 hookPermission("SimplyPerms", Permission_SimplyPerms.class, ServicePriority.Highest, "net.crystalyx.bukkit.simplyperms.SimplyPlugin"); 364 365 // Try to load bPermissions2 366 hookPermission("bPermissions 2", Permission_bPermissions2.class, ServicePriority.Highest, "de.bananaco.bpermissions.api.WorldManager"); 367 368 // Try to load zPermission 369 hookPermission("zPermissions", Permission_zPermissions.class, ServicePriority.High, "org.tyrannyofheaven.bukkit.zPermissions.ZPermissionsPlugin"); 370 371 // Try to load Privileges 372 hookPermission("Privileges", Permission_Privileges.class, ServicePriority.Highest, "net.krinsoft.privileges.Privileges"); 373 374 // Try to load bPermissions 375 hookPermission("bPermissions", Permission_bPermissions.class, ServicePriority.High, "de.bananaco.permissions.SuperPermissionHandler"); 376 377 // Try to load GroupManager 378 hookPermission("GroupManager", Permission_GroupManager.class, ServicePriority.High, "org.anjocaido.groupmanager.GroupManager"); 379 380 // Try to load Permissions 3 (Yeti) 381 hookPermission("Permissions 3 (Yeti)", Permission_Permissions3.class, ServicePriority.Normal, "com.nijiko.permissions.ModularControl"); 382 383 // Try to load Xperms 384 hookPermission("Xperms", Permission_Xperms.class, ServicePriority.Low, "com.github.sebc722.Xperms"); 385 386 //Try to load TotalPermissions 387 hookPermission("TotalPermissions", Permission_TotalPermissions.class, ServicePriority.Normal, "net.ae97.totalpermissions.TotalPermissions"); 388 389 // Try to load rscPermissions 390 hookPermission("rscPermissions", Permission_rscPermissions.class, ServicePriority.Normal, "ru.simsonic.rscPermissions.MainPluginClass"); 391 392 // Try to load KPerms 393 hookPermission("KPerms", Permission_KPerms.class, ServicePriority.Normal, "com.lightniinja.kperms.KPermsPlugin"); 394 395 Permission perms = new Permission_SuperPerms(this); 396 sm.register(Permission.class, perms, this, ServicePriority.Lowest); 397 log.info(String.format("[%s][Permission] SuperPermissions loaded as backup permission system.", getDescription().getName())); 398 399 this.perms = sm.getRegistration(Permission.class).getProvider(); 400 } 401 402 private void hookChat (String name, Class<? extends Chat> hookClass, ServicePriority priority, String...packages) { 403 try { 404 if (packagesExists(packages)) { 405 Chat chat = hookClass.getConstructor(Plugin.class, Permission.class).newInstance(this, perms); 406 sm.register(Chat.class, chat, this, priority); 407 log.info(String.format("[%s][Chat] %s found: %s", getDescription().getName(), name, chat.isEnabled() ? "Loaded" : "Waiting")); 408 } 409 } catch (Exception e) { 410 log.severe(String.format("[%s][Chat] There was an error hooking %s - check to make sure you're using a compatible version!", getDescription().getName(), name)); 411 } 412 } 413 414 private void hookEconomy (String name, Class<? extends Economy> hookClass, ServicePriority priority, String...packages) { 415 try { 416 if (packagesExists(packages)) { 417 Economy econ = hookClass.getConstructor(Plugin.class).newInstance(this); 418 sm.register(Economy.class, econ, this, priority); 419 log.info(String.format("[%s][Economy] %s found: %s", getDescription().getName(), name, econ.isEnabled() ? "Loaded" : "Waiting")); 420 } 421 } catch (Exception e) { 422 log.severe(String.format("[%s][Economy] There was an error hooking %s - check to make sure you're using a compatible version!", getDescription().getName(), name)); 423 } 424 } 425 426 private void hookPermission (String name, Class<? extends Permission> hookClass, ServicePriority priority, String...packages) { 427 try { 428 if (packagesExists(packages)) { 429 Permission perms = hookClass.getConstructor(Plugin.class).newInstance(this); 430 sm.register(Permission.class, perms, this, priority); 431 log.info(String.format("[%s][Permission] %s found: %s", getDescription().getName(), name, perms.isEnabled() ? "Loaded" : "Waiting")); 432 } 433 } catch (Exception e) { 434 log.severe(String.format("[%s][Permission] There was an error hooking %s - check to make sure you're using a compatible version!", getDescription().getName(), name)); 435 } 436 } 437 438 @Override 439 public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args) { 440 if (!sender.hasPermission("vault.admin")) { 441 sender.sendMessage("You do not have permission to use that command!"); 442 } 443 444 if (command.getName().equalsIgnoreCase("vault-info")) { 445 infoCommand(sender); 446 return true; 447 } else if (command.getName().equalsIgnoreCase("vault-convert")) { 448 convertCommand(sender, args); 449 return true; 450 } else { 451 // Show help 452 sender.sendMessage("Vault Commands:"); 453 sender.sendMessage(" /vault-info - Displays information about Vault"); 454 sender.sendMessage(" /vault-convert [economy1] [economy2] - Converts from one Economy to another"); 455 return true; 456 } 457 } 458 459 private void convertCommand(CommandSender sender, String[] args) { 460 Collection<RegisteredServiceProvider<Economy>> econs = this.getServer().getServicesManager().getRegistrations(Economy.class); 461 if (econs == null || econs.size() < 2) { 462 sender.sendMessage("You must have at least 2 economies loaded to convert."); 463 return; 464 } else if (args.length != 2) { 465 sender.sendMessage("You must specify only the economy to convert from and the economy to convert to. (names should not contain spaces)"); 466 return; 467 } 468 Economy econ1 = null; 469 Economy econ2 = null; 470 for (RegisteredServiceProvider<Economy> econ : econs) { 471 String econName = econ.getProvider().getName().replace(" ", ""); 472 if (econName.equalsIgnoreCase(args[0])) { 473 econ1 = econ.getProvider(); 474 } else if (econName.equalsIgnoreCase(args[1])) { 475 econ2 = econ.getProvider(); 476 } 477 } 478 479 if (econ1 == null) { 480 sender.sendMessage("Could not find " + args[0] + " loaded on the server, check your spelling"); 481 return; 482 } else if (econ2 == null) { 483 sender.sendMessage("Could not find " + args[1] + " loaded on the server, check your spelling"); 484 return; 485 } 486 487 sender.sendMessage("This may take some time to convert, expect server lag."); 488 for (OfflinePlayer op : Bukkit.getServer().getOfflinePlayers()) { 489 String pName = op.getName(); 490 if (econ1.hasAccount(pName)) { 491 if (econ2.hasAccount(pName)) { 492 continue; 493 } 494 econ2.createPlayerAccount(pName); 495 econ2.depositPlayer(pName, econ1.getBalance(pName)); 496 } 497 } 498 sender.sendMessage("Converson complete, please verify the data before using it."); 499 } 500 501 private void infoCommand(CommandSender sender) { 502 // Get String of Registered Economy Services 503 String registeredEcons = null; 504 Collection<RegisteredServiceProvider<Economy>> econs = this.getServer().getServicesManager().getRegistrations(Economy.class); 505 for (RegisteredServiceProvider<Economy> econ : econs) { 506 Economy e = econ.getProvider(); 507 if (registeredEcons == null) { 508 registeredEcons = e.getName(); 509 } else { 510 registeredEcons += ", " + e.getName(); 511 } 512 } 513 514 // Get String of Registered Permission Services 515 String registeredPerms = null; 516 Collection<RegisteredServiceProvider<Permission>> perms = this.getServer().getServicesManager().getRegistrations(Permission.class); 517 for (RegisteredServiceProvider<Permission> perm : perms) { 518 Permission p = perm.getProvider(); 519 if (registeredPerms == null) { 520 registeredPerms = p.getName(); 521 } else { 522 registeredPerms += ", " + p.getName(); 523 } 524 } 525 526 String registeredChats = null; 527 Collection<RegisteredServiceProvider<Chat>> chats = this.getServer().getServicesManager().getRegistrations(Chat.class); 528 for (RegisteredServiceProvider<Chat> chat : chats) { 529 Chat c = chat.getProvider(); 530 if (registeredChats == null) { 531 registeredChats = c.getName(); 532 } else { 533 registeredChats += ", " + c.getName(); 534 } 535 } 536 537 // Get Economy & Permission primary Services 538 RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class); 539 Economy econ = null; 540 if (rsp != null) { 541 econ = rsp.getProvider(); 542 } 543 Permission perm = null; 544 RegisteredServiceProvider<Permission> rspp = getServer().getServicesManager().getRegistration(Permission.class); 545 if (rspp != null) { 546 perm = rspp.getProvider(); 547 } 548 Chat chat = null; 549 RegisteredServiceProvider<Chat> rspc = getServer().getServicesManager().getRegistration(Chat.class); 550 if (rspc != null) { 551 chat = rspc.getProvider(); 552 } 553 // Send user some info! 554 sender.sendMessage(String.format("[%s] Vault v%s Information", getDescription().getName(), getDescription().getVersion())); 555 sender.sendMessage(String.format("[%s] Economy: %s [%s]", getDescription().getName(), econ == null ? "None" : econ.getName(), registeredEcons)); 556 sender.sendMessage(String.format("[%s] Permission: %s [%s]", getDescription().getName(), perm == null ? "None" : perm.getName(), registeredPerms)); 557 sender.sendMessage(String.format("[%s] Chat: %s [%s]", getDescription().getName(), chat == null ? "None" : chat.getName(), registeredChats)); 558 } 559 560 /** 561 * Determines if all packages in a String array are within the Classpath 562 * This is the best way to determine if a specific plugin exists and will be 563 * loaded. If the plugin package isn't loaded, we shouldn't bother waiting 564 * for it! 565 * @param packages String Array of package names to check 566 * @return Success or Failure 567 */ 568 private static boolean packagesExists(String...packages) { 569 try { 570 for (String pkg : packages) { 571 Class.forName(pkg); 572 } 573 return true; 574 } catch (Exception e) { 575 return false; 576 } 577 } 578 579 public double updateCheck(double currentVersion) { 580 try { 581 URL url = new URL("https://api.curseforge.com/servermods/files?projectids=33184"); 582 URLConnection conn = url.openConnection(); 583 conn.setReadTimeout(5000); 584 conn.addRequestProperty("User-Agent", "Vault Update Checker"); 585 conn.setDoOutput(true); 586 final BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 587 final String response = reader.readLine(); 588 final JSONArray array = (JSONArray) JSONValue.parse(response); 589 590 if (array.size() == 0) { 591 this.getLogger().warning("No files found, or Feed URL is bad."); 592 return currentVersion; 593 } 594 // Pull the last version from the JSON 595 newVersionTitle = ((String) ((JSONObject) array.get(array.size() - 1)).get("name")).replace("Vault", "").trim(); 596 return Double.valueOf(newVersionTitle.replaceFirst("\\.", "").trim()); 597 } catch (Exception e) { 598 log.info("There was an issue attempting to check for the latest version."); 599 } 600 return currentVersion; 601 } 602 603 public class VaultListener implements Listener { 604 605 @EventHandler(priority = EventPriority.MONITOR) 606 public void onPlayerJoin(PlayerJoinEvent event) { 607 Player player = event.getPlayer(); 608 if (perms.has(player, "vault.update")) { 609 try { 610 if (newVersion > currentVersion) { 611 player.sendMessage("Vault " + newVersion + " is out! You are running " + currentVersion); 612 player.sendMessage("Update Vault at: http://dev.bukkit.org/server-mods/vault"); 613 } 614 } catch (Exception e) { 615 // Ignore exceptions 616 } 617 } 618 } 619 620 @EventHandler(priority = EventPriority.MONITOR) 621 public void onPluginEnable(PluginEnableEvent event) { 622 if (event.getPlugin().getDescription().getName().equals("Register") && packagesExists("com.nijikokun.register.payment.Methods")) { 623 if (!Methods.hasMethod()) { 624 try { 625 Method m = Methods.class.getMethod("addMethod", Methods.class); 626 m.setAccessible(true); 627 m.invoke(null, "Vault", new net.milkbowl.vault.VaultEco()); 628 if (!Methods.setPreferred("Vault")) { 629 log.info("Unable to hook register"); 630 } else { 631 log.info("[Vault] - Successfully injected Vault methods into Register."); 632 } 633 } catch (SecurityException e) { 634 log.info("Unable to hook register"); 635 } catch (NoSuchMethodException e) { 636 log.info("Unable to hook register"); 637 } catch (IllegalArgumentException e) { 638 log.info("Unable to hook register"); 639 } catch (IllegalAccessException e) { 640 log.info("Unable to hook register"); 641 } catch (InvocationTargetException e) { 642 log.info("Unable to hook register"); 643 } 644 } 645 } 646 } 647 } 648}