LeviLamina
Loading...
Searching...
No Matches
BlockDefinitionGroup.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5// auto generated inclusion list
6#include "mc/common/WeakPtr.h"
7#include "mc/deps/core/debug/log/LogArea.h"
8#include "mc/deps/core/file/PathBuffer.h"
9#include "mc/deps/core/sem_ver/SemVersion.h"
10#include "mc/deps/core/utility/NonOwnerPointer.h"
11#include "mc/deps/json/Value.h"
12#include "mc/deps/shared_types/v1_21_110/item/ItemCategory.h"
13#include "mc/resources/JsonBetaState.h"
14#include "mc/resources/MinEngineVersion.h"
15#include "mc/util/json_util/JsonSchemaObjectNode.h"
16#include "mc/world/level/block/definition/BlockDescription.h"
17#include "mc/world/level/block/traits/BlockTraitFactory.h"
18
19// auto generated forward declare list
20// clang-format off
21class Block;
22class BlockType;
23class CompoundTag;
24class DefinitionEvent;
25class Experiments;
27class Level;
29class PackLoadContext;
33struct BlockDefinition;
35namespace JsonUtil { class EmptyClass; }
36namespace cereal { struct ReflectionCtx; }
37// clang-format on
38
39class BlockDefinitionGroup {
40public:
41 // BlockDefinitionGroup inner types declare
42 // clang-format off
43 struct BlockResource;
44 // clang-format on
45
46 // BlockDefinitionGroup inner types define
47 struct BlockResource {
48 public:
49 // member variables
50 // NOLINTBEGIN
51 ::ll::TypedStorage<8, 24, ::SemVersion> mFormatVersion;
52 ::ll::TypedStorage<8, 32, ::MinEngineVersion> mMinEngineVersion;
53 ::ll::TypedStorage<8, 24, ::SemVersion> mOriginalJsonVersion;
54 ::ll::TypedStorage<8, 224, ::BlockDescription> mDescription;
55 ::ll::TypedStorage<1, 1, ::JsonBetaState> mIsBeta;
56 ::ll::TypedStorage<8, 32, ::std::string> mResourcePackLocation;
57 ::ll::TypedStorage<8, 32, ::std::string> mResourceFileLocation;
58 ::ll::TypedStorage<8, 16, ::Json::Value> mRoot;
59 // NOLINTEND
60
61 public:
62 // member functions
63 // NOLINTBEGIN
64 MCAPI BlockResource();
65
66 MCAPI ~BlockResource();
67 // NOLINTEND
68
69 public:
70 // constructor thunks
71 // NOLINTBEGIN
72 MCAPI void* $ctor();
73 // NOLINTEND
74
75 public:
76 // destructor thunk
77 // NOLINTBEGIN
78 MCAPI void $dtor();
79 // NOLINTEND
80 };
81
82public:
83 // member variables
84 // NOLINTBEGIN
85 ::ll::TypedStorage<8, 64, ::std::unordered_map<::std::string, ::DefinitionEvent>> mEventHandlers;
86 ::ll::TypedStorage<8, 64, ::std::unordered_map<::std::string, ::std::unique_ptr<::BlockDefinition>>>
87 mBlockDefinitions;
88 ::ll::TypedStorage<
89 8,
90 16,
91 ::std::shared_ptr<::JsonUtil::JsonSchemaObjectNode<::JsonUtil::EmptyClass, ::BlockDescription>>>
92 mDescriptionSchema;
93 ::ll::TypedStorage<8, 128, ::BlockTraitFactory> mTraitFactory;
94 ::ll::TypedStorage<4, 4, int> mLastBlockId;
95 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mBlockResourceGroupNames;
96 ::ll::TypedStorage<8, 24, ::Bedrock::NotNullNonOwnerPtr<::cereal::ReflectionCtx const>> mCtx;
97 ::ll::TypedStorage<8, 8, ::IMinecraftEventing&> mEventing;
98 // NOLINTEND
99
100public:
101 // prevent constructor by default
102 BlockDefinitionGroup& operator=(BlockDefinitionGroup const&);
103 BlockDefinitionGroup(BlockDefinitionGroup const&);
104 BlockDefinitionGroup();
105
106public:
107 // member functions
108 // NOLINTBEGIN
109 MCAPI BlockDefinitionGroup(::cereal::ReflectionCtx const& ctx, ::IMinecraftEventing& eventing);
110
111 MCAPI void _buildBlockDescriptionSchema(
113 );
114
115 MCAPI void _buildBlockMenuCategorySchema(
117 );
118
119 MCAPI bool _checkInvalidPermutationComponents(::BlockComponentGroupDescription const& componentGroupDescription);
120
121 MCAPI bool _loadBlockDescription(
122 ::Json::Value const& root,
123 ::BlockDescription& desc,
124 ::JsonBetaState& canUseBeta,
125 ::PackLoadContext const& packLoadContext,
126 ::SemVersion const& jsonVersion
127 );
128
129 MCAPI bool _loadComponents(
130 ::Json::Value const& root,
131 ::BlockDefinition& definition,
132 ::PackLoadContext& packLoadContext,
133 ::JsonBetaState canUseBeta
134 );
135
136 MCAPI void
137 _loadComponentsForLegacyCompabitility(::SemVersion const& originalJsonVersion, ::BlockDefinition& definition);
138
139 MCAPI bool
140 _loadEvents(::Json::Value const& root, ::BlockDefinition& definition, ::PackLoadContext& packLoadContext);
141
142 MCAPI bool _parseComponents(
143 ::Json::Value const& blockRoot,
144 ::BlockComponentGroupDescription& componentGroupDescription,
145 ::std::string const& blockIdentifier,
146 ::SemVersion const& originalJsonVersion,
147 ::PackLoadContext& packLoadContext,
148 ::JsonBetaState canUseBeta,
149 bool isVanillaBlock
150 );
151
152 MCAPI ::SharedTypes::v1_21_110::ItemCategory::CreativeItemCategory
153 _stringToCreativeItemCategory(::std::string const& category, ::std::string const& blockIdentifier);
154
155 MCAPI void
156 _upgradeComponentsForLegacyCompatibility(::SemVersion const& originalJsonVersion, ::BlockDefinition& definition);
157
158 MCAPI bool _validateAndAssignBlockId(::BlockDescription& desc, bool isFromBaseGamePack);
159
160 MCAPI bool _validatePrereleaseRequirements(
161 ::LogArea logArea,
162 ::std::string const& jsonType,
163 ::std::string const& jsonIdentifier,
164 ::std::optional<::SemVersion> const& releaseVersion,
165 ::std::vector<::PackLoadRequirement> const& requirements,
166 ::PackLoadContext const& packLoadContext,
167 ::JsonBetaState canUseBeta
168 ) const;
169
170 MCAPI void buildBlockSchema();
171
172 MCAPI void digestServerBlockProperties(::std::vector<::std::pair<::std::string, ::CompoundTag>> const& blocks);
173
174 MCAPI ::std::unique_ptr<::BlockDefinition>
175 generateBlockDefinition(::BlockDefinitionGroup::BlockResource const& resource, ::PackLoadContext& packLoadContext);
176
177 MCAPI bool generateBlockResource(
178 ::Json::Value const& root,
179 ::PackLoadContext const& packLoadContext,
180 ::SemVersion const& originalJsonVersion,
182 );
183
184 MCAPI ::std::vector<::std::pair<::std::string, ::CompoundTag>> generateServerBlockProperties() const;
185
186 MCAPI ::std::vector<::BlockDefinition const*> getBlockDefinitions() const;
187
188 MCAPI void initBlockFromDefinition(::Block& block, ::BlockPermutationDescription const& definition);
189
190 MCAPI void initBlockTypeFromDefinition(::BlockType& blockType, ::BlockDefinition const& definition);
191
192 MCAPI void initializeBlockFromDefinition(::BlockDefinition const& definition, ::Level& level);
193
194 MCAPI void initializeBlocks(::Level& level);
195
196 MCAPI ::std::unique_ptr<::BlockDefinition> loadResource(
197 ::std::string upgradedJsonData,
199 ::std::string const& resourcePacklocation,
200 ::PackLoadContext& packLoadContext
201 );
202
203 MCAPI void loadResources(
204 ::ResourcePackManager const& resourcePackManager,
205 ::Experiments const& experiments,
207 );
208
209 MCAPI void registerBlockDefinition(::std::unique_ptr<::BlockDefinition> blockDef);
210
211 MCAPI void registerBlockFromDefinition(::BlockDefinition const& definition, bool);
212
213 MCAPI void registerBlocks();
214
215 MCAPI ::WeakPtr<::BlockType> registerDataDrivenBlock(::BlockDescription const& desc);
216
217 MCAPI ::BlockDefinition const* tryGetBlockDefinition(::std::string const& name) const;
218
219 MCAPI ~BlockDefinitionGroup();
220 // NOLINTEND
221
222public:
223 // static functions
224 // NOLINTBEGIN
225 MCAPI static bool
226 _validatedMultiBlockBaseComponentConstraints(::BlockComponentGroupDescription const& descriptionGroup);
227
228 MCAPI static bool
229 _validatedMultiBlockPermComponentConstraints(::BlockComponentGroupDescription const& descriptionGroup);
230 // NOLINTEND
231
232public:
233 // constructor thunks
234 // NOLINTBEGIN
235 MCAPI void* $ctor(::cereal::ReflectionCtx const& ctx, ::IMinecraftEventing& eventing);
236 // NOLINTEND
237
238public:
239 // destructor thunk
240 // NOLINTBEGIN
241 MCAPI void $dtor();
242 // NOLINTEND
243};
Definition NonOwnerPointer.h:9
Definition BlockType.h:84
Definition Block.h:69
Definition CompoundTag.h:23
Definition PathBuffer.h:8
Definition DefinitionEvent.h:18
Definition Experiments.h:14
Definition IMinecraftEventing.h:138
Definition EmptyClass.h:7
Definition JsonSchemaObjectNode.h:8
Definition Value.h:16
Definition Level.h:255
Definition LinkedAssetValidator.h:8
Definition PackLoadContext.h:20
Definition PackLoadRequirement.h:13
Definition ResourcePackManager.h:35
Definition SemVersion.h:15
Definition BlockComponentGroupDescription.h:13
Definition BlockDefinitionGroup.h:47
Definition BlockDefinition.h:21
Definition BlockDescription.h:15
Definition BlockPermutationDescription.h:9
Definition ReflectionCtx.h:11
Definition ctx.h:5