Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-11-03 14:50:19 +01:00
Load biome definitions only once instead of everytime a new player joins
Dieser Commit ist enthalten in:
Ursprung
4dff067faa
Commit
0bb18d26b0
@ -134,24 +134,9 @@ public class GeyserSession implements Player {
|
|||||||
|
|
||||||
ChunkUtils.sendEmptyChunks(this, playerEntity.getPosition().toInt(), 0, false);
|
ChunkUtils.sendEmptyChunks(this, playerEntity.getPosition().toInt(), 0, false);
|
||||||
|
|
||||||
BiomeDefinitionListPacket biomePacket = new BiomeDefinitionListPacket();
|
BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket();
|
||||||
InputStream stream = GeyserConnector.class.getClassLoader().getResourceAsStream("bedrock/biome_definitions.dat");
|
biomeDefinitionListPacket.setTag(Toolbox.BIOMES);
|
||||||
if (stream == null) {
|
upstream.sendPacket(biomeDefinitionListPacket);
|
||||||
throw new AssertionError("Unable to find bedrock/biome_definitions.dat");
|
|
||||||
}
|
|
||||||
|
|
||||||
CompoundTag biomesTag;
|
|
||||||
|
|
||||||
NBTInputStream nbtInputStream = NbtUtils.createNetworkReader(stream);
|
|
||||||
try {
|
|
||||||
biomesTag = (CompoundTag) nbtInputStream.readTag();
|
|
||||||
biomePacket.setTag(biomesTag);
|
|
||||||
nbtInputStream.close();
|
|
||||||
} catch (Exception ex) {
|
|
||||||
GeyserLogger.DEFAULT.warning("Failed to get biomes from biome definitions, is there something wrong with the file?");
|
|
||||||
throw new AssertionError(ex);
|
|
||||||
}
|
|
||||||
upstream.sendPacket(biomePacket);
|
|
||||||
|
|
||||||
AvailableEntityIdentifiersPacket entityPacket = new AvailableEntityIdentifiersPacket();
|
AvailableEntityIdentifiersPacket entityPacket = new AvailableEntityIdentifiersPacket();
|
||||||
entityPacket.setTag(CompoundTag.EMPTY);
|
entityPacket.setTag(CompoundTag.EMPTY);
|
||||||
|
@ -31,6 +31,7 @@ import com.nukkitx.nbt.stream.NBTInputStream;
|
|||||||
import com.nukkitx.nbt.tag.CompoundTag;
|
import com.nukkitx.nbt.tag.CompoundTag;
|
||||||
import com.nukkitx.nbt.tag.ListTag;
|
import com.nukkitx.nbt.tag.ListTag;
|
||||||
import com.nukkitx.nbt.tag.Tag;
|
import com.nukkitx.nbt.tag.Tag;
|
||||||
|
import com.nukkitx.protocol.bedrock.packet.BiomeDefinitionListPacket;
|
||||||
import com.nukkitx.protocol.bedrock.packet.StartGamePacket;
|
import com.nukkitx.protocol.bedrock.packet.StartGamePacket;
|
||||||
|
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||||
@ -47,11 +48,27 @@ public class Toolbox {
|
|||||||
|
|
||||||
public static final Collection<StartGamePacket.ItemEntry> ITEMS = new ArrayList<>();
|
public static final Collection<StartGamePacket.ItemEntry> ITEMS = new ArrayList<>();
|
||||||
public static ListTag<CompoundTag> BLOCKS;
|
public static ListTag<CompoundTag> BLOCKS;
|
||||||
|
public static CompoundTag BIOMES;
|
||||||
|
|
||||||
public static final Int2ObjectMap<ItemEntry> ITEM_ENTRIES = new Int2ObjectOpenHashMap<>();
|
public static final Int2ObjectMap<ItemEntry> ITEM_ENTRIES = new Int2ObjectOpenHashMap<>();
|
||||||
public static final Int2ObjectMap<BlockEntry> BLOCK_ENTRIES = new Int2ObjectOpenHashMap<>();
|
public static final Int2ObjectMap<BlockEntry> BLOCK_ENTRIES = new Int2ObjectOpenHashMap<>();
|
||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
|
InputStream biomestream = GeyserConnector.class.getClassLoader().getResourceAsStream("bedrock/biome_definitions.dat");
|
||||||
|
if (biomestream == null) {
|
||||||
|
throw new AssertionError("Unable to find bedrock/biome_definitions.dat");
|
||||||
|
}
|
||||||
|
|
||||||
|
CompoundTag biomesTag;
|
||||||
|
|
||||||
|
try (NBTInputStream biomenbtInputStream = NbtUtils.createNetworkReader(biomestream)){
|
||||||
|
biomesTag = (CompoundTag) biomenbtInputStream.readTag();
|
||||||
|
BIOMES = biomesTag;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
GeyserLogger.DEFAULT.warning("Failed to get biomes from biome definitions, is there something wrong with the file?");
|
||||||
|
throw new AssertionError(ex);
|
||||||
|
}
|
||||||
|
|
||||||
InputStream stream = GeyserConnector.class.getClassLoader().getResourceAsStream("bedrock/runtime_block_states.dat");
|
InputStream stream = GeyserConnector.class.getClassLoader().getResourceAsStream("bedrock/runtime_block_states.dat");
|
||||||
if (stream == null) {
|
if (stream == null) {
|
||||||
throw new AssertionError("Unable to find bedrock/runtime_block_states.dat");
|
throw new AssertionError("Unable to find bedrock/runtime_block_states.dat");
|
||||||
@ -69,6 +86,7 @@ public class Toolbox {
|
|||||||
}
|
}
|
||||||
|
|
||||||
BLOCKS = blocksTag;
|
BLOCKS = blocksTag;
|
||||||
|
|
||||||
InputStream stream2 = Toolbox.class.getClassLoader().getResourceAsStream("bedrock/items.json");
|
InputStream stream2 = Toolbox.class.getClassLoader().getResourceAsStream("bedrock/items.json");
|
||||||
if (stream2 == null) {
|
if (stream2 == null) {
|
||||||
throw new AssertionError("Items Table not found");
|
throw new AssertionError("Items Table not found");
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren