LeviLamina
Loading...
Searching...
No Matches
ContainerManagerController.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5// auto generated inclusion list
6#include "mc/deps/core/utility/pub_sub/Subscription.h"
7#include "mc/deps/shared_types/legacy/LevelSoundEvent.h"
8#include "mc/world/containers/ContainerEnumName.h"
9#include "mc/world/containers/controllers/ItemTakeType.h"
10#include "mc/world/containers/managers/controllers/ItemSpecialLocation.h"
11#include "mc/world/containers/managers/controllers/ItemTransferType.h"
12#include "mc/world/containers/models/ContainerCategory.h"
13#include "mc/world/containers/models/ContainerExpandStatus.h"
14#include "mc/world/inventory/simulation/ContainerScreenRequestActionType.h"
15
16// auto generated forward declare list
17// clang-format off
18class BlockPos;
19class Container;
22class ContainerModel;
25class ItemInstance;
26class ItemStack;
27class ItemStackBase;
28struct ActorUniqueID;
29struct AutoPlaceItem;
30struct AutoPlaceRequest;
31struct AutoPlaceResult;
39struct ItemStateData;
42struct SelectedSlotInfo;
43struct SlotData;
44namespace Bedrock::Safety { class RedactableString; }
45// clang-format on
46
47class ContainerManagerController : public ::std::enable_shared_from_this<::ContainerManagerController> {
48public:
49 // member variables
50 // NOLINTBEGIN
51 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::ContainerManagerModel>> mContainerManagerModel;
52 ::ll::TypedStorage<8, 64, ::std::unordered_map<::std::string, ::std::shared_ptr<::ContainerController>>>
53 mContainers;
54 ::ll::TypedStorage<8, 24, ::std::vector<::ContainerSplitControl>> mContainerSplitItemStackItems;
55 ::ll::TypedStorage<8, 24, ::std::vector<::ContainerSimulationSplitStack>> mContainerSimulationSplitItemStacks;
56 ::ll::TypedStorage<4, 4, int> mSplitItemRemainder;
57 ::ll::TypedStorage<1, 1, bool> mContainerDirty;
58 ::ll::TypedStorage<1, 1, bool> mContainersClosed;
59 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::ContainerScreenSimulation>> mSimulation;
60 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mDynamicContainerNotifier;
61 // NOLINTEND
62
63public:
64 // virtual functions
65 // NOLINTBEGIN
66#ifdef LL_PLAT_S
67 virtual ~ContainerManagerController() = default;
68#else // LL_PLAT_C
70#endif
71
72 virtual void postInit(::std::weak_ptr<::ContainerManagerController>);
73
74 virtual void registerContainerCallbacks();
75
76 virtual void setPreviewItemName(::Bedrock::Safety::RedactableString const& name);
77
78 virtual void setItemName(::Bedrock::Safety::RedactableString const& name);
79
80 virtual ::Bedrock::Safety::RedactableString const& getPreviewItemName() const;
81
82 virtual ::Bedrock::Safety::RedactableString const& getItemName() const;
83
84 virtual void updatePreviewItem();
85
86 virtual ::ItemStackBase const& getTakeableItemStackBase(::SlotData const& slot) const;
87
88 virtual void handleTakeAmount(::SlotData const& dstSlot, int amount, ::SlotData const& srcSlot);
89
90 virtual void handleTakeAll(::SlotData const& dstSlot, ::SlotData const& srcSlot);
91
92 virtual void handlePlaceAll(::SelectedSlotInfo const& selected, ::SlotData const& dstSlot);
93
94 virtual void handleTakeHalf(::SlotData const& dstSlot, ::SlotData const& srcSlot);
95
96 virtual void handlePlaceOne(::SlotData const& srcSlot, ::SlotData const& dstSlot);
97
98 virtual void handlePlaceAmount(::SlotData const& srcSlot, int amount, ::SlotData const& dstSlot);
99
100 virtual int handleAutoPlace(
101 ::SlotData const& srcSlot,
102 int amount,
103 ::std::vector<::AutoPlaceItem> const& autoPlaceOrder,
104 ::std::vector<::AutoPlaceResult>& destinations
105 );
106
107 virtual int handleAutoPlaceStack(
108 ::SlotData const& srcSlot,
109 ::ItemTakeType takeType,
110 ::std::vector<::AutoPlaceItem> const& autoPlaceOrder,
111 ::std::vector<::AutoPlaceResult>& destinations
112 );
113
114 virtual void handleSplitSingle(::SlotData const& srcSlot, ::SlotData const& dstSlot);
115
116 virtual void handleSplitMultiple(
117 ::SelectedSlotInfo const& selected,
118 ::ItemInstance const& itemTemplate,
119 ::SlotData const& dstSlot
120 );
121
122 virtual bool handleCoalesce(
123 ::SlotData const& dstSlot,
124 ::std::vector<::std::string> const& coalesceOrder,
125 ::std::string const& coalesceSrc
126 );
127
128 virtual bool handleSwap(::SlotData const& slotA, ::SlotData const& slotB);
129
130 virtual bool handleDrop(::SlotData const& srcSlot, ::ItemTransferAmount const transferAmount);
131
132 virtual bool handleDestroy(::SelectedSlotInfo const& selected, ::ItemTransferAmount const transferAmount);
133
134 virtual bool handleDestroy(::SlotData const& srcSlot, ::ItemTransferAmount const transferAmount);
135
136 virtual bool handleConsume(::SlotData const& srcSlot, ::ItemTransferAmount const transferAmount);
137
138 virtual void handleAddToStack(::SlotData const& dstSlot, ::SlotData const& srcSlot, ::ItemTakeType type);
139
140 virtual void closeContainers();
141
142 virtual bool isOutputSlot(::std::string const& collectionName) const;
143
144 virtual void _updateItemStackRequest(
145 ::ContainerScreenRequestActionType,
148 );
149
150 virtual ::CreateContainerItemScope _makeCreateItemScope(::SlotData const&, ::ItemTransferAmount const&);
151
152 virtual void _onItemTransferredFrom(::ItemInstance const& stack, ::SlotData const& srcSlot);
153
154 virtual void _onItemTransferredTo(::ItemInstance const& stack, ::SlotData const& dstSlot);
155
156 virtual void _onItemAcquired(::ItemInstance const& stack, ::SlotData const& srcSlot);
157
158 virtual void _onItemPlaced(::ItemInstance const& stack, ::SlotData const& dstSlot);
159
160 virtual void _onContainerScreenAction(::ContainerScreenActionResult const& result);
161 // NOLINTEND
162
163public:
164 // member functions
165 // NOLINTBEGIN
166 MCNAPI_C void _addContainer(::std::shared_ptr<::ContainerController> uiContainer);
167
168 MCNAPI_C void _addOutputsAsDestinations(
169 ::ContainerScreenActionResult const& result,
170 ::std::vector<::AutoPlaceResult>& destinations
171 ) const;
172
173 MCNAPI_C int _appendAutoPlaceOutputs(
174 ::ItemTransferRequest& request,
175 ::ItemStackBase const& itemToPlace,
176 int requestAmount,
177 ::std::vector<::AutoPlaceItem> const& autoPlaceOrder,
178 int placementGroup
179 );
180
181 MCNAPI_C void _autoPlaceOrDrop(
182 ::SlotData const& srcSlot,
184 ::std::vector<::AutoPlaceItem> const& autoPlaceOrder
185 );
186
187 MCNAPI_C int _buildAutoPlaceRequest(
188 ::SlotData const& srcSlot,
189 ::ItemTransferAmount requestTakeAmount,
190 ::std::vector<::AutoPlaceItem> const& autoPlaceOrder,
191 ::ItemTransferRequest& request
192 );
193
194 MCNAPI_C int _bulkAutoPlaceOutput(
195 int craftableCount,
196 int amount,
197 ::ItemInstance outputItem,
198 ::SlotData const& srcSlot,
199 ::std::vector<::AutoPlaceItem> const& autoPlaceOrder,
200 ::std::vector<::AutoPlaceResult>& destinations
201 );
202
203 MCNAPI_C ::AutoPlaceRequest const _canAutoPlace(
204 ::SlotData const& srcSlot,
205 ::ItemTransferAmount requestTakeAmount,
206 ::std::vector<::AutoPlaceItem> const& autoPlaceOrder
207 );
208
209 MCNAPI_C bool _canCraftIntoStorageItem(::ItemInstance const& itemToCraft, ::ItemStack const& storageItem);
210
211 MCNAPI_C void _clearCreativeHotbar();
212
213 MCNAPI_C void _closeContainers(::ContainerManagerModel& containerModel);
214
215 MCNAPI_C ::ContainerValidationSlotData _getContainerValidationSlotData(::SlotData const& slotData) const;
216
217 MCNAPI_C ::ItemStack const& _getItem(::SlotData const& slot, bool canBeEmpty) const;
218
219 MCNAPI_C ::ItemStack const& _getItem0(::ContainerEnumName collectionEnumName) const;
220
221 MCNAPI_C ::std::tuple<::ItemStack const&, ::std::shared_ptr<::ContainerController>>
222 _getItemAndContainerController(::SlotData const& slot, bool canBeEmpty) const;
223
224 MCNAPI_C ::std::unordered_map<::FullContainerName, ::std::shared_ptr<::Container>> _getPredictiveContainers();
225
226 MCNAPI_C ::ContainerScreenContext _getScreenContext() const;
227
228 MCNAPI_C ::SlotData _getSlotData(::ContainerValidationSlotData const& containerValidationSlotData) const;
229
230 MCNAPI_C bool _handleAutoPlace(::ItemTransferRequest const& request);
231
232 MCNAPI_C void _handleSplitMultiple(
233 ::SelectedSlotInfo const& selected,
234 ::ItemInstance const& itemTemplate,
235 ::SlotData const& dstSlot
236 );
237
238 MCNAPI_C bool _isContainerSimulationEnabled() const;
239
240 MCNAPI_C void _onItemTransferring(
241 ::ItemStack const& stack,
242 ::SlotData const& srcSlot,
243 ::ContainerModel* srcModel,
244 ::SlotData const& dstSlot,
245 ::ContainerModel* dstModel
246 );
247
248 MCNAPI_C void _onTransfer(::ContainerScreenActionResult const& result);
249
250 MCNAPI_C void _playCraftingSound(
251 ::std::weak_ptr<::ContainerManagerModel> const& containerManagerModel,
252 ::SharedTypes::Legacy::LevelSoundEvent soundEvent
253 );
254
255 MCNAPI_C void _registerSetThisDirtyCallback(::std::shared_ptr<::ContainerModel> containerModel);
256
257 MCNAPI_C ::ContainerCategory
258 _resolveToRealSourceSlot(::ContainerModel* srcModel, ::SlotData const& srcSlot, ::SlotData& realSrcSlot) const;
259
260 MCNAPI_C void _returnToPlayerOrDrop(::SlotData const& srcSlot, ::ItemTransferAmount amount);
261
262 MCNAPI_C void _shiftLeftStorageItemContents(
263 ::std::string const& collectionName,
264 int selectedItemIdx,
265 ::std::vector<::ItemStack> const& items
266 );
267
268 MCNAPI_C bool _transfer(
269 ::ItemTransferType transferType,
270 ::SlotData const& dstSlot,
271 ::SlotData const& srcSlot,
272 ::ItemTransferAmount transferAmount,
273 bool allowSwap,
274 bool allowVisualOnlySameItemSwap
275 );
276
277 MCNAPI_C bool _transferAll(::ItemTransferType transferType, ::SlotData const& dstSlot, ::SlotData const& srcSlot);
278
279 MCNAPI_C bool
280 _transferSpecial(::SlotData const& srcSlot, ::ItemTransferAmount transferAmount, ::ItemSpecialLocation location);
281
282 MCNAPI_C ::ItemStackRequestScope _tryBeginItemStackRequest(::ContainerManagerModel const* managerModel);
283
284 MCNAPI_C void
285 _updateItemStackRequest(::ContainerScreenActionResult const& result, ::ItemStackRequestScope& requestScope);
286
287 MCNAPI_C bool
288 _updatePreviewItem(::ItemInstance& previewItem, ::ItemInstance const& newItem, ::std::string const& collectionName);
289
290 MCNAPI_C ::std::string getBlockName(::BlockPos const& blockPos) const;
291
292 MCNAPI_C ::std::shared_ptr<::ContainerController> getContainerController(::std::string const& containerName) const;
293
294 MCNAPI_C ::std::weak_ptr<::ContainerModel> getContainerModel(::std::string const& containerName) const;
295
296 MCNAPI_C int getContainerSize(::std::string const& collectionName) const;
297
298 MCNAPI_C void getCurrentContainerStateList(::std::vector<::ItemStateData>& inventoryState);
299
300 MCNAPI_C ::std::shared_ptr<::ContainerModel> getDynamicContainerModel(::FullContainerName const& name);
301
302 MCNAPI_C ::std::string getEntityName(::ActorUniqueID const& entityUniqueID) const;
303
304 MCNAPI_C ::std::string getExpandoGroupName(::std::string const& collectionName, int collectionIndex) const;
305
306 MCNAPI_C ::ContainerExpandStatus getExpandoStatus(::std::string const& containerName, int collectionIndex) const;
307
308 MCNAPI_C ::ItemStack const& getItemStack(::std::string const& collectionName, int collectionIndex) const;
309
310 MCNAPI_C bool handleMoveItemFromSlotIntoStorageItem(
311 ::SlotData const& srcSlot,
312 ::ItemStack const& dstStorageItem,
313 ::std::optional<uchar> requestedAmount
314 );
315
316 MCNAPI_C bool handleMoveSelectedItemFromStorageItem(
317 ::ItemStack const& srcStorageItem,
318 int selectedItemIdx,
319 ::SlotData const& dstSlot
320 );
321
322 MCNAPI_C bool handleMoveSelectedItemFromStorageItemToStorageItem(
323 ::ItemStack const& srcStorageItem,
324 int selectedItemIdx,
325 ::ItemStack const& dstStorageItem
326 );
327
328 MCNAPI_C bool handleMoveTopItemFromStorageItem(::ItemStack const& srcStorageItem, ::SlotData const& dstSlot);
329
330 MCNAPI_C bool hasContainerController(::std::string const& containerName) const;
331
332 MCNAPI_C bool isExpandoItem(::std::string const& collectionName, int collectionIndex);
333
334 MCNAPI_C bool isItemFiltered(::std::vector<::std::string> containerNames, ::ItemStackBase const& item) const;
335
336 MCNAPI_C bool isValid(float pickRange);
337
338 MCNAPI_C bool playerHasRoomForItem(::ItemInstance const& item) const;
339
340 MCNAPI_C void resetSplitStack();
341
342 MCNAPI_C void sortStorageContainer(::std::string const& storageName);
343 // NOLINTEND
344
345public:
346 // static variables
347 // NOLINTBEGIN
348 MCNAPI_C static ::std::string_view const& TRANSFER_NO_DESTINATION();
349
350 MCNAPI_C static ::std::string_view const& TRANSFER_NO_ORIGIN();
351 // NOLINTEND
352
353public:
354 // constructor thunks
355 // NOLINTBEGIN
356 MCNAPI_C void* $ctor(::std::weak_ptr<::ContainerManagerModel> containerManagerModel);
357 // NOLINTEND
358
359public:
360 // destructor thunk
361 // NOLINTBEGIN
362 MCNAPI void $dtor();
363 // NOLINTEND
364
365public:
366 // virtual function thunks
367 // NOLINTBEGIN
368#ifdef LL_PLAT_C
369 MCNAPI void $postInit(::std::weak_ptr<::ContainerManagerController>);
370
371 MCNAPI void $registerContainerCallbacks();
372
373 MCNAPI void $setPreviewItemName(::Bedrock::Safety::RedactableString const& name);
374
375 MCNAPI void $setItemName(::Bedrock::Safety::RedactableString const& name);
376
377 MCNAPI ::Bedrock::Safety::RedactableString const& $getPreviewItemName() const;
378
379 MCNAPI ::Bedrock::Safety::RedactableString const& $getItemName() const;
380
381 MCNAPI void $updatePreviewItem();
382
383 MCNAPI ::ItemStackBase const& $getTakeableItemStackBase(::SlotData const& slot) const;
384
385 MCNAPI void $handleTakeAmount(::SlotData const& dstSlot, int amount, ::SlotData const& srcSlot);
386
387 MCNAPI void $handleTakeAll(::SlotData const& dstSlot, ::SlotData const& srcSlot);
388
389 MCNAPI void $handlePlaceAll(::SelectedSlotInfo const& selected, ::SlotData const& dstSlot);
390
391 MCNAPI void $handleTakeHalf(::SlotData const& dstSlot, ::SlotData const& srcSlot);
392
393 MCNAPI void $handlePlaceOne(::SlotData const& srcSlot, ::SlotData const& dstSlot);
394
395 MCNAPI void $handlePlaceAmount(::SlotData const& srcSlot, int amount, ::SlotData const& dstSlot);
396
397 MCNAPI int $handleAutoPlace(
398 ::SlotData const& srcSlot,
399 int amount,
400 ::std::vector<::AutoPlaceItem> const& autoPlaceOrder,
401 ::std::vector<::AutoPlaceResult>& destinations
402 );
403
404 MCNAPI int $handleAutoPlaceStack(
405 ::SlotData const& srcSlot,
406 ::ItemTakeType takeType,
407 ::std::vector<::AutoPlaceItem> const& autoPlaceOrder,
408 ::std::vector<::AutoPlaceResult>& destinations
409 );
410
411 MCNAPI void $handleSplitSingle(::SlotData const& srcSlot, ::SlotData const& dstSlot);
412
413 MCNAPI void $handleSplitMultiple(
414 ::SelectedSlotInfo const& selected,
415 ::ItemInstance const& itemTemplate,
416 ::SlotData const& dstSlot
417 );
418
419 MCNAPI bool $handleCoalesce(
420 ::SlotData const& dstSlot,
421 ::std::vector<::std::string> const& coalesceOrder,
422 ::std::string const& coalesceSrc
423 );
424
425 MCNAPI bool $handleSwap(::SlotData const& slotA, ::SlotData const& slotB);
426
427 MCNAPI bool $handleDrop(::SlotData const& srcSlot, ::ItemTransferAmount const transferAmount);
428
429 MCNAPI bool $handleDestroy(::SelectedSlotInfo const& selected, ::ItemTransferAmount const transferAmount);
430
431 MCNAPI bool $handleDestroy(::SlotData const& srcSlot, ::ItemTransferAmount const transferAmount);
432
433 MCNAPI bool $handleConsume(::SlotData const& srcSlot, ::ItemTransferAmount const transferAmount);
434
435 MCNAPI void $handleAddToStack(::SlotData const& dstSlot, ::SlotData const& srcSlot, ::ItemTakeType type);
436
437 MCNAPI void $closeContainers();
438
439 MCNAPI bool $isOutputSlot(::std::string const& collectionName) const;
440
441 MCNAPI void $_updateItemStackRequest(
442 ::ContainerScreenRequestActionType,
445 );
446
447 MCNAPI ::CreateContainerItemScope $_makeCreateItemScope(::SlotData const&, ::ItemTransferAmount const&);
448
449 MCNAPI void $_onItemTransferredFrom(::ItemInstance const& stack, ::SlotData const& srcSlot);
450
451 MCNAPI void $_onItemTransferredTo(::ItemInstance const& stack, ::SlotData const& dstSlot);
452
453 MCNAPI void $_onItemAcquired(::ItemInstance const& stack, ::SlotData const& srcSlot);
454
455 MCNAPI void $_onItemPlaced(::ItemInstance const& stack, ::SlotData const& dstSlot);
456
457 MCNAPI void $_onContainerScreenAction(::ContainerScreenActionResult const& result);
458#endif
459
460
461 // NOLINTEND
462
463public:
464 // vftables
465 // NOLINTBEGIN
466 MCNAPI static void** $vftable();
467 // NOLINTEND
468};
Definition RedactableString.h:10
Definition BlockPos.h:19
Definition ContainerController.h:20
Definition ContainerManagerController.h:47
static MCAPI void ** $vftable()
Definition ContainerManagerModel.h:32
Definition ContainerModel.h:27
Definition ContainerScreenContext.h:17
Definition ContainerScreenSimulation.h:30
Definition Container.h:33
Definition ItemInstance.h:15
Definition ItemStackBase.h:44
Definition ItemStack.h:26
Definition ActorUniqueID.h:5
Definition AutoPlaceItem.h:5
Definition AutoPlaceRequest.h:5
Definition AutoPlaceResult.h:5
Definition ContainerScreenActionResult.h:11
Definition ContainerSimulationSplitStack.h:8
Definition ContainerSplitControl.h:9
Definition ContainerValidationSlotData.h:8
Definition CreateContainerItemScope.h:18
Definition FullContainerName.h:8
Definition ItemStackRequestScope.h:14
Definition ItemStateData.h:5
Definition ItemTransferAmount.h:5
Definition ItemTransferRequest.h:10
Definition SelectedSlotInfo.h:5
Definition SlotData.h:5