diff options
| author | Pugdoot <pugmatt@gmail.com> | 2025-05-15 18:11:53 -0400 |
|---|---|---|
| committer | Pugdoot <pugmatt@gmail.com> | 2025-05-15 18:11:53 -0400 |
| commit | 474ce4745f69d4090ec89885b514c2af904a64e7 (patch) | |
| tree | 77731f305bd8de29286e12e0c9f844aa94e92c74 | |
| parent | 58aa6ec85a4103975dec89fe53cc0f7cab52b071 (diff) | |
| download | BedrockConnect-474ce4745f69d4090ec89885b514c2af904a64e7.tar.gz BedrockConnect-474ce4745f69d4090ec89885b514c2af904a64e7.tar.bz2 BedrockConnect-474ce4745f69d4090ec89885b514c2af904a64e7.zip | |
Implement better logging
14 files changed, 315 insertions, 915 deletions
diff --git a/serverlist-server/pom.xml b/serverlist-server/pom.xml index e84e555..529c146 100644 --- a/serverlist-server/pom.xml +++ b/serverlist-server/pom.xml @@ -107,6 +107,7 @@ <artifactId>json-simple</artifactId> <version>1.1.1</version> </dependency> + <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> @@ -119,6 +120,7 @@ <version>2.9.8</version> <scope>compile</scope> </dependency> + <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> @@ -132,19 +134,25 @@ <version>3.4.1</version> </dependency> <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-simple</artifactId> - <version>1.7.21</version> - </dependency> - <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.7.3</version> </dependency> - - <!-- Proxy Stuff --> - + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-api</artifactId> + <version>2.24.3</version> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + <version>2.24.3</version> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-slf4j2-impl</artifactId> + <version>2.24.3</version> + </dependency> </dependencies> - </project> diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BCPlayer.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BCPlayer.java index 19a67f7..d028dbc 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BCPlayer.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BCPlayer.java @@ -42,6 +42,7 @@ public class BCPlayer { private int serverLimit; + private String displayName; private String uuid; private LocalTime lastAction; @@ -70,7 +71,8 @@ public class BCPlayer { } - public BCPlayer(String uuid, BedrockServerSession session, List<String> serverList, int serverLimit) { + public BCPlayer(String displayName, String uuid, BedrockServerSession session, List<String> serverList, int serverLimit) { + this.displayName = displayName; this.uuid = uuid; this.session = session; this.serverList = serverList; @@ -117,6 +119,10 @@ public class BCPlayer { return false; } + public String getDisplayName() { + return displayName; + } + public String getUuid() { return uuid; } diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java index 7c8dd3d..4c6fffd 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java @@ -3,14 +3,28 @@ package main.com.pyratron.pugmatt.bedrockconnect; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import main.com.pyratron.pugmatt.bedrockconnect.config.Language; +import main.com.pyratron.pugmatt.bedrockconnect.logging.LogColors; import main.com.pyratron.pugmatt.bedrockconnect.sql.Data; import main.com.pyratron.pugmatt.bedrockconnect.sql.DatabaseTypes; import main.com.pyratron.pugmatt.bedrockconnect.sql.MySQL; import main.com.pyratron.pugmatt.bedrockconnect.utils.PaletteManager; + +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.appender.ConsoleAppender; +import org.apache.logging.log4j.core.config.Configuration; +import org.apache.logging.log4j.core.config.Configurator; +import org.apache.logging.log4j.core.config.LoggerConfig; +import org.apache.logging.log4j.core.layout.PatternLayout; import org.cloudburstmc.netty.channel.raknet.RakConstants; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; + import java.io.*; import java.net.*; import java.sql.Connection; @@ -30,17 +44,17 @@ public class BedrockConnect { public static Server server; public static boolean noDB = false; - public static boolean whitelist = false; + public static String whitelist = null; public static String customServers = null; public static boolean kickInactive = true; public static boolean userServers = true; public static boolean featuredServers = true; public static boolean fetchFeaturedIps = true; + public static boolean debug = false; public static boolean fetchIps = false; public static boolean storeDisplayNames = true; - public static File whitelistfile; public static int packetLimit = 200; @@ -52,8 +66,13 @@ public class BedrockConnect { public static Language language; + public static Logger logger = LoggerFactory.getLogger(BedrockConnect.class); + public static void main(String[] args) { - System.out.println("-= BedrockConnect (Release: " + release + ") =-"); + BedrockConnect.logger.info( + LogColors.cyan("-= BedrockConnect ") + "( " + LogColors.cyan("Release: ") + LogColors.purple(release) + " )" + LogColors.cyan(" =-") + ); + paletteManager = new PaletteManager(); try { @@ -72,9 +91,14 @@ public class BedrockConnect { HashMap<String, String> settings = new HashMap<>(); + boolean settingsArgs = false; + boolean settingsFile = false; + boolean settingsEnv = false; + // Find any settings in startup arguments for(String str : args) { if(str.indexOf("=") != -1 && str.indexOf("=") < str.length() - 1) { + settingsArgs = true; settings.put(str.substring(0, str.indexOf("=")), str.substring(str.indexOf("=") + 1)); } } @@ -82,6 +106,7 @@ public class BedrockConnect { // Find any settings in configuration file File configFile = new File("config.yml"); if(configFile.exists() && !configFile.isDirectory()) { + settingsFile = true; try { ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); Map<String, Object> config = mapper.readValue(configFile, Map.class); @@ -89,8 +114,8 @@ public class BedrockConnect { settings.put(configKey.toLowerCase(), config.get(configKey).toString()); } } catch(Exception e) { - System.out.println("Issue parsing configuration file"); - throw new RuntimeException(e); + BedrockConnect.logger.error("Issue parsing configuration file", e); + System.exit(1); } } @@ -99,13 +124,14 @@ public class BedrockConnect { Map<String, String> env = System.getenv(); for (String envName : env.keySet()) { if (envName.toLowerCase().startsWith("bc_")) { + settingsEnv = true; settings.put(envName.toLowerCase().replace("bc_", ""), env.get(envName)); } } } catch(SecurityException e) {} boolean nodbWarning = true; - boolean mysqlSettingWarning = false; + boolean mysqlSettingWarning = false; for (Map.Entry<String, String> setting : settings.entrySet()) { switch(setting.getKey().toLowerCase()) { @@ -138,7 +164,8 @@ public class BedrockConnect { databaseType = DatabaseTypes.postgres; break; default: - System.out.println("Unknown DB Type " + dbType + " using Mysql. Please use mysql, postgres, mariadb, or none"); + BedrockConnect.logger.error("Unknown database type '" + dbType + "'. Valid values: mysql, postgres, mariadb, none"); + System.exit(1); } break; // Backwards-compatibility for legacy database/mysql settings @@ -183,7 +210,7 @@ public class BedrockConnect { try { Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); - System.out.println("Local IPv4 IPs:"); + System.out.println("Local IPv4 IPs:"); while (interfaces.hasMoreElements()) { NetworkInterface iface = interfaces.nextElement(); @@ -197,7 +224,7 @@ public class BedrockConnect { if (!(addr instanceof Inet4Address)) continue; ip = addr.getHostAddress(); - System.out.println(iface.getDisplayName() + ": " + ip); + System.out.println(" - " + iface.getDisplayName() + ": " + ip); } } @@ -240,14 +267,7 @@ public class BedrockConnect { fetchIps = setting.getValue().equalsIgnoreCase("true"); break; case "whitelist": - try { - whitelistfile = new File(setting.getValue()); - Whitelist.loadWhitelist(whitelistfile); - } - catch(Exception e) { - System.out.println("Unable to load whitelist file: " + whitelistfile.getName()); - e.printStackTrace(); - } + whitelist = setting.getValue(); break; case "language": languageFile = setting.getValue(); @@ -267,33 +287,59 @@ public class BedrockConnect { case "auto_reconnect": autoReconnect = setting.getValue().equalsIgnoreCase("true"); break; + case "debug": + debug = setting.getValue().equalsIgnoreCase("true"); + break; } } + if (debug) { + Configurator.setLevel(BedrockConnect.logger.getName(), Level.DEBUG); + + BedrockConnect.logger.debug("Java Version: " + System.getProperty("java.version")); + BedrockConnect.logger.debug("Java Vendor: " + System.getProperty("java.vendor")); + BedrockConnect.logger.debug("OS Name: " + System.getProperty("os.name")); + + final List<String> censored = new ArrayList<>(List.of( + "db_host", + "db_db", + "db_user", + "db_pass", + "mysql_host", + "mysql_db", + "mysql_user", + "mysql_pass" + )); + + BedrockConnect.logger.debug("Passed-in configuration (Loaded through" + + (settingsArgs ? " [Startup Args]" : "") + + (settingsFile ? " [Config File]" : "") + + (settingsEnv ? " [Env Variables]" : "") + + "):"); + for (Map.Entry<String, String> setting : settings.entrySet()) { + BedrockConnect.logger.debug(" - " + setting.getKey() + ": " + (censored.contains(setting.getKey()) ? LogColors.gray("[redacted]") : setting.getValue())); + } + } if(!noDB) { if(nodbWarning || mysqlSettingWarning) { - System.out.println("----------------"); - System.out.println("[!!DEPRECATION!!] Your current database settings may not work in future versions\n"); + BedrockConnect.logger.warn("[!!DEPRECATION!!] Your current database settings may not work in future versions"); if(mysqlSettingWarning) - System.out.println("- mysql_* settings should be replaced with db_* settings"); + BedrockConnect.logger.warn("- mysql_* settings should be replaced with db_* settings"); if(nodbWarning) - System.out.println("- db_type should be manually set to mysql"); - System.out.println("\nLearn more here: https://github.com/Pugmatt/BedrockConnect/wiki/Deprecated-Database-Settings"); - System.out.println("----------------"); + BedrockConnect.logger.warn("- db_type should be manually set to mysql"); + BedrockConnect.logger.warn("Learn more here: https://github.com/Pugmatt/BedrockConnect/wiki/Deprecated-Database-Settings"); } - System.out.println("Database Host: " + hostname + "\n" + - "Database: " + database + "\n" + - "Database User: " + username); } - System.out.println("\nServer Limit: " + serverLimit + "\n" + "Port: " + port + "\n"); - CustomServerHandler.initialize(); - System.out.printf("Loaded %d custom servers\n", CustomServerHandler.getServers().length); + if (CustomServerHandler.getServers().length > 0) { + BedrockConnect.logger.info("Loaded {} custom servers", CustomServerHandler.getServers().length); + } - if (Whitelist.hasWhitelist()) { - System.out.printf("There are %d whitelisted players\n", Whitelist.getWhitelist().size()); + if (whitelist != null) { + Whitelist.loadWhitelist(whitelist); + BedrockConnect.logger.info("Loaded {} whitelisted players", Whitelist.getWhitelist().size()); } language = new Language(languageFile); @@ -331,12 +377,14 @@ public class BedrockConnect { } } } catch (Exception e) { - System.out.println("An error occurred."); - e.printStackTrace(); + BedrockConnect.logger.error("An error occurred parsing featured_server_ips.json", e); + System.exit(1); } } if(!noDB) { + BedrockConnect.logger.info("Player data storage: " + LogColors.purple("Database")); + MySQL = new MySQL(hostname, database, username, password, databaseType, autoReconnect); connection = null; @@ -363,22 +411,20 @@ public class BedrockConnect { "SELECT 1"); rs.next(); } catch (SQLException e) { - // TODO Auto-generated - // catch block - e.printStackTrace(); + BedrockConnect.logger.error("Error refreshing SQL connection", e); } sec = 0; } } } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + BedrockConnect.logger.error("Error refreshing SQL connection", e); } sec++; } }; timer.scheduleAtFixedRate(task, 0L, 60 * 1000); } else { + BedrockConnect.logger.info("Player data storage: " + LogColors.cyan("Files")); data = new Data(serverLimit, databaseType); Timer timer = new Timer(); TimerTask task = new TimerTask() { @@ -389,7 +435,7 @@ public class BedrockConnect { server = new Server(bindIp, port); } catch(Exception e) { - e.printStackTrace(); + BedrockConnect.logger.error("An error occured", e); } } diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/CustomServerHandler.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/CustomServerHandler.java index 57d3865..ec9b308 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/CustomServerHandler.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/CustomServerHandler.java @@ -47,10 +47,11 @@ public class CustomServerHandler { } } - } catch (IOException e) { - e.printStackTrace(); - } catch (ParseException e) { - e.printStackTrace(); + BedrockConnect.logger.debug("Custom server data: " + serverList.toString()); + + } catch (Exception e) { + BedrockConnect.logger.error("Error loading custom servers", e); + System.exit(1); } } diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Server.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Server.java index 40ccdd9..8966889 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Server.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Server.java @@ -9,6 +9,7 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioDatagramChannel; import main.com.pyratron.pugmatt.bedrockconnect.listeners.PacketHandler; +import main.com.pyratron.pugmatt.bedrockconnect.logging.LogColors; import main.com.pyratron.pugmatt.bedrockconnect.utils.BedrockProtocol; import org.cloudburstmc.netty.channel.raknet.RakChannel; import org.cloudburstmc.netty.channel.raknet.RakChannelFactory; @@ -22,6 +23,8 @@ import org.cloudburstmc.protocol.bedrock.packet.BedrockPacketHandler; import javax.annotation.Nonnull; + +import java.net.BindException; import java.net.InetSocketAddress; import java.util.*; @@ -48,8 +51,8 @@ public class Server { } public void addPlayer(BCPlayer player) { - System.out.println("Total users connected: " + this.players.size()); this.players.add(player); + BedrockConnect.logger.info("[ " + LogColors.cyan(this.players.size() + " online") + " ] Player connected: " + player.getDisplayName() + " (xuid: " + player.getUuid() + ")"); } public void removePlayer(BCPlayer player) { @@ -57,25 +60,25 @@ public class Server { this.players.remove(player); } - public Server(String bindIp, String port) { - Server current = this; - players = new ArrayList<>(); - - InetSocketAddress bindAddress = new InetSocketAddress(bindIp, Integer.parseInt(port)); - - pong = new BedrockPong(); - pong.edition("MCPE"); - pong.motd(BedrockConnect.language.getWording("serverInfo", "motd")); - pong.subMotd(BedrockConnect.language.getWording("serverInfo", "subMotd")); - pong.playerCount(1); - pong.maximumPlayerCount(20); - pong.gameType("Survival"); - pong.ipv4Port(Integer.parseInt(port)); - pong.protocolVersion(BedrockProtocol.DEFAULT_BEDROCK_CODEC.getProtocolVersion()); - pong.version(BedrockProtocol.DEFAULT_BEDROCK_CODEC.getMinecraftVersion()); - - new ServerBootstrap() + try { + Server current = this; + players = new ArrayList<>(); + + InetSocketAddress bindAddress = new InetSocketAddress(bindIp, Integer.parseInt(port)); + + pong = new BedrockPong(); + pong.edition("MCPE"); + pong.motd(BedrockConnect.language.getWording("serverInfo", "motd")); + pong.subMotd(BedrockConnect.language.getWording("serverInfo", "subMotd")); + pong.playerCount(1); + pong.maximumPlayerCount(20); + pong.gameType("Survival"); + pong.ipv4Port(Integer.parseInt(port)); + pong.protocolVersion(BedrockProtocol.DEFAULT_BEDROCK_CODEC.getProtocolVersion()); + pong.version(BedrockProtocol.DEFAULT_BEDROCK_CODEC.getMinecraftVersion()); + + new ServerBootstrap() .group(this.eventLoopGroup) .channelFactory(RakChannelFactory.server(NioDatagramChannel.class)) .option(RakChannelOption.RAK_ADVERTISEMENT, pong.toByteBuf()) @@ -90,48 +93,55 @@ public class Server { .bind(bindAddress) .syncUninterruptibly(); - System.out.println("Bedrock Connection Started: " + bindIp + ":" + port); - if(BedrockConnect.kickInactive) { - Timer timer = new Timer(); - TimerTask task = new TimerTask() { - public void run() { - for (int i = 0; i < players.size(); i++) { - if (players.get(i) != null && !players.get(i).isActive()) - players.get(i).disconnect(BedrockConnect.language.getWording("disconnect", "inactivity"), current); + BedrockConnect.logger.info("[ " + LogColors.green("OK") + " ] Server is now running: " + LogColors.cyan(bindIp + ":" + port)); + if(BedrockConnect.kickInactive) { + Timer timer = new Timer(); + TimerTask task = new TimerTask() { + public void run() { + for (int i = 0; i < players.size(); i++) { + if (players.get(i) != null && !players.get(i).isActive()) + players.get(i).disconnect(BedrockConnect.language.getWording("disconnect", "inactivity"), current); + } } - } - }; - timer.scheduleAtFixedRate(task, 0L, 60 * 1000); - } + }; + timer.scheduleAtFixedRate(task, 0L, 60 * 1000); + } - new Thread() { - public void run() { - Scanner sc = null; - try { - sc = new Scanner(System.in); - while(sc.hasNextLine()) { - String cmd = sc.next(); - switch(cmd) { - case "end": - case "stop": - System.exit(0); - break; + new Thread() { + public void run() { + Scanner sc = null; + try { + sc = new Scanner(System.in); + while(sc.hasNextLine()) { + String cmd = sc.next(); + switch(cmd) { + case "end": + case "stop": + System.exit(0); + break; + } } - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - if (sc != null) { - try { - sc.close(); - } catch (Exception e1) { - // just ignore it + } catch (Exception e) { + BedrockConnect.logger.error("Error reading input", e); + } finally { + if (sc != null) { + try { + sc.close(); + } catch (Exception e1) { + // just ignore it + } + sc = null; } - sc = null; } } - } - }.start(); + }.start(); + } catch(Exception e) { + if (e instanceof BindException) { + BedrockConnect.logger.error("Error binding to address (Is port " + port + " already in use?)", e); + } else { + BedrockConnect.logger.error("Error starting server", e); + } + } } } diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Whitelist.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Whitelist.java index a3d6367..580087d 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Whitelist.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Whitelist.java @@ -8,35 +8,33 @@ import java.util.List; public class Whitelist { - private static boolean is_whitelist = false; - private static List<String> whitelist; - static String whitelist_message = "You are not whitelisted on this server"; + private static List<String> whitelist = null; + private static String whitelistMessage = "You are not whitelisted on this server"; - public static void loadWhitelist(File whitelistfile) { - is_whitelist = true; + public static void loadWhitelist(String whitelistFile) { try { - whitelist = Files.readAllLines(whitelistfile.toPath()); - } catch (IOException e) { - e.printStackTrace(); + File file = new File(whitelistFile); + whitelist = Files.readAllLines(file.toPath()); + BedrockConnect.logger.debug("Whitelist data: " + whitelist.toString()); + } catch (Exception e) { + BedrockConnect.logger.error("Error loading whitelist", e); + System.exit(1); } } - //returns whether there is a whitelist. public static boolean hasWhitelist() { - return is_whitelist; + return whitelist != null; } - //returns whitelist list public static List<String> getWhitelist() { return whitelist; } - //returns true if player name is whitelisted, otherwise returns false. public static boolean isPlayerWhitelisted(String name) { return whitelist.contains(name); } public static String getWhitelistMessage() { - return whitelist_message; + return whitelistMessage; } }
\ No newline at end of file diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/config/Language.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/config/Language.java index 70dc8c1..f5eb2d9 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/config/Language.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/config/Language.java @@ -45,9 +45,13 @@ public class Language { elements.put((String) wording, set); } + + BedrockConnect.logger.info("Loaded custom language elements"); + BedrockConnect.logger.debug("Language data: " + elements.toString()); } } catch (Exception e) { - e.printStackTrace(); + BedrockConnect.logger.error("Error loading language file", e); + System.exit(1); } } diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIComponents.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIComponents.java index 58aa108..b277527 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIComponents.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIComponents.java @@ -119,7 +119,7 @@ public class UIComponents { } return strings; } catch(ParseException e) { - System.out.println(e.toString()); + BedrockConnect.logger.error("Error parsing form data", e); } return null; diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java index 05bfa60..0166616 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java @@ -7,6 +7,7 @@ import main.com.pyratron.pugmatt.bedrockconnect.gui.MainFormButton; import main.com.pyratron.pugmatt.bedrockconnect.gui.ManageFormButton; import main.com.pyratron.pugmatt.bedrockconnect.gui.UIComponents; import main.com.pyratron.pugmatt.bedrockconnect.gui.UIForms; +import main.com.pyratron.pugmatt.bedrockconnect.logging.LogColors; import main.com.pyratron.pugmatt.bedrockconnect.utils.BedrockProtocol; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.BedrockServerSession; @@ -56,17 +57,36 @@ public class PacketHandler implements BedrockPacketHandler { try { if(BedrockConnect.fetchFeaturedIps || BedrockConnect.fetchIps) { InetAddress host = InetAddress.getByName(hostname); - return host.getHostAddress(); + String address = host.getHostAddress(); + BedrockConnect.logger.debug("Retrieved " + address + " host address from hostname " + hostname); + return address; } else { return BedrockConnect.featuredServerIps.get(hostname); } } catch (UnknownHostException ex) { - ex.printStackTrace(); + BedrockConnect.logger.error("Error retrieving IP from hostname", ex); } return hostname; } @Override + public PacketSignal handlePacket(BedrockPacket packet) { + if (BedrockConnect.debug && !(packet instanceof PlayerAuthInputPacket)) { + String id = session.getSocketAddress().toString(); + if (name != null) { + id = name; + } + if (packet instanceof LoginPacket) { + BedrockConnect.logger.debug(LogColors.gray("[ " + id + " ] " + "LoginPacket")); + } else { + BedrockConnect.logger.debug(LogColors.gray("[ " + id + " ] " + packet)); + } + } + BedrockPacketHandler.super.handlePacket(packet); + return PacketSignal.HANDLED; + } + + @Override public PacketSignal handle(RequestChunkRadiusPacket packet) { ChunkRadiusUpdatedPacket chunkRadiusUpdatePacket = new ChunkRadiusUpdatedPacket(); chunkRadiusUpdatePacket.setRadius(packet.getRadius()); @@ -79,7 +99,7 @@ public class PacketHandler implements BedrockPacketHandler { } // Occasionally, a sent form will not correctly send to a player for whatever reason, and they float in space. This works as a way to open the form back up. - + @Override public PacketSignal handle(PlayerActionPacket packet) { player.movementOpen(); @@ -399,6 +419,7 @@ public class PacketHandler implements BedrockPacketHandler { } tp.setPort(port); session.sendPacketImmediately(tp); + BedrockConnect.logger.debug("Transferred player " + name + " to " + tp.getAddress() + ":" + tp.getPort()); } catch (Exception e) { player.createError(BedrockConnect.language.getWording("error", "transferError")); } @@ -447,12 +468,11 @@ public class PacketHandler implements BedrockPacketHandler { @Override public void onDisconnect(String reason) { - System.out.println(name + " disconnected"); if(executor != null) executor.shutdown(); if(player != null) server.removePlayer(player); - + BedrockConnect.logger.info("[ " + LogColors.cyan(server.getPlayers().size() + " online") + " ] Player disconnected: " + name + " (xuid: " + uuid + ")"); } private boolean verifyJwt(String jwt, PublicKey key) throws JoseException { @@ -511,7 +531,7 @@ public class PacketHandler implements BedrockPacketHandler { String clientJwt = packet.getExtra(); verifyJwt(clientJwt, identityPublicKey); - System.out.println("Made it through login - " + "User: " + extraData.get("displayName") + " (" + extraData.get("identity") + ")"); + BedrockConnect.logger.debug("Player made it through login: " + extraData.get("displayName") + " (xuid: " + extraData.get("identity") + ")"); name = (String) extraData.get("displayName"); @@ -521,7 +541,7 @@ public class PacketHandler implements BedrockPacketHandler { // Whitelist check if (Whitelist.hasWhitelist() && !Whitelist.isPlayerWhitelisted(name)) { session.disconnect(Whitelist.getWhitelistMessage()); - System.out.println("Kicked " + name + ": \"" + Whitelist.getWhitelistMessage() + "\""); + BedrockConnect.logger.info("Kicked " + name + " (xuid: " + uuid + "): \"" + Whitelist.getWhitelistMessage() + "\""); } PlayStatusPacket status = new PlayStatusPacket(); @@ -545,769 +565,4 @@ public class PacketHandler implements BedrockPacketHandler { } return PacketSignal.HANDLED; } - - // Handle rest of packets to avoid log warnings - - @Override - public PacketSignal handle(AdventureSettingsPacket packet) { - return PacketSignal.HANDLED; - } - - - @Override - public PacketSignal handle(BlockEntityDataPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(BlockPickRequestPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(BookEditPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ClientCacheBlobStatusPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ClientCacheMissResponsePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ClientCacheStatusPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ClientToServerHandshakePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(CommandBlockUpdatePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(CommandRequestPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ContainerClosePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(CraftingEventPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(EntityEventPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(EntityPickRequestPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(EventPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(InteractPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(InventoryContentPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(InventorySlotPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(InventoryTransactionPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ItemFrameDropItemPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(LabTablePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(LecternUpdatePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(LevelEventGenericPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(LevelSoundEventPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(MapInfoRequestPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(MobArmorEquipmentPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(MobEquipmentPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(MoveEntityAbsolutePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(MovePlayerPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(PhotoTransferPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(PlayerHotbarPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(PlayerInputPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(PlayerSkinPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(PurchaseReceiptPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ResourcePackChunkRequestPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(RiderJumpPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ServerSettingsRequestPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SetDefaultGameTypePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SetPlayerGameTypePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SubClientLoginPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(TextPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(AddBehaviorTreePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(AddEntityPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(AddHangingEntityPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(AddItemEntityPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(AddPaintingPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(AddPlayerPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(AvailableCommandsPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(BlockEventPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(BossEventPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(CameraPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ChangeDimensionPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ChunkRadiusUpdatedPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ClientboundMapItemDataPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(CommandOutputPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ContainerOpenPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ContainerSetDataPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(CraftingDataPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ExplodePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(LevelChunkPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(GameRulesChangedPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(GuiDataPickItemPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(HurtArmorPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(AutomationClientConnectPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(LevelEventPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(MapCreateLockedCopyPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(MobEffectPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ModalFormRequestPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(MoveEntityDeltaPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(NpcRequestPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(OnScreenTextureAnimationPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(PlayerListPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(PlaySoundPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(PlayStatusPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(RemoveEntityPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(RemoveObjectivePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ResourcePackChunkDataPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ResourcePackDataInfoPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ResourcePacksInfoPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ResourcePackStackPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(RespawnPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ScriptCustomEventPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ServerSettingsResponsePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ServerToClientHandshakePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SetCommandsEnabledPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SetDifficultyPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SetDisplayObjectivePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SetEntityDataPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SetEntityLinkPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SetEntityMotionPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SetHealthPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SetLastHurtByPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SetScoreboardIdentityPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SetScorePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SetSpawnPositionPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SetTimePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SetTitlePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ShowCreditsPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ShowProfilePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ShowStoreOfferPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SimpleEventPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SpawnExperienceOrbPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(StartGamePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(StopSoundPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(StructureBlockUpdatePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(StructureTemplateDataRequestPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(StructureTemplateDataResponsePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(TakeItemEntityPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(TransferPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(UpdateAttributesPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(UpdateBlockPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(UpdateBlockPropertiesPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(UpdateBlockSyncedPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(UpdateEquipPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(UpdateSoftEnumPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(UpdateTradePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(AvailableEntityIdentifiersPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(BiomeDefinitionListPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(LevelSoundEvent2Packet packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(NetworkChunkPublisherUpdatePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SpawnParticleEffectPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(VideoStreamConnectPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(EmotePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(TickSyncPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(AnvilDamagePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(NetworkSettingsPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(PlayerAuthInputPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(SettingsCommandPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(EducationSettingsPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(CompletedUsingItemPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(MultiplayerSettingsPacket packet) { - return PacketSignal.HANDLED; - } - - // 1.16 new packets - - @Override - public PacketSignal handle(DebugInfoPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(EmoteListPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(CodeBuilderPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(CreativeContentPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ItemStackRequestPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(LevelSoundEvent1Packet packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ItemStackResponsePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(PlayerArmorDamagePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(PlayerEnchantOptionsPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(UpdatePlayerGameTypePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(PacketViolationWarningPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(PositionTrackingDBClientRequestPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(PositionTrackingDBServerBroadcastPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(MotionPredictionHintsPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(AnimateEntityPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(CameraShakePacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(PlayerFogPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(CorrectPlayerMovePredictionPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(ItemComponentPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(FilterTextPacket packet) { - return PacketSignal.HANDLED; - } - - @Override - public PacketSignal handle(RequestAbilityPacket packet) { - return PacketSignal.HANDLED; - } } diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/logging/LogColors.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/logging/LogColors.java new file mode 100644 index 0000000..2d9490f --- /dev/null +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/logging/LogColors.java @@ -0,0 +1,41 @@ +package main.com.pyratron.pugmatt.bedrockconnect.logging; + +public class LogColors { + public static final String RESET = "\u001B[0m"; + + private static boolean disabled = Boolean.getBoolean("stripColors"); + + public static String blue(String msg) { + return apply(msg, "\u001B[34m"); + } + + public static String cyan(String msg) { + return apply(msg, "\u001B[36m"); + } + + public static String purple(String msg) { + return apply(msg, "\u001B[35m"); + } + + public static String red(String msg) { + return apply(msg, "\u001B[31m"); + } + + public static String green(String msg) { + return apply(msg, "\u001B[32m"); + } + + public static String yellow(String msg) { + return apply(msg, "\u001B[33m"); + } + + public static String gray(String msg) { + return apply(msg, "\u001B[38;5;240m"); + } + + private static String apply(String msg, String color) { + if (disabled) return msg; + + return color + msg + LogColors.RESET; + } +}
\ No newline at end of file diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/Data.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/Data.java index 55d7dc9..057fb33 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/Data.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/Data.java @@ -81,9 +81,9 @@ public class Data { ).start(); } - public BCPlayer getPlayer(ResultSet rs, String uuid, BedrockServerSession session) { + public BCPlayer getPlayer(ResultSet rs, String name, String uuid, BedrockServerSession session) { try { - BCPlayer p = new BCPlayer(uuid, session, UIComponents.getFormData(rs.getString("servers")), rs.getInt("serverLimit")); + BCPlayer p = new BCPlayer(name, uuid, session, UIComponents.getFormData(rs.getString("servers")), rs.getInt("serverLimit")); return p; } catch(SQLException e) { @@ -113,7 +113,7 @@ public class Data { updateUUID.setString(2, uuid); updateUUID.executeUpdate(); } - BCPlayer p = getPlayer(rs, uuid, session); + BCPlayer p = getPlayer(rs, name, uuid, session); packetHandler.setPlayer(p); if (p != null) BedrockConnect.server.addPlayer(p); @@ -146,7 +146,9 @@ public class Data { pw.flush(); pw.close(); - BCPlayer pl = new BCPlayer(uuid, session, new ArrayList<>(), Integer.parseInt(serverLimit)); + BedrockConnect.logger.info("Added new user " + name + " (xuid: " + uuid + ")"); + + BCPlayer pl = new BCPlayer(name, uuid, session, new ArrayList<>(), Integer.parseInt(serverLimit)); packetHandler.setPlayer(pl); BedrockConnect.server.addPlayer(pl); } else { @@ -158,13 +160,12 @@ public class Data { JSONArray servers = (JSONArray) jo.get("servers"); - BCPlayer p = new BCPlayer(uuid, session, servers, serverLimit); + BCPlayer p = new BCPlayer(name, uuid, session, servers, serverLimit); packetHandler.setPlayer(p); BedrockConnect.server.addPlayer(p); } } catch (Exception e) { - System.out.println("An error occurred."); - e.printStackTrace(); + BedrockConnect.logger.error("An error occurred saving to player file", e); } } } @@ -180,8 +181,8 @@ public class Data { s.setString(2, BedrockConnect.storeDisplayNames ? name : ""); s.setInt(3, Integer.parseInt(serverLimit)); s.executeUpdate(); - System.out.println("[BedrockConnect] Added new user '" + name + "' (" + uuid + ") to Database."); - BCPlayer pl = new BCPlayer(uuid, session, new ArrayList<>(), Integer.parseInt(serverLimit)); + BedrockConnect.logger.info("Added new user " + name + " (xuid: " + uuid + ") to Database"); + BCPlayer pl = new BCPlayer(name, uuid, session, new ArrayList<>(), Integer.parseInt(serverLimit)); packetHandler.setPlayer(pl); BedrockConnect.server.addPlayer(pl); } @@ -219,8 +220,7 @@ public class Data { pw.flush(); pw.close(); } catch (Exception e) { - System.out.println("An error occurred."); - e.printStackTrace(); + BedrockConnect.logger.error("An error occurred saving to player file", e); } } } @@ -243,8 +243,7 @@ public class Data { } public void errorAlert(Exception e) { - System.out.println("[BedrockConnect] WARNING!!! DATABASE ERROR: " + e.getMessage()); - e.printStackTrace(); + BedrockConnect.logger.error("A database error has occured" , e); } }
\ No newline at end of file diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/MySQL.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/MySQL.java index a06aaba..583de47 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/MySQL.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/MySQL.java @@ -6,6 +6,8 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import main.com.pyratron.pugmatt.bedrockconnect.BedrockConnect; + @@ -81,12 +83,12 @@ public class MySQL extends Database { connection = DriverManager.getConnection(Driver + this.hostname + "/" + this.database + "?serverTimezone=UTC&useLegacyDatetimeCode=false" + Extra, this.user, this.password); - System.out.println("- Database Connection Started -"); + BedrockConnect.logger.debug("Connection made with database"); } catch (SQLException e) { - System.out.println("ERROR: Could not connect to Database server! because: " + e.getMessage()); + BedrockConnect.logger.error("Failed to establish connection with database: " + e.getMessage()); } catch (ClassNotFoundException e) { - System.out.println("ERROR: JDBC Driver not found!"); + BedrockConnect.logger.error("JDBC Driver not found"); } return connection; } @@ -107,8 +109,7 @@ public class MySQL extends Database { try { connection.close(); } catch (SQLException e) { - System.out.println("ERROR: Error closing the MySQL Connection!"); - e.printStackTrace(); + BedrockConnect.logger.error("Error closing the database connection", e); } } } diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/PaletteManager.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/PaletteManager.java index fa4c803..b005586 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/PaletteManager.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/PaletteManager.java @@ -102,7 +102,7 @@ public class PaletteManager { try { tag = (NbtMap) NbtUtils.createReaderLE(bais).readTag(); } catch (IOException e) { - e.printStackTrace(); + BedrockConnect.logger.error("Error loading creative items file", e); } } @@ -166,7 +166,7 @@ public class PaletteManager { tag = (NbtList<NbtMap>) nbtInputStream.readTag(); nbtInputStream.close(); } catch (Exception ex) { - System.out.println("Failed to receive blocks palette"); + BedrockConnect.logger.error("Failed to receive blocks palette"); throw new AssertionError(ex); } diff --git a/serverlist-server/src/main/resources/log4j2.xml b/serverlist-server/src/main/resources/log4j2.xml new file mode 100644 index 0000000..a5233b8 --- /dev/null +++ b/serverlist-server/src/main/resources/log4j2.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Configuration status="WARN"> + <Properties> + <Property name="LOG_PATTERN">%d{HH:mm:ss} [%style{%highlight{%level}{FATAL=red, ERROR=red, WARN=yellow, INFO=green bold, DEBUG=magenta, TRACE=white, disableAnsi=${sys:stripColors:-false}}}] %style{%highlight{%m}{FATAL=red, ERROR=red, WARN=yellow, INFO=default, DEBUG=default, TRACE=default, disableAnsi=${sys:stripColors:-false}}}%n</Property> + <Property name="LOG_PATTERN_NO_COLOR">%d{HH:mm:ss} [%level] %replace{%message}{\x1B\[[0-9;]*m}{}%n</Property> + </Properties> + + <Appenders> + <Console name="console" target="SYSTEM_OUT" follow="true"> + <PatternLayout pattern="${LOG_PATTERN}" /> + </Console> + <SystemPropertyArbiter propertyName="logFile" propertyValue="true"> + <RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/app-%d{yyyy-MM-dd}-%i.log.gz"> + <PatternLayout pattern="${LOG_PATTERN_NO_COLOR}" /> + <Policies> + <TimeBasedTriggeringPolicy /> + <SizeBasedTriggeringPolicy size="100 MB"/> + </Policies> + </RollingRandomAccessFile> + </SystemPropertyArbiter> + </Appenders> + + <Loggers> + <Root level="INFO"> + <AppenderRef ref="console"/> + <SystemPropertyArbiter propertyName="logFile" propertyValue="true"> + <AppenderRef ref="File"/> + </SystemPropertyArbiter> + </Root> + </Loggers> +</Configuration>
\ No newline at end of file |
