Advertisement
Guest User

Untitled

a guest
Apr 13th, 2016
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.58 KB | None | 0 0
  1. package ru.Den_Abr.Crates;
  2.  
  3. import java.util.concurrent.*;
  4. import org.bukkit.configuration.*;
  5. import org.bukkit.scheduler.*;
  6. import java.util.*;
  7. import org.bukkit.plugin.*;
  8.  
  9. public class KeyCache
  10. {
  11.     private static String host;
  12.     private static String user;
  13.     private static String password;
  14.     private static String database;
  15.     private static int port;
  16.     private static MySQL mysql;
  17.     private static Map<String, Map<String, Integer>> keys;
  18.    
  19.     static {
  20.         KeyCache.keys = new ConcurrentHashMap<String, Map<String, Integer>>();
  21.     }
  22.    
  23.     public static void init(final ConfigurationSection cs) {
  24.         KeyCache.keys.clear();
  25.         KeyCache.host = cs.getString("host");
  26.         KeyCache.user = cs.getString("user");
  27.         KeyCache.password = cs.getString("password");
  28.         KeyCache.database = cs.getString("database");
  29.         KeyCache.port = cs.getInt("port");
  30.         KeyCache.mysql = new MySQL(KeyCache.user, KeyCache.password, KeyCache.host, KeyCache.port, KeyCache.database);
  31.         createTables();
  32.     }
  33.    
  34.     private static void createTables() {
  35.         final String sqlQuery = "CREATE TABLE IF NOT EXISTS `player_keys` ( `id` int(11) NOT NULL AUTO_INCREMENT, `player` varchar(255) NOT NULL, `key` varchar(255) NOT NULL, PRIMARY KEY (`id`), KEY `id` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;";
  36.         KeyCache.mysql.createTable(sqlQuery);
  37.     }
  38.    
  39.     public static boolean removeKey(final String player, final String key) {
  40.         if (getKeys(player, key) <= 1) {
  41.             KeyCache.keys.get(key).remove(player.toLowerCase());
  42.         }
  43.         else {
  44.             KeyCache.keys.get(key).put(player.toLowerCase(), getKeys(player, key) - 1);
  45.         }
  46.         return KeyCache.mysql.update("DELETE FROM `player_keys` WHERE `player` = '" + player + "' AND `key` = '" + key + "' LIMIT 1");
  47.     }
  48.    
  49.     public static int getKeys(final String player, final String key) {
  50.         if (KeyCache.keys.containsKey(key) && KeyCache.keys.get(key).containsKey(player.toLowerCase())) {
  51.             return KeyCache.keys.get(key).get(player.toLowerCase());
  52.         }
  53.         return 0;
  54.     }
  55.    
  56.     public static void grabKeys(final int period) {
  57.         new BukkitRunnable() {
  58.             public void run() {
  59.                 final String query = "SELECT * FROM `player_keys`";
  60.                 final List<Object[]> resultList = KeyCache.mysql.select(query);
  61.                 final ConcurrentHashMap<String, Map<String, Integer>> results = new ConcurrentHashMap<String, Map<String, Integer>>();
  62.                 for (final Object[] r : resultList) {
  63.                     final String player = ((String)r[1]).toLowerCase();
  64.                     final String keyName = (String)r[2];
  65.                     if (!results.containsKey(keyName)) {
  66.                         results.put(keyName, new HashMap<String, Integer>());
  67.                         results.get(keyName).put(player, 1);
  68.                     }
  69.                     else {
  70.                         final Map<String, Integer> keyMap = results.get(keyName);
  71.                         if (keyMap.containsKey(player)) {
  72.                             keyMap.put(player, keyMap.get(player) + 1);
  73.                         }
  74.                         else {
  75.                             keyMap.put(player, 1);
  76.                         }
  77.                     }
  78.                 }
  79.                 KeyCache.keys.clear();
  80.                 KeyCache.keys.putAll(results);
  81.             }
  82.         }.runTaskTimerAsynchronously((Plugin)CratesPlugin.getInstance(), 0L, (long)(period * 20 * 60));
  83.     }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement