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 int keepLogDays;
|
||||||
public final boolean dumpDeletedLog;
|
public final boolean dumpDeletedLog;
|
||||||
public boolean logBlockPlacings, logBlockBreaks, logSignTexts, logExplosions, logFire, logLeavesDecay, logLavaFlow, logWaterFlow, logChestAccess, logButtonsAndLevers, logKills, logChat, logSnowForm, logSnowFade, logDoors, logCakes, logEndermen;
|
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 LogKillsLevel logKillsLevel;
|
||||||
public final Set<Integer> dontRollback, replaceAnyway;
|
public final Set<Integer> dontRollback, replaceAnyway;
|
||||||
public final int rollbackMaxTime, rollbackMaxArea;
|
public final int rollbackMaxTime, rollbackMaxArea;
|
||||||
@@ -62,6 +62,7 @@ public class Config
|
|||||||
def.put("clearlog.keepLogDays", -1);
|
def.put("clearlog.keepLogDays", -1);
|
||||||
def.put("logging.logCreeperExplosionsAsPlayerWhoTriggeredThese", false);
|
def.put("logging.logCreeperExplosionsAsPlayerWhoTriggeredThese", false);
|
||||||
def.put("logging.logKillsLevel", "PLAYERS");
|
def.put("logging.logKillsLevel", "PLAYERS");
|
||||||
|
def.put("logging.logPlayerInfo", true);
|
||||||
def.put("logging.hiddenPlayers", new ArrayList<String>());
|
def.put("logging.hiddenPlayers", new ArrayList<String>());
|
||||||
def.put("logging.hiddenBlocks", Arrays.asList(0));
|
def.put("logging.hiddenBlocks", Arrays.asList(0));
|
||||||
def.put("rollback.dontRollback", Arrays.asList(10, 11, 46, 51));
|
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.");
|
throw new DataFormatException("Too large timespan for keepLogDays. Must be shorter than " + (int)(System.currentTimeMillis() / 86400000L) + " days.");
|
||||||
dumpDeletedLog = config.getBoolean("clearlog.dumpDeletedLog", false);
|
dumpDeletedLog = config.getBoolean("clearlog.dumpDeletedLog", false);
|
||||||
logCreeperExplosionsAsPlayerWhoTriggeredThese = config.getBoolean("logging.logCreeperExplosionsAsPlayerWhoTriggeredThese", false);
|
logCreeperExplosionsAsPlayerWhoTriggeredThese = config.getBoolean("logging.logCreeperExplosionsAsPlayerWhoTriggeredThese", false);
|
||||||
|
logPlayerInfo = config.getBoolean("logging.logPlayerInfo", true);
|
||||||
try {
|
try {
|
||||||
logKillsLevel = LogKillsLevel.valueOf(config.getString("logging.logKillsLevel").toUpperCase());
|
logKillsLevel = LogKillsLevel.valueOf(config.getString("logging.logKillsLevel").toUpperCase());
|
||||||
} catch (final IllegalArgumentException ex) {
|
} catch (final IllegalArgumentException ex) {
|
||||||
|
@@ -237,6 +237,14 @@ public class Consumer extends TimerTask
|
|||||||
queue.add(new ChatRow(player, message.replace("\\", "\\\\").replace("'", "\\'")));
|
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
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (queue.isEmpty() || !lock.tryLock())
|
if (queue.isEmpty() || !lock.tryLock())
|
||||||
@@ -430,4 +438,48 @@ public class Consumer extends TimerTask
|
|||||||
return new String[]{playerName};
|
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.PlayerChatEvent;
|
||||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerListener;
|
import org.bukkit.event.player.PlayerListener;
|
||||||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
|
||||||
class LBPlayerListener extends PlayerListener
|
class LBPlayerListener extends PlayerListener
|
||||||
{
|
{
|
||||||
@@ -61,4 +63,14 @@ class LBPlayerListener extends PlayerListener
|
|||||||
if (wcfg != null && wcfg.logChat)
|
if (wcfg != null && wcfg.logChat)
|
||||||
consumer.queueChat(event.getPlayer().getName(), event.getMessage());
|
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_PICKUP, lbEntityListener, Priority.Monitor, this);
|
||||||
pm.registerEvent(Type.ENDERMAN_PLACE, 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 (config.useBukkitScheduler) {
|
||||||
if (getServer().getScheduler().scheduleAsyncRepeatingTask(this, consumer, config.delayBetweenRuns * 20, config.delayBetweenRuns * 20) > 0)
|
if (getServer().getScheduler().scheduleAsyncRepeatingTask(this, consumer, config.delayBetweenRuns * 20, config.delayBetweenRuns * 20) > 0)
|
||||||
log.info("[LogBlock] Scheduled consumer with bukkit scheduler.");
|
log.info("[LogBlock] Scheduled consumer with bukkit scheduler.");
|
||||||
@@ -248,6 +252,9 @@ public class LogBlock extends JavaPlugin
|
|||||||
if (timer != null)
|
if (timer != null)
|
||||||
timer.cancel();
|
timer.cancel();
|
||||||
getServer().getScheduler().cancelTasks(this);
|
getServer().getScheduler().cancelTasks(this);
|
||||||
|
if (config.logPlayerInfo)
|
||||||
|
for (final Player player : getServer().getOnlinePlayers())
|
||||||
|
consumer.queueLeave(player);
|
||||||
if (consumer != null && consumer.getQueueSize() > 0) {
|
if (consumer != null && consumer.getQueueSize() > 0) {
|
||||||
log.info("[LogBlock] Waiting for consumer ...");
|
log.info("[LogBlock] Waiting for consumer ...");
|
||||||
int lastSize = -1, fails = 0;
|
int lastSize = -1, fails = 0;
|
||||||
|
@@ -98,6 +98,18 @@ class Updater
|
|||||||
config.setProperty("tools." + tool + ".permissionDefault", "OP");
|
config.setProperty("tools." + tool + ".permissionDefault", "OP");
|
||||||
config.setProperty("version", "1.30");
|
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();
|
config.save();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -109,7 +121,7 @@ class Updater
|
|||||||
final Statement state = conn.createStatement();
|
final Statement state = conn.createStatement();
|
||||||
final DatabaseMetaData dbm = conn.getMetaData();
|
final DatabaseMetaData dbm = conn.getMetaData();
|
||||||
conn.setAutoCommit(true);
|
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)
|
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");
|
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()) {
|
for (final WorldConfig wcfg : logblock.getConfig().worlds.values()) {
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
name: LogBlock
|
name: LogBlock
|
||||||
version: '1.30'
|
version: '1.31'
|
||||||
author: DiddiZ
|
author: DiddiZ
|
||||||
website: http://www.diddiz.de/minecraft/
|
website: http://www.diddiz.de/minecraft/
|
||||||
main: de.diddiz.LogBlock.LogBlock
|
main: de.diddiz.LogBlock.LogBlock
|
||||||
|
Reference in New Issue
Block a user