aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/StructureFeatureIO.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.World/StructureFeatureIO.cpp')
-rw-r--r--Minecraft.World/StructureFeatureIO.cpp104
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