4jcraft/Minecraft.World/WorldGen/StructureFeatureIO.cpp
MatthewBeshay a0fdc643d1 Merge branch 'upstream-dev' into cleanup/nullptr-replacement
# Conflicts:
#	Minecraft.Client/Network/PlayerChunkMap.cpp
#	Minecraft.Client/Network/PlayerList.cpp
#	Minecraft.Client/Network/ServerChunkCache.cpp
#	Minecraft.Client/Platform/Common/Consoles_App.cpp
#	Minecraft.Client/Platform/Common/DLC/DLCManager.cpp
#	Minecraft.Client/Platform/Common/GameRules/LevelGenerationOptions.cpp
#	Minecraft.Client/Platform/Common/GameRules/LevelRuleset.cpp
#	Minecraft.Client/Platform/Common/Tutorial/Tutorial.cpp
#	Minecraft.Client/Platform/Common/Tutorial/TutorialTask.cpp
#	Minecraft.Client/Platform/Common/UI/IUIScene_CreativeMenu.cpp
#	Minecraft.Client/Platform/Common/UI/UIComponent_Panorama.cpp
#	Minecraft.Client/Platform/Common/UI/UIController.cpp
#	Minecraft.Client/Platform/Common/UI/UIController.h
#	Minecraft.Client/Platform/Extrax64Stubs.cpp
#	Minecraft.Client/Platform/Windows64/4JLibs/inc/4J_Input.h
#	Minecraft.Client/Platform/Windows64/4JLibs/inc/4J_Storage.h
#	Minecraft.Client/Player/EntityTracker.cpp
#	Minecraft.Client/Player/ServerPlayer.cpp
#	Minecraft.Client/Rendering/EntityRenderers/PlayerRenderer.cpp
#	Minecraft.Client/Textures/Packs/DLCTexturePack.cpp
#	Minecraft.Client/Textures/Stitching/StitchedTexture.cpp
#	Minecraft.Client/Textures/Stitching/TextureMap.cpp
#	Minecraft.Client/Textures/Textures.cpp
#	Minecraft.World/Blocks/NotGateTile.cpp
#	Minecraft.World/Blocks/PressurePlateTile.cpp
#	Minecraft.World/Blocks/TileEntities/PotionBrewing.cpp
#	Minecraft.World/Enchantments/EnchantmentHelper.cpp
#	Minecraft.World/Entities/HangingEntity.cpp
#	Minecraft.World/Entities/LeashFenceKnotEntity.cpp
#	Minecraft.World/Entities/LivingEntity.cpp
#	Minecraft.World/Entities/Mobs/Boat.cpp
#	Minecraft.World/Entities/Mobs/Minecart.cpp
#	Minecraft.World/Entities/Mobs/Witch.cpp
#	Minecraft.World/Entities/SyncedEntityData.cpp
#	Minecraft.World/Items/LeashItem.cpp
#	Minecraft.World/Items/PotionItem.cpp
#	Minecraft.World/Level/BaseMobSpawner.cpp
#	Minecraft.World/Level/CustomLevelSource.cpp
#	Minecraft.World/Level/Level.cpp
#	Minecraft.World/Level/Storage/DirectoryLevelStorage.cpp
#	Minecraft.World/Level/Storage/McRegionLevelStorage.cpp
#	Minecraft.World/Level/Storage/RegionFileCache.cpp
#	Minecraft.World/Player/Player.cpp
#	Minecraft.World/WorldGen/Biomes/BiomeCache.cpp
#	Minecraft.World/WorldGen/Features/RandomScatteredLargeFeature.cpp
#	Minecraft.World/WorldGen/Layers/BiomeOverrideLayer.cpp
2026-03-30 16:28:40 +11:00

101 lines
3.3 KiB
C++

#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 it = startClassIdMap.find(start->GetType());
if (it != startClassIdMap.end()) {
return it->second;
} else {
return L"";
}
}
std::wstring StructureFeatureIO::getEncodeId(StructurePiece* piece) {
auto it = pieceClassIdMap.find(piece->GetType());
if (it != pieceClassIdMap.end()) {
return it->second;
} else {
return L"";
}
}
StructureStart* StructureFeatureIO::loadStaticStart(CompoundTag* tag,
Level* level) {
StructureStart* start = nullptr;
auto it = startIdClassMap.find(tag->getString(L"id"));
if (it != startIdClassMap.end()) {
start = (it->second)();
}
if (start != nullptr) {
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 = nullptr;
auto it = pieceIdClassMap.find(tag->getString(L"id"));
if (it != pieceIdClassMap.end()) {
piece = (it->second)();
}
if (piece != nullptr) {
piece->load(level, tag);
} else {
app.DebugPrintf("Skipping Piece with id %ls",
tag->getString(L"id").c_str());
}
return piece;
}