mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/4jcraft.git
synced 2026-05-30 23:16:57 +00:00
TU19: merge Minecraft.World/WorldGen
This commit is contained in:
101
Minecraft.World/WorldGen/StructureFeatureIO.cpp
Normal file
101
Minecraft.World/WorldGen/StructureFeatureIO.cpp
Normal file
@@ -0,0 +1,101 @@
|
||||
#include "../Platform/stdafx.h"
|
||||
#include "../Headers/net.minecraft.world.level.levelgen.structure.h"
|
||||
#include "StructureFeatureIO.h"
|
||||
|
||||
std::unordered_map<std::wstring, structureStartCreateFn>
|
||||
StructureFeatureIO::startIdClassMap;
|
||||
std::unordered_map<unsigned int, std::wstring>
|
||||
StructureFeatureIO::startClassIdMap;
|
||||
|
||||
std::unordered_map<std::wstring, structurePieceCreateFn>
|
||||
StructureFeatureIO::pieceIdClassMap;
|
||||
std::unordered_map<unsigned int, std::wstring>
|
||||
StructureFeatureIO::pieceClassIdMap;
|
||||
|
||||
void StructureFeatureIO::setStartId(EStructureStart clas,
|
||||
structureStartCreateFn createFn,
|
||||
const std::wstring& id) {
|
||||
startIdClassMap[id] = createFn;
|
||||
startClassIdMap[clas] = id;
|
||||
}
|
||||
|
||||
void StructureFeatureIO::setPieceId(EStructurePiece clas,
|
||||
structurePieceCreateFn createFn,
|
||||
const std::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();
|
||||
}
|
||||
|
||||
std::wstring StructureFeatureIO::getEncodeId(StructureStart* start) {
|
||||
AUTO_VAR(it, startClassIdMap.find(start->GetType()));
|
||||
if (it != startClassIdMap.end()) {
|
||||
return it->second;
|
||||
} else {
|
||||
return L"";
|
||||
}
|
||||
}
|
||||
|
||||
std::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;
|
||||
}
|
||||
Reference in New Issue
Block a user