From 0f36dce4d515ac202da674ff9c3881ee6bb49e5d Mon Sep 17 00:00:00 2001 From: rtm516 Date: Sun, 6 Jun 2021 13:25:21 +0100 Subject: [PATCH] Fix inventory data when loading into the server --- .../geysermc/connect/utils/PaletteManger.java | 44 ------------------- .../org/geysermc/connect/utils/Player.java | 23 ++++++---- 2 files changed, 15 insertions(+), 52 deletions(-) diff --git a/src/main/java/org/geysermc/connect/utils/PaletteManger.java b/src/main/java/org/geysermc/connect/utils/PaletteManger.java index 528fbc6..e7b124a 100644 --- a/src/main/java/org/geysermc/connect/utils/PaletteManger.java +++ b/src/main/java/org/geysermc/connect/utils/PaletteManger.java @@ -29,60 +29,16 @@ import com.nukkitx.nbt.*; import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; /** * This class is mostly copied from core Geyser */ public class PaletteManger { - public static final NbtList BLOCK_PALETTE; - public static final NbtMap BIOMES_PALETTE; public static final byte[] EMPTY_LEVEL_CHUNK_DATA; - private static final NbtMap EMPTY_TAG = NbtMap.EMPTY; static { - /* Load block palette */ - // Build the air block entry - NbtMapBuilder mainBuilder = NbtMap.builder(); - mainBuilder.putShort("id", (short) 0); - - NbtMapBuilder blockBuilder = NbtMap.builder(); - blockBuilder.putString("name", "minecraft:air"); - blockBuilder.putInt("version", 17825806); - blockBuilder.put("states", NbtMap.EMPTY); - - mainBuilder.put("block", blockBuilder.build()); - - // Build the block list with the entry - List blocks = new ArrayList<>(); - blocks.add(mainBuilder.build()); - - BLOCK_PALETTE = new NbtList<>(NbtType.COMPOUND, blocks); - - /* Load biomes */ - // Build a fake plains biome entry - NbtMapBuilder plainsBuilder = NbtMap.builder(); - plainsBuilder.putFloat("blue_spores", 0f); - plainsBuilder.putFloat("white_ash", 0f); - plainsBuilder.putFloat("ash", 0f); - plainsBuilder.putFloat("temperature", 0f); - plainsBuilder.putFloat("red_spores", 0f); - plainsBuilder.putFloat("downfall", 0f); - - plainsBuilder.put("minecraft:overworld_generation_rules", NbtMap.EMPTY); - plainsBuilder.put("minecraft:climate", NbtMap.EMPTY); - plainsBuilder.put("tags", NbtList.EMPTY); - - // Add the fake plains to the map - NbtMapBuilder biomesBuilder = NbtMap.builder(); - biomesBuilder.put("plains", plainsBuilder.build()); - - // Build the biomes palette - BIOMES_PALETTE = biomesBuilder.build(); - /* Create empty chunk data */ try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { outputStream.write(new byte[258]); // Biomes + Border Size + Extra Data Size diff --git a/src/main/java/org/geysermc/connect/utils/Player.java b/src/main/java/org/geysermc/connect/utils/Player.java index d5e105a..92a10eb 100644 --- a/src/main/java/org/geysermc/connect/utils/Player.java +++ b/src/main/java/org/geysermc/connect/utils/Player.java @@ -31,7 +31,6 @@ import com.nukkitx.math.vector.Vector3f; import com.nukkitx.math.vector.Vector3i; import com.nukkitx.protocol.bedrock.BedrockServerSession; import com.nukkitx.protocol.bedrock.data.*; -import com.nukkitx.protocol.bedrock.data.inventory.ItemData; import com.nukkitx.protocol.bedrock.packet.*; import com.nukkitx.protocol.bedrock.v428.Bedrock_v428; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; @@ -48,8 +47,12 @@ import org.geysermc.connector.common.AuthType; import org.geysermc.connector.network.UpstreamPacketHandler; import org.geysermc.connector.network.session.auth.AuthData; import org.geysermc.connector.network.session.auth.BedrockClientData; +import org.geysermc.connector.network.translators.BiomeTranslator; +import org.geysermc.connector.network.translators.EntityIdentifierRegistry; +import org.geysermc.connector.network.translators.item.ItemRegistry; import org.geysermc.connector.network.translators.world.block.BlockTranslator1_16_100; import org.geysermc.connector.network.translators.world.block.BlockTranslator1_16_210; +import org.geysermc.connector.utils.ChunkUtils; import org.geysermc.connector.utils.DimensionUtils; import java.util.ArrayList; @@ -137,7 +140,7 @@ public class Player { startGamePacket.setWorldTemplateOptionLocked(false); startGamePacket.setLevelId(""); - startGamePacket.setLevelName("GeyserMulti"); + startGamePacket.setLevelName("GeyserConnect"); startGamePacket.setPremiumWorldTemplateId(""); startGamePacket.setCurrentTick(0); startGamePacket.setEnchantmentSeed(0); @@ -152,11 +155,6 @@ public class Player { startGamePacket.setVanillaVersion("*"); session.sendPacket(startGamePacket); - // Send a CreativeContentPacket - required for 1.16.100 - CreativeContentPacket creativeContentPacket = new CreativeContentPacket(); - creativeContentPacket.setContents(new ItemData[0]); - session.sendPacket(creativeContentPacket); - // Send an empty chunk LevelChunkPacket data = new LevelChunkPacket(); data.setChunkX(0); @@ -168,9 +166,18 @@ public class Player { // Send the biomes BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket(); - biomeDefinitionListPacket.setDefinitions(PaletteManger.BIOMES_PALETTE); + biomeDefinitionListPacket.setDefinitions(BiomeTranslator.BIOMES); session.sendPacket(biomeDefinitionListPacket); + AvailableEntityIdentifiersPacket entityPacket = new AvailableEntityIdentifiersPacket(); + entityPacket.setIdentifiers(EntityIdentifierRegistry.ENTITY_IDENTIFIERS); + session.sendPacket(entityPacket); + + // Send a CreativeContentPacket - required for 1.16.100 + CreativeContentPacket creativeContentPacket = new CreativeContentPacket(); + creativeContentPacket.setContents(ItemRegistry.CREATIVE_ITEMS); + session.sendPacket(creativeContentPacket); + // Let the client know the player can spawn PlayStatusPacket playStatusPacket = new PlayStatusPacket(); playStatusPacket.setStatus(PlayStatusPacket.Status.PLAYER_SPAWN);