Fix inventory data when loading into the server

This commit is contained in:
rtm516 2021-06-06 13:25:21 +01:00
parent 82984dd096
commit 0f36dce4d5
No known key found for this signature in database
GPG key ID: 331715B8B007C67A
2 changed files with 15 additions and 52 deletions

View file

@ -29,60 +29,16 @@ import com.nukkitx.nbt.*;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/** /**
* This class is mostly copied from core Geyser * This class is mostly copied from core Geyser
*/ */
public class PaletteManger { public class PaletteManger {
public static final NbtList<NbtMap> BLOCK_PALETTE;
public static final NbtMap BIOMES_PALETTE;
public static final byte[] EMPTY_LEVEL_CHUNK_DATA; public static final byte[] EMPTY_LEVEL_CHUNK_DATA;
private static final NbtMap EMPTY_TAG = NbtMap.EMPTY; private static final NbtMap EMPTY_TAG = NbtMap.EMPTY;
static { 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<NbtMap> 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 */ /* Create empty chunk data */
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
outputStream.write(new byte[258]); // Biomes + Border Size + Extra Data Size outputStream.write(new byte[258]); // Biomes + Border Size + Extra Data Size

View file

@ -31,7 +31,6 @@ import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.math.vector.Vector3i; import com.nukkitx.math.vector.Vector3i;
import com.nukkitx.protocol.bedrock.BedrockServerSession; import com.nukkitx.protocol.bedrock.BedrockServerSession;
import com.nukkitx.protocol.bedrock.data.*; 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.packet.*;
import com.nukkitx.protocol.bedrock.v428.Bedrock_v428; import com.nukkitx.protocol.bedrock.v428.Bedrock_v428;
import it.unimi.dsi.fastutil.longs.Long2ObjectMap; 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.UpstreamPacketHandler;
import org.geysermc.connector.network.session.auth.AuthData; import org.geysermc.connector.network.session.auth.AuthData;
import org.geysermc.connector.network.session.auth.BedrockClientData; 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_100;
import org.geysermc.connector.network.translators.world.block.BlockTranslator1_16_210; import org.geysermc.connector.network.translators.world.block.BlockTranslator1_16_210;
import org.geysermc.connector.utils.ChunkUtils;
import org.geysermc.connector.utils.DimensionUtils; import org.geysermc.connector.utils.DimensionUtils;
import java.util.ArrayList; import java.util.ArrayList;
@ -137,7 +140,7 @@ public class Player {
startGamePacket.setWorldTemplateOptionLocked(false); startGamePacket.setWorldTemplateOptionLocked(false);
startGamePacket.setLevelId(""); startGamePacket.setLevelId("");
startGamePacket.setLevelName("GeyserMulti"); startGamePacket.setLevelName("GeyserConnect");
startGamePacket.setPremiumWorldTemplateId(""); startGamePacket.setPremiumWorldTemplateId("");
startGamePacket.setCurrentTick(0); startGamePacket.setCurrentTick(0);
startGamePacket.setEnchantmentSeed(0); startGamePacket.setEnchantmentSeed(0);
@ -152,11 +155,6 @@ public class Player {
startGamePacket.setVanillaVersion("*"); startGamePacket.setVanillaVersion("*");
session.sendPacket(startGamePacket); 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 // Send an empty chunk
LevelChunkPacket data = new LevelChunkPacket(); LevelChunkPacket data = new LevelChunkPacket();
data.setChunkX(0); data.setChunkX(0);
@ -168,9 +166,18 @@ public class Player {
// Send the biomes // Send the biomes
BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket(); BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket();
biomeDefinitionListPacket.setDefinitions(PaletteManger.BIOMES_PALETTE); biomeDefinitionListPacket.setDefinitions(BiomeTranslator.BIOMES);
session.sendPacket(biomeDefinitionListPacket); 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 // Let the client know the player can spawn
PlayStatusPacket playStatusPacket = new PlayStatusPacket(); PlayStatusPacket playStatusPacket = new PlayStatusPacket();
playStatusPacket.setStatus(PlayStatusPacket.Status.PLAYER_SPAWN); playStatusPacket.setStatus(PlayStatusPacket.Status.PLAYER_SPAWN);