package net.krakatoa.proxy; import com.mongodb.async.client.MongoCollection; import java.net.URI; import java.net.URISyntaxException; import java.util.Arrays; import lombok.Getter; import lombok.SneakyThrows; import net.krakatoa.proxy.command.CodeCommand; import net.krakatoa.proxy.config.ConfigHandler; import net.krakatoa.proxy.listener.PlayerDisconnectListener; import net.krakatoa.proxy.listener.PostLoginListener; import net.krakatoa.proxy.mongo.MongoManager; import net.krakatoa.proxy.protocol.KraProtocol; import net.krakatoa.proxy.socket.SocketClient; import net.krakatoa.proxy.util.Formatter; import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.api.plugin.PluginManager; import org.bson.Document; @Getter public class ProxySystem extends Plugin { @Getter private static ProxySystem instance; private ConfigHandler configHandler; private MongoManager mongoManager; private SocketClient socketClient; private KraProtocol kraProtocol; private Formatter formatter; private MongoCollection players; @SneakyThrows @Override public void onEnable() { instance = this; configHandler = new ConfigHandler(); configHandler.load(); kraProtocol = new KraProtocol(); formatter = new Formatter(); System.out.println( "mongo cfg " + configHandler.getMongodbHost() + " " + configHandler.getMongodbUsername()); mongoManager = new MongoManager(configHandler.getMongodbHost(), configHandler.getMongodbPort(), configHandler.getMongodbUsername(), configHandler.getMongodbPassword()); mongoManager.connect(configHandler.getMongodbDatabase()); try { socketClient = new SocketClient( new URI(configHandler.getWebSocketProtocol() + "://" + configHandler.getWebSocketHost() + ":" + configHandler.getWebSocketPort() + "/ws?t=" + configHandler.getWebSocketAccessKey() + "&s=proxy-1")); } catch (URISyntaxException e) { e.printStackTrace(); } socketClient.connect(); players = mongoManager.getMongoDatabase().getCollection("players"); loadListeners(); loadCommands(); } @Override public void onDisable() { socketClient.getConnection().close(); socketClient.getConnection().closeConnection(1, ""); instance = null; } public void loadListeners() { PluginManager pluginManager = getProxy().getPluginManager(); Arrays.asList(new PostLoginListener(), new PlayerDisconnectListener()) .forEach(listener -> { pluginManager.registerListener(this, listener); }); } public void loadCommands() { PluginManager pluginManager = getProxy().getPluginManager(); Arrays.asList(new CodeCommand("code")).forEach(listener -> { pluginManager.registerCommand(this, listener); }); } /* TODO: proxy ping & join only accessible for 1.17.1 clients */ }