diff options
| author | Matthew <pugmatt@gmail.com> | 2021-06-28 01:26:56 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-06-28 01:26:56 -0400 |
| commit | 9f54275e8d7c5ff83b25cd5992c701ac6f805e90 (patch) | |
| tree | e794252ba01e7e7c4bfea926a375a9587f68576c | |
| parent | b088d5e728d1403a963c91a1de5705e4162ef3f5 (diff) | |
| parent | 790b6a543eaec644b79edef5391ac6346d410392 (diff) | |
| download | BedrockConnect-9f54275e8d7c5ff83b25cd5992c701ac6f805e90.tar.gz BedrockConnect-9f54275e8d7c5ff83b25cd5992c701ac6f805e90.tar.bz2 BedrockConnect-9f54275e8d7c5ff83b25cd5992c701ac6f805e90.zip | |
Merge branch 'master' into master
11 files changed, 194 insertions, 66 deletions
@@ -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; |
