forked from LogBlock/LogBlock
Moved query at player join.
This commit is contained in:
@@ -28,6 +28,7 @@ public class Consumer extends TimerTask
|
|||||||
private final Config config;
|
private final Config config;
|
||||||
private final LinkedBlockingQueue<BlockRow> bqueue = new LinkedBlockingQueue<BlockRow>();
|
private final LinkedBlockingQueue<BlockRow> bqueue = new LinkedBlockingQueue<BlockRow>();
|
||||||
private final LinkedBlockingQueue<KillRow> kqueue = new LinkedBlockingQueue<KillRow>();
|
private final LinkedBlockingQueue<KillRow> kqueue = new LinkedBlockingQueue<KillRow>();
|
||||||
|
private final HashSet<Integer> players = new HashSet<Integer>();
|
||||||
private final HashSet<Integer> hiddenplayers = new HashSet<Integer>();
|
private final HashSet<Integer> hiddenplayers = new HashSet<Integer>();
|
||||||
private final HashMap<Integer, Integer> lastAttackedEntity = new HashMap<Integer, Integer>();
|
private final HashMap<Integer, Integer> lastAttackedEntity = new HashMap<Integer, Integer>();
|
||||||
private final HashMap<Integer, Long> lastAttackTime = new HashMap<Integer, Long>();
|
private final HashMap<Integer, Long> lastAttackTime = new HashMap<Integer, Long>();
|
||||||
@@ -36,6 +37,7 @@ public class Consumer extends TimerTask
|
|||||||
this.logblock = logblock;
|
this.logblock = logblock;
|
||||||
log = logblock.getServer().getLogger();
|
log = logblock.getServer().getLogger();
|
||||||
config = logblock.getConfig();
|
config = logblock.getConfig();
|
||||||
|
readPlayers();
|
||||||
}
|
}
|
||||||
|
|
||||||
int getQueueSize() {
|
int getQueueSize() {
|
||||||
@@ -244,6 +246,56 @@ public class Consumer extends TimerTask
|
|||||||
queueSignPlace(playerName, new Location(sign.getWorld(), sign.getX(), sign.getY(), sign.getZ()), sign.getTypeId(), sign.getRawData(), sign.getLines());
|
queueSignPlace(playerName, new Location(sign.getWorld(), sign.getX(), sign.getY(), sign.getZ()), sign.getTypeId(), sign.getRawData(), sign.getLines());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean addPlayer(String playerName) {
|
||||||
|
final Connection conn = logblock.getConnection();
|
||||||
|
if (conn == null)
|
||||||
|
return false;
|
||||||
|
Statement state = null;
|
||||||
|
try {
|
||||||
|
state = conn.createStatement();
|
||||||
|
conn.setAutoCommit(true);
|
||||||
|
state.execute("INSERT IGNORE INTO `lb-players` (playername) VALUES ('" + playerName + "');");
|
||||||
|
readPlayers();
|
||||||
|
return players.contains(playerName.hashCode());
|
||||||
|
} catch (final SQLException ex) {
|
||||||
|
log.log(Level.SEVERE, "[LogBlock] SQL exception", ex);
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (state != null)
|
||||||
|
state.close();
|
||||||
|
conn.close();
|
||||||
|
} catch (final SQLException ex) {
|
||||||
|
log.log(Level.SEVERE, "[LogBlock] SQL exception on close", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void readPlayers() {
|
||||||
|
final Connection conn = logblock.getConnection();
|
||||||
|
if (conn == null)
|
||||||
|
return;
|
||||||
|
Statement state = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
try {
|
||||||
|
conn.setAutoCommit(false);
|
||||||
|
state = conn.createStatement();
|
||||||
|
rs = state.executeQuery("SELECT playername FROM `lb-players`");
|
||||||
|
while (rs.next())
|
||||||
|
players.add(rs.getString(1).hashCode());
|
||||||
|
} catch (final SQLException ex) {
|
||||||
|
log.log(Level.SEVERE, "[LogBlock Consumer] SQL exception", ex);
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (state != null)
|
||||||
|
state.close();
|
||||||
|
conn.close();
|
||||||
|
} catch (final SQLException ex) {
|
||||||
|
log.log(Level.SEVERE, "[LogBlock Consumer] SQL exception on close", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void run() {
|
public synchronized void run() {
|
||||||
final Connection conn = logblock.getConnection();
|
final Connection conn = logblock.getConnection();
|
||||||
@@ -265,6 +317,11 @@ public class Consumer extends TimerTask
|
|||||||
b = bqueue.poll();
|
b = bqueue.poll();
|
||||||
if (b == null)
|
if (b == null)
|
||||||
continue;
|
continue;
|
||||||
|
if (!players.contains(b.name.hashCode()))
|
||||||
|
if (!addPlayer(b.name)) {
|
||||||
|
log.warning("[LogBlock Consumer] Failed to add player " + b.name);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
table = config.tables.get(b.worldHash);
|
table = config.tables.get(b.worldHash);
|
||||||
state.execute("INSERT INTO `" + table + "` (date, playerid, replaced, type, data, x, y, z) SELECT now(), playerid, " + b.replaced + ", " + b.type + ", " + b.data + ", '" + b.x + "', " + b.y + ", '" + b.z + "' FROM `lb-players` WHERE playername = '" + b.name + "'", Statement.RETURN_GENERATED_KEYS);
|
state.execute("INSERT INTO `" + table + "` (date, playerid, replaced, type, data, x, y, z) SELECT now(), playerid, " + b.replaced + ", " + b.type + ", " + b.data + ", '" + b.x + "', " + b.y + ", '" + b.z + "' FROM `lb-players` WHERE playername = '" + b.name + "'", Statement.RETURN_GENERATED_KEYS);
|
||||||
if (b.signtext != null) {
|
if (b.signtext != null) {
|
||||||
@@ -291,6 +348,16 @@ public class Consumer extends TimerTask
|
|||||||
k = kqueue.poll();
|
k = kqueue.poll();
|
||||||
if (k == null)
|
if (k == null)
|
||||||
continue;
|
continue;
|
||||||
|
if (!players.contains(k.killer.hashCode()))
|
||||||
|
if (!addPlayer(k.killer)) {
|
||||||
|
log.warning("[LogBlock Consumer] Failed to add player " + k.killer);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!players.contains(k.victim.hashCode()))
|
||||||
|
if (!addPlayer(k.victim)) {
|
||||||
|
log.warning("[LogBlock Consumer] Failed to add player " + k.victim);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
state.execute("INSERT INTO `" + config.tables.get(k.worldHash) + "-kills` (date, killer, victim, weapon) SELECT now(), playerid, (SELECT playerid FROM `lb-players` WHERE playername = '" + k.victim + "'), " + k.weapon + " FROM `lb-players` WHERE playername = '" + k.killer + "'");
|
state.execute("INSERT INTO `" + config.tables.get(k.worldHash) + "-kills` (date, killer, victim, weapon) SELECT now(), playerid, (SELECT playerid FROM `lb-players` WHERE playername = '" + k.victim + "'), " + k.weapon + " FROM `lb-players` WHERE playername = '" + k.killer + "'");
|
||||||
count++;
|
count++;
|
||||||
if (count % 100 == 0)
|
if (count % 100 == 0)
|
||||||
|
@@ -1,25 +1,15 @@
|
|||||||
package de.diddiz.LogBlock;
|
package de.diddiz.LogBlock;
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.sql.Statement;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
||||||
import org.bukkit.event.player.PlayerBucketFillEvent;
|
import org.bukkit.event.player.PlayerBucketFillEvent;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
|
||||||
import org.bukkit.event.player.PlayerListener;
|
import org.bukkit.event.player.PlayerListener;
|
||||||
|
|
||||||
class LBPlayerListener extends PlayerListener
|
class LBPlayerListener extends PlayerListener
|
||||||
{
|
{
|
||||||
private final Logger log;
|
|
||||||
private final LogBlock logblock;
|
|
||||||
private final Consumer consumer;
|
private final Consumer consumer;
|
||||||
|
|
||||||
LBPlayerListener(LogBlock logblock) {
|
LBPlayerListener(LogBlock logblock) {
|
||||||
this.logblock = logblock;
|
|
||||||
log = logblock.getServer().getLogger();
|
|
||||||
consumer = logblock.getConsumer();
|
consumer = logblock.getConsumer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,28 +26,4 @@ class LBPlayerListener extends PlayerListener
|
|||||||
else if (event.getBucket() == Material.LAVA_BUCKET)
|
else if (event.getBucket() == Material.LAVA_BUCKET)
|
||||||
consumer.queueBlockPlace(event.getPlayer().getName(), event.getBlockClicked().getFace(event.getBlockFace()).getLocation(), 11, (byte)0);
|
consumer.queueBlockPlace(event.getPlayer().getName(), event.getBlockClicked().getFace(event.getBlockFace()).getLocation(), 11, (byte)0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
|
||||||
final Connection conn = logblock.getConnection();
|
|
||||||
if (conn == null)
|
|
||||||
return;
|
|
||||||
Statement state = null;
|
|
||||||
try {
|
|
||||||
conn.setAutoCommit(false);
|
|
||||||
state = conn.createStatement();
|
|
||||||
state.execute("INSERT IGNORE INTO `lb-players` (playername) VALUES ('" + event.getPlayer().getName() + "');");
|
|
||||||
conn.commit();
|
|
||||||
} catch (final SQLException ex) {
|
|
||||||
log.log(Level.SEVERE, "[LogBlock] SQL exception", ex);
|
|
||||||
} finally {
|
|
||||||
try {
|
|
||||||
if (state != null)
|
|
||||||
state.close();
|
|
||||||
conn.close();
|
|
||||||
} catch (final SQLException ex) {
|
|
||||||
log.log(Level.SEVERE, "[LogBlock] SQL exception on close", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -120,7 +120,6 @@ public class LogBlock extends JavaPlugin
|
|||||||
final LBEntityListener lbEntityListener = new LBEntityListener(this);
|
final LBEntityListener lbEntityListener = new LBEntityListener(this);
|
||||||
final PluginManager pm = getServer().getPluginManager();
|
final PluginManager pm = getServer().getPluginManager();
|
||||||
pm.registerEvent(Type.PLAYER_INTERACT, new LBToolListener(this), Priority.Normal, this);
|
pm.registerEvent(Type.PLAYER_INTERACT, new LBToolListener(this), Priority.Normal, this);
|
||||||
pm.registerEvent(Type.PLAYER_JOIN, lbPlayerListener, Priority.Monitor, this);
|
|
||||||
if (config.logBlockCreations) {
|
if (config.logBlockCreations) {
|
||||||
pm.registerEvent(Type.BLOCK_PLACE, lbBlockListener, Priority.Monitor, this);
|
pm.registerEvent(Type.BLOCK_PLACE, lbBlockListener, Priority.Monitor, this);
|
||||||
pm.registerEvent(Type.PLAYER_BUCKET_EMPTY, lbPlayerListener, Priority.Monitor, this);
|
pm.registerEvent(Type.PLAYER_BUCKET_EMPTY, lbPlayerListener, Priority.Monitor, this);
|
||||||
@@ -193,7 +192,6 @@ public class LogBlock extends JavaPlugin
|
|||||||
if (!dbm.getTables(null, null, "lb-players", null).next())
|
if (!dbm.getTables(null, null, "lb-players", null).next())
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
state.execute("INSERT IGNORE INTO `lb-players` (playername) VALUES ('-'), ('TNT'), ('Creeper'), ('Fire'), ('LeavesDecay'), ('Ghast'), ('LavaFlow'), ('Environment'), ('Chicken'), ('Cow'), ('Giant'), ('Pig'), ('PigZombie'), ('Sheep'), ('Skeleton'), ('Slime'), ('Spider'), ('Squid'), ('Wolf'), ('Zombie')");
|
|
||||||
for (final String table : config.tables.values()) {
|
for (final String table : config.tables.values()) {
|
||||||
if (!dbm.getTables(null, null, table, null).next()) {
|
if (!dbm.getTables(null, null, table, null).next()) {
|
||||||
log.log(Level.INFO, "[LogBlock] Crating table " + table + ".");
|
log.log(Level.INFO, "[LogBlock] Crating table " + table + ".");
|
||||||
|
Reference in New Issue
Block a user