Skip to content
LeviMC
English
AutoLightDark
LeviLamina
Loading...
Searching...
No Matches
StructureManager.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5// auto generated inclusion list
6#include "mc/deps/core/file/PathBuffer.h"
7#include "mc/deps/core/string/BasicStackString.h"
8#include "mc/deps/core/utility/NonOwnerPointer.h"
9#include "mc/world/level/chunk/QueueRequestResult.h"
10#include "mc/world/level/levelgen/structure/IStructureTemplateManager.h"
11#include "mc/world/level/levelgen/structure/StructureDeleteResult.h"
12
13// auto generated forward declare list
14// clang-format off
15class BlockPos;
16class BoundingBox;
17class CommandArea;
18class Dimension;
21class Level;
22class LevelStorage;
24class ServerLevel;
29namespace Core { class Path; }
30namespace SharedTypes::v1_21_80 { struct JigsawStructureMetadata; }
31namespace cereal { struct ReflectionCtx; }
32namespace mce { class UUID; }
33// clang-format on
34
35class StructureManager : public ::IStructureTemplateManager {
36public:
37 // member variables
38 // NOLINTBEGIN
39 ::ll::TypedStorage<8, 8, ::std::shared_mutex> mRepositoryMutex;
40 ::ll::TypedStorage<8, 64, ::std::unordered_map<::std::string, ::std::unique_ptr<::LegacyStructureTemplate>>>
41 mLegacyStructureRepository;
42 ::ll::TypedStorage<8, 64, ::std::unordered_map<::std::string, ::std::unique_ptr<::StructureTemplate>>>
43 mStructureRepository;
44 ::ll::TypedStorage<8, 24, ::std::vector<::std::unique_ptr<::StructureAnimationData>>> mStructurePlacementQueue;
45 ::ll::TypedStorage<4, 4, uint> mStructurePlacementSaveCounter;
46 ::ll::TypedStorage<8, 24, ::Bedrock::NonOwnerPointer<::IUnknownBlockTypeRegistry>> mUnknownBlockRegistry;
47 ::ll::TypedStorage<8, 24, ::Bedrock::NonOwnerPointer<::ResourcePackManager> const> mPackManager;
48 ::ll::TypedStorage<
49 8,
50 64,
51 ::std::unordered_map<uint64, ::std::shared_ptr<::SharedTypes::v1_21_80::JigsawStructureMetadata>>>
52 mMetadataRegistry;
53 ::ll::TypedStorage<8, 80, ::std::mutex> mMetadataRegistryMutex;
54 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::cereal::ReflectionCtx>> mCerealContext;
55 // NOLINTEND
56
57public:
58 // prevent constructor by default
59 StructureManager();
60
61public:
62 // virtual functions
63 // NOLINTBEGIN
64 virtual ~StructureManager() /*override*/ = default;
65
66 virtual ::LegacyStructureTemplate& getOrCreateLegacy(::std::string const& structureName) /*override*/;
67
68 virtual ::StructureTemplate& getOrCreate(::std::string const& structureName) /*override*/;
69
70 virtual ::StructureTemplate* getStructure(::std::string const& structureName) const /*override*/;
71
72 virtual bool readStructure(::StructureTemplate& structureTemplate) /*override*/;
73
74 virtual ::std::shared_ptr<::SharedTypes::v1_21_80::JigsawStructureMetadata>
75 getOrCreateJigsawStructureMetadata(::StructurePoolElement const& structurePoolElement) /*override*/;
76 // NOLINTEND
77
78public:
79 // member functions
80 // NOLINTBEGIN
81 MCNAPI explicit StructureManager(::ResourcePackManager& packManager);
82
83 MCNAPI ::StructureTemplate* _createAndLoadStructure(
84 ::std::string const& structureName,
85 ::ResourcePackManager const* packManager,
86 ::LevelStorage* levelStorage
87 );
88
89 MCNAPI ::std::string _createLevelStorageId(::std::string const& dimensionPrefix, ::std::string const& saveId);
90
91#ifdef LL_PLAT_C
92 MCNAPI ::LegacyStructureTemplate* _readLegacyStructure(::std::string const& name);
93#endif
94
95 MCNAPI ::StructureTemplate&
96 cloneStructure(::StructureTemplate const& structureTemplate, ::std::string const& structureName);
97
98 MCAPI ::StructureDeleteResult deleteStructure(::std::string const& structureName, ::LevelStorage& levelStorage);
99
100 MCNAPI ::std::vector<::std::string> getPackStructureNames(::mce::UUID const& packUUID);
101
102 MCAPI ::std::vector<::std::string> getStructureNames(::LevelStorage& levelStorage, bool includeUnremovable) const;
103
104#ifdef LL_PLAT_C
105 MCNAPI ::StructureTemplate* importStructure(::std::string const& structureName, ::Core::Path const& filePath);
106#endif
107
108 MCNAPI void importStructureFromTemplate(::std::string name, ::StructureTemplate const& temp);
109
110 MCAPI bool load(
111 ::StructureTemplate& structureTemplate,
112 ::ResourcePackManager const* packManager,
113 ::LevelStorage* levelStorage
114 );
115
117
118 MCNAPI void loadPlacementQueue(::LevelStorage& storage, ::Level& level, ::Dimension& dimension);
119
120 MCNAPI void reset();
121
122 MCAPI void saveToLevel(::StructureTemplate const& structureTemplate, ::LevelStorage& levelStorage);
123
125
126 MCNAPI void tick(::Dimension const& dimension);
127
128 MCNAPI ::QueueRequestResult tryPlaceStructureInWorld(
129 ::std::unique_ptr<::CommandArea> cmdArea,
130 ::ServerLevel& level,
131 ::Dimension& dimension,
132 ::BoundingBox const& bounds,
133 ::BlockPos const& loadPosition,
134 ::StructureSettings const& settings,
135 ::StructureTemplate const& structureTemplate,
136 ::std::unique_ptr<::StructureAnimationData> structureAnimationData
137 );
138 // NOLINTEND
139
140public:
141 // static functions
142 // NOLINTBEGIN
143 MCNAPI static void
144 _removePlacementQueueItem(::std::string const& dimensionPrefix, ::StructureAnimationData& structureAnimationData);
145
146#ifdef LL_PLAT_C
147 MCAPI static bool exportStructure(::StructureTemplate const& structureTemplate, ::Core::Path const& filePath);
148#endif
149
150 MCNAPI static ::Core::PathBuffer<::Core::BasicStackString<char, 1024>>
151 getStructurePath(::std::string_view structureFullName);
152
153 MCNAPI static ::Core::PathBuffer<::Core::BasicStackString<char, 1024>>
154 getStructurePath(::std::string_view structureNamespace, ::std::string_view structureName);
155
156#ifdef LL_PLAT_S
157 MCNAPI static bool loadLegacy(::LegacyStructureTemplate& structure, ::std::string& data);
158#endif
159 // NOLINTEND
160
161public:
162 // constructor thunks
163 // NOLINTBEGIN
164 MCNAPI void* $ctor(::ResourcePackManager& packManager);
165 // NOLINTEND
166
167public:
168 // virtual function thunks
169 // NOLINTBEGIN
170 MCNAPI ::LegacyStructureTemplate& $getOrCreateLegacy(::std::string const& structureName);
171
172 MCAPI ::StructureTemplate& $getOrCreate(::std::string const& structureName);
173
174 MCNAPI ::StructureTemplate* $getStructure(::std::string const& structureName) const;
175
176 MCNAPI bool $readStructure(::StructureTemplate& structureTemplate);
177
178 MCNAPI ::std::shared_ptr<::SharedTypes::v1_21_80::JigsawStructureMetadata>
180
181
182 // NOLINTEND
183};
Definition NonOwnerPointer.h:9
Definition BlockPos.h:14
Definition BoundingBox.h:13
Definition CommandArea.h:10
Definition Path.h:10
Definition Dimension.h:86
Definition IStructureTemplateManager.h:16
Definition IUnknownBlockTypeRegistry.h:14
Definition LegacyStructureTemplate.h:27
Definition LevelStorage.h:26
Definition Level.h:255
Definition ResourcePackManager.h:29
Definition ServerLevel.h:58
Definition StructureAnimationData.h:16
MCAPI ::std::vector<::std::string > getPackStructureNames(::mce::UUID const &packUUID)
MCAPI::StructureTemplate & cloneStructure(::StructureTemplate const &structureTemplate, ::std::string const &structureName)
static MCAPI ::Core::PathBuffer<::Core::BasicStackString< char, 1024 > > getStructurePath(::std::string_view structureFullName)
MCAPI void reset()
MCAPI void loadMetadataRegistries()
MCAPI void importStructureFromTemplate(::std::string name, ::StructureTemplate const &temp)
MCAPI::LegacyStructureTemplate & $getOrCreateLegacy(::std::string const &structureName)
MCAPI::StructureTemplate * _createAndLoadStructure(::std::string const &structureName, ::ResourcePackManager const *packManager, ::LevelStorage *levelStorage)
static MCAPI void _removePlacementQueueItem(::std::string const &dimensionPrefix, ::StructureAnimationData &structureAnimationData)
MCAPI void setUnknownBlockRegistry(::Bedrock::NonOwnerPointer<::IUnknownBlockTypeRegistry > unknownBlockRegistry)
MCAPI ::std::shared_ptr<::SharedTypes::v1_21_80::JigsawStructureMetadata > $getOrCreateJigsawStructureMetadata(::StructurePoolElement const &structurePoolElement)
MCAPI StructureManager(::ResourcePackManager &packManager)
MCAPI void * $ctor(::ResourcePackManager &packManager)
MCAPI void tick(::Dimension const &dimension)
MCAPI::QueueRequestResult tryPlaceStructureInWorld(::std::unique_ptr<::CommandArea > cmdArea, ::ServerLevel &level, ::Dimension &dimension, ::BoundingBox const &bounds, ::BlockPos const &loadPosition, ::StructureSettings const &settings, ::StructureTemplate const &structureTemplate, ::std::unique_ptr<::StructureAnimationData > structureAnimationData)
MCAPI::std::string _createLevelStorageId(::std::string const &dimensionPrefix, ::std::string const &saveId)
static MCAPI ::Core::PathBuffer<::Core::BasicStackString< char, 1024 > > getStructurePath(::std::string_view structureNamespace, ::std::string_view structureName)
MCAPI bool $readStructure(::StructureTemplate &structureTemplate)
MCAPI::StructureTemplate * $getStructure(::std::string const &structureName) const
MCAPI void loadPlacementQueue(::LevelStorage &storage, ::Level &level, ::Dimension &dimension)
Definition StructurePoolElement.h:39
Definition StructureSettings.h:18
Definition StructureTemplate.h:35
Definition UUID.h:8
Definition JigsawStructureMetadata.h:15
Definition ReflectionCtx.h:11