forked from LogBlock/LogBlock
@@ -394,8 +394,8 @@ public class Consumer extends TimerTask {
|
||||
queue.add(new PlayerJoinRow(player));
|
||||
}
|
||||
|
||||
public void queueLeave(Player player) {
|
||||
queue.add(new PlayerLeaveRow(player));
|
||||
public void queueLeave(Player player, long onlineTime) {
|
||||
queue.add(new PlayerLeaveRow(player, onlineTime));
|
||||
}
|
||||
|
||||
public void queueAddMaterialMapping(int key, String material) {
|
||||
@@ -1019,20 +1019,20 @@ public class Consumer extends TimerTask {
|
||||
}
|
||||
|
||||
private class PlayerLeaveRow implements Row {
|
||||
private final long leaveTime;
|
||||
private final long onlineTime;
|
||||
private final Actor actor;
|
||||
|
||||
PlayerLeaveRow(Player player) {
|
||||
leaveTime = System.currentTimeMillis() / 1000;
|
||||
PlayerLeaveRow(Player player, long onlineTime) {
|
||||
this.onlineTime = onlineTime;
|
||||
actor = Actor.actorFromEntity(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getInserts() {
|
||||
if (logPlayerInfo) {
|
||||
return new String[] { "UPDATE `lb-players` SET onlinetime = onlinetime + TIMESTAMPDIFF(SECOND, lastlogin, FROM_UNIXTIME('" + leaveTime + "')), playername = '" + mysqlTextEscape(actor.getName()) + "' WHERE lastlogin > 0 && UUID = '" + actor.getUUID() + "';" };
|
||||
return new String[] { "UPDATE `lb-players` SET onlinetime = onlinetime + " + onlineTime + " WHERE lastlogin > 0 && UUID = '" + actor.getUUID() + "';" };
|
||||
}
|
||||
return new String[] { "UPDATE `lb-players` SET playername = '" + mysqlTextEscape(actor.getName()) + "' WHERE UUID = '" + actor.getUUID() + "';" };
|
||||
return new String[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -37,6 +37,7 @@ public class LogBlock extends JavaPlugin {
|
||||
private Updater updater = null;
|
||||
private Timer timer = null;
|
||||
private boolean errorAtLoading = false, noDb = false, connected = true;
|
||||
private PlayerInfoLogging playerInfoLogging;
|
||||
|
||||
public static LogBlock getInstance() {
|
||||
return logblock;
|
||||
@@ -147,7 +148,7 @@ public class LogBlock extends JavaPlugin {
|
||||
private void registerEvents() {
|
||||
final PluginManager pm = getPluginManager();
|
||||
pm.registerEvents(new ToolListener(this), this);
|
||||
pm.registerEvents(new PlayerInfoLogging(this), this);
|
||||
pm.registerEvents(playerInfoLogging = new PlayerInfoLogging(this), this);
|
||||
if (askRollbackAfterBan) {
|
||||
pm.registerEvents(new BanListener(this), this);
|
||||
}
|
||||
@@ -214,9 +215,9 @@ public class LogBlock extends JavaPlugin {
|
||||
}
|
||||
getServer().getScheduler().cancelTasks(this);
|
||||
if (consumer != null) {
|
||||
if (logPlayerInfo && getServer().getOnlinePlayers() != null) {
|
||||
if (logPlayerInfo && playerInfoLogging != null) {
|
||||
for (final Player player : getServer().getOnlinePlayers()) {
|
||||
consumer.queueLeave(player);
|
||||
playerInfoLogging.onPlayerQuit(player);
|
||||
}
|
||||
}
|
||||
getLogger().info("Waiting for consumer ...");
|
||||
|
@@ -1,23 +1,43 @@
|
||||
package de.diddiz.LogBlock.listeners;
|
||||
|
||||
import de.diddiz.LogBlock.LogBlock;
|
||||
import de.diddiz.LogBlock.config.Config;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
public class PlayerInfoLogging extends LoggingListener {
|
||||
|
||||
private final HashMap<UUID, Long> playerLogins = new HashMap<>();
|
||||
|
||||
public PlayerInfoLogging(LogBlock lb) {
|
||||
super(lb);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
playerLogins.put(event.getPlayer().getUniqueId(), System.currentTimeMillis());
|
||||
consumer.queueJoin(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||
consumer.queueLeave(event.getPlayer());
|
||||
onPlayerQuit(event.getPlayer());
|
||||
}
|
||||
|
||||
public void onPlayerQuit(Player player) {
|
||||
Long joinTime = playerLogins.remove(player.getUniqueId());
|
||||
if (Config.logPlayerInfo && joinTime != null) {
|
||||
long onlineTime = (System.currentTimeMillis() - joinTime) / 1000;
|
||||
if (onlineTime > 0) {
|
||||
consumer.queueLeave(player, onlineTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user