diff options
| author | Pugmatt <pugmatt@gmail.com> | 2020-01-18 02:55:03 -0500 |
|---|---|---|
| committer | Pugmatt <pugmatt@gmail.com> | 2020-01-18 02:55:03 -0500 |
| commit | d6b9536ff6275b5a42cdc74f4db4c7b95800eff3 (patch) | |
| tree | ab633527128025e984b12907d12a2e813d9e1c01 /serverlist-server | |
| parent | 83df1eee09ce67d5db32ffb3a1ddd1ce58c367da (diff) | |
| download | BedrockConnect-d6b9536ff6275b5a42cdc74f4db4c7b95800eff3.tar.gz BedrockConnect-d6b9536ff6275b5a42cdc74f4db4c7b95800eff3.tar.bz2 BedrockConnect-d6b9536ff6275b5a42cdc74f4db4c7b95800eff3.zip | |
1.14
Diffstat (limited to 'serverlist-server')
8 files changed, 505 insertions, 216 deletions
diff --git a/serverlist-server/BedrockConnect.iml b/serverlist-server/BedrockConnect.iml index b4edf70..f09d7ff 100644 --- a/serverlist-server/BedrockConnect.iml +++ b/serverlist-server/BedrockConnect.iml @@ -9,35 +9,33 @@ </content> <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> - <orderEntry type="library" name="Maven: com.github.steveice10:packetlib:1.4-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: io.netty:netty-all:4.1.25.Final" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v361:2.1.2" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-common:2.1.2" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.protocol:common:2.1.2" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx.network:common:1.6.7" level="project" /> - <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.36.Final" level="project" /> - <orderEntry type="library" name="Maven: io.netty:netty-transport-native-epoll:linux-x86_64:4.1.36.Final" level="project" /> - <orderEntry type="library" name="Maven: io.netty:netty-transport-native-unix-common:4.1.36.Final" level="project" /> - <orderEntry type="library" name="Maven: io.netty:netty-transport-native-kqueue:osx-x86_64:4.1.36.Final" level="project" /> - <orderEntry type="library" name="Maven: cn.nukkit:nukkit-natives:1.0.1-SNAPSHOT" level="project" /> - <orderEntry type="library" name="Maven: com.nukkitx:nbt:1.3.2" level="project" /> - <orderEntry type="library" name="Maven: com.flowpowered:flow-math:1.0.3" 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: com.nukkitx.network:raknet:1.6.7" level="project" /> - <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.36.Final" level="project" /> - <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.36.Final" level="project" /> - <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.36.Final" level="project" /> - <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.36.Final" level="project" /> - <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.36.Final" level="project" /> - <orderEntry type="library" name="Maven: com.nimbusds:nimbus-jose-jwt:4.41.2" 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.github.steveice10:packetlib:1.4-SNAPSHOT" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-all:4.1.25.Final" level="project" /> + <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v389:2.4.4" level="project" /> + <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-v388:2.4.4" level="project" /> + <orderEntry type="library" name="Maven: com.nukkitx.protocol:bedrock-common:2.4.4" level="project" /> + <orderEntry type="library" name="Maven: com.nukkitx.network:raknet:1.6.16" level="project" /> + <orderEntry type="library" name="Maven: com.nukkitx.network:common:1.6.16" 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: 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: com.nukkitx:fastutil-lite:8.1.1" level="project" /> + <orderEntry type="library" name="Maven: com.nukkitx.protocol:common:0.0.0" 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: org.json:json:20180813" level="project" /> + <orderEntry type="library" name="Maven: com.nukkitx:math:1.0.0" level="project" /> + <orderEntry type="library" name="Maven: com.nukkitx:nbt:1.3.3" level="project" /> + <orderEntry type="library" name="Maven: com.nimbusds:nimbus-jose-jwt:4.39.2" level="project" /> + <orderEntry type="library" name="Maven: com.github.stephenc.jcip:jcip-annotations:1.0-1" 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" /> @@ -46,6 +44,8 @@ <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.8" 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:5.1.17" level="project" /> </component> </module>
\ No newline at end of file diff --git a/serverlist-server/pom.xml b/serverlist-server/pom.xml index 61cf223..d6babbd 100644 --- a/serverlist-server/pom.xml +++ b/serverlist-server/pom.xml @@ -62,14 +62,47 @@ </plugins> </build> - <repositories> + <!-- <repositories> <repository> <id>nukkitx-repo</id> <url>https://repo.nukkitx.com/snapshot/</url> </repository> + </repositories> --> + + <repositories> + <repository> + <id>nukkitx-repo-release</id> + <url>https://repo.nukkitx.com/maven-releases/</url> + </repository> + <repository> + <id>nukkitx-repo-snapshot</id> + <url>https://repo.nukkitx.com/maven-snapshots/</url> + </repository> + <repository> + <id>releases</id> + <name>nukkitx-releases</name> + <url>https://repo.nukkitx.com/release</url> + </repository> + <repository> + <id>snapshots</id> + <name>nukkitx-snapshots</name> + <url>https://repo.nukkitx.com/snapshot</url> + </repository> + <repository> + <id>repo</id> + <name>repo</name> + <url>file://${basedir}/`pwd`/repo</url> + </repository> </repositories> <dependencies> + <!-- https://mvnrepository.com/artifact/net.minidev/json-smart --> + <dependency> + <groupId>net.minidev</groupId> + <artifactId>json-smart</artifactId> + <version>2.3</version> + </dependency> + <dependency> <groupId>com.github.steveice10</groupId> <artifactId>packetlib</artifactId> @@ -77,8 +110,20 @@ </dependency> <dependency> <groupId>com.nukkitx.protocol</groupId> - <artifactId>bedrock-v361</artifactId> - <version>2.1.2</version> + <artifactId>bedrock-v389</artifactId> + <version>2.4.4</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>com.nukkitx</groupId> + <artifactId>fastutil-lite</artifactId> + <version>8.1.1</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>com.nukkitx.protocol</groupId> + <artifactId>common</artifactId> + <version>0.0.0</version> <scope>compile</scope> </dependency> <dependency> @@ -94,9 +139,21 @@ <scope>compile</scope> </dependency> <dependency> - <groupId>org.json</groupId> - <artifactId>json</artifactId> - <version>20180813</version> + <groupId>com.nukkitx</groupId> + <artifactId>math</artifactId> + <version>1.0.0</version> + </dependency> + <dependency> + <groupId>com.nukkitx</groupId> + <artifactId>nbt</artifactId> + <version>1.3.3</version> + </dependency> + <!-- https://mvnrepository.com/artifact/com.nimbusds/nimbus-jose-jwt --> + <dependency> + <groupId>com.nimbusds</groupId> + <artifactId>nimbus-jose-jwt</artifactId> + <version>4.39.2</version> + <scope>compile</scope> </dependency> <dependency> <groupId>com.googlecode.json-simple</groupId> @@ -116,6 +173,12 @@ <scope>compile</scope> </dependency> <dependency> + <groupId>net.sf.trove4j</groupId> + <artifactId>trove</artifactId> + <version>3.1.0-SNAPSHOT</version> + <scope>compile</scope> + </dependency> + <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.17</version> diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/PipePlayer.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/PipePlayer.java index f5c39fc..2a5e64b 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/PipePlayer.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/PipePlayer.java @@ -1,24 +1,32 @@ package main.com.pyratron.pugmatt.bedrockconnect; -import com.flowpowered.math.vector.Vector2f; -import com.flowpowered.math.vector.Vector3f; -import com.flowpowered.math.vector.Vector3i; +import com.nukkitx.math.vector.Vector2f; +import com.nukkitx.math.vector.Vector3i; import com.nukkitx.nbt.CompoundTagBuilder; import com.nukkitx.nbt.NbtUtils; +import com.nukkitx.nbt.stream.NBTInputStream; import com.nukkitx.nbt.stream.NBTOutputStream; import com.nukkitx.nbt.tag.CompoundTag; +import com.nukkitx.nbt.tag.ListTag; +import com.nukkitx.protocol.bedrock.Bedrock; +import com.nukkitx.protocol.bedrock.BedrockPacket; import com.nukkitx.protocol.bedrock.BedrockServerSession; import com.nukkitx.protocol.bedrock.data.Attribute; import com.nukkitx.protocol.bedrock.data.GamePublishSetting; import com.nukkitx.protocol.bedrock.data.GameRule; import com.nukkitx.protocol.bedrock.packet.*; +import com.nukkitx.math.vector.Vector3f; +import com.nukkitx.protocol.bedrock.v388.Bedrock_v388; import main.com.pyratron.pugmatt.bedrockconnect.gui.UIComponents; import main.com.pyratron.pugmatt.bedrockconnect.sql.Data; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class PipePlayer { @@ -88,35 +96,35 @@ public class PipePlayer { public void joinGame() { MovePlayerPacket mp = new MovePlayerPacket(); - mp.setRuntimeEntityId(-1); + mp.setRuntimeEntityId(1); mp.setOnGround(false); mp.setMode(MovePlayerPacket.Mode.NORMAL); - mp.setRotation(new Vector3f(0,0,0)); - mp.setPosition(new Vector3f(0,0,0)); - session.sendPacketImmediately(mp); + mp.setRotation(Vector3f.from(0,0,0)); + mp.setPosition(Vector3f.from(0,0,0)); + session.sendPacket(mp); StartGamePacket startGamePacket = new StartGamePacket(); - startGamePacket.setUniqueEntityId(0); - startGamePacket.setRuntimeEntityId(0); - startGamePacket.setPlayerGamemode(0); - startGamePacket.setPlayerPosition(new Vector3f(-249, 67, -275)); - startGamePacket.setRotation(new Vector2f(1, 1)); + startGamePacket.setUniqueEntityId(1); + startGamePacket.setRuntimeEntityId(1); + startGamePacket.setPlayerGamemode(1); + startGamePacket.setPlayerPosition(Vector3f.from(0, 0, 0)); + startGamePacket.setRotation(Vector2f.from(1, 1)); - startGamePacket.setSeed(1111); + startGamePacket.setSeed(-1); startGamePacket.setDimensionId(0); - startGamePacket.setGeneratorId(0); - startGamePacket.setLevelGamemode(0); - startGamePacket.setDifficulty(0); - startGamePacket.setDefaultSpawn(new Vector3i(-249, 67, -275)); - startGamePacket.setAcheivementsDisabled(true); - startGamePacket.setTime(0); - startGamePacket.setEduLevel(false); + startGamePacket.setGeneratorId(1); + startGamePacket.setLevelGamemode(1); + startGamePacket.setDifficulty(1); + startGamePacket.setDefaultSpawn(Vector3i.from(0, 0, 0)); + startGamePacket.setAchievementsDisabled(false); + startGamePacket.setTime(-1); + startGamePacket.setEduFeaturesEnabled(false); startGamePacket.setEduFeaturesEnabled(false); startGamePacket.setRainLevel(0); startGamePacket.setLightningLevel(0); startGamePacket.setPlatformLockedContentConfirmed(false); startGamePacket.setMultiplayerGame(true); - startGamePacket.setBroadcastingToLan(false); + startGamePacket.setBroadcastingToLan(true); startGamePacket.getGamerules().add((new GameRule<>("showcoordinates", true))); startGamePacket.setPlatformBroadcastMode(GamePublishSetting.PUBLIC); startGamePacket.setXblBroadcastMode(GamePublishSetting.PUBLIC); @@ -124,7 +132,7 @@ public class PipePlayer { startGamePacket.setTexturePacksRequired(false); startGamePacket.setBonusChestEnabled(false); startGamePacket.setStartingWithMap(false); - startGamePacket.setTrustingPlayers(true); + startGamePacket.setTrustingPlayers(false); startGamePacket.setDefaultPlayerPermission(1); startGamePacket.setServerChunkTickRange(4); startGamePacket.setBehaviorPackLocked(false); @@ -133,24 +141,28 @@ public class PipePlayer { startGamePacket.setUsingMsaGamertagsOnly(false); startGamePacket.setFromWorldTemplate(false); startGamePacket.setWorldTemplateOptionLocked(false); + startGamePacket.setOnlySpawningV1Villagers(false); + startGamePacket.setMovementServerAuthoritative(false); + startGamePacket.setTrial(false); + startGamePacket.setVanillaVersion(Server.codec.getMinecraftVersion()); - startGamePacket.setLevelId("oerjhii"); + startGamePacket.setLevelId(""); startGamePacket.setWorldName("world"); - startGamePacket.setPremiumWorldTemplateId("00000000-0000-0000-0000-000000000000"); + startGamePacket.setPremiumWorldTemplateId(""); startGamePacket.setCurrentTick(0); startGamePacket.setEnchantmentSeed(0); startGamePacket.setMultiplayerCorrelationId(""); - startGamePacket.setCachedPalette(BedrockConnect.paletteManager.getCachedPalette()); + startGamePacket.setBlockPalette(BedrockConnect.paletteManager.CACHED_PALLETE); - session.sendPacketImmediately(startGamePacket); + session.sendPacket(startGamePacket); spawn(); } public void spawn() { - Vector3f pos = new Vector3f(-249, 67, -275); + Vector3f pos = Vector3f.ZERO; int chunkX = pos.getFloorX() >> 4; int chunkZ = pos.getFloorX() >> 4; @@ -161,12 +173,22 @@ public class PipePlayer { data2.setChunkZ(chunkZ + z); data2.setSubChunksLength(0); data2.setData(EMPTY_LEVEL_CHUNK_DATA); - session.sendPacketImmediately(data2); + session.sendPacket(data2); } } + BiomeDefinitionListPacket biomePacket = new BiomeDefinitionListPacket(); + biomePacket.setTag(CompoundTag.EMPTY); + session.sendPacket(biomePacket); + AvailableEntityIdentifiersPacket entityPacket = new AvailableEntityIdentifiersPacket(); + entityPacket.setTag(CompoundTag.EMPTY); + session.sendPacket(entityPacket); + PlayStatusPacket playStatus = new PlayStatusPacket(); playStatus.setStatus(PlayStatusPacket.Status.PLAYER_SPAWN); - session.sendPacketImmediately(playStatus); + session.sendPacket(playStatus); + + + System.out.println("play status sent"); } } 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 cd63e1c..3a7c90a 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Server.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Server.java @@ -4,7 +4,7 @@ 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 com.nukkitx.protocol.bedrock.v361.Bedrock_v361; +import com.nukkitx.protocol.bedrock.v389.Bedrock_v389; import main.com.pyratron.pugmatt.bedrockconnect.listeners.PacketHandler; import main.com.pyratron.pugmatt.bedrockconnect.sql.Data; @@ -19,7 +19,12 @@ public class Server { public BedrockServer server; public BedrockPong pong; - private BedrockPacketCodec codec; + public static BedrockPacketCodec codec; + + public boolean recordingDone = false; + public List<BedrockPacket> packets = new ArrayList<>(); + + public int getProtocol() { return codec.getProtocolVersion(); @@ -66,7 +71,7 @@ public class Server { players = new ArrayList<>(); InetSocketAddress bindAddress = new InetSocketAddress("0.0.0.0", Integer.parseInt(port)); - codec = Bedrock_v361.V361_CODEC; + codec = Bedrock_v389.V389_CODEC; server = new BedrockServer(bindAddress); pong = new BedrockPong(); pong.setEdition("MCPE"); @@ -76,7 +81,8 @@ public class Server { pong.setMaximumPlayerCount(20); pong.setGameType("Survival"); pong.setIpv4Port(Integer.parseInt(port)); - pong.setProtocolVersion(Bedrock_v361.V361_CODEC.getProtocolVersion()); + pong.setProtocolVersion(codec.getProtocolVersion()); + pong.setVersion(codec.getMinecraftVersion()); server.setHandler(new BedrockServerEventHandler() { @Override public boolean onConnectionRequest(InetSocketAddress address) { @@ -84,7 +90,7 @@ public class Server { } @Nonnull public BedrockPong onQuery(InetSocketAddress address) { - return pong; + System.out.println("Ping"); return pong; } @Override public void onSessionCreation(BedrockServerSession session) { diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/ClientPacketHandler.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/ClientPacketHandler.java index 0987f46..a6b9eb0 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/ClientPacketHandler.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/ClientPacketHandler.java @@ -773,10 +773,10 @@ public class ClientPacketHandler implements BedrockPacketHandler { return false; } - public ClientPacketHandler(BedrockClientSession session) { - this.session = session; + public ClientPacketHandler() { + //this.session = session; - session.addDisconnectHandler((Reason) -> disconnect()); + //session.addDisconnectHandler((Reason) -> disconnect()); } public void disconnect() { 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 26faa58..3ff0209 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,10 +2,18 @@ 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.Vector2f; +import com.nukkitx.math.vector.Vector3f; +import com.nukkitx.math.vector.Vector3i; +import com.nukkitx.nbt.CompoundTagBuilder; +import com.nukkitx.nbt.NbtUtils; +import com.nukkitx.nbt.stream.NBTOutputStream; +import com.nukkitx.nbt.tag.CompoundTag; import com.nukkitx.network.util.Preconditions; import com.nukkitx.protocol.bedrock.BedrockClientSession; +import com.nukkitx.protocol.bedrock.data.GamePublishSetting; +import com.nukkitx.protocol.bedrock.data.GameRule; import com.nukkitx.protocol.bedrock.packet.*; - import com.nimbusds.jose.JOSEException; import com.nimbusds.jose.JWSObject; import com.nimbusds.jose.crypto.factories.DefaultJWSVerifierFactory; @@ -13,12 +21,14 @@ 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.nukkitx.protocol.bedrock.v388.Bedrock_v388; import main.com.pyratron.pugmatt.bedrockconnect.BedrockConnect; import main.com.pyratron.pugmatt.bedrockconnect.Server; import main.com.pyratron.pugmatt.bedrockconnect.gui.UIComponents; import main.com.pyratron.pugmatt.bedrockconnect.gui.UIForms; import net.minidev.json.JSONObject; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.security.interfaces.ECPublicKey; import java.util.ArrayList; @@ -36,731 +46,902 @@ public class PacketHandler implements BedrockPacketHandler { private JSONObject extraData; + private boolean print = false; + + private static final CompoundTag EMPTY_TAG = CompoundTagBuilder.builder().buildRootTag(); + private static final byte[] EMPTY_LEVEL_CHUNK_DATA; + + static { + try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + outputStream.write(new byte[258]); // Biomes + Border Size + Extra Data Size + + try (NBTOutputStream stream = NbtUtils.createNetworkWriter(outputStream)) { + stream.write(EMPTY_TAG); + } + + EMPTY_LEVEL_CHUNK_DATA = outputStream.toByteArray(); + }catch (IOException e) { + throw new AssertionError("Unable to generate empty level chunk data"); + } + } + @Override public boolean handle(AdventureSettingsPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(AnimatePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(BlockEntityDataPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(BlockPickRequestPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(BookEditPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ClientToServerHandshakePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(CommandBlockUpdatePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(CommandRequestPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ContainerClosePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(CraftingEventPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(EntityEventPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(EntityFallPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(EntityPickRequestPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(EventPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(InteractPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(InventoryContentPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(InventorySlotPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(InventoryTransactionPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ItemFrameDropItemPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(LabTablePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(LecternUpdatePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(LevelSoundEventPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(LevelSoundEvent3Packet packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(MapInfoRequestPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(MobArmorEquipmentPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(MobEquipmentPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(MoveEntityAbsolutePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(MovePlayerPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(NetworkStackLatencyPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(PhotoTransferPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(PlayerActionPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(PlayerHotbarPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(PlayerInputPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(PlayerSkinPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(PurchaseReceiptPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(RequestChunkRadiusPacket packet) { + if(print) + System.out.println(packet.toString()); + + ChunkRadiusUpdatedPacket chunkRadiusUpdatePacket = new ChunkRadiusUpdatedPacket(); + chunkRadiusUpdatePacket.setRadius(packet.getRadius()); + session.sendPacketImmediately(chunkRadiusUpdatePacket); + + PlayStatusPacket playStatus = new PlayStatusPacket(); + playStatus.setStatus(PlayStatusPacket.Status.PLAYER_SPAWN); + session.sendPacket(playStatus); + + /* Vector3f pos = Vector3f.ZERO; + int chunkX = pos.getFloorX() >> 4; + int chunkZ = pos.getFloorX() >> 4; + + for (int x = -3; x < 3; x++) { + for (int z = -3; z < 3; z++) { + LevelChunkPacket data2 = new LevelChunkPacket(); + data2.setChunkX(chunkX + x); + data2.setChunkZ(chunkZ + z); + data2.setSubChunksLength(0); + data2.setData(EMPTY_LEVEL_CHUNK_DATA); + session.sendPacket(data2); + } + } + + System.out.println("test"); + + PlayStatusPacket playStatus = new PlayStatusPacket(); + playStatus.setStatus(PlayStatusPacket.Status.PLAYER_SPAWN); + session.sendPacket(playStatus); + System.out.println("test2"); */ return false; } @Override public boolean handle(RiderJumpPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ServerSettingsRequestPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SetDefaultGameTypePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SetPlayerGameTypePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SubClientLoginPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(TextPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(AddBehaviorTreePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(AddEntityPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(AddHangingEntityPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(AddItemEntityPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(AddPaintingPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(AddPlayerPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(AvailableCommandsPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(BlockEventPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(BossEventPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(CameraPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ChangeDimensionPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ChunkRadiusUpdatedPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ClientboundMapItemDataPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(CommandOutputPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ContainerOpenPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ContainerSetDataPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(CraftingDataPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ExplodePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(GameRulesChangedPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(GuiDataPickItemPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(HurtArmorPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(AutomationClientConnectPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(LevelEventPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(MapCreateLockedCopyPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(MobEffectPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ModalFormRequestPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(MoveEntityDeltaPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(NpcRequestPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(OnScreenTextureAnimationPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(PlayerListPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(PlaySoundPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(PlayStatusPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(RemoveEntityPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(RemoveObjectivePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ResourcePackChunkDataPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ResourcePackDataInfoPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ResourcePacksInfoPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ResourcePackStackPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(RespawnPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ScriptCustomEventPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ServerSettingsResponsePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ServerToClientHandshakePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SetCommandsEnabledPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SetDifficultyPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SetDisplayObjectivePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SetEntityDataPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SetEntityLinkPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SetEntityMotionPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SetHealthPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SetLastHurtByPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SetScoreboardIdentityPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SetScorePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SetSpawnPositionPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SetTimePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SetTitlePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ShowCreditsPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ShowProfilePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ShowStoreOfferPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SimpleEventPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SpawnExperienceOrbPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(StartGamePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(StopSoundPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(StructureBlockUpdatePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(TakeItemEntityPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(TransferPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(UpdateAttributesPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(UpdateBlockPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(UpdateBlockSyncedPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(UpdateEquipPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(UpdateSoftEnumPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(UpdateTradePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(AvailableEntityIdentifiersPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(BiomeDefinitionListPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(LevelSoundEvent2Packet packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(NetworkChunkPublisherUpdatePacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(SpawnParticleEffectPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(VideoStreamConnectPacket packet) { - + if(print) + System.out.println(packet.toString()); return false; } @Override public boolean handle(ResourcePackChunkRequestPacket packet) { - + if(print) + System.out.println(packet.toString()); return true; } @Override public boolean handle(ModalFormResponsePacket packet) { - + if(print) + System.out.println(packet.toString()); switch (packet.getFormId()) { case UIForms.MAIN: if(UIForms.currentForm == UIForms.MAIN) { @@ -895,6 +1076,8 @@ public class PacketHandler implements BedrockPacketHandler { @Override public boolean handle(SetLocalPlayerAsInitializedPacket packet) { + if(print) + System.out.println(packet.toString()); session.sendPacketImmediately(UIForms.createMain(server.getPlayer(uuid).getServerList())); return false; } @@ -903,7 +1086,7 @@ public class PacketHandler implements BedrockPacketHandler { this.session = session; this.server = server; - session.addDisconnectHandler((Reason) -> disconnect()); + session.addDisconnectHandler((DisconnectReason) -> disconnect()); } public void disconnect() { @@ -945,15 +1128,18 @@ public class PacketHandler implements BedrockPacketHandler { @Override public boolean handle(ResourcePackClientResponsePacket packet) { + if(print) + System.out.println(packet.toString()); switch (packet.getStatus()) { case COMPLETED: BedrockConnect.data.userExists(uuid, name, session); break; case HAVE_ALL_PACKS: ResourcePackStackPacket rs = new ResourcePackStackPacket(); - rs.setExperimental(false); + //rs.setExperimental(false); rs.setForcedToAccept(false); - session.sendPacketImmediately(rs); + rs.setGameVersion(Server.codec.getMinecraftVersion()); + session.sendPacket(rs); break; default: session.disconnect("disconnectionScreen.resourcePack"); @@ -965,6 +1151,8 @@ public class PacketHandler implements BedrockPacketHandler { @Override public boolean handle(LoginPacket packet) { + if(print) + System.out.println(packet.toString()); int protocolVersion = packet.getProtocolVersion(); if (protocolVersion != server.getProtocol()) { @@ -1016,14 +1204,20 @@ public class PacketHandler implements BedrockPacketHandler { name = extraData.getAsString("displayName"); uuid = extraData.getAsString("identity"); + PlayStatusPacket status = new PlayStatusPacket(); status.setStatus(PlayStatusPacket.Status.LOGIN_SUCCESS); - session.sendPacketImmediately(status); + session.sendPacket(status); + + SetEntityMotionPacket motion = new SetEntityMotionPacket(); + motion.setRuntimeEntityId(1); + motion.setMotion(Vector3f.ZERO); + session.sendPacket(motion); ResourcePacksInfoPacket resourcePacksInfo = new ResourcePacksInfoPacket(); resourcePacksInfo.setForcedToAccept(false); - session.sendPacketImmediately(resourcePacksInfo); - + resourcePacksInfo.setScriptingEnabled(false); + session.sendPacket(resourcePacksInfo); } catch (Exception e) { session.disconnect("disconnectionScreen.internalError.cantConnect"); throw new RuntimeException("Unable to complete login", e); diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/PaletteManager.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/PaletteManager.java index 055c511..f1c1869 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 @@ -3,14 +3,24 @@ package main.com.pyratron.pugmatt.bedrockconnect.utils; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.type.CollectionType; +import com.nukkitx.nbt.CompoundTagBuilder; +import com.nukkitx.nbt.NbtUtils; +import com.nukkitx.nbt.stream.NBTInputStream; +import com.nukkitx.nbt.stream.NBTOutputStream; +import com.nukkitx.nbt.tag.CompoundTag; +import com.nukkitx.nbt.tag.ListTag; import com.nukkitx.network.VarInts; -import com.nukkitx.protocol.bedrock.v361.BedrockUtils; +import com.nukkitx.protocol.bedrock.v388.BedrockUtils; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import main.com.pyratron.pugmatt.bedrockconnect.BedrockConnect; -import java.io.InputStream; +import java.io.*; +import java.nio.ByteOrder; import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; // https://github.com/DragonetMC/DragonProxy/blob/rewrite/proxy/src/main/java/org/dragonet/proxy/util/PaletteManager.java // Author: lukeeey @@ -19,35 +29,29 @@ public class PaletteManager { private ArrayList<RuntimeEntry> entries; - public ByteBuf getCachedPalette() { - ByteBuf cachedPalette = Unpooled.buffer(); + private ByteBuf cachedPalette; - VarInts.writeUnsignedInt(cachedPalette, entries.size()); - - for (RuntimeEntry entry : entries) { - BedrockUtils.writeString(cachedPalette, entry.name); - cachedPalette.writeShortLE(entry.data); - cachedPalette.writeShortLE(entry.id); - } - - return cachedPalette; - } + public ListTag<CompoundTag> CACHED_PALLETE; public PaletteManager() { - InputStream stream = BedrockConnect.class.getClassLoader().getResourceAsStream("tables/runtimeid_table.json"); + InputStream stream = BedrockConnect.class.getClassLoader().getResourceAsStream("tables/runtime_block_states.dat"); if (stream == null) { - throw new AssertionError("Static Runtime ID table not found"); + throw new AssertionError("Unable to locate block state nbt"); } - ObjectMapper mapper = new ObjectMapper(); - CollectionType type = mapper.getTypeFactory().constructCollectionType(ArrayList.class, RuntimeEntry.class); + Map<String, Integer> blockIdToIdentifier = new HashMap<>(); + ListTag<CompoundTag> tag; - entries = new ArrayList<>(); + NBTInputStream nbtInputStream = NbtUtils.createReader(stream); try { - entries = mapper.readValue(stream, type); - } catch (Exception e) { - e.printStackTrace(); + tag = (ListTag<CompoundTag>) nbtInputStream.readTag(); + nbtInputStream.close(); + } catch (Exception ex) { + System.out.println("Failed to receive blocks palette"); + throw new AssertionError(ex); } + + CACHED_PALLETE = tag; } private static class RuntimeEntry { diff --git a/serverlist-server/src/runtime_block_states.dat b/serverlist-server/src/runtime_block_states.dat Binary files differnew file mode 100644 index 0000000..32c9939 --- /dev/null +++ b/serverlist-server/src/runtime_block_states.dat |
