/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.arkhamnetwork.playersync; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Map.Entry; import java.util.UUID; import net.milkbowl.vault.economy.Economy; import org.arkhamnetwork.playersync.listeners.PlayerListener; import org.arkhamnetwork.playersync.managers.SQLManager; import org.arkhamnetwork.playersync.struct.PlayerSyncUser; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitRunnable; import com.earth2me.essentials.Essentials; /** * * @author devan_000 */ public class PlayerSync extends JavaPlugin { private static PlayerSync plugin; private static Essentials essentials; private static Economy economy; public static PlayerSync get() { return plugin; } private PluginDescriptionFile pdf = null; public HashMap<UUID, PlayerSyncUser> users = new HashMap<>(); public HashSet<String> new_player_uuids = new HashSet<>(); public HashSet<World> worlds = new HashSet<>(); public static boolean shutting_down = false; @Override public void onEnable() { plugin = this; new BukkitRunnable() { @Override public void run() { worlds.addAll(Bukkit.getWorlds()); } }.runTaskLater(this, 20L); essentials = Bukkit.getServer().getPluginManager().isPluginEnabled("Essentials") ? (Essentials) Bukkit.getServer().getPluginManager().getPlugin("Essentials") : null; pdf = getDescription(); setupEconomy(); log("==[ Plugin version " + pdf.getVersion() + " starting ]=="); saveDefaultConfig(); if (getConfig().getBoolean("libraryMode")) { log("Running as just a library."); } else { log("Running in full-mode."); if (!SQLManager.onEnable()) { log("*** Error with SQL connection. ***"); getServer().getPluginManager().disablePlugin(this); return; } log("Attempting to set all users that were on this server to 'offline' status, safeguard."); Statement statement; try { statement = SQLManager.C.createStatement(); statement.execute("UPDATE player_storage SET is_online='false', online_server_address='' WHERE online_server_address='" + (plugin.getServer().getIp() + ":" + plugin.getServer().getPort()) + "'"); if (!statement.isClosed()) { statement.close(); } } catch (SQLException ex) { } registerEvents(); } log("==[ Plugin version " + pdf.getVersion() + " started ]=="); } @Override public void onDisable() { shutting_down = true; log("==[ Plugin version " + pdf.getVersion() + " shutting down ]=="); if (!getConfig().getBoolean("libraryMode")) { for (Entry<UUID, PlayerSyncUser> data : new ArrayList<>(plugin.users.entrySet())) { final PlayerSyncUser psu = data.getValue(); final Player player = psu.getBukkitPlayer(); if (player != null) { psu.save(player.getName(), player.getUniqueId(), player.getInventory().getContents(), player.getInventory().getArmorContents(), player.getEnderChest().getContents(), player.getActivePotionEffects(), player.getExp(), player.getHealth(), player.getMaxHealth(), player.getFoodLevel(), player.getLocation(), false); player.setMetadata("no_save", new FixedMetadataValue(plugin, true)); } log("Saved playerdata for " + data.getKey() + "!"); } } log("==[ Plugin version " + pdf.getVersion() + " shutdown ]=="); } private boolean setupEconomy() { RegisteredServiceProvider<net.milkbowl.vault.economy.Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); if (economyProvider != null) { economy = economyProvider.getProvider(); } return (economy != null); } public Essentials getEssentials() { return essentials; } public Economy getEconomy() { return economy; } public void log(String message) { getLogger().info(message); } private void registerEvents() { PluginManager manager = getServer().getPluginManager(); manager.registerEvents(new PlayerListener(), this); } }