forked from LogBlock/LogBlock
Fixed player stats, should be ordered and not showing 0 now
This commit is contained in:
@@ -5,8 +5,6 @@ import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
@@ -30,36 +28,31 @@ public class PlayerAreaStats implements Runnable
|
||||
}
|
||||
|
||||
public void run() {
|
||||
HashSet<String> types = new HashSet<String>();
|
||||
HashMap<String, Integer> created = new HashMap<String, Integer>();
|
||||
HashMap<String, Integer> destroyed = new HashMap<String, Integer>();
|
||||
PreparedStatement ps = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
conn.setAutoCommit(false);
|
||||
ps = conn.prepareStatement("SELECT type, count(type) as num from `" + table + "` INNER JOIN `lb-players` USING (`playerid`) where type > 0 and playername = ? and y > 0 and x > ? and x < ? and z > ? and z < ? group by type order by count(replaced) desc limit 10", Statement.RETURN_GENERATED_KEYS);
|
||||
ps = conn.prepareStatement("SELECT * FROM (SELECT `type` , count(`type`) AS `created` FROM `" + table + "` INNER JOIN `lb-players` USING (`playerid`) WHERE `playername` = ? AND x > ? AND x < ? AND z > ? AND z < ? AND `type` > 0 AND `type` != `replaced` GROUP BY `type`) AS c RIGHT JOIN (SELECT `replaced` AS `type`, count(`replaced`) AS `destroyed` FROM `" + table + "` INNER JOIN `lb-players` USING (`playerid`) WHERE `playername` = ? AND x > ? AND x < ? AND z > ? AND z < ? AND `replaced` > 0 AND `type` != `replaced` GROUP BY `replaced`) AS d ON c.`type` = d.`type` ORDER BY `created` + `destroyed` DESC LIMIT 15;", Statement.NO_GENERATED_KEYS);
|
||||
ps.setString(1, name);
|
||||
ps.setInt(2, player.getLocation().getBlockX()-size);
|
||||
ps.setInt(3, player.getLocation().getBlockX()+size);
|
||||
ps.setInt(4, player.getLocation().getBlockZ()-size);
|
||||
ps.setInt(5, player.getLocation().getBlockZ()+size);
|
||||
ps.setString(6, name);
|
||||
ps.setInt(7, player.getLocation().getBlockX()-size);
|
||||
ps.setInt(8, player.getLocation().getBlockX()+size);
|
||||
ps.setInt(9, player.getLocation().getBlockZ()-size);
|
||||
ps.setInt(10, player.getLocation().getBlockZ()+size);
|
||||
rs = ps.executeQuery();
|
||||
player.sendMessage(ChatColor.DARK_AQUA + "Player " + name + " within " + size + " blocks of you: ");
|
||||
if (!rs.next())
|
||||
player.sendMessage(ChatColor.DARK_AQUA + "No results found.");
|
||||
else {
|
||||
player.sendMessage(ChatColor.GOLD + String.format("%-6s %-6s %s", "Creat", "Destr", "Block"));
|
||||
rs.beforeFirst();
|
||||
while (rs.next()) {
|
||||
types.add(getMaterialName(rs.getInt("type")));
|
||||
created.put(getMaterialName(rs.getInt("type")), rs.getInt("num"));
|
||||
player.sendMessage(ChatColor.GOLD + String.format("%-6d %-6d %s", rs.getInt("created"), rs.getInt("destroyed"), Material.getMaterial(rs.getInt("type")).toString().toLowerCase().replace('_', ' ')));
|
||||
}
|
||||
rs.close();
|
||||
ps.close();
|
||||
ps = conn.prepareStatement("SELECT replaced, count(replaced) as num from `" + table + "` INNER JOIN `lb-players` USING (`playerid`) where replaced > 0 and playername = ? and y > 0 and x > ? and x < ? and z > ? and z < ? group by replaced order by count(replaced) desc limit 10", Statement.RETURN_GENERATED_KEYS);
|
||||
ps.setString(1, name);
|
||||
ps.setInt(2, player.getLocation().getBlockX()-size);
|
||||
ps.setInt(3, player.getLocation().getBlockX()+size);
|
||||
ps.setInt(4, player.getLocation().getBlockZ()-size);
|
||||
ps.setInt(5, player.getLocation().getBlockZ()+size);
|
||||
rs = ps.executeQuery();
|
||||
while (rs.next()) {
|
||||
types.add(getMaterialName(rs.getInt("replaced")));
|
||||
destroyed.put(getMaterialName(rs.getInt("replaced")), rs.getInt("num"));
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
LogBlock.log.log(Level.SEVERE, "[LogBlock PlayerAreaStats] SQL exception", ex);
|
||||
@@ -75,24 +68,5 @@ public class PlayerAreaStats implements Runnable
|
||||
LogBlock.log.log(Level.SEVERE, "[LogBlock PlayerAreaStats] SQL exception on close", ex);
|
||||
}
|
||||
}
|
||||
player.sendMessage(ChatColor.DARK_AQUA + "Player " + name + " within " + size + " blocks of you: ");
|
||||
if (types.size() == 0)
|
||||
player.sendMessage(ChatColor.DARK_AQUA + "No results found.");
|
||||
else {
|
||||
player.sendMessage(ChatColor.GOLD + String.format("%-6s %-6s %s", "Creat", "Destr", "Block"));
|
||||
for (String t: types) {
|
||||
Integer c = created.get(t);
|
||||
Integer d = destroyed.get(t);
|
||||
if (c == null)
|
||||
c = 0;
|
||||
if (d == null)
|
||||
d = 0;
|
||||
player.sendMessage(ChatColor.GOLD + String.format("%-6d %-6d %s", c, d, t));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getMaterialName(int type) {
|
||||
return Material.getMaterial(type).toString().toLowerCase().replace('_', ' ');
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user