summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew <pugmatt@gmail.com>2021-06-28 01:26:56 -0400
committerGitHub <noreply@github.com>2021-06-28 01:26:56 -0400
commit9f54275e8d7c5ff83b25cd5992c701ac6f805e90 (patch)
treee794252ba01e7e7c4bfea926a375a9587f68576c
parentb088d5e728d1403a963c91a1de5705e4162ef3f5 (diff)
parent790b6a543eaec644b79edef5391ac6346d410392 (diff)
downloadBedrockConnect-9f54275e8d7c5ff83b25cd5992c701ac6f805e90.tar.gz
BedrockConnect-9f54275e8d7c5ff83b25cd5992c701ac6f805e90.tar.bz2
BedrockConnect-9f54275e8d7c5ff83b25cd5992c701ac6f805e90.zip
Merge branch 'master' into master
-rw-r--r--README.md4
-rw-r--r--serverlist-server/BedrockConnect.iml57
-rw-r--r--serverlist-server/pom.xml4
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BCPlayer.java6
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Server.java41
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIComponents.java16
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIForms.java24
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java41
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/Data.java5
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/BedrockProtocol.java51
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/PaletteManager.java11
11 files changed, 194 insertions, 66 deletions
diff --git a/README.md b/README.md
index 84a3fc8..a1ec577 100644
--- a/README.md
+++ b/README.md
@@ -56,8 +56,8 @@ There are multiple BedrockConnect serverlist servers available that can be used,
| ------------- | ------------- | ------------- | ------------- |
| 104.238.130.180 | <img src="https://lipis.github.io/flag-icon-css/flags/4x3/us.svg" height="20"> | [Pugmatt](https://github.com/Pugmatt) | Main instance. Multiple load balanced servers |
| 173.82.100.84 | <img src="https://lipis.github.io/flag-icon-css/flags/4x3/us.svg" height="20"> | [jdextraze](https://github.com/jdextraze) | |
-| 213.171.211.142 | <img src="https://lipis.github.io/flag-icon-css/flags/4x3/gb.svg" height="20"> | [kmpoppe](https://github.com/kmpoppe) | |
-| 217.160.58.93 | <img src="https://lipis.github.io/flag-icon-css/flags/4x3/de.svg" height="20"> | [kmpoppe](https://github.com/kmpoppe) | |
+| 213.171.211.142 | <img src="https://lipis.github.io/flag-icon-css/flags/4x3/gb.svg" height="20"> | [kmpoppe](https://github.com/kmpoppe) | No DNS service, only BedrockConnect server |
+| 217.160.58.93 | <img src="https://lipis.github.io/flag-icon-css/flags/4x3/de.svg" height="20"> | [kmpoppe](https://github.com/kmpoppe) | No DNS service, only BedrockConnect server |
| 188.165.49.178 | <img src="https://lipis.github.io/flag-icon-css/flags/4x3/fr.svg" height="20"> | [Darkmoi3108](https://github.com/darkmoi3108) | |
If you are currently hosting a BedrockConnect instance and are interested in adding it to this list, create a pull request adding it to the table above.
diff --git a/serverlist-server/BedrockConnect.iml b/serverlist-server/BedrockConnect.iml
index 52fad66..a79061c 100644
--- a/serverlist-server/BedrockConnect.iml
+++ b/serverlist-server/BedrockConnect.iml
@@ -10,9 +10,56 @@
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:5.1.17" level="project" />
+ <orderEntry type="library" name="Maven: dnsjava:dnsjava:3.0.2" level="project" />
+ <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
+ <orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.43.Final" level="project" />
+ <orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.43.Final" level="project" />
<orderEntry type="library" name="Maven: net.minidev:json-smart:2.3" level="project" />
<orderEntry type="library" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
<orderEntry type="library" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v440:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v431:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v428:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v422:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v419:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v408:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v407:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v390:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v389:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v388:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v361:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v354:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v340:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v332:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v313:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v291:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-common:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.protocol:common:2.8.0-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.network:common:1.6.26-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.43.Final" level="project" />
+ <orderEntry type="library" name="Maven: io.netty:netty-transport-native-epoll:linux-x86_64:4.1.43.Final" level="project" />
+ <orderEntry type="library" name="Maven: io.netty:netty-transport-native-unix-common:4.1.43.Final" level="project" />
+ <orderEntry type="library" name="Maven: io.netty:netty-transport-native-kqueue:osx-x86_64:4.1.43.Final" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx:natives:1.0.2" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx:nbt:2.0.1" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx:math:1.1.0" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.fastutil:fastutil-int-object-maps:8.5.3" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.fastutil:fastutil-int-sets:8.5.3" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.fastutil:fastutil-int-common:8.5.3" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.fastutil:fastutil-object-int-maps:8.5.3" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.network:raknet:1.6.26-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.43.Final" level="project" />
+ <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.43.Final" level="project" />
+ <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.43.Final" level="project" />
+ <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.43.Final" level="project" />
+ <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.43.Final" level="project" />
+ <orderEntry type="library" name="Maven: net.jodah:expiringmap:0.5.9" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.fastutil:fastutil-long-common:8.5.3" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.fastutil:fastutil-common:8.5.3" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.fastutil:fastutil-long-object-maps:8.5.3" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.fastutil:fastutil-long-sets:8.5.3" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.fastutil:fastutil-object-sets:8.5.3" level="project" />
+ <orderEntry type="library" name="Maven: com.nukkitx.fastutil:fastutil-object-common:8.5.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.5" level="project" />
<orderEntry type="library" name="Maven: com.nimbusds:nimbus-jose-jwt:4.39.2" level="project" />
@@ -29,15 +76,7 @@
<orderEntry type="library" name="Maven: net.sf.trove4j:trove-generator:3.1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.19" level="project" />
<orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.6.1" level="project" />
- <orderEntry type="library" name="Maven: dnsjava:dnsjava:3.0.2" level="project" />
- <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-simple:1.7.21" level="project" />
- <orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.43.Final" level="project" />
- <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.43.Final" level="project" />
- <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.43.Final" level="project" />
- <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.43.Final" level="project" />
- <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.43.Final" level="project" />
- <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.43.Final" level="project" />
- <orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.43.Final" level="project" />
+ <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.21" level="project" />
</component>
</module> \ No newline at end of file
diff --git a/serverlist-server/pom.xml b/serverlist-server/pom.xml
index f210b69..ea7e075 100644
--- a/serverlist-server/pom.xml
+++ b/serverlist-server/pom.xml
@@ -87,8 +87,8 @@
</dependency>
<dependency>
<groupId>com.nukkitx.protocol</groupId>
- <artifactId>bedrock-v428</artifactId>
- <version>2.6.2-SNAPSHOT</version>
+ <artifactId>bedrock-v440</artifactId>
+ <version>2.8.0-SNAPSHOT</version>
<scope>compile</scope>
<exclusions>
<exclusion>
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 da6d47e..5be0444 100644
--- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BCPlayer.java
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BCPlayer.java
@@ -225,6 +225,7 @@ public class BCPlayer {
startGamePacket.setCurrentTick(0);
startGamePacket.setEnchantmentSeed(0);
startGamePacket.setMultiplayerCorrelationId("");
+ startGamePacket.setServerEngine("");
startGamePacket.setBlockPalette(BedrockConnect.paletteManager.CACHED_PALLETE);
@@ -263,11 +264,6 @@ public class BCPlayer {
entityPacket.setIdentifiers(BedrockConnect.paletteManager.ENTITY_IDENTIFIERS);
session.sendPacket(entityPacket);
- InventoryContentPacket creativePacket = new InventoryContentPacket();
- creativePacket.setContainerId(ContainerId.CREATIVE); //TODO: Why is this deprecated?
- creativePacket.setContents(BedrockConnect.paletteManager.CREATIVE_ITEMS);
- session.sendPacket(creativePacket);
-
PlayStatusPacket playStatus = new PlayStatusPacket();
playStatus.setStatus(PlayStatusPacket.Status.PLAYER_SPAWN);
session.sendPacket(playStatus);
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 e2a2b41..6812a61 100644
--- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Server.java
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Server.java
@@ -6,30 +6,18 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
import com.nukkitx.protocol.bedrock.*;
import com.nukkitx.protocol.bedrock.v428.Bedrock_v428;
import main.com.pyratron.pugmatt.bedrockconnect.listeners.PacketHandler;
+import main.com.pyratron.pugmatt.bedrockconnect.utils.BedrockProtocol;
import javax.annotation.Nonnull;
import java.net.InetSocketAddress;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Timer;
-import java.util.TimerTask;
+import java.util.*;
public class Server {
public BedrockServer server;
public BedrockPong pong;
- public static BedrockPacketCodec codec;
-
- public int getProtocol() {
- return codec.getProtocolVersion();
- }
-
- public BedrockPacketCodec getCodec() {
- return codec;
- }
-
public static final ObjectMapper JSON_MAPPER = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
public static final YAMLMapper YAML_MAPPER = (YAMLMapper) new YAMLMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
@@ -63,7 +51,7 @@ public class Server {
players = new ArrayList<>();
InetSocketAddress bindAddress = new InetSocketAddress("0.0.0.0", Integer.parseInt(port));
- codec = Bedrock_v428.V428_CODEC;
+
server = new BedrockServer(bindAddress);
pong = new BedrockPong();
pong.setEdition("MCPE");
@@ -73,8 +61,8 @@ public class Server {
pong.setMaximumPlayerCount(20);
pong.setGameType("Survival");
pong.setIpv4Port(Integer.parseInt(port));
- pong.setProtocolVersion(codec.getProtocolVersion());
- pong.setVersion(codec.getMinecraftVersion());
+ pong.setProtocolVersion(BedrockProtocol.DEFAULT_BEDROCK_CODEC.getProtocolVersion());
+ pong.setVersion(BedrockProtocol.DEFAULT_BEDROCK_CODEC.getMinecraftVersion());
server.setHandler(new BedrockServerEventHandler() {
@Override
public boolean onConnectionRequest(InetSocketAddress address) {
@@ -107,5 +95,24 @@ public class Server {
timer.scheduleAtFixedRate(task, 0L, 60 * 1000);
}
+ new Thread() {
+ public void run() {
+ try {
+ Scanner 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();
+ }
+ }
+ }.start();
+
}
}
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 d47de44..623ed38 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
@@ -124,4 +124,20 @@ public class UIComponents {
return null;
}
+
+ /**
+ * If server display name is included in server data, return this value
+ * If not stored, use server address as display name
+ * @param server
+ * @return
+ */
+ public static String getServerDisplayName(String server) {
+ String displayName;
+ String[] serverParts = server.split(":");
+ if(serverParts.length > 2)
+ displayName = serverParts[2];
+ else
+ displayName = server;
+ return displayName;
+ }
}
diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIForms.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIForms.java
index c7b37ec..9ad1ba3 100644
--- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIForms.java
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIForms.java
@@ -9,6 +9,7 @@ import main.com.pyratron.pugmatt.bedrockconnect.BedrockConnect;
import main.com.pyratron.pugmatt.bedrockconnect.CustomServer;
import main.com.pyratron.pugmatt.bedrockconnect.CustomServerHandler;
+import java.util.ArrayList;
import java.util.List;
public class UIForms {
@@ -49,7 +50,7 @@ public class UIForms {
buttons.add(UIComponents.createButton("Exit Server List"));
for(int i=0;i<servers.size();i++) {
- buttons.add(UIComponents.createButton(servers.get(i), "https://i.imgur.com/3BmFZRE.png", "url"));
+ buttons.add(UIComponents.createButton(UIComponents.getServerDisplayName(servers.get(i)), "https://i.imgur.com/3BmFZRE.png", "url"));
}
for (CustomServer cs : customServers) {
@@ -114,6 +115,7 @@ public class UIForms {
inputs.add(UIComponents.createInput("Server Address", "Please enter IP or Address"));
inputs.add(UIComponents.createInput("Server Port", "Please enter Port", "19132"));
+ inputs.add(UIComponents.createInput("(Optional) Display Name on Server List", "", ""));
inputs.add(UIComponents.createToggle("Add to server list"));
out.add("content", inputs);
@@ -130,7 +132,11 @@ public class UIForms {
JsonArray inputs = new JsonArray();
- inputs.add(UIComponents.createDropdown(servers,"Servers", "0"));
+ List<String> displayServers = new ArrayList<>();
+ for(int i = 0; i < servers.size(); i++) {
+ displayServers.add(UIComponents.getServerDisplayName(servers.get(i)));
+ }
+ inputs.add(UIComponents.createDropdown(displayServers,"Servers", "0"));
out.add("content", inputs);
mf.setFormData(out.toString());
@@ -151,18 +157,4 @@ public class UIForms {
mf.setFormData(form.toString());
return mf;
}
-
- public static ModalFormRequestPacket createDonatelink() {
- currentForm = DONATION;
- ModalFormRequestPacket mf = new ModalFormRequestPacket();
- mf.setFormId(UIForms.DONATION);
- JsonObject form = new JsonObject();
- form.addProperty("type", "custom_form");
- form.addProperty("title", "Thank you!");
- JsonArray content = new JsonArray();
- content.add(UIComponents.createLabel(""));
- form.add("content", content);
- mf.setFormData(form.toString());
- return mf;
- }
}
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 88ce095..cf1fe32 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
@@ -9,6 +9,7 @@ import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.nbt.NbtUtils;
import com.nukkitx.network.util.Preconditions;
import com.nukkitx.protocol.bedrock.BedrockClient;
+import com.nukkitx.protocol.bedrock.BedrockPacketCodec;
import com.nukkitx.protocol.bedrock.data.AttributeData;
import com.nukkitx.protocol.bedrock.packet.*;
import com.nimbusds.jose.JOSEException;
@@ -32,6 +33,7 @@ import main.com.pyratron.pugmatt.bedrockconnect.Whitelist;
import main.com.pyratron.pugmatt.bedrockconnect.gui.MainFormButton;
import main.com.pyratron.pugmatt.bedrockconnect.gui.UIComponents;
import main.com.pyratron.pugmatt.bedrockconnect.gui.UIForms;
+import main.com.pyratron.pugmatt.bedrockconnect.utils.BedrockProtocol;
import net.minidev.json.JSONObject;
import java.io.ByteArrayOutputStream;
@@ -182,21 +184,31 @@ public class PacketHandler implements BedrockPacketHandler {
data.set(1, data.get(1).replaceAll("\\s",""));
if(data.get(0).length() >= 253)
- session.sendPacketImmediately(UIForms.createError("Address is too large. (Must be less than 253)"));
+ session.sendPacketImmediately(UIForms.createError("Address is too large. (Must be 253 characters or less)"));
else if(data.get(1).length() >= 10)
- session.sendPacketImmediately(UIForms.createError("Port is too large. (Must be less than 10)"));
- else if (!data.get(0).matches("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$") && !data.get(0).matches("^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$"))
+ session.sendPacketImmediately(UIForms.createError("Port is too large. (Must be less than 10 characters)"));
+ else if(data.get(2).length() >= 36)
+ session.sendPacketImmediately(UIForms.createError("Display name is too large. (Must be 36 characters or less)"));
+ else if (!data.get(0).matches("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$") && !data.get(0).matches("^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,64}$"))
session.sendPacketImmediately(UIForms.createError("Enter a valid address. (E.g. play.example.net, 172.16.254.1)"));
else if (!data.get(1).matches("[0-9]+"))
session.sendPacketImmediately(UIForms.createError("Enter a valid port that contains only numbers"));
+ else if (!data.get(2).isEmpty() && !data.get(2).matches("^[a-zA-Z0-9]+( +[a-zA-Z0-9]+)*$"))
+ session.sendPacketImmediately(UIForms.createError("Display name can only contain letters, numbers, and spaces between characters"));
else {
- boolean addServer = Boolean.parseBoolean(data.get(2));
+ boolean addServer = Boolean.parseBoolean(data.get(3));
if (addServer) {
List<String> serverList = player.getServerList();
if (serverList.size() >= player.getServerLimit())
session.sendPacketImmediately(UIForms.createError("You have hit your serverlist limit of " + player.getServerLimit() + " servers. Remove some to add more."));
else {
- serverList.add(data.get(0) + ":" + data.get(1));
+ String server;
+ // If display name is included from form input, add as parameter
+ if(!data.get(2).isEmpty())
+ server = data.get(0) + ":" + data.get(1) + ":" + data.get(2);
+ else
+ server = data.get(0) + ":" + data.get(1);
+ serverList.add(server);
player.setServerList(serverList);
transfer(data.get(0).replace(" ", ""), Integer.parseInt(data.get(1)));
}
@@ -313,7 +325,7 @@ public class PacketHandler implements BedrockPacketHandler {
ResourcePackStackPacket rs = new ResourcePackStackPacket();
//rs.setExperimental(false);
rs.setForcedToAccept(false);
- rs.setGameVersion(Server.codec.getMinecraftVersion());
+ rs.setGameVersion("*");
session.sendPacket(rs);
break;
default:
@@ -328,17 +340,24 @@ public class PacketHandler implements BedrockPacketHandler {
@Override
public boolean handle(LoginPacket packet) {
- int protocolVersion = packet.getProtocolVersion();
- if (protocolVersion != server.getProtocol()) {
+ BedrockPacketCodec packetCodec = BedrockProtocol.getBedrockCodec(packet.getProtocolVersion());
+
+ if (packetCodec == null) {
+ session.setPacketCodec(BedrockProtocol.DEFAULT_BEDROCK_CODEC);
+
PlayStatusPacket status = new PlayStatusPacket();
- if (protocolVersion > server.getProtocol()) {
+
+ if (packet.getProtocolVersion() > BedrockProtocol.DEFAULT_BEDROCK_CODEC.getProtocolVersion()) {
status.setStatus(PlayStatusPacket.Status.LOGIN_FAILED_SERVER_OLD);
- } else {
+ }
+ else if (packet.getProtocolVersion() < BedrockProtocol.DEFAULT_BEDROCK_CODEC.getProtocolVersion()) {
status.setStatus(PlayStatusPacket.Status.LOGIN_FAILED_CLIENT_OLD);
}
+
session.sendPacket(status);
}
- session.setPacketCodec(server.getCodec());
+
+ session.setPacketCodec(packetCodec);
JsonNode certData;
try {
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 9385435..7df5f49 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
@@ -41,6 +41,7 @@ public class Data {
+ " (id INTEGER PRIMARY KEY AUTO_INCREMENT,"
+ " uuid TEXT,"
+ " name TEXT,"
+ + " serverName TEXT,"
+ " servers TEXT,"
+ " serverLimit INTEGER,"
+ " INDEX (uuid(255))"
@@ -105,7 +106,7 @@ public class Data {
}
} catch (Exception e) {
errorAlert(e);
- session.disconnect("We had some trouble receiving your player data. Please report this to the BedrockConnect discord.");
+ session.disconnect("We had some trouble receiving your player data. Please report this to the BedrockConnect GitHub if the issue continues.");
}
}).start();
} else {
@@ -167,7 +168,7 @@ public class Data {
catch (Exception e)
{
errorAlert(e);
- session.disconnect("We had some trouble receiving your player data. Please report this to the BedrockConnect discord.");
+ session.disconnect("We had some trouble receiving your player data. Please report this to the BedrockConnect GitHub if the issue continues.");
}
}).start();
}
diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/BedrockProtocol.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/BedrockProtocol.java
new file mode 100644
index 0000000..49a80b0
--- /dev/null
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/BedrockProtocol.java
@@ -0,0 +1,51 @@
+package main.com.pyratron.pugmatt.bedrockconnect.utils;
+
+import com.nukkitx.protocol.bedrock.BedrockPacketCodec;
+import com.nukkitx.protocol.bedrock.v419.Bedrock_v419;
+import com.nukkitx.protocol.bedrock.v422.Bedrock_v422;
+import com.nukkitx.protocol.bedrock.v428.Bedrock_v428;
+import com.nukkitx.protocol.bedrock.v431.Bedrock_v431;
+import com.nukkitx.protocol.bedrock.v440.Bedrock_v440;
+
+import java.util.ArrayList;
+import java.util.List;
+
+// Referenced from: https://github.com/GeyserMC/Geyser/blob/master/connector/src/main/java/org/geysermc/connector/network/BedrockProtocol.java
+
+public class BedrockProtocol {
+ /**
+ * Latest available version
+ */
+ public static final BedrockPacketCodec DEFAULT_BEDROCK_CODEC = Bedrock_v431.V431_CODEC;
+
+ /**
+ * A list of all supported Bedrock versions that can join BedrockConnect
+ */
+ public static final List<BedrockPacketCodec> SUPPORTED_BEDROCK_CODECS = new ArrayList<>();
+
+ static {
+ SUPPORTED_BEDROCK_CODECS.add(Bedrock_v419.V419_CODEC.toBuilder()
+ .minecraftVersion("1.16.100/1.16.101")
+ .build());
+ SUPPORTED_BEDROCK_CODECS.add(Bedrock_v422.V422_CODEC.toBuilder()
+ .minecraftVersion("1.16.200/1.16.201")
+ .build());
+ SUPPORTED_BEDROCK_CODECS.add(Bedrock_v428.V428_CODEC);
+ SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC);
+ SUPPORTED_BEDROCK_CODECS.add(Bedrock_v440.V440_CODEC);
+ }
+
+ /**
+ * Gets the {@link BedrockPacketCodec} of the given protocol version.
+ * @param protocolVersion The protocol version to attempt to find
+ * @return The packet codec, or null if the client's protocol is unsupported
+ */
+ public static BedrockPacketCodec getBedrockCodec(int protocolVersion) {
+ for (BedrockPacketCodec packetCodec : SUPPORTED_BEDROCK_CODECS) {
+ if (packetCodec.getProtocolVersion() == protocolVersion) {
+ return packetCodec;
+ }
+ }
+ return null;
+ }
+}
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 c7b4dfc..1efc1fb 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
@@ -84,12 +84,19 @@ public class PaletteManager {
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
try {
NbtMap tag = (NbtMap) NbtUtils.createReaderLE(bais).readTag();
- creativeItems.add(ItemData.of(itemNode.get("id").asInt(), damage, 1, tag));
+ creativeItems.add(ItemData.builder()
+ .id(itemNode.get("id").asInt())
+ .damage(damage)
+ .count(1)
+ .tag(tag).build());
} catch (IOException e) {
e.printStackTrace();
}
} else {
- creativeItems.add(ItemData.of(itemNode.get("id").asInt(), damage, 1));
+ creativeItems.add(ItemData.builder()
+ .id(itemNode.get("id").asInt())
+ .damage(damage)
+ .count(1).build());
}
}
CREATIVE_ITEMS = creativeItems;