почти успешная загрузка карты
зафиксированы следующие ошибки: - не прогружаются некоторые чанки (совсем); - не отображаюся некоторые чанки (пока не пнёшь); - секция чанка некоректно загружается, если там есть сундук; - местами некорректно отображаются данные о block light.
This commit is contained in:
@@ -1,17 +1,15 @@
|
||||
package mc.world.anvil;
|
||||
|
||||
import com.flowpowered.nbt.Tag;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import mc.core.world.block.Block;
|
||||
import mc.core.world.block.BlockLocation;
|
||||
import mc.core.world.block.BlockType;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@Slf4j
|
||||
public class AnvilBlock implements Block {
|
||||
private final AnvilChunkSection chunkSection;
|
||||
private final BlockLocation location;
|
||||
private BlockLocation globalLocation;
|
||||
|
||||
public AnvilBlock(AnvilChunkSection chunkSection, int x, int y, int z) {
|
||||
this.chunkSection = chunkSection;
|
||||
@@ -30,20 +28,31 @@ public class AnvilBlock implements Block {
|
||||
|
||||
@Override
|
||||
public BlockType getBlockType() {
|
||||
final byte id = chunkSection.getBlocks().get((location.getY() * 256) + (location.getZ() * 16) + location.getX());
|
||||
final byte id = chunkSection.getBlocks().get((location.getY() << 8) + (location.getZ() << 4) + location.getX());
|
||||
final int meta = chunkSection.getBlocksMeta().get(location);
|
||||
return BlockType.getByIdMeta(id, meta);
|
||||
BlockType type = BlockType.getByIdMeta(id & 0xFF, meta);
|
||||
if (type.equals(BlockType.BEDROCK) && id != 7) {
|
||||
log.warn("ChunkSection: {},{},{} | Block: {}",
|
||||
chunkSection.getX(),
|
||||
chunkSection.getY(),
|
||||
chunkSection.getZ(),
|
||||
location.toString());
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockLocation getLocation() {
|
||||
return location;
|
||||
if (globalLocation == null) {
|
||||
globalLocation = location.toGlobal(chunkSection);
|
||||
}
|
||||
return globalLocation;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "AnvilBlock{" +
|
||||
"location=" + location +
|
||||
"location=" + getLocation() +
|
||||
", type=" + getBlockType() +
|
||||
'}';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user