Skip to content
LeviMC
English
AutoLightDark
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#include "mc/world/item/crafting/RecipeType.h"
15
16// auto generated forward declare list
17// clang-format off
18class BaseGameVersion;
19class Block;
20class Experiments;
23class ILevel;
24class Item;
25class ItemStack;
26class ItemStackBase;
28class Recipe;
31class SemVersion;
32class ShapedRecipe;
33class ShapelessRecipe;
34struct RecipeNetIdTag;
35namespace Json { class Value; }
36namespace mce { class UUID; }
37// clang-format on
38
39class Recipes {
40public:
41 // Recipes inner types declare
42 // clang-format off
44 class Type;
45 struct Buffers;
46 // clang-format on
47
48 // Recipes inner types define
50 public:
51 // member variables
52 // NOLINTBEGIN
53 ::ll::TypedStorage<4, 4, int> mWidth;
54 ::ll::TypedStorage<4, 4, int> mHeight;
55 ::ll::TypedStorage<8, 32, ::std::string> mNormalizedResult;
56 ::ll::TypedStorage<8, 32, ::std::string> mWarning;
57 // NOLINTEND
58 };
59
60 class Type {
61 public:
62 // member variables
63 // NOLINTBEGIN
64 ::ll::TypedStorage<8, 8, ::Item*> mItem;
65 ::ll::TypedStorage<8, 8, ::Block const*> mBlock;
66 ::ll::TypedStorage<8, 24, ::RecipeIngredient> mIngredient;
67 ::ll::TypedStorage<1, 1, char> mC;
68 // NOLINTEND
69 };
70
71 struct Buffers {
72 public:
73 // member variables
74 // NOLINTBEGIN
75 ::ll::TypedStorage<8, 24, ::std::vector<::HashedString>> mTags;
76 ::ll::TypedStorage<8, 24, ::std::vector<::Recipes::Type>> mInputList;
77 ::ll::TypedStorage<8, 24, ::std::vector<::ItemStack>> mOutputInstances;
78 ::ll::TypedStorage<8, 24, ::std::vector<::ItemInstance>> mResultList;
79 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mShapeList;
80 // NOLINTEND
81 };
82
83 using TypeList = ::std::vector<::Recipes::Type>;
84
85public:
86 // member variables
87 // NOLINTBEGIN
88 ::ll::TypedStorage<8, 8, ::ResourcePackManager*> mResourcePackManager;
89 ::ll::TypedStorage<8, 8, ::ExternalRecipeStore> mExternalRecipeStore;
90 ::ll::TypedStorage<8, 16, ::std::map<::HashedString, ::std::map<::std::string, ::std::shared_ptr<::Recipe>>>>
91 mRecipes;
92 ::ll::TypedStorage<1, 1, bool> mInitializing;
93 ::ll::TypedStorage<
94 8,
95 16,
96 ::std::map<::ItemInstance, ::std::unordered_map<::std::string, ::Recipe*>, ::SortItemInstanceIdAux>>
97 mRecipesByOutput;
98 ::ll::TypedStorage<8, 64, ::std::unordered_map<::RecipeNetId, ::Recipe*>> mRecipesByNetId;
99 ::ll::TypedStorage<
100 8,
101 64,
102 ::std::unordered_map<uint64, ::std::unordered_map<uint64, ::std::shared_ptr<::std::vector<::ItemInstance>>>>>
103 mRecipesByInput;
104 ::ll::TypedStorage<8, 24, ::std::vector<::gsl::not_null<::Recipe*>>> mUnlockableRecipes;
105 ::ll::TypedStorage<8, 64, ::std::unordered_map<short, ::std::vector<uint64>>> mUnlockableRecipeIndicesByItem;
106 ::ll::TypedStorage<8, 24, ::std::vector<uint64>> mUnindexedUnlockableRecipeIndices;
107 ::ll::TypedStorage<8, 64, ::std::unordered_set<::std::string>> mUniqueUnlockableRecipeIds;
108 ::ll::TypedStorage<8, 64, ::std::unordered_map<int, ::std::unordered_map<int, ::ItemInstance>>> mFurnaceResults;
109 ::ll::TypedStorage<8, 24, ::std::vector<::std::pair<::std::weak_ptr<bool>, ::std::function<void()>>>> mListeners;
110 ::ll::TypedStorage<8, 8, ::ILevel*> mLevel;
111 // NOLINTEND
112
113public:
114 // prevent constructor by default
115 Recipes();
116
117public:
118 // member functions
119 // NOLINTBEGIN
120 MCNAPI explicit Recipes(::ILevel* level);
121
122#ifdef LL_PLAT_C
123 MCAPI void _addItemRecipe(::std::unique_ptr<::Recipe> recipe);
124#endif
125
126#ifdef LL_PLAT_S
127 MCNAPI void _addItemRecipe(::std::unique_ptr<::Recipe> recipe);
128#endif
129
130 MCAPI void _loadHardcodedRecipes(::BaseGameVersion const& baseGameVersion, ::Experiments const& experiments);
131
132 MCNAPI ::RecipeIngredient const _loadIngredientFromJson(
133 ::Json::Value const& obj,
134 ::MolangVersion molangVersion,
135 bool allowItemCount,
136 bool allowItemGroup
137 ) const;
138
139 MCNAPI ::RecipeIngredient const
140 _loadInputIngredientFromJson(::Json::Value const& obj, ::MinEngineVersion const& minEngineVersion) const;
141
142 MCAPI bool _loadRecipe(
143 ::std::string const& recipeId,
144 ::RecipeType type,
145 ::Json::Value const& objData,
146 ::MinEngineVersion const& minEngineVersion,
147 ::SemVersion const& formatVersion,
148 bool isBaseGamePack,
149 ::Recipes::Buffers& buffers
150 );
151
152 MCNAPI ::std::optional<::RecipeUnlockingRequirement> _loadUnlockingRequirementFromJson(
153 ::Json::Value const& obj,
154 ::MolangVersion molangVersion,
155 ::std::string const& recipeId
156 ) const;
157
158 MCNAPI void addDyedItemRecipe(
159 ::std::string recipeId,
160 ::ItemInstance const& result,
161 ::RecipeIngredient const itemToDye,
162 ::RecipeIngredient const dye,
163 ::RecipeUnlockingRequirement const unlockingReq,
164 int const priority,
165 ::SemVersion const& formatVersion
166 );
167
168#ifdef LL_PLAT_C
169 MCNAPI void addNetMappedRecipe(::RecipeNetId const& recipeNetId, ::std::unique_ptr<::Recipe> recipe);
170
171 MCAPI void addRecipeListener(::std::weak_ptr<bool> lifePtr, ::std::function<void()> callback);
172#endif
173
174 MCNAPI void addShapedRecipe(
175 ::std::string recipeId,
176 ::ItemInstance const& result,
177 ::std::string const& r0,
178 ::std::vector<::Recipes::Type> const& types,
179 ::std::vector<::HashedString> const& tags,
180 int const priority,
181 ::std::function<::std::unique_ptr<::ShapedRecipe>(
182 ::std::string,
183 int,
184 int,
185 ::std::vector<::RecipeIngredient> const&,
186 ::std::vector<::ItemInstance> const&,
188 bool,
189 int,
190 ::mce::UUID const*,
192 ::SemVersion const&
193 )> constructor,
194 ::RecipeUnlockingRequirement const& unlockingReq,
195 ::SemVersion const& formatVersion,
196 bool const assumeSymmetry
197 );
198
199 MCNAPI void addShapedRecipe(
200 ::std::string recipeId,
201 ::std::vector<::ItemInstance> const& result,
202 ::std::vector<::std::string> const& rows,
203 ::std::vector<::Recipes::Type> const& types,
204 ::std::vector<::HashedString> const& tags,
205 int const priority,
206 ::std::function<::std::unique_ptr<::ShapedRecipe>(
207 ::std::string,
208 int,
209 int,
210 ::std::vector<::RecipeIngredient> const&,
211 ::std::vector<::ItemInstance> const&,
213 bool,
214 int,
215 ::mce::UUID const*,
217 ::SemVersion const&
218 )> constructor,
219 ::RecipeUnlockingRequirement const& unlockingReq,
220 ::SemVersion const& formatVersion,
221 bool const assumeSymmetry
222 );
223
224 MCAPI void addShapedRecipe(
225 ::std::string recipeId,
226 ::ItemInstance const& result,
227 ::std::vector<::std::string> const& rows,
228 ::std::vector<::Recipes::Type> const& types,
229 ::std::vector<::HashedString> const& tags,
230 int const priority,
231 ::std::function<::std::unique_ptr<::ShapedRecipe>(
232 ::std::string,
233 int,
234 int,
235 ::std::vector<::RecipeIngredient> const&,
236 ::std::vector<::ItemInstance> const&,
238 bool,
239 int,
240 ::mce::UUID const*,
242 ::SemVersion const&
243 )> constructor,
244 ::RecipeUnlockingRequirement const& unlockingReq,
245 ::SemVersion const& formatVersion,
246 bool const assumeSymmetry
247 );
248
249 MCNAPI void addShapedRecipe(
250 ::std::string recipeId,
251 ::ItemInstance const& result,
252 ::std::string const& r0,
253 ::std::string const& r1,
254 ::std::vector<::Recipes::Type> const& types,
255 ::std::vector<::HashedString> const& tags,
256 int priority,
257 ::std::function<::std::unique_ptr<::ShapedRecipe>(
258 ::std::string,
259 int,
260 int,
261 ::std::vector<::RecipeIngredient> const&,
262 ::std::vector<::ItemInstance> const&,
264 bool,
265 int,
266 ::mce::UUID const*,
268 ::SemVersion const&
269 )> constructor,
270 ::RecipeUnlockingRequirement const& unlockingReq,
271 ::SemVersion const& formatVersion,
272 bool assumeSymmetry
273 );
274
275 MCNAPI void addShapedRecipe(
276 ::std::string recipeId,
277 ::ItemInstance const& result,
278 ::std::string const& r0,
279 ::std::string const& r1,
280 ::std::string const& r2,
281 ::std::vector<::Recipes::Type> const& types,
282 ::std::vector<::HashedString> const& tags,
283 int priority,
284 ::std::function<::std::unique_ptr<::ShapedRecipe>(
285 ::std::string,
286 int,
287 int,
288 ::std::vector<::RecipeIngredient> const&,
289 ::std::vector<::ItemInstance> const&,
291 bool,
292 int,
293 ::mce::UUID const*,
295 ::SemVersion const&
296 )> constructor,
297 ::RecipeUnlockingRequirement const& unlockingReq,
298 ::SemVersion const& formatVersion,
299 bool assumeSymmetry
300 );
301
303 ::std::string recipeId,
304 ::ItemInstance const& result,
305 ::std::vector<::Recipes::Type> const& types,
306 ::std::vector<::HashedString> const& tags,
307 int priority,
308 ::std::function<::std::unique_ptr<::ShapelessRecipe>(
309 ::std::string,
310 ::std::vector<::RecipeIngredient> const&,
311 ::std::vector<::ItemInstance> const&,
313 int,
314 ::mce::UUID const*,
316 ::SemVersion const&
317 )> constructor,
318 ::RecipeUnlockingRequirement const& unlockingReq,
319 ::SemVersion const& formatVersion
320 );
321
323 ::std::string& recipeId,
324 ::ItemInstance const& result,
325 ::std::vector<::Recipes::Type> const& types,
326 ::std::vector<::HashedString> const& tags,
327 ::RecipeUnlockingRequirement const& unlockingReq,
328 ::SemVersion const& formatVersion
329 );
330
331 MCAPI void clearRecipes();
332
333 MCAPI void forEachRecipeFor(::HashedString const& tag, ::brstd::function_ref<void(::Recipe const&)> callback) const;
334
335#ifdef LL_PLAT_C
336 MCNAPI void forEachRecipeFor(
337 ::std::vector<::std::string> const& tags,
338 ::brstd::function_ref<void(::Recipe const&)> callback
339 ) const;
340
341 MCNAPI void forEachRecipeFor(
342 ::ItemInstance const& result,
343 ::HashedString const& tag,
344 ::brstd::function_ref<void(::Recipe const&)> const callback
345 ) const;
346
347 MCNAPI void forEachRecipeFor(
348 ::ItemInstance const& result,
349 ::std::vector<::std::string> const& tags,
350 ::brstd::function_ref<void(::Recipe const&)> callback
351 ) const;
352
353 MCNAPI void
354 forEachRecipeUntil(::HashedString const& tag, ::brstd::function_ref<bool(::Recipe const&)> callback) const;
355
356 MCNAPI void forEachRecipeUntil(
357 ::ItemInstance const& result,
358 ::HashedString const& tag,
359 ::brstd::function_ref<bool(::Recipe const&)> const callback
360 ) const;
361
362 MCNAPI void forEachRecipeUntil(
363 ::ItemInstance const& result,
364 ::std::vector<::std::string> const& tags,
365 ::brstd::function_ref<bool(::Recipe const&)> callback
366 ) const;
367#endif
368
370 ::std::vector<::RecipeIngredient> const& ingredients,
371 ::brstd::function_ref<void(::Recipe const&)> callback
372 ) const;
373
374#ifdef LL_PLAT_C
375 MCNAPI ::std::vector<::ItemInstance>
376 getFurnaceRecipeFor(::ItemStackBase const& output, ::HashedString const& tag) const;
377#endif
378
379 MCAPI ::ItemInstance getFurnaceRecipeResult(::ItemStackBase const& item, ::HashedString const& tag) const;
380
381 MCAPI ::Recipe const* getRecipeByNetId(::RecipeNetId const& netId) const;
382
383 MCNAPI ::Recipe* getRecipeFor(::ItemInstance const& result, ::HashedString const& tag) const;
384
385 MCAPI void init(
386 ::ResourcePackManager& resourcePackManager,
387 ::ExternalRecipeStore& recipeStorage,
389 ::BaseGameVersion const& baseGameVersion,
390 ::Experiments const& experiments,
391 ::IEducationOptions const& educationOptions
392 );
393
394#ifdef LL_PLAT_C
395 MCNAPI void notifyRecipeListeners();
396
397 MCNAPI void removeRecipeListener(::std::weak_ptr<bool> lifePtr);
398#endif
399
400 MCAPI ~Recipes();
401 // NOLINTEND
402
403public:
404 // constructor thunks
405 // NOLINTBEGIN
406 MCNAPI void* $ctor(::ILevel* level);
407 // NOLINTEND
408
409public:
410 // destructor thunk
411 // NOLINTBEGIN
412 MCAPI void $dtor();
413 // NOLINTEND
414};
Definition BaseGameVersion.h:8
Definition Block.h:42
Definition Experiments.h:14
Definition ExternalRecipeStore.h:10
Definition HashedString.h:5
Definition IAssetLoadWorkQueue.h:18
Definition IEducationOptions.h:8
Definition ILevel.h:223
Definition ItemInstance.h:15
Definition ItemStackBase.h:45
Definition ItemStack.h:26
Definition Item.h:73
Definition Value.h:16
Definition MinEngineVersion.h:15
Definition RecipeIngredient.h:8
Definition RecipeUnlockingRequirement.h:10
Definition Recipe.h:32
Definition Recipes.h:60
MCAPI::RecipeIngredient const _loadIngredientFromJson(::Json::Value const &obj, ::MolangVersion molangVersion, bool allowItemCount, bool allowItemGroup) const
MCAPI void addShapedRecipe(::std::string recipeId, ::ItemInstance const &result, ::std::string const &r0, ::std::vector<::Recipes::Type > const &types, ::std::vector<::HashedString > const &tags, int const priority, ::std::function<::std::unique_ptr<::ShapedRecipe >(::std::string, int, int, ::std::vector<::RecipeIngredient > const &, ::std::vector<::ItemInstance > const &, ::HashedString, bool, int, ::mce::UUID const *, ::RecipeUnlockingRequirement const &, ::SemVersion const &)> constructor, ::RecipeUnlockingRequirement const &unlockingReq, ::SemVersion const &formatVersion, bool const assumeSymmetry)
MCAPI void addShapedRecipe(::std::string recipeId, ::std::vector<::ItemInstance > const &result, ::std::vector<::std::string > const &rows, ::std::vector<::Recipes::Type > const &types, ::std::vector<::HashedString > const &tags, int const priority, ::std::function<::std::unique_ptr<::ShapedRecipe >(::std::string, int, int, ::std::vector<::RecipeIngredient > const &, ::std::vector<::ItemInstance > const &, ::HashedString, bool, int, ::mce::UUID const *, ::RecipeUnlockingRequirement const &, ::SemVersion const &)> constructor, ::RecipeUnlockingRequirement const &unlockingReq, ::SemVersion const &formatVersion, bool const assumeSymmetry)
MCAPI void addShulkerBoxRecipe(::std::string &recipeId, ::ItemInstance const &result, ::std::vector<::Recipes::Type > const &types, ::std::vector<::HashedString > const &tags, ::RecipeUnlockingRequirement const &unlockingReq, ::SemVersion const &formatVersion)
MCAPI ::std::optional<::RecipeUnlockingRequirement > _loadUnlockingRequirementFromJson(::Json::Value const &obj, ::MolangVersion molangVersion, ::std::string const &recipeId) const
MCAPI void addShapedRecipe(::std::string recipeId, ::ItemInstance const &result, ::std::string const &r0, ::std::string const &r1, ::std::string const &r2, ::std::vector<::Recipes::Type > const &types, ::std::vector<::HashedString > const &tags, int priority, ::std::function<::std::unique_ptr<::ShapedRecipe >(::std::string, int, int, ::std::vector<::RecipeIngredient > const &, ::std::vector<::ItemInstance > const &, ::HashedString, bool, int, ::mce::UUID const *, ::RecipeUnlockingRequirement const &, ::SemVersion const &)> constructor, ::RecipeUnlockingRequirement const &unlockingReq, ::SemVersion const &formatVersion, bool assumeSymmetry)
MCAPI Recipes(::ILevel *level)
MCAPI void addDyedItemRecipe(::std::string recipeId, ::ItemInstance const &result, ::RecipeIngredient const itemToDye, ::RecipeIngredient const dye, ::RecipeUnlockingRequirement const unlockingReq, int const priority, ::SemVersion const &formatVersion)
MCAPI void * $ctor(::ILevel *level)
MCAPI void forEachUnlockableRecipeForIngredients(::std::vector<::RecipeIngredient > const &ingredients, ::brstd::function_ref< void(::Recipe const &)> callback) const
MCAPI::Recipe * getRecipeFor(::ItemInstance const &result, ::HashedString const &tag) const
MCAPI void addShapelessRecipe(::std::string recipeId, ::ItemInstance const &result, ::std::vector<::Recipes::Type > const &types, ::std::vector<::HashedString > const &tags, int priority, ::std::function<::std::unique_ptr<::ShapelessRecipe >(::std::string, ::std::vector<::RecipeIngredient > const &, ::std::vector<::ItemInstance > const &, ::HashedString, int, ::mce::UUID const *, ::RecipeUnlockingRequirement const &, ::SemVersion const &)> constructor, ::RecipeUnlockingRequirement const &unlockingReq, ::SemVersion const &formatVersion)
MCAPI void addShapedRecipe(::std::string recipeId, ::ItemInstance const &result, ::std::string const &r0, ::std::string const &r1, ::std::vector<::Recipes::Type > const &types, ::std::vector<::HashedString > const &tags, int priority, ::std::function<::std::unique_ptr<::ShapedRecipe >(::std::string, int, int, ::std::vector<::RecipeIngredient > const &, ::std::vector<::ItemInstance > const &, ::HashedString, bool, int, ::mce::UUID const *, ::RecipeUnlockingRequirement const &, ::SemVersion const &)> constructor, ::RecipeUnlockingRequirement const &unlockingReq, ::SemVersion const &formatVersion, bool assumeSymmetry)
MCAPI::RecipeIngredient const _loadInputIngredientFromJson(::Json::Value const &obj, ::MinEngineVersion const &minEngineVersion) const
Definition ResourcePackManager.h:29
Definition SemVersion.h:15
Definition ShapedRecipe.h:16
Definition ShapelessRecipe.h:16
Definition function_ref.h:60
Definition UUID.h:8
Definition RecipeNetIdTag.h:5
Definition Recipes.h:71
Definition SortItemInstanceIdAux.h:5