summaryrefslogtreecommitdiff
path: root/serverlist-server/src/main/com
diff options
context:
space:
mode:
Diffstat (limited to 'serverlist-server/src/main/com')
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BCPlayer.java26
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java2
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/BedrockProtocol.java8
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/PaletteManager.java72
4 files changed, 90 insertions, 18 deletions
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 1aa2b11..007c833 100644
--- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BCPlayer.java
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BCPlayer.java
@@ -16,6 +16,17 @@ 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 org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemData;
+import org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemGroup;
+import org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemCategory;
+import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
+import org.cloudburstmc.protocol.common.DefinitionRegistry;
+import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition;
+
+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 java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -286,9 +297,20 @@ public class BCPlayer {
session.sendPacket(startGamePacket);
- // Required to be sent for 1.16.100
+ // Previously was able to send empty ItemData array to fulfill this; Game client crashes now
+ // though if contents/groups are empty. Also tried setting it to lists that have single phony entries...
+ // Example:
+ // creativeItemData.add(new CreativeItemData(ItemData.AIR, 0, 0);
+ // creativeItemGroupData.add(new CreativeItemGroup(CreativeItemCategory.ALL, "", ItemData.AIR));
+ //
+ // ... but no dice (Either crashes client or client shows a 'Server returned broken packet' error)
+ // , unless I'm missing something
+ //
+ // Unless I'm missing something, I'm assuming this version requires the actual parsed creative_items.json
+ // to be passed-in, will need to figure out parsing the file with the new format.
CreativeContentPacket creativeContentPacket = new CreativeContentPacket();
- creativeContentPacket.setContents(new ItemData[0]);
+ creativeContentPacket.getContents().addAll(BedrockConnect.paletteManager.CREATIVE_ITEM_DATA);
+ creativeContentPacket.getGroups().addAll(BedrockConnect.paletteManager.CREATIVE_ITEM_GROUPS);
session.sendPacket(creativeContentPacket);
spawn();
diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java
index 1304833..3e58f49 100644
--- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java
@@ -46,7 +46,7 @@ public class BedrockConnect {
public static int globalPacketLimit = RakConstants.DEFAULT_GLOBAL_PACKET_LIMIT;
- public static String release = "1.52";
+ public static String release = "1.53";
public static HashMap<String, String> featuredServerIps;
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 97edf53..a3f4820 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
@@ -24,6 +24,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712;
import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729;
import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748;
import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766;
+import org.cloudburstmc.protocol.bedrock.codec.v776.Bedrock_v776;
import java.util.ArrayList;
import java.util.List;
@@ -35,8 +36,8 @@ public class BedrockProtocol {
/**
* Latest available version
*/
- public static final BedrockCodec DEFAULT_BEDROCK_CODEC = Bedrock_v766.CODEC.toBuilder()
- .minecraftVersion("1.21.50")
+ public static final BedrockCodec DEFAULT_BEDROCK_CODEC = Bedrock_v776.CODEC.toBuilder()
+ .minecraftVersion("1.21.60")
.build();
@@ -98,6 +99,9 @@ public class BedrockProtocol {
SUPPORTED_BEDROCK_CODECS.add(Bedrock_v748.CODEC.toBuilder()
.minecraftVersion("1.21.40 - 1.21.44")
.build());
+ SUPPORTED_BEDROCK_CODECS.add(Bedrock_v766.CODEC.toBuilder()
+ .minecraftVersion("1.21.50 - 1.21.51")
+ .build());
SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC);
}
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 fdc5a63..fa4c803 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
@@ -12,6 +12,9 @@ import org.cloudburstmc.nbt.NbtList;
import org.cloudburstmc.nbt.NbtMap;
import org.cloudburstmc.nbt.NbtUtils;
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
+import org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemData;
+import org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemGroup;
+import org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemCategory;
import java.io.*;
import java.nio.ByteOrder;
@@ -62,6 +65,9 @@ public class PaletteManager {
public static final List<ItemData> CREATIVE_ITEMS;
+ public static final List<CreativeItemData> CREATIVE_ITEM_DATA;
+ public static final List<CreativeItemGroup> CREATIVE_ITEM_GROUPS;
+
static {
/* Load creative items */
InputStream stream = BedrockConnect.class.getClassLoader().getResourceAsStream("tables/creative_items.json");
@@ -74,32 +80,72 @@ public class PaletteManager {
}
List<ItemData> creativeItems = new ArrayList<>();
+ List<CreativeItemData> creativeItemData = new ArrayList<>();
for (JsonNode itemNode : creativeItemEntries) {
- short damage = 0;
+ int damage = 0;
+ int count = 1;
+ int groupId = 0;
+ NbtMap tag = null;
+
if (itemNode.has("damage")) {
- damage = itemNode.get("damage").numberValue().shortValue();
+ damage = itemNode.get("damage").asInt();
+ }
+ if (itemNode.has("count")) {
+ damage = itemNode.get("count").asInt();
+ }
+ if (itemNode.has("groupId")) {
+ groupId = itemNode.get("groupId").asInt();
}
if (itemNode.has("nbt_b64")) {
byte[] bytes = Base64.getDecoder().decode(itemNode.get("nbt_b64").asText());
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
try {
- NbtMap tag = (NbtMap) NbtUtils.createReaderLE(bais).readTag();
- creativeItems.add(ItemData.builder()
- .netId(itemNode.get("id").asInt())
- .damage(damage)
- .count(1)
- .tag(tag).build());
+ tag = (NbtMap) NbtUtils.createReaderLE(bais).readTag();
} catch (IOException e) {
e.printStackTrace();
}
- } else {
- creativeItems.add(ItemData.builder()
- .netId(itemNode.get("id").asInt())
- .damage(damage)
- .count(1).build());
}
+
+ ItemData item = ItemData.builder()
+ .netId(itemNode.get("id").asInt())
+ .damage(damage)
+ .count(count)
+ .tag(tag).build();
+ // Change to something like this?
+ // ItemData.builder()
+ // .definition(definition)
+ // .damage(damage)
+ // .count(count)
+ // .tag(tag)
+ // .blockDefinition(blockDefinition);
+ creativeItems.add(item);
+ creativeItemData.add(new CreativeItemData(item, item.getNetId(), groupId));
}
+
CREATIVE_ITEMS = creativeItems;
+ CREATIVE_ITEM_DATA = creativeItemData;
+
+ InputStream groupStream = BedrockConnect.class.getClassLoader().getResourceAsStream("tables/creative_items.json");
+
+ JsonNode creativeItemGroupEntries;
+ try {
+ creativeItemGroupEntries = JSON_MAPPER.readTree(groupStream).get("groups");
+ } catch (Exception e) {
+ throw new AssertionError("Unable to load creative item groups", e);
+ }
+
+ List<CreativeItemGroup> creativeItemGroups = new ArrayList<>();
+ for (JsonNode creativeItemEntry : creativeItemGroupEntries) {
+ CreativeItemCategory category = CreativeItemCategory.valueOf(creativeItemEntry.get("category").asText().toUpperCase(Locale.ROOT));
+ String name = creativeItemEntry.get("name").asText();
+
+ JsonNode icon = creativeItemEntry.get("icon");
+ String identifier = icon.get("id").asText();
+
+ creativeItemGroups.add(new CreativeItemGroup(category, name, ItemData.AIR));
+ }
+
+ CREATIVE_ITEM_GROUPS = creativeItemGroups;
}