summaryrefslogtreecommitdiff
path: root/serverlist-server
diff options
context:
space:
mode:
authorPugmatt <pugmatt@gmail.com>2020-01-18 02:55:03 -0500
committerPugmatt <pugmatt@gmail.com>2020-01-18 02:55:03 -0500
commitd6b9536ff6275b5a42cdc74f4db4c7b95800eff3 (patch)
treeab633527128025e984b12907d12a2e813d9e1c01 /serverlist-server
parent83df1eee09ce67d5db32ffb3a1ddd1ce58c367da (diff)
downloadBedrockConnect-d6b9536ff6275b5a42cdc74f4db4c7b95800eff3.tar.gz
BedrockConnect-d6b9536ff6275b5a42cdc74f4db4c7b95800eff3.tar.bz2
BedrockConnect-d6b9536ff6275b5a42cdc74f4db4c7b95800eff3.zip
1.14
Diffstat (limited to 'serverlist-server')
-rw-r--r--serverlist-server/BedrockConnect.iml48
-rw-r--r--serverlist-server/pom.xml75
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/PipePlayer.java80
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/Server.java16
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/ClientPacketHandler.java6
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java448
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/PaletteManager.java48
-rw-r--r--serverlist-server/src/runtime_block_states.datbin0 -> 208936 bytes
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
new file mode 100644
index 0000000..32c9939
--- /dev/null
+++ b/serverlist-server/src/runtime_block_states.dat
Binary files differ