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