diff options
Diffstat (limited to 'Minecraft.World/StructureFeatureIO.cpp')
| -rw-r--r-- | Minecraft.World/StructureFeatureIO.cpp | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/Minecraft.World/StructureFeatureIO.cpp b/Minecraft.World/StructureFeatureIO.cpp new file mode 100644 index 00000000..d910cf3d --- /dev/null +++ b/Minecraft.World/StructureFeatureIO.cpp @@ -0,0 +1,104 @@ +#include "stdafx.h" +#include "net.minecraft.world.level.levelgen.structure.h" +#include "StructureFeatureIO.h" + +unordered_map<wstring, structureStartCreateFn> StructureFeatureIO::startIdClassMap; +unordered_map<unsigned int, wstring> StructureFeatureIO::startClassIdMap; + +unordered_map<wstring, structurePieceCreateFn> StructureFeatureIO::pieceIdClassMap; +unordered_map<unsigned int, wstring> StructureFeatureIO::pieceClassIdMap; + +void StructureFeatureIO::setStartId(EStructureStart clas, structureStartCreateFn createFn, const wstring &id) +{ + startIdClassMap[id] = createFn; + startClassIdMap[clas] = id; +} + +void StructureFeatureIO::setPieceId(EStructurePiece clas, structurePieceCreateFn createFn, const wstring &id) +{ + pieceIdClassMap[id] = createFn; + pieceClassIdMap[clas] = id; +} + +void StructureFeatureIO::staticCtor() +{ + setStartId(eStructureStart_MineShaftStart, MineShaftStart::Create, L"Mineshaft"); + setStartId(eStructureStart_VillageStart, VillageFeature::VillageStart::Create, L"Village"); + setStartId(eStructureStart_NetherBridgeStart, NetherBridgeFeature::NetherBridgeStart::Create, L"Fortress"); + setStartId(eStructureStart_StrongholdStart, StrongholdFeature::StrongholdStart::Create, L"Stronghold"); + setStartId(eStructureStart_ScatteredFeatureStart, RandomScatteredLargeFeature::ScatteredFeatureStart::Create, L"Temple"); + + MineShaftPieces::loadStatic(); + VillagePieces::loadStatic(); + NetherBridgePieces::loadStatic(); + StrongholdPieces::loadStatic(); + ScatteredFeaturePieces::loadStatic(); +} + +wstring StructureFeatureIO::getEncodeId(StructureStart *start) +{ + AUTO_VAR(it, startClassIdMap.find( start->GetType() ) ); + if(it != startClassIdMap.end()) + { + return it->second; + } + else + { + return L""; + } +} + +wstring StructureFeatureIO::getEncodeId(StructurePiece *piece) +{ + AUTO_VAR(it, pieceClassIdMap.find( piece->GetType() ) ); + if(it != pieceClassIdMap.end()) + { + return it->second; + } + else + { + return L""; + } +} + +StructureStart *StructureFeatureIO::loadStaticStart(CompoundTag *tag, Level *level) +{ + StructureStart *start = NULL; + + AUTO_VAR(it, startIdClassMap.find( tag->getString(L"id") ) ); + if(it != startIdClassMap.end()) + { + start = (it->second)(); + } + + if (start != NULL) + { + start->load(level, tag); + } + else + { + app.DebugPrintf( "Skipping Structure with id %ls", tag->getString(L"id").c_str() ); + } + return start; +} + +StructurePiece *StructureFeatureIO::loadStaticPiece(CompoundTag *tag, Level *level) +{ + StructurePiece *piece = NULL; + + AUTO_VAR(it, pieceIdClassMap.find( tag->getString(L"id") ) ); + if(it != pieceIdClassMap.end()) + { + piece = (it->second)(); + } + + if (piece != NULL) + { + piece->load(level, tag); + } + else + { + app.DebugPrintf( "Skipping Piece with id %ls", tag->getString(L"id").c_str() ); + } + return piece; +}
\ No newline at end of file |
