4jcraft/targets/minecraft/world/level/levelgen/structure/StructureFeatureIO.h

103 lines
3.2 KiB
C++

#pragma once
#include <string>
#include <unordered_map>
#include "nbt/CompoundTag.h"
class StructurePiece;
class StructureStart;
class Level;
class CompoundTag;
typedef StructurePiece* (*structurePieceCreateFn)();
typedef StructureStart* (*structureStartCreateFn)();
enum EStructureStart {
eStructureStart_MineShaftStart,
eStructureStart_VillageStart,
eStructureStart_NetherBridgeStart,
eStructureStart_StrongholdStart,
eStructureStart_ScatteredFeatureStart,
};
enum EStructurePiece {
eStructurePiece_MineShaftRoom,
eStructurePiece_MineShaftCorridor,
eStructurePiece_MineShaftCrossing,
eStructurePiece_MineShaftStairs,
eStructurePiece_BridgeStraight,
eStructurePiece_BridgeEndFiller,
eStructurePiece_BridgeCrossing,
eStructurePiece_RoomCrossing,
eStructurePiece_StairsRoom,
eStructurePiece_MonsterThrone,
eStructurePiece_CastleEntrance,
eStructurePiece_CastleStalkRoom,
eStructurePiece_CastleSmallCorridorPiece,
eStructurePiece_CastleSmallCorridorCrossingPiece,
eStructurePiece_CastleSmallCorridorRightTurnPiece,
eStructurePiece_CastleSmallCorridorLeftTurnPiece,
eStructurePiece_CastleCorridorStairsPiece,
eStructurePiece_CastleCorridorTBalconyPiece,
eStructurePiece_NetherBridgeStartPiece,
eStructurePiece_DesertPyramidPiece,
eStructurePiece_JunglePyramidPiece,
eStructurePiece_SwamplandHut,
eStructurePiece_FillerCorridor,
eStructurePiece_StairsDown,
eStructurePiece_Straight,
eStructurePiece_ChestCorridor,
eStructurePiece_StraightStairsDown,
eStructurePiece_LeftTurn,
eStructurePiece_RightTurn,
eStructurePiece_StrongholdRoomCrossing,
eStructurePiece_PrisonHall,
eStructurePiece_Library,
eStructurePiece_FiveCrossing,
eStructurePiece_PortalRoom,
eStructurePiece_StrongholdStartPiece,
eStructurePiece_Well,
eStructurePiece_StraightRoad,
eStructurePiece_SimpleHouse,
eStructurePiece_SmallTemple,
eStructurePiece_BookHouse,
eStructurePiece_SmallHut,
eStructurePiece_PigHouse,
eStructurePiece_TwoRoomHouse,
eStructurePiece_Smithy,
eStructurePiece_Farmland,
eStructurePiece_DoubleFarmland,
eStructurePiece_LightPost,
eStructurePiece_VillageStartPiece,
};
class StructureFeatureIO {
private:
static std::unordered_map<std::string, structureStartCreateFn>
startIdClassMap;
static std::unordered_map<unsigned int, std::string> startClassIdMap;
static std::unordered_map<std::string, structurePieceCreateFn>
pieceIdClassMap;
static std::unordered_map<unsigned int, std::string> pieceClassIdMap;
public:
static void setStartId(EStructureStart clas,
structureStartCreateFn createFn,
const std::string& id);
static void setPieceId(EStructurePiece clas,
structurePieceCreateFn createFn,
const std::string& id);
public:
static void staticCtor();
static std::string getEncodeId(StructureStart* start);
static std::string getEncodeId(StructurePiece* piece);
static StructureStart* loadStaticStart(CompoundTag* tag, Level* level);
static StructurePiece* loadStaticPiece(CompoundTag* tag, Level* level);
};