mirror of
https://github.com/GeyserMC/GeyserConnect.git
synced 2025-06-26 22:16:37 +02:00
Fix inventory data when loading into the server
This commit is contained in:
parent
82984dd096
commit
0f36dce4d5
2 changed files with 15 additions and 52 deletions
|
@ -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<NbtMap> 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<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 */
|
||||
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
|
||||
outputStream.write(new byte[258]); // Biomes + Border Size + Extra Data Size
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue