diff options
| author | Mattie <pugmatt@gmail.com> | 2023-02-06 03:48:50 -0500 |
|---|---|---|
| committer | Mattie <pugmatt@gmail.com> | 2023-02-06 03:48:50 -0500 |
| commit | d44577f11ec967c01049c34aa7725857b44f233f (patch) | |
| tree | cb8dbb59631a0e274665640adc08771fc60bcd13 /serverlist-server | |
| parent | ece82dd065e525ddf3b59150fabb14f38c758853 (diff) | |
| download | BedrockConnect-d44577f11ec967c01049c34aa7725857b44f233f.tar.gz BedrockConnect-d44577f11ec967c01049c34aa7725857b44f233f.tar.bz2 BedrockConnect-d44577f11ec967c01049c34aa7725857b44f233f.zip | |
Upgrade Protocol to 3.0
Diffstat (limited to 'serverlist-server')
10 files changed, 1007 insertions, 282 deletions
diff --git a/serverlist-server/BedrockConnect.iml b/serverlist-server/BedrockConnect.iml index 9a65b25..6b4de5c 100644 --- a/serverlist-server/BedrockConnect.iml +++ b/serverlist-server/BedrockConnect.iml @@ -9,74 +9,49 @@ </content> <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: com.nukkitx.protocol:bedrock-v448:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v440:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v431:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v428:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v422:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v419:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v408:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v407:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v390:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v389:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v388:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v361:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v354:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v340:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v332:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v313:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v291:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-common:2.8.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:common:2.8.1-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: org.cloudburstmc.protocol:bedrock-connection:3.0.0.Beta1-SNAPSHOT" level="project" /> + <orderEntry type="library" name="Maven: org.cloudburstmc.protocol:bedrock-codec:3.0.0.Beta1-SNAPSHOT" level="project" /> + <orderEntry type="library" name="Maven: org.cloudburstmc.protocol:common:3.0.0.Beta1-SNAPSHOT" 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: org.cloudburstmc.math:immutable:2.0-SNAPSHOT" level="project" /> + <orderEntry type="library" name="Maven: com.nukkitx:natives:1.0.3" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.84.Final" 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" name="Maven: org.cloudburstmc:nbt:3.0.0.Final" level="project" /> + <orderEntry type="library" name="Maven: org.lanternpowered:lmbda:2.0.0" level="project" /> + <orderEntry type="library" name="Maven: org.ow2.asm:asm:7.1" level="project" /> + <orderEntry type="library" name="Maven: org.checkerframework:checker-qual:2.8.1" level="project" /> + <orderEntry type="library" name="Maven: org.cloudburstmc.netty:netty-transport-raknet:0.0.1.Final-SNAPSHOT" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.84.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.84.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.84.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.84.Final" level="project" /> + <orderEntry type="library" name="Maven: net.jodah:expiringmap:0.5.9" level="project" /> + <orderEntry type="library" name="Maven: io.airlift:aircompressor:0.21" 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" /> + <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.9" level="project" /> + <orderEntry type="library" name="Maven: com.nimbusds:nimbus-jose-jwt:9.13" level="project" /> <orderEntry type="library" name="Maven: com.github.stephenc.jcip:jcip-annotations:1.0-1" 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.googlecode.json-simple:json-simple:1.1.1" level="project" /> <orderEntry type="library" name="Maven: junit:junit:4.10" level="project" /> <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" /> - <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8" level="project" /> - <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" /> - <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.8" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.12.7.1" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.12.7" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.12.7" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.9.8" level="project" /> <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.23" level="project" /> <orderEntry type="library" name="Maven: net.sf.trove4j:trove:3.1.0-SNAPSHOT" level="project" /> <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: mysql:mysql-connector-java:8.0.28" level="project" /> + <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.11.4" level="project" /> <orderEntry type="library" name="Maven: org.slf4j:slf4j-simple:1.7.21" level="project" /> <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.21" level="project" /> </component> diff --git a/serverlist-server/pom.xml b/serverlist-server/pom.xml index f712286..b59f5bd 100644 --- a/serverlist-server/pom.xml +++ b/serverlist-server/pom.xml @@ -48,7 +48,7 @@ <configuration> <relocations> <relocation> - <pattern>com.nukkitx.protocol</pattern> + <pattern>org.cloudburstmc.protocol</pattern> <shadedPattern>com.pyratron.pugmatt.protocol</shadedPattern> </relocation> </relocations> @@ -61,26 +61,32 @@ <repositories> <repository> - <id>opencollab-releases</id> + <id>opencollab-repo-release</id> <url>https://repo.opencollab.dev/maven-releases/</url> + <releases> + <enabled>true</enabled> + </releases> + <snapshots> + <enabled>false</enabled> + </snapshots> </repository> <repository> - <id>opencollab-snapshots</id> + <id>opencollab-repo-snapshot</id> <url>https://repo.opencollab.dev/maven-snapshots/</url> + <releases> + <enabled>false</enabled> + </releases> + <snapshots> + <enabled>true</enabled> + </snapshots> </repository> </repositories> <dependencies> - <!-- https://mvnrepository.com/artifact/net.minidev/json-smart --> <dependency> - <groupId>net.minidev</groupId> - <artifactId>json-smart</artifactId> - <version>2.4.4</version> - </dependency> - <dependency> - <groupId>com.nukkitx.protocol</groupId> - <artifactId>bedrock-v560</artifactId> - <version>2.9.15-SNAPSHOT</version> + <groupId>org.cloudburstmc.protocol</groupId> + <artifactId>bedrock-connection</artifactId> + <version>3.0.0.Beta1-SNAPSHOT</version> <scope>compile</scope> <exclusions> <exclusion> @@ -106,7 +112,7 @@ <dependency> <groupId>com.nimbusds</groupId> <artifactId>nimbus-jose-jwt</artifactId> - <version>7.9</version> + <version>9.13</version> <scope>compile</scope> </dependency> <dependency> 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 2b6f537..aa35698 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BCPlayer.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BCPlayer.java @@ -1,22 +1,21 @@ package main.com.pyratron.pugmatt.bedrockconnect; -import com.nukkitx.math.vector.Vector2f; -import com.nukkitx.math.vector.Vector3i; -import com.nukkitx.nbt.NBTOutputStream; -import com.nukkitx.nbt.NbtMap; -import com.nukkitx.nbt.NbtMapBuilder; -import com.nukkitx.nbt.NbtUtils; -import com.nukkitx.protocol.bedrock.Bedrock; -import com.nukkitx.protocol.bedrock.BedrockPacket; -import com.nukkitx.protocol.bedrock.BedrockServerSession; -import com.nukkitx.protocol.bedrock.data.*; -import com.nukkitx.protocol.bedrock.data.inventory.ContainerId; -import com.nukkitx.protocol.bedrock.data.inventory.ItemData; -import com.nukkitx.protocol.bedrock.packet.*; -import com.nukkitx.math.vector.Vector3f; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import main.com.pyratron.pugmatt.bedrockconnect.gui.UIComponents; import main.com.pyratron.pugmatt.bedrockconnect.gui.UIForms; import main.com.pyratron.pugmatt.bedrockconnect.sql.Data; +import org.cloudburstmc.math.vector.Vector2f; +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.math.vector.Vector3i; +import org.cloudburstmc.nbt.NBTOutputStream; +import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.nbt.NbtUtils; +import org.cloudburstmc.protocol.bedrock.BedrockServerSession; +import org.cloudburstmc.protocol.bedrock.data.*; +import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; +import org.cloudburstmc.protocol.bedrock.packet.*; +import org.cloudburstmc.protocol.common.util.OptionalBoolean; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -70,7 +69,7 @@ public class BCPlayer { this.serverLimit = serverLimit; this.lastAction = LocalTime.now(); - if(session != null && !session.isClosed()) + if(session != null && session.isConnected()) joinGame(); } @@ -217,15 +216,6 @@ public class BCPlayer { } public void joinGame() { - - MovePlayerPacket mp = new MovePlayerPacket(); - mp.setRuntimeEntityId(1); - mp.setOnGround(false); - mp.setMode(MovePlayerPacket.Mode.NORMAL); - mp.setRotation(Vector3f.from(0,0,0)); - mp.setPosition(Vector3f.from(0,0,0)); - session.sendPacket(mp); - StartGamePacket startGamePacket = new StartGamePacket(); startGamePacket.setUniqueEntityId(1); startGamePacket.setRuntimeEntityId(1); @@ -266,16 +256,18 @@ public class BCPlayer { startGamePacket.setUsingMsaGamertagsOnly(false); startGamePacket.setFromWorldTemplate(false); startGamePacket.setWorldTemplateOptionLocked(false); + startGamePacket.setSpawnBiomeType(SpawnBiomeType.DEFAULT); + startGamePacket.setCustomBiomeName(""); + startGamePacket.setEducationProductionId(""); + startGamePacket.setForceExperimentalGameplay(OptionalBoolean.empty()); - //startGamePacket.setOnlySpawningV1Villagers(false); startGamePacket.setAuthoritativeMovementMode(AuthoritativeMovementMode.CLIENT); - SyncedPlayerMovementSettings settings = new SyncedPlayerMovementSettings(); - settings.setMovementMode(AuthoritativeMovementMode.CLIENT); - settings.setRewindHistorySize(0); - settings.setServerAuthoritativeBlockBreaking(false); - startGamePacket.setPlayerMovementSettings(settings); + startGamePacket.setRewindHistorySize(0); + startGamePacket.setServerAuthoritativeBlockBreaking(false); //startGamePacket.setTrial(false); startGamePacket.setVanillaVersion("*"); + startGamePacket.setInventoriesServerAuthoritative(true); + startGamePacket.setServerEngine(""); startGamePacket.setLevelId("world"); startGamePacket.setLevelName("world"); @@ -314,7 +306,7 @@ public class BCPlayer { data2.setChunkX(chunkX + x); data2.setChunkZ(chunkZ + z); data2.setSubChunksLength(0); - data2.setData(EMPTY_LEVEL_CHUNK_DATA); + data2.setData(Unpooled.wrappedBuffer(EMPTY_LEVEL_CHUNK_DATA)); session.sendPacket(data2); } } 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 d15367a..48c9ab1 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Server.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Server.java @@ -3,9 +3,19 @@ package main.com.pyratron.pugmatt.bedrockconnect; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLMapper; -import com.nukkitx.protocol.bedrock.*; +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.Channel; +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.utils.BedrockProtocol; +import org.cloudburstmc.netty.channel.raknet.RakChannelFactory; +import org.cloudburstmc.netty.channel.raknet.config.RakChannelOption; +import org.cloudburstmc.protocol.bedrock.BedrockPong; +import org.cloudburstmc.protocol.bedrock.BedrockServerSession; +import org.cloudburstmc.protocol.bedrock.BedrockSession; +import org.cloudburstmc.protocol.bedrock.netty.initializer.BedrockServerInitializer; +import org.cloudburstmc.protocol.bedrock.packet.BedrockPacketHandler; import javax.annotation.Nonnull; @@ -14,7 +24,8 @@ import java.util.*; public class Server { - public BedrockServer server; + private final NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup(); + public Channel server; public BedrockPong pong; public static final ObjectMapper JSON_MAPPER = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); @@ -51,35 +62,31 @@ public class Server { InetSocketAddress bindAddress = new InetSocketAddress(bindIp, Integer.parseInt(port)); - server = new BedrockServer(bindAddress); pong = new BedrockPong(); - pong.setEdition("MCPE"); - pong.setMotd(BedrockConnect.language.getWording("serverInfo", "motd")); - pong.setSubMotd(BedrockConnect.language.getWording("serverInfo", "subMotd")); - pong.setPlayerCount(0); - pong.setMaximumPlayerCount(20); - pong.setGameType("Survival"); - pong.setIpv4Port(Integer.parseInt(port)); - pong.setProtocolVersion(BedrockProtocol.DEFAULT_BEDROCK_CODEC.getProtocolVersion()); - pong.setVersion(BedrockProtocol.DEFAULT_BEDROCK_CODEC.getMinecraftVersion()); - server.setHandler(new BedrockServerEventHandler() { - @Override - public boolean onConnectionRequest(InetSocketAddress address) { - return true; // Connection will be accepted - } - - @Nonnull - public BedrockPong onQuery(InetSocketAddress address) { - return pong; - } + pong.edition("MCPE"); + pong.motd(BedrockConnect.language.getWording("serverInfo", "motd")); + pong.subMotd(BedrockConnect.language.getWording("serverInfo", "subMotd")); + pong.playerCount(0); + 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()); + + server = new ServerBootstrap() + .group(this.eventLoopGroup) + .channelFactory(RakChannelFactory.server(NioDatagramChannel.class)) + .option(RakChannelOption.RAK_ADVERTISEMENT, pong.toByteBuf()) + .childHandler(new BedrockServerInitializer() { + @Override + protected void initSession(BedrockServerSession session) { + session.setPacketHandler(new PacketHandler(session, current, false)); + } + }) + .bind(bindAddress) + .awaitUninterruptibly() + .channel(); - @Override - public void onSessionCreation(BedrockServerSession session) { - session.setPacketHandler(new PacketHandler(session, current, false)); - } - }); - // Start server up - server.bind().join(); System.out.println("Bedrock Connection Started: " + bindIp + ":" + port); if(BedrockConnect.kickInactive) { Timer timer = new Timer(); 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 102fe0d..531aef3 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 @@ -2,11 +2,8 @@ package main.com.pyratron.pugmatt.bedrockconnect.gui; import com.google.gson.JsonArray; import com.google.gson.JsonObject; -import com.nukkitx.protocol.bedrock.BedrockSession; -import com.nukkitx.protocol.bedrock.packet.ModalFormRequestPacket; import main.com.pyratron.pugmatt.bedrockconnect.BCPlayer; import main.com.pyratron.pugmatt.bedrockconnect.BedrockConnect; -import net.minidev.json.JSONUtil; import org.json.simple.JSONArray; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; 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 6a8ac1f..78d20b9 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 @@ -2,12 +2,10 @@ package main.com.pyratron.pugmatt.bedrockconnect.gui; import com.google.gson.JsonArray; import com.google.gson.JsonObject; -import com.nukkitx.protocol.bedrock.Bedrock; -import com.nukkitx.protocol.bedrock.BedrockServerSession; -import com.nukkitx.protocol.bedrock.packet.ModalFormRequestPacket; - -import com.nukkitx.protocol.bedrock.packet.NetworkStackLatencyPacket; import main.com.pyratron.pugmatt.bedrockconnect.*; +import org.cloudburstmc.protocol.bedrock.BedrockServerSession; +import org.cloudburstmc.protocol.bedrock.packet.ModalFormRequestPacket; +import org.cloudburstmc.protocol.bedrock.packet.NetworkStackLatencyPacket; import java.util.ArrayList; import java.util.List; 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 88bb367..acf190d 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 @@ -2,28 +2,31 @@ package main.com.pyratron.pugmatt.bedrockconnect.listeners; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.JsonNodeType; -import com.nukkitx.math.vector.Vector3f; -import com.nukkitx.network.util.Preconditions; -import com.nukkitx.protocol.bedrock.BedrockPacketCodec; -import com.nukkitx.protocol.bedrock.data.AttributeData; -import com.nukkitx.protocol.bedrock.data.PacketCompressionAlgorithm; -import com.nukkitx.protocol.bedrock.packet.*; import com.nimbusds.jose.JOSEException; import com.nimbusds.jose.JWSObject; +import com.nimbusds.jose.Payload; import com.nimbusds.jose.crypto.factories.DefaultJWSVerifierFactory; -import com.nukkitx.protocol.bedrock.BedrockServerSession; -import com.nukkitx.protocol.bedrock.handler.BedrockPacketHandler; -import com.nukkitx.protocol.bedrock.packet.LoginPacket; -import com.nukkitx.protocol.bedrock.util.EncryptionUtils; +import com.nimbusds.jose.shaded.json.JSONObject; +import com.nimbusds.jose.shaded.json.JSONValue; +import com.nimbusds.jwt.SignedJWT; import main.com.pyratron.pugmatt.bedrockconnect.*; 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.utils.BedrockProtocol; -import net.minidev.json.JSONObject; +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.protocol.bedrock.BedrockServerSession; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; +import org.cloudburstmc.protocol.bedrock.data.AttributeData; +import org.cloudburstmc.protocol.bedrock.data.PacketCompressionAlgorithm; +import org.cloudburstmc.protocol.bedrock.packet.*; +import org.cloudburstmc.protocol.bedrock.util.EncryptionUtils; +import org.cloudburstmc.protocol.common.PacketSignal; +import org.cloudburstmc.protocol.common.util.Preconditions; import java.io.IOException; +import java.net.URI; import java.security.interfaces.ECPublicKey; import java.util.*; import java.net.InetAddress; @@ -60,7 +63,7 @@ public class PacketHandler implements BedrockPacketHandler { } @Override - public boolean handle(RequestChunkRadiusPacket packet) { + public PacketSignal handle(RequestChunkRadiusPacket packet) { ChunkRadiusUpdatedPacket chunkRadiusUpdatePacket = new ChunkRadiusUpdatedPacket(); chunkRadiusUpdatePacket.setRadius(packet.getRadius()); session.sendPacketImmediately(chunkRadiusUpdatePacket); @@ -68,26 +71,26 @@ public class PacketHandler implements BedrockPacketHandler { PlayStatusPacket playStatus = new PlayStatusPacket(); playStatus.setStatus(PlayStatusPacket.Status.PLAYER_SPAWN); session.sendPacket(playStatus); - return false; + return PacketSignal.HANDLED; } // 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 boolean handle(PlayerActionPacket packet) { + public PacketSignal handle(PlayerActionPacket packet) { player.movementOpen(); - return false; + return PacketSignal.HANDLED; } @Override - public boolean handle(AnimatePacket packet) { + public PacketSignal handle(AnimatePacket packet) { if(packet.getAction() == AnimatePacket.Action.SWING_ARM) player.movementOpen(); - return false; + return PacketSignal.HANDLED; } @Override - public boolean handle(ModalFormResponsePacket packet) { + public PacketSignal handle(ModalFormResponsePacket packet) { player.setActive(); player.resetMovementOpen(); @@ -96,7 +99,7 @@ public class PacketHandler implements BedrockPacketHandler { // Re-open window if closed if (packet.getFormData() == null || packet.getFormData().contains("null")) { if(player.getCurrentForm() != packet.getFormId()) - return false; + return PacketSignal.HANDLED; player.openForm(UIForms.MAIN); } else { // If selecting button int chosen = Integer.parseInt(packet.getFormData().replaceAll("\\s+","")); @@ -173,7 +176,7 @@ public class PacketHandler implements BedrockPacketHandler { case UIForms.SERVER_GROUP: if(packet.getFormData() == null || packet.getFormData().contains("null")) { if(player.getCurrentForm() != packet.getFormId()) - return false; + return PacketSignal.HANDLED; player.openForm(UIForms.MAIN); } else { @@ -193,7 +196,7 @@ public class PacketHandler implements BedrockPacketHandler { case UIForms.MANAGE_SERVER: if(packet.getFormData() == null) { if(player.getCurrentForm() != packet.getFormId()) - return false; + return PacketSignal.HANDLED; player.openForm(UIForms.MAIN); } else { @@ -218,7 +221,7 @@ public class PacketHandler implements BedrockPacketHandler { try { if(packet.getFormData() == null || packet.getFormData().contains("null")) { if(player.getCurrentForm() != packet.getFormId()) - return false; + return PacketSignal.HANDLED; player.openForm(UIForms.MANAGE_SERVER); } else { @@ -246,7 +249,7 @@ public class PacketHandler implements BedrockPacketHandler { try { if(packet.getFormData() == null || packet.getFormData().contains("null")) { if(player.getCurrentForm() != packet.getFormId()) - return false; + return PacketSignal.HANDLED; player.openForm(UIForms.MAIN); } else { @@ -278,7 +281,7 @@ public class PacketHandler implements BedrockPacketHandler { case UIForms.EDIT_CHOOSE_SERVER: if(packet.getFormData() == null || packet.getFormData().contains("null")) { if(player.getCurrentForm() != packet.getFormId()) - return false; + return PacketSignal.HANDLED; player.openForm(UIForms.MANAGE_SERVER); } else { @@ -305,7 +308,7 @@ public class PacketHandler implements BedrockPacketHandler { case UIForms.EDIT_SERVER: if(packet.getFormData() == null || packet.getFormData().contains("null")) { if(player.getCurrentForm() != packet.getFormId()) - return false; + return PacketSignal.HANDLED; player.openForm(UIForms.EDIT_CHOOSE_SERVER); } else { @@ -336,7 +339,7 @@ public class PacketHandler implements BedrockPacketHandler { try { if(packet.getFormData() == null || packet.getFormData().contains("null")) { if(player.getCurrentForm() != packet.getFormId()) - return false; + return PacketSignal.HANDLED; player.openForm(UIForms.MANAGE_SERVER); } else { @@ -361,11 +364,11 @@ public class PacketHandler implements BedrockPacketHandler { break; } - return false; + return PacketSignal.HANDLED; } @Override - public boolean handle(NetworkStackLatencyPacket packet) { + public PacketSignal handle(NetworkStackLatencyPacket packet) { // Fix bug where server icons don't load UpdateAttributesPacket updateAttributesPacket = new UpdateAttributesPacket(); updateAttributesPacket.setRuntimeEntityId(1); @@ -374,11 +377,11 @@ public class PacketHandler implements BedrockPacketHandler { Timer timer = new Timer(); TimerTask task = new TimerTask() { - public void run() { if(!session.isClosed()) { session.sendPacket(updateAttributesPacket); } } + public void run() { if(session.isConnected()) { session.sendPacket(updateAttributesPacket); } } }; timer.schedule(task, 500); - return false; + return PacketSignal.HANDLED; } public void transfer(String ip, int port) { @@ -393,58 +396,101 @@ public class PacketHandler implements BedrockPacketHandler { } @Override - public boolean handle(SetLocalPlayerAsInitializedPacket packet) { + public PacketSignal handle(SetLocalPlayerAsInitializedPacket packet) { session.sendPacketImmediately(UIForms.createMain(player.getServerList(), session)); - return false; + return PacketSignal.HANDLED; } @Override - public boolean handle(RequestNetworkSettingsPacket packet) { + public PacketSignal handle(RequestNetworkSettingsPacket packet) { + int protocolVersion = packet.getProtocolVersion(); + + BedrockCodec packetCodec = BedrockProtocol.getBedrockCodec(packet.getProtocolVersion()); + + if (protocolVersion != BedrockProtocol.DEFAULT_BEDROCK_CODEC.getProtocolVersion()) { + PlayStatusPacket status = new PlayStatusPacket(); + if (protocolVersion > BedrockProtocol.DEFAULT_BEDROCK_CODEC.getProtocolVersion()) { + status.setStatus(PlayStatusPacket.Status.LOGIN_FAILED_SERVER_OLD); + } else { + status.setStatus(PlayStatusPacket.Status.LOGIN_FAILED_CLIENT_OLD); + } + + session.sendPacketImmediately(status); + return PacketSignal.HANDLED; + } + session.setCodec(packetCodec); + PacketCompressionAlgorithm algorithm = PacketCompressionAlgorithm.ZLIB; NetworkSettingsPacket responsePacket = new NetworkSettingsPacket(); responsePacket.setCompressionAlgorithm(algorithm); - responsePacket.setCompressionThreshold(512); + responsePacket.setCompressionThreshold(0); session.sendPacketImmediately(responsePacket); session.setCompression(algorithm); - return false; + return PacketSignal.HANDLED; } public PacketHandler(BedrockServerSession session, Server server, boolean packetListening) { - session.setPacketCodec(BedrockProtocol.DEFAULT_BEDROCK_CODEC); this.session = session; this.server = server; - - session.addDisconnectHandler((DisconnectReason) -> disconnect()); } - public void disconnect() { + @Override + public void onDisconnect(String reason) { System.out.println(name + " disconnected"); if(player != null) server.removePlayer(player); } - private static boolean validateChainData(JsonNode data) throws Exception { + private static boolean validateChainData(List<SignedJWT> chain) throws Exception { + if (chain.size() != 3) { + return false; + } + + Payload identity = null; ECPublicKey lastKey = null; - boolean validChain = false; - for (JsonNode node : data) { - JWSObject jwt = JWSObject.parse(node.asText()); + boolean mojangSigned = false; + Iterator<SignedJWT> iterator = chain.iterator(); + while (iterator.hasNext()) { + SignedJWT jwt = iterator.next(); + identity = jwt.getPayload(); + + // x509 cert is expected in every claim + URI x5u = jwt.getHeader().getX509CertURL(); + if (x5u == null) { + return false; + } - if (!validChain) { - validChain = verifyJwt(jwt, EncryptionUtils.getMojangPublicKey()); + ECPublicKey expectedKey = EncryptionUtils.generateKey(jwt.getHeader().getX509CertURL().toString()); + // First key is self-signed + if (lastKey == null) { + lastKey = expectedKey; + } else if (!lastKey.equals(expectedKey)) { + return false; } - if (lastKey != null) { - verifyJwt(jwt, lastKey); + if (!EncryptionUtils.verifyJwt(jwt, lastKey)) { + return false; } - JsonNode payloadNode = Server.JSON_MAPPER.readTree(jwt.getPayload().toString()); - JsonNode ipkNode = payloadNode.get("identityPublicKey"); - Preconditions.checkState(ipkNode != null && ipkNode.getNodeType() == JsonNodeType.STRING, "identityPublicKey node is missing in chain"); - lastKey = EncryptionUtils.generateKey(ipkNode.asText()); + if (mojangSigned) { + return !iterator.hasNext(); + } + + if (lastKey.equals(EncryptionUtils.getMojangPublicKey())) { + mojangSigned = true; + } + + Object payload = JSONValue.parse(jwt.getPayload().toString()); + Preconditions.checkArgument(payload instanceof JSONObject, "Payload is not an object"); + + Object identityPublicKey = ((JSONObject) payload).get("identityPublicKey"); + Preconditions.checkArgument(identityPublicKey instanceof String, "identityPublicKey node is missing in chain"); + lastKey = EncryptionUtils.generateKey((String) identityPublicKey); } - return validChain; + + return mojangSigned; } @@ -453,12 +499,12 @@ public class PacketHandler implements BedrockPacketHandler { } @Override - public boolean handle(DisconnectPacket packet) { - return false; + public PacketSignal handle(DisconnectPacket packet) { + return PacketSignal.UNHANDLED; } @Override - public boolean handle(ResourcePackClientResponsePacket packet) { + public PacketSignal handle(ResourcePackClientResponsePacket packet) { switch (packet.getStatus()) { case COMPLETED: BedrockConnect.data.userExists(uuid, name, session, this); @@ -475,49 +521,18 @@ public class PacketHandler implements BedrockPacketHandler { break; } - return true; + return PacketSignal.HANDLED; } // Heavily referenced from https://github.com/NukkitX/ProxyPass/blob/master/src/main/java/com/nukkitx/proxypass/network/bedrock/session/UpstreamPacketHandler.java @Override - public boolean handle(LoginPacket packet) { - BedrockPacketCodec packetCodec = BedrockProtocol.getBedrockCodec(packet.getProtocolVersion()); - - if (packetCodec == null) { - session.setPacketCodec(BedrockProtocol.DEFAULT_BEDROCK_CODEC); - - PlayStatusPacket status = new PlayStatusPacket(); - - if (packet.getProtocolVersion() > BedrockProtocol.DEFAULT_BEDROCK_CODEC.getProtocolVersion()) { - status.setStatus(PlayStatusPacket.Status.LOGIN_FAILED_SERVER_OLD); - } - else if (packet.getProtocolVersion() < BedrockProtocol.DEFAULT_BEDROCK_CODEC.getProtocolVersion()) { - status.setStatus(PlayStatusPacket.Status.LOGIN_FAILED_CLIENT_OLD); - } - - session.sendPacket(status); - } - - session.setPacketCodec(packetCodec); - - JsonNode certData; - try { - certData = Server.JSON_MAPPER.readTree(packet.getChainData().toByteArray()); - } catch (IOException e) { - throw new RuntimeException("Certificate JSON can not be read."); - } + public PacketSignal handle(LoginPacket packet) { - JsonNode certChainData = certData.get("chain"); - if (certChainData.getNodeType() != JsonNodeType.ARRAY) { - throw new RuntimeException("Certificate data is not valid"); - } + List<SignedJWT> certChainData = packet.getChain(); - boolean validChain; try { - validChain = validateChainData(certChainData); - - JWSObject jwt = JWSObject.parse(certChainData.get(certChainData.size() - 1).asText()); + JWSObject jwt = certChainData.get(certChainData.size() - 1); JsonNode payload = Server.JSON_MAPPER.readTree(jwt.getPayload().toBytes()); if (payload.get("extraData").getNodeType() != JsonNodeType.OBJECT) { @@ -531,7 +546,7 @@ public class PacketHandler implements BedrockPacketHandler { } ECPublicKey identityPublicKey = EncryptionUtils.generateKey(payload.get("identityPublicKey").textValue()); - JWSObject clientJwt = JWSObject.parse(packet.getSkinData().toString()); + JWSObject clientJwt = packet.getExtra(); verifyJwt(clientJwt, identityPublicKey); System.out.println("Made it through login - " + "User: " + extraData.getAsString("displayName") + " (" + extraData.getAsString("identity") + ")"); @@ -541,7 +556,7 @@ public class PacketHandler implements BedrockPacketHandler { uuid = extraData.getAsString("identity"); - //whitelist check + // Whitelist check if (Whitelist.hasWhitelist() && !Whitelist.isPlayerWhitelisted(name)) { session.disconnect(Whitelist.getWhitelistMessage()); System.out.println("Kicked " + name + ": \"" + Whitelist.getWhitelistMessage() + "\""); @@ -564,8 +579,771 @@ public class PacketHandler implements BedrockPacketHandler { session.disconnect("disconnectionScreen.internalError.cantConnect"); throw new RuntimeException("Unable to complete login", e); } - return true; + 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/sql/Data.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/sql/Data.java index 7abe8f1..07e79b2 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 @@ -1,10 +1,10 @@ package main.com.pyratron.pugmatt.bedrockconnect.sql; -import com.nukkitx.protocol.bedrock.BedrockServerSession; import main.com.pyratron.pugmatt.bedrockconnect.BedrockConnect; import main.com.pyratron.pugmatt.bedrockconnect.BCPlayer; import main.com.pyratron.pugmatt.bedrockconnect.gui.UIComponents; import main.com.pyratron.pugmatt.bedrockconnect.listeners.PacketHandler; +import org.cloudburstmc.protocol.bedrock.BedrockServerSession; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; 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 index b8bf0f5..50500dc 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/BedrockProtocol.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/BedrockProtocol.java @@ -1,23 +1,11 @@ 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 com.nukkitx.protocol.bedrock.v448.Bedrock_v448; -import com.nukkitx.protocol.bedrock.v465.Bedrock_v465; -import com.nukkitx.protocol.bedrock.v471.Bedrock_v471; -import com.nukkitx.protocol.bedrock.v475.Bedrock_v475; -import com.nukkitx.protocol.bedrock.v486.Bedrock_v486; -import com.nukkitx.protocol.bedrock.v503.Bedrock_v503; -import com.nukkitx.protocol.bedrock.v527.Bedrock_v527; -import com.nukkitx.protocol.bedrock.v534.Bedrock_v534; -import com.nukkitx.protocol.bedrock.v544.Bedrock_v544; -import com.nukkitx.protocol.bedrock.v554.Bedrock_v554; -import com.nukkitx.protocol.bedrock.v557.Bedrock_v557; -import com.nukkitx.protocol.bedrock.v560.Bedrock_v560; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; +import org.cloudburstmc.protocol.bedrock.codec.v544.Bedrock_v544; +import org.cloudburstmc.protocol.bedrock.codec.v545.Bedrock_v545; +import org.cloudburstmc.protocol.bedrock.codec.v554.Bedrock_v554; +import org.cloudburstmc.protocol.bedrock.codec.v557.Bedrock_v557; +import org.cloudburstmc.protocol.bedrock.codec.v560.Bedrock_v560; import java.util.ArrayList; import java.util.List; @@ -28,52 +16,36 @@ public class BedrockProtocol { /** * Latest available version */ - public static final BedrockPacketCodec DEFAULT_BEDROCK_CODEC = Bedrock_v554.V554_CODEC.toBuilder() - .minecraftVersion("1.19.30") - .protocolVersion(553) - .build(); + public static final BedrockCodec DEFAULT_BEDROCK_CODEC = Bedrock_v560.CODEC; /** * A list of all supported Bedrock versions that can join BedrockConnect */ - public static final List<BedrockPacketCodec> SUPPORTED_BEDROCK_CODECS = new ArrayList<>(); + public static final List<BedrockCodec> SUPPORTED_BEDROCK_CODECS = new ArrayList<>(); static { - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v419.V419_CODEC.toBuilder() - .minecraftVersion("1.16.100/1.16.101") + SUPPORTED_BEDROCK_CODECS.add(Bedrock_v544.CODEC); + SUPPORTED_BEDROCK_CODECS.add(Bedrock_v545.CODEC.toBuilder() + .minecraftVersion("1.19.21/1.19.22") .build()); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v422.V422_CODEC.toBuilder() - .minecraftVersion("1.16.200/1.16.201") + SUPPORTED_BEDROCK_CODECS.add(Bedrock_v554.CODEC.toBuilder() + .minecraftVersion("1.19.30/1.19.31") + .build()); + SUPPORTED_BEDROCK_CODECS.add(Bedrock_v557.CODEC.toBuilder() + .minecraftVersion("1.19.40/1.19.41") + .build()); + SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder() + .minecraftVersion("1.19.50/1.19.51") .build()); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v428.V428_CODEC); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v431.V431_CODEC); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v440.V440_CODEC); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v448.V448_CODEC); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v465.V465_CODEC); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v471.V471_CODEC); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v475.V475_CODEC); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v486.V486_CODEC); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v503.V503_CODEC); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v527.V527_CODEC); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v534.V534_CODEC); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v544.V544_CODEC); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v544.V544_CODEC.toBuilder() - .minecraftVersion("1.19.21") - .protocolVersion(545) - .build()); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v554.V554_CODEC); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v557.V557_CODEC); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v560.V560_CODEC); - } /** - * Gets the {@link BedrockPacketCodec} of the given protocol version. + * Gets the {@link BedrockCodec} 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) { + public static BedrockCodec getBedrockCodec(int protocolVersion) { + for (BedrockCodec packetCodec : SUPPORTED_BEDROCK_CODECS) { if (packetCodec.getProtocolVersion() == protocolVersion) { return packetCodec; } 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 1efc1fb..fdc5a63 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 @@ -4,14 +4,14 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.nukkitx.nbt.NBTInputStream; -import com.nukkitx.nbt.NbtList; -import com.nukkitx.nbt.NbtMap; -import com.nukkitx.nbt.NbtUtils; -import com.nukkitx.protocol.bedrock.data.inventory.ItemData; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import main.com.pyratron.pugmatt.bedrockconnect.BedrockConnect; +import org.cloudburstmc.nbt.NBTInputStream; +import org.cloudburstmc.nbt.NbtList; +import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.nbt.NbtUtils; +import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import java.io.*; import java.nio.ByteOrder; @@ -85,7 +85,7 @@ public class PaletteManager { try { NbtMap tag = (NbtMap) NbtUtils.createReaderLE(bais).readTag(); creativeItems.add(ItemData.builder() - .id(itemNode.get("id").asInt()) + .netId(itemNode.get("id").asInt()) .damage(damage) .count(1) .tag(tag).build()); @@ -94,7 +94,7 @@ public class PaletteManager { } } else { creativeItems.add(ItemData.builder() - .id(itemNode.get("id").asInt()) + .netId(itemNode.get("id").asInt()) .damage(damage) .count(1).build()); } |
