forked from LogBlock/LogBlock
Added lastLogin, online time and ip logging
This commit is contained in:
@@ -28,7 +28,7 @@ public class Config
|
||||
public final int keepLogDays;
|
||||
public final boolean dumpDeletedLog;
|
||||
public boolean logBlockPlacings, logBlockBreaks, logSignTexts, logExplosions, logFire, logLeavesDecay, logLavaFlow, logWaterFlow, logChestAccess, logButtonsAndLevers, logKills, logChat, logSnowForm, logSnowFade, logDoors, logCakes, logEndermen;
|
||||
public final boolean logCreeperExplosionsAsPlayerWhoTriggeredThese;
|
||||
public final boolean logCreeperExplosionsAsPlayerWhoTriggeredThese, logPlayerInfo;
|
||||
public final LogKillsLevel logKillsLevel;
|
||||
public final Set<Integer> dontRollback, replaceAnyway;
|
||||
public final int rollbackMaxTime, rollbackMaxArea;
|
||||
@@ -62,6 +62,7 @@ public class Config
|
||||
def.put("clearlog.keepLogDays", -1);
|
||||
def.put("logging.logCreeperExplosionsAsPlayerWhoTriggeredThese", false);
|
||||
def.put("logging.logKillsLevel", "PLAYERS");
|
||||
def.put("logging.logPlayerInfo", true);
|
||||
def.put("logging.hiddenPlayers", new ArrayList<String>());
|
||||
def.put("logging.hiddenBlocks", Arrays.asList(0));
|
||||
def.put("rollback.dontRollback", Arrays.asList(10, 11, 46, 51));
|
||||
@@ -118,6 +119,7 @@ public class Config
|
||||
throw new DataFormatException("Too large timespan for keepLogDays. Must be shorter than " + (int)(System.currentTimeMillis() / 86400000L) + " days.");
|
||||
dumpDeletedLog = config.getBoolean("clearlog.dumpDeletedLog", false);
|
||||
logCreeperExplosionsAsPlayerWhoTriggeredThese = config.getBoolean("logging.logCreeperExplosionsAsPlayerWhoTriggeredThese", false);
|
||||
logPlayerInfo = config.getBoolean("logging.logPlayerInfo", true);
|
||||
try {
|
||||
logKillsLevel = LogKillsLevel.valueOf(config.getString("logging.logKillsLevel").toUpperCase());
|
||||
} catch (final IllegalArgumentException ex) {
|
||||
|
@@ -237,6 +237,14 @@ public class Consumer extends TimerTask
|
||||
queue.add(new ChatRow(player, message.replace("\\", "\\\\").replace("'", "\\'")));
|
||||
}
|
||||
|
||||
public void queueJoin(Player player) {
|
||||
queue.add(new PlayerJoinRow(player));
|
||||
}
|
||||
|
||||
public void queueLeave(Player player) {
|
||||
queue.add(new PlayerLeaveRow(player));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (queue.isEmpty() || !lock.tryLock())
|
||||
@@ -430,4 +438,48 @@ public class Consumer extends TimerTask
|
||||
return new String[]{playerName};
|
||||
}
|
||||
}
|
||||
|
||||
private class PlayerJoinRow implements Row
|
||||
{
|
||||
private final String playerName;
|
||||
private final long lastLogin;
|
||||
private final String ip;
|
||||
|
||||
PlayerJoinRow(Player player) {
|
||||
playerName = player.getName();
|
||||
lastLogin = System.currentTimeMillis() / 1000;
|
||||
ip = player.getAddress().toString().replace("'", "\\'");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getInserts() {
|
||||
return new String[]{"UPDATE `lb-players` SET lastlogin = FROM_UNIXTIME(" + lastLogin + "), ip = '" + ip + "' WHERE playerid = " + playerID(playerName) + ";"};
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getPlayers() {
|
||||
return new String[]{playerName};
|
||||
}
|
||||
}
|
||||
|
||||
private class PlayerLeaveRow implements Row
|
||||
{
|
||||
private final String playerName;
|
||||
private final long leaveTime;
|
||||
|
||||
PlayerLeaveRow(Player player) {
|
||||
playerName = player.getName();
|
||||
leaveTime = System.currentTimeMillis() / 1000;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getInserts() {
|
||||
return new String[]{"UPDATE `lb-players` SET onlinetime = ADDTIME(onlinetime, TIMEDIFF(FROM_UNIXTIME(" + leaveTime + "), lastlogin)) WHERE playerid = " + playerID(playerName) + ";"};
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getPlayers() {
|
||||
return new String[]{playerName};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -8,7 +8,9 @@ import org.bukkit.event.player.PlayerBucketFillEvent;
|
||||
import org.bukkit.event.player.PlayerChatEvent;
|
||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerListener;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
class LBPlayerListener extends PlayerListener
|
||||
{
|
||||
@@ -61,4 +63,14 @@ class LBPlayerListener extends PlayerListener
|
||||
if (wcfg != null && wcfg.logChat)
|
||||
consumer.queueChat(event.getPlayer().getName(), event.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
consumer.queueJoin(event.getPlayer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||
consumer.queueLeave(event.getPlayer());
|
||||
}
|
||||
}
|
||||
|
@@ -222,6 +222,10 @@ public class LogBlock extends JavaPlugin
|
||||
pm.registerEvent(Type.ENDERMAN_PICKUP, lbEntityListener, Priority.Monitor, this);
|
||||
pm.registerEvent(Type.ENDERMAN_PLACE, lbEntityListener, Priority.Monitor, this);
|
||||
}
|
||||
if (config.logPlayerInfo) {
|
||||
pm.registerEvent(Type.PLAYER_JOIN, lbPlayerListener, Priority.Monitor, this);
|
||||
pm.registerEvent(Type.PLAYER_QUIT, lbPlayerListener, Priority.Monitor, this);
|
||||
}
|
||||
if (config.useBukkitScheduler) {
|
||||
if (getServer().getScheduler().scheduleAsyncRepeatingTask(this, consumer, config.delayBetweenRuns * 20, config.delayBetweenRuns * 20) > 0)
|
||||
log.info("[LogBlock] Scheduled consumer with bukkit scheduler.");
|
||||
@@ -248,6 +252,9 @@ public class LogBlock extends JavaPlugin
|
||||
if (timer != null)
|
||||
timer.cancel();
|
||||
getServer().getScheduler().cancelTasks(this);
|
||||
if (config.logPlayerInfo)
|
||||
for (final Player player : getServer().getOnlinePlayers())
|
||||
consumer.queueLeave(player);
|
||||
if (consumer != null && consumer.getQueueSize() > 0) {
|
||||
log.info("[LogBlock] Waiting for consumer ...");
|
||||
int lastSize = -1, fails = 0;
|
||||
|
@@ -98,6 +98,18 @@ class Updater
|
||||
config.setProperty("tools." + tool + ".permissionDefault", "OP");
|
||||
config.setProperty("version", "1.30");
|
||||
}
|
||||
if (config.getString("version").compareTo("1.31") < 0) {
|
||||
log.info("[LogBlock] Updating tables to 1.31 ...");
|
||||
final Connection conn = logblock.getConnection();
|
||||
try {
|
||||
conn.setAutoCommit(true);
|
||||
final Statement st = conn.createStatement();
|
||||
st.execute("ALTER TABLE `lb-players` ADD COLUMN lastlogin DATETIME NOT NULL, ADD COLUMN onlinetime TIME NOT NULL, ADD COLUMN ip VARCHAR(255) NOT NULL");
|
||||
st.close();
|
||||
conn.close();
|
||||
} catch (final SQLException ex) {}
|
||||
config.setProperty("version", "1.31");
|
||||
}
|
||||
config.save();
|
||||
return true;
|
||||
}
|
||||
@@ -109,7 +121,7 @@ class Updater
|
||||
final Statement state = conn.createStatement();
|
||||
final DatabaseMetaData dbm = conn.getMetaData();
|
||||
conn.setAutoCommit(true);
|
||||
createTable(dbm, state, "lb-players", "(playerid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, playername varchar(32) NOT NULL DEFAULT '-', PRIMARY KEY (playerid), UNIQUE (playername))");
|
||||
createTable(dbm, state, "lb-players", "(playerid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, playername varchar(32) NOT NULL, lastlogin DATETIME NOT NULL, onlinetime TIME NOT NULL, ip varchar(255) NOT NULL, PRIMARY KEY (playerid), UNIQUE (playername))");
|
||||
if (logblock.getConfig().logChat)
|
||||
createTable(dbm, state, "lb-chat", "(id INT UNSIGNED NOT NULL AUTO_INCREMENT, date DATETIME NOT NULL, playerid SMALLINT UNSIGNED NOT NULL, message VARCHAR(255) NOT NULL, PRIMARY KEY (id), KEY playerid (playerid), FULLTEXT message (message)) ENGINE=MyISAM");
|
||||
for (final WorldConfig wcfg : logblock.getConfig().worlds.values()) {
|
||||
|
@@ -1,5 +1,5 @@
|
||||
name: LogBlock
|
||||
version: '1.30'
|
||||
version: '1.31'
|
||||
author: DiddiZ
|
||||
website: http://www.diddiz.de/minecraft/
|
||||
main: de.diddiz.LogBlock.LogBlock
|
||||
|
Reference in New Issue
Block a user