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