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.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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Reference in a new issue