LeviLamina
Loading...
Searching...
No Matches
Recipes.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5// auto generated inclusion list
6#include "mc/deps/core/string/HashedString.h"
7#include "mc/molang/MolangVersion.h"
8#include "mc/platform/brstd/function_ref.h"
9#include "mc/world/inventory/network/TypedServerNetId.h"
10#include "mc/world/item/ItemInstance.h"
11#include "mc/world/item/SortItemInstanceIdAux.h"
12#include "mc/world/item/crafting/ExternalRecipeStore.h"
13#include "mc/world/item/crafting/RecipeIngredient.h"
14
15// auto generated forward declare list
16// clang-format off
17class BaseGameVersion;
18class Block;
19class Experiments;
20class Item;
21class ItemStackBase;
22class Level;
24class PackInstance;
25class Recipe;
28class SemVersion;
29class ShapedRecipe;
30class ShapelessRecipe;
31struct RecipeNetIdTag;
32namespace Json { class Value; }
33namespace mce { class UUID; }
34// clang-format on
35
36class Recipes {
37public:
38 // Recipes inner types declare
39 // clang-format off
41 class Type;
42 // clang-format on
43
44 // Recipes inner types define
46 public:
47 // member variables
48 // NOLINTBEGIN
49 ::ll::TypedStorage<4, 4, int> mWidth;
50 ::ll::TypedStorage<4, 4, int> mHeight;
51 ::ll::TypedStorage<8, 32, ::std::string> mNormalizedResult;
52 ::ll::TypedStorage<8, 32, ::std::string> mWarning;
53 // NOLINTEND
54
55 public:
56 // member functions
57 // NOLINTBEGIN
59 // NOLINTEND
60
61 public:
62 // destructor thunk
63 // NOLINTBEGIN
64 MCFOLD void $dtor();
65 // NOLINTEND
66 };
67
68 class Type {
69 public:
70 // member variables
71 // NOLINTBEGIN
72 ::ll::TypedStorage<8, 8, ::Item*> mItem;
73 ::ll::TypedStorage<8, 8, ::Block const*> mBlock;
74 ::ll::TypedStorage<8, 24, ::RecipeIngredient> mIngredient;
75 ::ll::TypedStorage<1, 1, char> mC;
76 // NOLINTEND
77 };
78
79 using TypeList = ::std::vector<::Recipes::Type>;
80
81public:
82 // member variables
83 // NOLINTBEGIN
84 ::ll::TypedStorage<8, 8, ::ResourcePackManager*> mResourcePackManager;
85 ::ll::TypedStorage<8, 8, ::ExternalRecipeStore> mExternalRecipeStore;
86 ::ll::TypedStorage<8, 16, ::std::map<::HashedString, ::std::map<::std::string, ::std::shared_ptr<::Recipe>>>>
87 mRecipes;
88 ::ll::TypedStorage<1, 1, bool> mInitializing;
89 ::ll::TypedStorage<
90 8,
91 16,
92 ::std::map<::ItemInstance, ::std::unordered_map<::std::string, ::Recipe*>, ::SortItemInstanceIdAux>>
93 mRecipesByOutput;
94 ::ll::TypedStorage<8, 64, ::std::unordered_map<::RecipeNetId, ::Recipe*>> mRecipesByNetId;
95 ::ll::TypedStorage<
96 8,
97 64,
98 ::std::unordered_map<uint64, ::std::unordered_map<uint64, ::std::shared_ptr<::std::vector<::ItemInstance>>>>>
99 mRecipesByInput;
100 ::ll::TypedStorage<8, 24, ::std::vector<::gsl::not_null<::Recipe*>>> mUnlockableRecipes;
101 ::ll::TypedStorage<8, 64, ::std::unordered_set<::std::string>> mUniqueUnlockableRecipeIds;
102 ::ll::TypedStorage<8, 64, ::std::unordered_map<int, ::std::unordered_map<int, ::ItemInstance>>> mFurnaceResults;
103 ::ll::TypedStorage<8, 24, ::std::vector<::std::pair<::std::weak_ptr<bool>, ::std::function<void()>>>> mListeners;
104 ::ll::TypedStorage<8, 8, ::Level*> mLevel;
105 // NOLINTEND
106
107public:
108 // prevent constructor by default
109 Recipes();
110
111public:
112 // member functions
113 // NOLINTBEGIN
114 MCAPI explicit Recipes(::Level* level);
115
116 MCAPI void _addFurnaceRecipeResults(::Recipe const& recipe);
117
118 MCAPI void _addItemRecipe(::std::unique_ptr<::Recipe> recipe);
119
120 MCAPI void _addMapRecipes();
121
122 MCAPI bool _isRecipeValidToAdd(::Recipe const& recipe);
123
124 MCAPI bool _loadBrewingMix(::Json::Value const& objData, ::MinEngineVersion const& minEngineVersion);
125
126 MCAPI void _loadDataDrivenRecipes(::std::vector<::PackInstance> const& resourcePacksNewestToOldest);
127
128 MCAPI void _loadHardcodedRecipes(::BaseGameVersion const& baseGameVersion, ::Experiments const&);
129
130 MCAPI ::RecipeIngredient const _loadIngredientFromJson(
131 ::Json::Value const& obj,
132 ::MolangVersion molangVersion,
133 bool allowItemCount,
134 bool allowItemGroup
135 ) const;
136
137 MCAPI ::RecipeIngredient const
138 _loadInputIngredientFromJson(::Json::Value const& obj, ::MinEngineVersion const& minEngineVersion) const;
139
140 MCAPI bool _loadSmithingTransform(
141 ::Json::Value const& objData,
142 ::MolangVersion molangVersion,
143 ::std::string const& recipeId,
144 ::std::vector<::HashedString> const& tags
145 );
146
147 MCAPI bool _loadSmithingTrim(
148 ::Json::Value const& objData,
149 ::MolangVersion molangVersion,
150 ::std::string const& recipeId,
151 ::std::vector<::HashedString> const& tags
152 );
153
154 MCAPI ::std::optional<::RecipeUnlockingRequirement> _loadUnlockingRequirementFromJson(
155 ::Json::Value const& obj,
156 ::MolangVersion molangVersion,
157 ::std::string const& recipeId
158 ) const;
159
160 MCAPI void addDyedItemRecipe(
161 ::std::string recipeId,
162 ::ItemInstance const& result,
163 ::RecipeIngredient itemToDye,
165 ::RecipeUnlockingRequirement unlockingReq,
166 int priority,
167 ::SemVersion const& formatVersion
168 );
169
170#ifdef LL_PLAT_C
171 MCAPI void addNetMappedRecipe(::RecipeNetId const& recipeNetId, ::std::unique_ptr<::Recipe> recipe);
172
173 MCAPI void addRecipeListener(::std::weak_ptr<bool> lifePtr, ::std::function<void()> callback);
174#endif
175
176 MCAPI void addShapedRecipe(
177 ::std::string recipeId,
178 ::ItemInstance const& result,
179 ::std::string const& r0,
180 ::std::vector<::Recipes::Type> const& types,
181 ::std::vector<::HashedString> const& tags,
182 int priority,
183 ::std::function<::std::unique_ptr<::ShapedRecipe>(
184 ::std::string,
185 int,
186 int,
187 ::std::vector<::RecipeIngredient> const&,
188 ::std::vector<::ItemInstance> const&,
190 bool,
191 int,
192 ::mce::UUID const*,
194 ::SemVersion const&
195 )> constructor,
196 ::RecipeUnlockingRequirement const& unlockingReq,
197 ::SemVersion const& formatVersion,
198 bool assumeSymmetry
199 );
200
201 MCAPI void addShapedRecipe(
202 ::std::string recipeId,
203 ::std::vector<::ItemInstance> const& result,
204 ::std::vector<::std::string> const& rows,
205 ::std::vector<::Recipes::Type> const& types,
206 ::std::vector<::HashedString> const& tags,
207 int priority,
208 ::std::function<::std::unique_ptr<::ShapedRecipe>(
209 ::std::string,
210 int,
211 int,
212 ::std::vector<::RecipeIngredient> const&,
213 ::std::vector<::ItemInstance> const&,
215 bool,
216 int,
217 ::mce::UUID const*,
219 ::SemVersion const&
220 )> constructor,
221 ::RecipeUnlockingRequirement const& unlockingReq,
222 ::SemVersion const& formatVersion,
223 bool assumeSymmetry
224 );
225
226 MCAPI void addShapedRecipe(
227 ::std::string recipeId,
228 ::ItemInstance const& result,
229 ::std::vector<::std::string> const& rows,
230 ::std::vector<::Recipes::Type> const& types,
231 ::std::vector<::HashedString> const& tags,
232 int priority,
233 ::std::function<::std::unique_ptr<::ShapedRecipe>(
234 ::std::string,
235 int,
236 int,
237 ::std::vector<::RecipeIngredient> const&,
238 ::std::vector<::ItemInstance> const&,
240 bool,
241 int,
242 ::mce::UUID const*,
244 ::SemVersion const&
245 )> constructor,
246 ::RecipeUnlockingRequirement const& unlockingReq,
247 ::SemVersion const& formatVersion,
248 bool assumeSymmetry
249 );
250
251 MCAPI void addShapedRecipe(
252 ::std::string recipeId,
253 ::ItemInstance const& result,
254 ::std::string const& r0,
255 ::std::string const& r1,
256 ::std::vector<::Recipes::Type> const& types,
257 ::std::vector<::HashedString> const& tags,
258 int priority,
259 ::std::function<::std::unique_ptr<::ShapedRecipe>(
260 ::std::string,
261 int,
262 int,
263 ::std::vector<::RecipeIngredient> const&,
264 ::std::vector<::ItemInstance> const&,
266 bool,
267 int,
268 ::mce::UUID const*,
270 ::SemVersion const&
271 )> constructor,
272 ::RecipeUnlockingRequirement const& unlockingReq,
273 ::SemVersion const& formatVersion,
274 bool assumeSymmetry
275 );
276
277 MCAPI void addShapedRecipe(
278 ::std::string recipeId,
279 ::ItemInstance const& result,
280 ::std::string const& r0,
281 ::std::string const& r1,
282 ::std::string const& r2,
283 ::std::vector<::Recipes::Type> const& types,
284 ::std::vector<::HashedString> const& tags,
285 int priority,
286 ::std::function<::std::unique_ptr<::ShapedRecipe>(
287 ::std::string,
288 int,
289 int,
290 ::std::vector<::RecipeIngredient> const&,
291 ::std::vector<::ItemInstance> const&,
293 bool,
294 int,
295 ::mce::UUID const*,
297 ::SemVersion const&
298 )> constructor,
299 ::RecipeUnlockingRequirement const& unlockingReq,
300 ::SemVersion const& formatVersion,
301 bool assumeSymmetry
302 );
303
304 MCAPI void addShapelessRecipe(
305 ::std::string recipeId,
306 ::ItemInstance const& result,
307 ::std::vector<::Recipes::Type> const& types,
308 ::std::vector<::HashedString> const& tags,
309 int priority,
310 ::std::function<::std::unique_ptr<::ShapelessRecipe>(
311 ::std::string,
312 ::std::vector<::RecipeIngredient> const&,
313 ::std::vector<::ItemInstance> const&,
315 int,
316 ::mce::UUID const*,
318 ::SemVersion const&
319 )> constructor,
320 ::RecipeUnlockingRequirement const& unlockingReq,
321 ::SemVersion const& formatVersion
322 );
323
324 MCAPI void addShulkerBoxRecipe(
325 ::std::string& recipeId,
326 ::ItemInstance const& result,
327 ::std::vector<::Recipes::Type> const& types,
328 ::std::vector<::HashedString> const& tags,
329 ::RecipeUnlockingRequirement const& unlockingReq,
330 ::SemVersion const& formatVersion
331 );
332
333 MCAPI void clearRecipes();
334
335 MCAPI ::SemVersion extractRecipeFormatVersion(::Json::Value const& obj);
336
337 MCAPI ::std::pair<::std::string, ::Json::Value> extractRecipeObjInfo(::Json::Value const& obj);
338
339 MCAPI void forEachRecipeFor(::HashedString const& tag, ::brstd::function_ref<void(::Recipe const&)> callback) const;
340
341#ifdef LL_PLAT_C
342 MCAPI void forEachRecipeFor(
343 ::std::vector<::std::string> const& tags,
344 ::brstd::function_ref<void(::Recipe const&)> callback
345 ) const;
346
347 MCAPI void forEachRecipeFor(
348 ::ItemInstance const& result,
349 ::HashedString const& tag,
350 ::brstd::function_ref<void(::Recipe const&)> callback
351 ) const;
352
353 MCAPI void forEachRecipeFor(
354 ::ItemInstance const& result,
355 ::std::vector<::std::string> const& tags,
356 ::brstd::function_ref<void(::Recipe const&)> callback
357 ) const;
358
359 MCAPI void
360 forEachRecipeUntil(::HashedString const& tag, ::brstd::function_ref<bool(::Recipe const&)> callback) const;
361
362 MCAPI void forEachRecipeUntil(
363 ::ItemInstance const& result,
364 ::HashedString const& tag,
365 ::brstd::function_ref<bool(::Recipe const&)> callback
366 ) const;
367
368 MCAPI void forEachRecipeUntil(
369 ::ItemInstance const& result,
370 ::std::vector<::std::string> const& tags,
371 ::brstd::function_ref<bool(::Recipe const&)> callback
372 ) const;
373#endif
374
375 MCAPI void forEachUnlockableRecipe(::brstd::function_ref<void(::Recipe const&)> callback) const;
376
377 MCAPI ::ItemInstance getFurnaceRecipeResult(::ItemStackBase const& item, ::HashedString const& tag) const;
378
379 MCFOLD uint getNumberOfUnlockableRecipes() const;
380
381 MCAPI ::Recipe const* getRecipeByNetId(::RecipeNetId const& netId) const;
382
383 MCAPI ::Recipe* getRecipeFor(::ItemInstance const& result, ::HashedString const& tag) const;
384
385 MCFOLD ::std::map<::HashedString, ::std::map<::std::string, ::std::shared_ptr<::Recipe>>> const&
386 getRecipesAllTags() const;
387
388 MCAPI void init(
389 ::ResourcePackManager& resourcePackManager,
390 ::ExternalRecipeStore& recipeStorage,
391 ::BaseGameVersion const& baseGameVersion,
392 ::Experiments const& experiments
393 );
394
395 MCAPI bool loadRecipe(
396 ::std::pair<::std::string, ::Json::Value> const& recipeObjInfo,
397 ::MinEngineVersion const& minEngineVersion,
398 ::SemVersion const& formatVersion,
399 bool isBaseGamePack
400 );
401
402#ifdef LL_PLAT_C
403 MCAPI void notifyRecipeListeners();
404
405 MCAPI void removeRecipeListener(::std::weak_ptr<bool> lifePtr);
406
407 MCAPI void sortRecipesByPriority(::std::vector<::std::reference_wrapper<::Recipe const>>& recipes) const;
408#endif
409
410 MCAPI ~Recipes();
411 // NOLINTEND
412
413public:
414 // static functions
415 // NOLINTBEGIN
416 MCAPI static ::Recipes::NormalizedRectangularRecipeResults
417 _normalizeRectangularRecipe(::std::vector<::std::string> const& rows);
418 // NOLINTEND
419
420public:
421 // constructor thunks
422 // NOLINTBEGIN
423 MCAPI void* $ctor(::Level* level);
424 // NOLINTEND
425
426public:
427 // destructor thunk
428 // NOLINTBEGIN
429 MCAPI void $dtor();
430 // NOLINTEND
431};
Definition BaseGameVersion.h:13
Definition Block.h:69
Definition Experiments.h:14
Definition ExternalRecipeStore.h:10
Definition HashedString.h:5
Definition ItemInstance.h:15
Definition ItemStackBase.h:52
Definition Item.h:71
Definition Value.h:16
Definition Level.h:255
Definition MinEngineVersion.h:15
Definition PackInstance.h:28
Definition RecipeIngredient.h:16
Definition RecipeUnlockingRequirement.h:10
Definition Recipe.h:32
Definition Recipes.h:68
Definition ResourcePackManager.h:35
Definition SemVersion.h:15
Definition ShapedRecipe.h:16
Definition ShapelessRecipe.h:16
Definition function_ref.h:60
Definition UUID.h:7
Definition RecipeNetIdTag.h:5
Definition SortItemInstanceIdAux.h:10