Skip to content

Instantly share code, notes, and snippets.

@vemacs
Created November 2, 2013 16:14
Show Gist options
  • Save vemacs/7280551 to your computer and use it in GitHub Desktop.
Save vemacs/7280551 to your computer and use it in GitHub Desktop.
package net.thechunk.mark2bungee;
import com.google.common.base.Joiner;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.connection.Server;
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
import net.md_5.bungee.api.event.PluginMessageEvent;
import net.md_5.bungee.api.event.ServerConnectedEvent;
import net.md_5.bungee.api.plugin.Command;
import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.event.EventHandler;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Handler;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class mark2bungee extends Plugin implements Listener {
private static long startTime; // The startup time isn't total bullshit
private Logger bungeeLogger;
@Override
public void onEnable() {
startTime = System.currentTimeMillis();
bungeeLogger = getProxy().getLogger();
Handler h = new Handler() {
@Override
public void publish(LogRecord record) {
if (record.getMessage().contains("Listening on /")) {
long timeDelta = System.currentTimeMillis() - startTime;
PrintStream oldOut = System.out;
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ");
Date today = Calendar.getInstance().getTime();
String reportDate = df.format(today);
System.out.println((reportDate + "[INFO] Done (" + ((float) timeDelta) / 1000 + "s)! For help, read the wiki."));
System.setOut(oldOut);
bungeeLogger.removeHandler(this);
}
}
public void flush() {
}
public void close() throws SecurityException {
}
};
bungeeLogger.addHandler(h);
getProxy().getPluginManager().registerCommand(this, new Command("stop") {
@Override
public void execute(CommandSender sender, String[] args) {
Joiner joiner = Joiner.on(" ").skipNulls();
if (sender instanceof ProxiedPlayer) {
ProxiedPlayer p = (ProxiedPlayer) sender;
p.chat("/stop " + joiner.join(args)); // for a proper passthrough, just in case
} else {
getProxy().getPluginManager().dispatchCommand(sender, "end");
}
}
});
getProxy().getPluginManager().registerCommand(this, new Command("say") {
@Override
public void execute(CommandSender sender, String[] args) {
Joiner joiner = Joiner.on(" ").skipNulls();
if (sender instanceof ProxiedPlayer) {
ProxiedPlayer p = (ProxiedPlayer) sender;
p.chat("/say " + joiner.join(args));
} else {
getProxy().getPluginManager().dispatchCommand(sender, "alert " + joiner.join(args));
}
}
});
getProxy().getPluginManager().registerListener(this, this);
}
@EventHandler
public void onPlayerDisconnect(PlayerDisconnectEvent event) {
bungeeLogger.info(event.getPlayer().getName() + " lost connection: disconnect.genericReason");
}
@EventHandler
public void onPlayerConnect(ServerConnectedEvent event) {
String message = "%s[/%s:%d] logged in with entity id %d at ([%s] 0.0, 0.0, 0.0)";
ProxiedPlayer player = event.getPlayer();
// the entity ID is a bit bullshit, but oh well
bungeeLogger.info(String.format(message, player.getName(),
player.getAddress().getAddress().getHostAddress(),
player.getAddress().getPort(), (int) Math.sqrt(player.hashCode()),
event.getServer().getInfo().getName())
);
}
@EventHandler
public void onPluginMessage(PluginMessageEvent event) {
if (!(event.getSender() instanceof Server)) {
event.setCancelled(true);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment