handle floodgate stuff in login packets

This commit is contained in:
Tad Hunt 2022-09-25 15:24:22 -06:00
parent c40a48b7ba
commit 70caa3cd0a
2 changed files with 64 additions and 7 deletions

11
.gitignore vendored
View File

@ -11,4 +11,13 @@ target/
# Eclipse
.classpath
.project
.settings/
.settings/
Loohp-Limbo.jar
Loohp-Limbo-*.jar
internal_data/
logs/
permission.yml
plugins/
server.properties

View File

@ -119,6 +119,8 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.io.StringWriter;
import java.io.PrintWriter;
public class ClientConnection extends Thread {
@ -362,15 +364,57 @@ public class ClientConnection extends Thread {
if (isBungeecord || isBungeeGuard) {
try {
String[] data = bungeeForwarding.split("\\x00");
//String host = data[0];
String ip = data[1];
String host = "";
String floodgate = "";
String clientIp = "";
String bungee = "";
String skinData = "";
int state = 0;
for(int i = 0; i < data.length; i++) {
Limbo.getInstance().getConsole().sendMessage(String.valueOf(i) + ": " + data[i]);
switch(state) {
default:
Limbo.getInstance().getConsole().sendMessage(String.valueOf(i) + ": ignore data: State: " + String.valueOf(state));
break;
case 0:
host = data[i];
state = 1;
break;
case 1:
if(data[i].startsWith("^Floodgate^")) {
floodgate = data[i];
state = 2;
break;
}
/* fallthrough */
case 2:
clientIp = data[i];
state = 3;
break;
case 3:
bungee = data[i];
state = 4;
break;
case 4:
skinData = data[i];
state = 6;
break;
}
}
bungeeUUID = UUID.fromString(data[2].replaceFirst("([0-9a-fA-F]{8})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]+)", "$1-$2-$3-$4-$5"));
inetAddress = InetAddress.getByName(ip);
Limbo.getInstance().getConsole().sendMessage("Host: " + host);
Limbo.getInstance().getConsole().sendMessage("Floodgate: " + floodgate);
Limbo.getInstance().getConsole().sendMessage("clientIp: " + clientIp);
Limbo.getInstance().getConsole().sendMessage("bungee: " + bungee);
Limbo.getInstance().getConsole().sendMessage("skinData: " + skinData);
bungeeUUID = UUID.fromString(bungee.replaceFirst("([0-9a-fA-F]{8})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]+)", "$1-$2-$3-$4-$5"));
inetAddress = InetAddress.getByName(clientIp);
boolean bungeeGuardFound = false;
if (data.length > 3) {
JSONArray skinJson = (JSONArray) new JSONParser().parse(data[3]);
if (skinData != "") {
JSONArray skinJson = (JSONArray) new JSONParser().parse(skinData);
for (Object obj : skinJson) {
JSONObject property = (JSONObject) obj;
@ -390,6 +434,10 @@ public class ClientConnection extends Thread {
break;
}
} catch (Exception e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
Limbo.getInstance().getConsole().sendMessage(sw.toString());
Limbo.getInstance().getConsole().sendMessage("If you wish to use bungeecord's IP forwarding, please enable that in your bungeecord config.yml as well!");
disconnectDuringLogin(new BaseComponent[] {new TextComponent(ChatColor.RED + "Please connect from the proxy!")});
}