summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPugdoot <pugmatt@gmail.com>2025-05-15 18:11:53 -0400
committerPugdoot <pugmatt@gmail.com>2025-05-15 18:11:53 -0400
commit474ce4745f69d4090ec89885b514c2af904a64e7 (patch)
tree77731f305bd8de29286e12e0c9f844aa94e92c74
parent58aa6ec85a4103975dec89fe53cc0f7cab52b071 (diff)
downloadBedrockConnect-474ce4745f69d4090ec89885b514c2af904a64e7.tar.gz
BedrockConnect-474ce4745f69d4090ec89885b514c2af904a64e7.tar.bz2
BedrockConnect-474ce4745f69d4090ec89885b514c2af904a64e7.zip
Implement better logging
-rw-r--r--serverlist-server/pom.xml26
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BCPlayer.java8
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java124
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/CustomServerHandler.java9
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Server.java120
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Whitelist.java24
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/config/Language.java6
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIComponents.java2
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java799
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/logging/LogColors.java41
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/Data.java25
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/MySQL.java11
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/PaletteManager.java4
-rw-r--r--serverlist-server/src/main/resources/log4j2.xml31
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