This commit is contained in:
BruceChen 2022-08-31 20:46:21 +08:00
parent 0a689e407e
commit c0be6a61c8
4 changed files with 20 additions and 53 deletions

View file

@ -193,8 +193,8 @@ namespace MinecraftClient.Protocol.Handlers
}
if (x >= 0x02000000) // 33,554,432
x -= 0x04000000; // 67,108,864
if (y >= 0x00000800) // 2048
y -= 0x00001000; // 4096
if (y >= 0x00000800) // 2,048
y -= 0x00001000; // 4,096
if (z >= 0x02000000) // 33,554,432
z -= 0x04000000; // 67,108,864
return new Location(x, y, z);

View file

@ -56,12 +56,12 @@ namespace MinecraftClient.Protocol.Handlers
return null;
// Warning: If you need to support modification of block data, you need to create 4096 objects here
Block[] blocks = new Block[Chunk.SizeX * Chunk.SizeY * Chunk.SizeZ];
Chunk chunk = new();
for (int blockY = 0; blockY < Chunk.SizeY; blockY++)
for (int blockZ = 0; blockZ < Chunk.SizeZ; blockZ++)
for (int blockX = 0; blockX < Chunk.SizeX; blockX++)
blocks[(blockY << 8) | (blockZ << 4) | blockX] = block;
return new Chunk(blocks);
chunk.SetWithoutCheck(blockX, blockY, blockZ, block);
return chunk;
}
else
{
@ -86,7 +86,7 @@ namespace MinecraftClient.Protocol.Handlers
Span<byte> entryDataByte = stackalloc byte[8];
Span<long> entryDataLong = MemoryMarshal.Cast<byte, long>(entryDataByte); // Faster than MemoryMarshal.Read<long>
Block[] blocks = new Block[Chunk.SizeX * Chunk.SizeY * Chunk.SizeZ];
Chunk chunk = new();
int startOffset = 64; // Read the first data immediately
for (int blockY = 0; blockY < Chunk.SizeY; blockY++)
{
@ -129,11 +129,11 @@ namespace MinecraftClient.Protocol.Handlers
Block block = new((ushort)blockId);
// We have our block, save the block into the chunk
blocks[(blockY << 8) | (blockZ << 4) | blockX] = block;
chunk.SetWithoutCheck(blockX, blockY, blockZ, block);
}
}
}
return new Chunk(blocks);
return chunk;
}
}