package net.diamonddominion.esaych.global; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import net.diamonddominion.esaych.util.SQL; import org.bukkit.Bukkit; import org.bukkit.entity.Player; public class ChatSQL { static Chat chatPlugin = null; @SuppressWarnings({ "deprecation", "static-access" }) public ChatSQL(Chat chat) { ChatUtils.chatPlugin = chat; Bukkit.getScheduler().scheduleAsyncRepeatingTask(chat.plugin, new Runnable() { @Override public void run() { update(); } }, 5, 20*15); } Connection pluginConnection; Map<String, Integer> cacheMuteData = new HashMap<String, Integer>(); Map<String, String> cachePrefixData = new HashMap<String, String>(); Map<String, String> cacheChannelData = new HashMap<String, String>(); Map<String, Boolean> cacheBadProfileData = new HashMap<String, Boolean>(); Map<String, String> cacheDatingPartner = new HashMap<String, String>(); Map<String, ArrayList<String>> cacheIgnores = new HashMap<String, ArrayList<String>>(); public int getMuteTime(String playerName) { if (cacheMuteData.containsKey(playerName)) return cacheMuteData.get(playerName); return 0; } public void setMuteTime(String playerName, int timestamp) { insertQuery(playerName, "muted", String.valueOf(timestamp)); cacheMuteData.put(playerName, timestamp); } public String getPrefix(String playerName) { return cachePrefixData.get(playerName); } public void setPrefix(String playerName, String prefix) { insertQuery(playerName, "prefix", prefix); cachePrefixData.put(playerName, prefix); } public String getChannel(String playerName) { return cacheChannelData.get(playerName); } public void setChannel(String playerName, String channel) { insertQuery(playerName, "channel", channel); cacheChannelData.put(playerName, channel); } public boolean getBadProfile(String playerName) { if (cacheBadProfileData.containsKey(playerName)) return cacheBadProfileData.get(playerName); return false; } public void setBadProfile(String playerName, boolean bad) { if (bad) insertQuery(playerName, "badprofile", "1"); else insertQuery(playerName, "badprofile", "0"); cacheBadProfileData.put(playerName, bad); } public String getDatingPartner(String playerName) { return cacheDatingPartner.get(playerName); } public void setDatingPartner(String player1, String player2) { if (player2 != null) { Connection con = SQL.getConnection(); try { con = SQL.getConnection(); Statement st = (Statement) con.createStatement(); st.executeUpdate("INSERT INTO `ddchat-playerdata` (`ign`,`dating`) VALUES ('" + player1 + "','" + player2 + "')" + "ON DUPLICATE KEY UPDATE `dating`='" + player2 + "';"); st = (Statement) con.createStatement(); st.executeUpdate("INSERT INTO `ddchat-playerdata` (`ign`,`dating`) VALUES ('" + player2 + "','" + player1 + "')" + "ON DUPLICATE KEY UPDATE `dating`='" + player1 + "';"); } catch (SQLException e) { e.printStackTrace(); } cacheDatingPartner.put(player1, player2); cacheDatingPartner.put(player2, player1); } else { Connection con = SQL.getConnection(); try { con = SQL.getConnection(); Statement st = (Statement) con.createStatement(); st.executeUpdate("UPDATE `ddchat-playerdata` SET `dating`= NULL WHERE `ign`='" + player1 + "';"); } catch (SQLException e) { e.printStackTrace(); } cacheDatingPartner.remove(player1); cacheDatingPartner.remove(player2); } } public void clearDatingPartner(String player1) { String player2 = getDatingPartner(player1); try { Connection con = SQL.getConnection(); con = SQL.getConnection(); Statement st = (Statement) con.createStatement(); st.executeUpdate("INSERT INTO `ddchat-playerdata` (`ign`,`dating`) VALUES ('" + player1 + "',NULL)" + "ON DUPLICATE KEY UPDATE `dating`=NULL;"); st = (Statement) con.createStatement(); st.executeUpdate("INSERT INTO `ddchat-playerdata` (`ign`,`dating`) VALUES ('" + player2 + "',NULL)" + "ON DUPLICATE KEY UPDATE `dating`=NULL;"); } catch (SQLException e) { e.printStackTrace(); } cacheDatingPartner.remove(player1); cacheDatingPartner.remove(player2); } public ArrayList<String> getIgnoredPlayers(String playerName) { ArrayList<String> data = cacheIgnores.get(playerName); if (data != null) return data; return new ArrayList<String>(); } public void addIgnoredPlayer(String playerName, String whoToIgnore) { SQL.singleQuery("INSERT INTO `ddchat-ignores` (`ign`,`ignoring`) VALUES ('" + playerName + "','" + whoToIgnore + "');"); ArrayList<String> ignores = cacheIgnores.get(playerName); if (ignores == null) ignores = new ArrayList<String>(); ignores.add(whoToIgnore); cacheIgnores.put(playerName, ignores); } public void removeIgnoredPlayer(String playerName, String whoToUnignore) { SQL.singleQuery("DELETE FROM `ddchat-ignores` WHERE `ign`='" + playerName + "' && `ignoring`='" + whoToUnignore + "';"); ArrayList<String> ignores = cacheIgnores.get(playerName); ignores.remove(whoToUnignore); cacheIgnores.put(playerName, ignores); } public void insertQuery(String ign, String dataType, String data) { if (data != null && data != "0") SQL.singleQuery("INSERT INTO `ddchat-playerdata` (`ign`,`" + dataType + "`) VALUES ('" + ign + "','" + data + "')" + "ON DUPLICATE KEY UPDATE `" + dataType + "`='" + data + "';"); else SQL.singleQuery("INSERT INTO `ddchat-playerdata` (`ign`,`" + dataType + "`) VALUES ('" + ign + "', NULL)" + "ON DUPLICATE KEY UPDATE `" + dataType + "`=NULL;"); } public void update() { try { Connection con = SQL.getConnection(); Statement st = (Statement) con.createStatement(); ResultSet result = st.executeQuery("SELECT * FROM `ddchat-playerdata`;"); Map<String, Integer> tempcacheMuteData = new HashMap<String, Integer>(); Map<String, String> tempcachePrefixData = new HashMap<String, String>(); Map<String, String> tempcacheChannelData = new HashMap<String, String>(); Map<String, Boolean> tempcacheBadProfileData = new HashMap<String, Boolean>(); Map<String, String> tempcacheDatingPartner = new HashMap<String, String>(); Map<String, ArrayList<String>> tempcacheIgnores = new HashMap<String, ArrayList<String>>(); while (result.next()) { String player = result.getString("ign"); String channel = result.getString("channel"); int muted = result.getInt("muted"); String prefix = result.getString("prefix"); String dating = result.getString("dating"); boolean badprofile = result.getBoolean("badprofile"); if (channel != null) tempcacheChannelData.put(player, channel); if (muted != 0) tempcacheMuteData.put(player, muted); if (prefix != null) tempcachePrefixData.put(player, prefix); if (dating != null) tempcacheDatingPartner.put(player, dating); tempcacheBadProfileData.put(player, badprofile); } st = (Statement) con.createStatement(); result = st.executeQuery("SELECT * FROM `ddchat-ignores`;"); Map<String, String> data = new HashMap<String, String>(); while (result.next()) { String player = result.getString("ign"); String ignoring = result.getString("ignoring"); if (data.containsKey(player)) { String str = data.get(player); str += "," + ignoring; data.put(player, str); } else { data.put(player, ignoring); } } tempcacheIgnores.clear(); for (String playerName : data.keySet()) { ArrayList<String> ignoring = new ArrayList<String>(); for (String ignoredPlayer: data.get(playerName).split(",")) { ignoring.add(ignoredPlayer); } tempcacheIgnores.put(playerName, ignoring); } cacheMuteData = tempcacheMuteData; cachePrefixData = tempcachePrefixData; cacheChannelData = tempcacheChannelData; cacheBadProfileData = tempcacheBadProfileData; cacheDatingPartner = tempcacheDatingPartner; cacheIgnores = tempcacheIgnores; } catch (SQLException e1) { e1.printStackTrace(); } } public void logChat(Player player, String msg, String receiver) { msg = msg.replaceAll("'", "''"); @SuppressWarnings("static-access") String[] ranks = chatPlugin.perms.getPlayerGroups(player); String rank = ranks[ranks.length-1]; // System.out.println("INSERT INTO `ddchat-chatlog` (`time`, `player`, `message`, `msg-receiver`, `rank`) VALUES (" + (int)System.currentTimeMillis()/1000 + ", '" + player.getName() + "', '" + msg + "', '" + receiver + "', '" + rank + "');"); SQL.singleQuery("INSERT INTO `ddchat-chatlog` (`time`, `player`, `message`, `msg-receiver`, `rank`) VALUES (" + (int)System.currentTimeMillis()/1000 + ", '" + player.getName() + "', '" + msg + "', '" + receiver + "', '" + rank + "');"); } public void logCommand(Player player, String command) { command = command.replaceAll("'", "''"); @SuppressWarnings("static-access") String[] ranks = chatPlugin.perms.getPlayerGroups(player); String rank = ranks[ranks.length-1]; SQL.singleQuery("INSERT INTO `ddchat-commandlog` (`time`, `player`, `command`, `rank`, `world`) VALUES (" + (int)System.currentTimeMillis()/1000 + ", '" + player.getName() + "', '" + command + "', '" + rank + "', '" + player.getWorld().getName() + "');"); } }