summaryrefslogtreecommitdiffstats
path: root/src/World
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2018-07-21 18:07:45 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2018-07-21 18:11:59 +0200
commitf1f783877f0f8338a225244faff4e40efe10a4ce (patch)
treee071d5df7024fbc3c72713517672f217096ea47f /src/World
parent315bb38444b8e363b4d8f2702d45d42fa585f619 (diff)
downloadMinedMap-f1f783877f0f8338a225244faff4e40efe10a4ce.tar
MinedMap-f1f783877f0f8338a225244faff4e40efe10a4ce.zip
NBT: rework type system
Diffstat (limited to 'src/World')
-rw-r--r--src/World/Chunk.cpp8
-rw-r--r--src/World/Chunk.hpp4
2 files changed, 7 insertions, 5 deletions
diff --git a/src/World/Chunk.cpp b/src/World/Chunk.cpp
index 07e38a4..38ca496 100644
--- a/src/World/Chunk.cpp
+++ b/src/World/Chunk.cpp
@@ -44,8 +44,9 @@ Chunk::Chunk(const ChunkData *data) {
std::shared_ptr<const NBT::ByteTag> lightPopulatedTag = level->get<NBT::ByteTag>("LightPopulated");
bool lightPopulated = lightPopulatedTag && lightPopulatedTag->getValue();
- sections = assertValue(level->get<NBT::ListTag<NBT::CompoundTag>>("Sections"));
- maxY = (assertValue(sections->back()->get<NBT::ByteTag>("Y"))->getValue() + 1) * SIZE;
+ sections = assertValue(level->get<NBT::ListTag>("Sections"));
+ const NBT::CompoundTag *lastSection = assertValue(dynamic_cast<const NBT::CompoundTag *>(sections->back().get()));
+ maxY = (assertValue(lastSection->get<NBT::ByteTag>("Y"))->getValue() + 1) * SIZE;
std::shared_ptr<const NBT::ByteArrayTag> biomeTag = assertValue(level->get<NBT::ByteArrayTag>("Biomes"));
@@ -65,7 +66,8 @@ Chunk::Chunk(const ChunkData *data) {
std::memset(blockBlockLight.get(), 0, maxY * SIZE * SIZE / 2);
- for (auto &section : *sections) {
+ for (auto &sectionTag : *sections) {
+ const NBT::CompoundTag *section = assertValue(dynamic_cast<const NBT::CompoundTag *>(sectionTag.get()));
std::shared_ptr<const NBT::ByteArrayTag> blocks = assertValue(section->get<NBT::ByteArrayTag>("Blocks"));
std::shared_ptr<const NBT::ByteArrayTag> data = assertValue(section->get<NBT::ByteArrayTag>("Data"));
size_t Y = assertValue(section->get<NBT::ByteTag>("Y"))->getValue();
diff --git a/src/World/Chunk.hpp b/src/World/Chunk.hpp
index d4213b3..4bd301d 100644
--- a/src/World/Chunk.hpp
+++ b/src/World/Chunk.hpp
@@ -52,7 +52,7 @@ public:
private:
std::shared_ptr<const NBT::CompoundTag> level;
- std::shared_ptr<const NBT::ListTag<NBT::CompoundTag>> sections;
+ std::shared_ptr<const NBT::ListTag> sections;
unsigned maxY;
@@ -107,7 +107,7 @@ public:
return *level;
}
- const NBT::ListTag<NBT::CompoundTag> & getSections() const {
+ const NBT::ListTag & getSections() const {
return *sections;
}