Skip to content

Instantly share code, notes, and snippets.

@TerrorBite
Created June 24, 2012 13:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TerrorBite/2983250 to your computer and use it in GitHub Desktop.
Save TerrorBite/2983250 to your computer and use it in GitHub Desktop.
Player connection/chat/command logging plugin for Bukkit
package org.mcau.plugins.logmcau;
import java.util.logging.Logger;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChatEvent;
public class ChatListener implements Listener {
Logger log;
public ChatListener(Logger l) {
log = l;
}
@EventHandler(priority=EventPriority.HIGHEST)
public void onPlayerChat(PlayerChatEvent event) {
// Even log cancelled chat
String logMessage = String.format("%s: %s", event.getPlayer().getName(), event.getMessage());
log.info(logMessage);
}
}
package org.mcau.plugins.logmcau;
import java.util.logging.Logger;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.server.RemoteServerCommandEvent;
import org.bukkit.event.server.ServerCommandEvent;
public class CommandListener implements Listener {
Logger log;
public CommandListener(Logger l) {
log = l;
}
@EventHandler(priority=EventPriority.HIGHEST)
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
String logMessage = String.format("[COMMAND] %s@%s: %s",
event.getPlayer().getName(),
LogMCAU.locToString(event.getPlayer().getLocation()),
event.getMessage()
);
log.info(logMessage);
}
@EventHandler(priority=EventPriority.HIGHEST)
public void onServerCommand(ServerCommandEvent event) {
String logMessage = String.format("[CONSOLE] %s", event.getCommand());
log.info(logMessage);
}
@EventHandler(priority=EventPriority.HIGHEST)
public void onRemoteServerCommand(RemoteServerCommandEvent event) {
String logMessage = String.format("[RCON] %s", event.getCommand());
log.info(logMessage);
}
}
package org.mcau.plugins.logmcau;
import java.util.logging.LogRecord;
import java.util.logging.Formatter;
public class LogFormatter extends Formatter {
private java.util.Date dat;
private java.text.DateFormat formatter;
private static final java.lang.String format = "yyyy-MM-dd HH:mm:ss";
public LogFormatter() {
dat = new java.util.Date();
}
@Override
public String format(LogRecord record) {
if(formatter==null) formatter = new java.text.SimpleDateFormat(format);
dat.setTime(record.getMillis());
return String.format("%s %s%n", formatter.format(dat), record.getMessage());
}
}
package org.mcau.plugins.logmcau;
import java.io.IOException;
import java.util.logging.*;
import org.bukkit.Location;
import org.bukkit.plugin.java.JavaPlugin;
public class LogMCAU extends JavaPlugin {
private Handler playerHandler, chatHandler, commandHandler;
private Logger playerLog, chatLog, commandLog;
private ChatListener chatListener;
private CommandListener commandListener;
private PlayerListener playerListener;
@Override
public void onEnable() {
// Set up logfile for player events
playerLog = Logger.getAnonymousLogger();
playerLog.setUseParentHandlers(false);
try {
playerHandler = new FileHandler("player.log", true);
playerLog.addHandler(playerHandler);
playerHandler.setFormatter(new LogFormatter());
} catch (SecurityException e) {
this.getLogger().log(Level.SEVERE, "SecurityException while opening player log!", e);
} catch (IOException e) {
this.getLogger().log(Level.WARNING, "Could not open player log!", e);
}
playerLog.info("Start of log");
// Set up logfile for chat events
chatLog = Logger.getAnonymousLogger();
chatLog.setUseParentHandlers(false);
try {
chatHandler = new FileHandler("chat.log", true);
chatLog.addHandler(chatHandler);
chatHandler.setFormatter(new LogFormatter());
} catch (SecurityException e) {
this.getLogger().log(Level.SEVERE, "SecurityException while opening chat log!", e);
} catch (IOException e) {
this.getLogger().log(Level.WARNING, "Could not open chat log!", e);
}
chatLog.info("Start of log");
// Set up logfile for command events
commandLog = Logger.getAnonymousLogger();
commandLog.setUseParentHandlers(false);
try {
commandHandler = new FileHandler("command.log", true);
commandLog.addHandler(commandHandler);
commandHandler.setFormatter(new LogFormatter());
} catch (SecurityException e) {
this.getLogger().log(Level.SEVERE, "SecurityException while opening command log!", e);
} catch (IOException e) {
this.getLogger().log(Level.WARNING, "Could not open command log!", e);
}
commandLog.info("Start of log");
// Register event listeners
playerListener = new PlayerListener(playerLog);
getServer().getPluginManager().registerEvents(playerListener, this);
chatListener = new ChatListener(chatLog);
getServer().getPluginManager().registerEvents(chatListener, this);
commandListener = new CommandListener(commandLog);
getServer().getPluginManager().registerEvents(commandListener, this);
// Flush logs to disk every 5 seconds
this.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
public void run() {
if(playerHandler != null) playerHandler.flush();
if(chatHandler != null) chatHandler.flush();
if(commandHandler != null) commandHandler.flush();
}
}, 5L, 5L);
}
public void onDisable() {
playerLog.info("End of log");
playerLog.removeHandler(playerHandler);
playerHandler.close();
playerHandler = null;
playerLog = null;
chatLog.info("End of log");
chatLog.removeHandler(chatHandler);
chatHandler.close();
chatHandler = null;
chatLog = null;
commandLog.info("End of log");
commandLog.removeHandler(commandHandler);
commandHandler.close();
commandHandler = null;
commandLog = null;
playerListener = null;
chatListener = null;
commandListener = null;
}
public static String locToString(Location where) {
return String.format("(%s/%d,%d,%d)", where.getWorld().getName(), where.getBlockX(), where.getBlockY(), where.getBlockZ());
}
}
package org.mcau.plugins.logmcau;
import java.util.logging.Logger;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerGameModeChangeEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerPreLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.server.ServerListPingEvent;
public class PlayerListener implements Listener {
Logger log;
public PlayerListener(Logger l) {
log = l;
}
@EventHandler(priority=EventPriority.MONITOR)
public void onServerListPing(ServerListPingEvent event){
log.info(String.format("[LIST] %s queried the server", event.getAddress().getHostAddress()));
}
@EventHandler(priority=EventPriority.MONITOR)
public void onPlayerPreLogin(PlayerPreLoginEvent event) {
log.info(String.format(
"[CONNECT] %s/%s %s",
event.getName(),
event.getAddress().getHostAddress(),
event.getResult() == PlayerPreLoginEvent.Result.ALLOWED ? "connected" : String.format("denied connection: %s", event.getKickMessage())
));
}
@EventHandler(priority=EventPriority.MONITOR)
public void onPlayerLogin(PlayerLoginEvent event) {
if(event.getResult() != PlayerLoginEvent.Result.ALLOWED)
log.info(String.format(
"[LOGIN] %s@%s was denied login: %s",
event.getPlayer().getName(),
LogMCAU.locToString(event.getPlayer().getLocation()),
event.getKickMessage()
));
}
@EventHandler(priority=EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent event) {
log.info(String.format(
"[JOIN] %s@%s joined the game",
event.getPlayer().getName(),
LogMCAU.locToString(event.getPlayer().getLocation())
));
}
@EventHandler(priority=EventPriority.MONITOR)
public void onPlayerQuit(PlayerQuitEvent event) {
log.info(String.format(
"[QUIT] %s@%s left the game",
event.getPlayer().getName(),
LogMCAU.locToString(event.getPlayer().getLocation())
));
}
@EventHandler(priority=EventPriority.MONITOR)
public void onPlayerKick(PlayerKickEvent event) {
log.info(String.format(
"[KICK] %s@%s was kicked: %s",
event.getPlayer().getName(),
LogMCAU.locToString(event.getPlayer().getLocation()),
event.getReason()
));
}
@EventHandler(priority=EventPriority.MONITOR)
public void onPlayerGameModeChange(PlayerGameModeChangeEvent event) {
log.info(String.format(
"[GAMEMODE] %s@%s entered %s mode",
event.getPlayer().getName(),
LogMCAU.locToString(event.getPlayer().getLocation()),
event.getNewGameMode().toString()
));
}
}
name: LogMCAU
main: org.mcau.plugins.logmcau.LogMCAU
version: 1.0.1
commands: {}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment