Created
June 24, 2012 13:35
-
-
Save TerrorBite/2983250 to your computer and use it in GitHub Desktop.
Player connection/chat/command logging plugin for Bukkit
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() | |
)); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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