Skip to content
LeviMC
English
AutoLightDark
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 MCNAPI explicit ContainerManagerController(::std::weak_ptr<::ContainerManagerModel> containerManagerModel);
203
204 MCNAPI void _addContainer(::std::shared_ptr<::ContainerController> uiContainer);
205
206 MCNAPI 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 MCNAPI void _autoPlaceOrDrop(
220 ::SlotData const& srcSlot,
222 ::std::vector<::AutoPlaceItem> const& autoPlaceOrder
223 );
224
225 MCNAPI int _buildAutoPlaceRequest(
226 ::SlotData const& srcSlot,
227 ::ItemTransferAmount requestTakeAmount,
228 ::std::vector<::AutoPlaceItem> const& autoPlaceOrder,
229 ::ItemTransferRequest& request
230 );
231
232 MCNAPI 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 MCNAPI bool _canCraftIntoStorageItem(::ItemInstance const& itemToCraft, ::ItemStack const& storageItem);
242
243 MCNAPI void _clearCreativeHotbar();
244
245 MCNAPI void _closeContainers(::ContainerManagerModel& containerModel);
246
247 MCNAPI ::ContainerValidationSlotData _getContainerValidationSlotData(::SlotData const& slotData) const;
248
249 MCNAPI ::ItemStack const& _getItem(::SlotData const& slot, bool canBeEmpty) const;
250
251 MCNAPI ::ItemStack const& _getItem0(::ContainerEnumName collectionEnumName) const;
252
253 MCNAPI ::std::unordered_map<::FullContainerName, ::std::shared_ptr<::Container>> _getPredictiveContainers();
254
255 MCNAPI ::SlotData _getSlotData(::ContainerValidationSlotData const& containerValidationSlotData) const;
256
257 MCNAPI bool _handleAutoPlace(::ItemTransferRequest const& request);
258
259 MCNAPI bool _isContainerSimulationEnabled() const;
260
261 MCNAPI void _onItemTransferring(
262 ::ItemStack const& stack,
263 ::SlotData const& srcSlot,
264 ::ContainerModel* srcModel,
265 ::SlotData const& dstSlot,
266 ::ContainerModel* dstModel
267 );
268
269 MCNAPI void _onTransfer(::ContainerScreenActionResult const& result);
270
271 MCNAPI void _playCraftingSound(
272 ::std::weak_ptr<::ContainerManagerModel> const& containerManagerModel,
273 ::SharedTypes::Legacy::LevelSoundEvent soundEvent
274 );
275
276 MCNAPI void _registerSetThisDirtyCallback(::std::shared_ptr<::ContainerModel> containerModel);
277
278 MCNAPI ::ContainerCategory
279 _resolveToRealSourceSlot(::ContainerModel* srcModel, ::SlotData const& srcSlot, ::SlotData& realSrcSlot) const;
280
281 MCNAPI void _returnToPlayerOrDrop(::SlotData const& srcSlot, ::ItemTransferAmount amount);
282
283 MCNAPI void _shiftLeftStorageItemContents(
284 ::std::string const& collectionName,
285 int selectedItemIdx,
286 ::std::vector<::ItemStack> const& items
287 );
288
289 MCNAPI bool _transfer(
290 ::ItemTransferType transferType,
291 ::SlotData const& dstSlot,
292 ::SlotData const& srcSlot,
293 ::ItemTransferAmount transferAmount,
294 bool allowSwap,
295 bool allowVisualOnlySameItemSwap
296 );
297
298 MCNAPI bool _transferSpecial(
299 ::SlotData const& srcSlot,
300 ::ItemTransferAmount const transferAmount,
301 ::ItemSpecialLocation location
302 );
303
304 MCNAPI ::ItemStackRequestScope _tryBeginItemStackRequest(::ContainerManagerModel const* managerModel);
305
306 MCNAPI void
307 _updateItemStackRequest(::ContainerScreenActionResult const& result, ::ItemStackRequestScope& requestScope);
308
309 MCNAPI bool
310 _updatePreviewItem(::ItemInstance& previewItem, ::ItemInstance const& newItem, ::std::string const& collectionName);
311
312 MCNAPI bool blockHasCustomName(::BlockPos const& blockPos) const;
313
314 MCNAPI ::std::string getBlockName(::BlockPos const& blockPos) const;
315
316 MCNAPI ::std::shared_ptr<::ContainerController> getContainerController(::ContainerEnumName containerEnumName) const;
317
318 MCNAPI ::std::shared_ptr<::ContainerController> getContainerController(::std::string const& containerName) const;
319
320 MCAPI int getContainerSize(::std::string const& collectionName) const;
321
322 MCAPI ::SharedTypes::Legacy::ContainerType getContainerType() const;
323
324 MCNAPI void getCurrentContainerStateList(::std::vector<::ItemStateData>& inventoryState);
325
326 MCAPI ::std::shared_ptr<::ContainerModel> getDynamicContainerModel(::FullContainerName const& name);
327
328 MCNAPI ::std::string getEntityName(::ActorUniqueID const& entityUniqueID) const;
329
330 MCNAPI ::std::string getExpandoGroupName(::std::string const& collectionName, int collectionIndex) const;
331
332 MCNAPI ::ContainerExpandStatus getExpandoStatus(::std::string const& containerName, int collectionIndex) const;
333
334 MCAPI ::ItemStack const& getItemStack(::std::string const& collectionName, int collectionIndex) const;
335
336 MCAPI bool handleMoveItemFromSlotIntoStorageItem(
337 ::SlotData const& srcSlot,
338 ::ItemStack const& dstStorageItem,
339 ::std::optional<uchar> requestedAmount
340 );
341
342 MCNAPI bool handleMoveSelectedItemFromStorageItem(
343 ::ItemStack const& srcStorageItem,
344 int selectedItemIdx,
345 ::SlotData const& dstSlot
346 );
347
348 MCAPI bool handleMoveSelectedItemFromStorageItemToStorageItem(
349 ::ItemStack const& srcStorageItem,
350 int selectedItemIdx,
351 ::ItemStack const& dstStorageItem
352 );
353
354 MCNAPI bool handleMoveTopItemFromStorageItem(::ItemStack const& srcStorageItem, ::SlotData const& dstSlot);
355
356 MCAPI bool hasContainerController(::std::string const& containerName) const;
357
358 MCNAPI bool isExpandoItem(::std::string const& collectionName, int collectionIndex);
359
360 MCNAPI bool isItemFiltered(::std::vector<::std::string> containerNames, ::ItemStackBase const& item) const;
361
362 MCNAPI bool playerHasRoomForItem(::ItemInstance const& item) const;
363
364 MCNAPI void resetSplitStack();
365#endif
366 // NOLINTEND
367
368public:
369 // constructor thunks
370 // NOLINTBEGIN
371#ifdef LL_PLAT_C
372 MCNAPI void* $ctor(::std::weak_ptr<::ContainerManagerModel> containerManagerModel);
373#endif
374 // NOLINTEND
375
376public:
377 // destructor thunk
378 // NOLINTBEGIN
379#ifdef LL_PLAT_C
380 MCNAPI void $dtor();
381#endif
382 // NOLINTEND
383
384public:
385 // virtual function thunks
386 // NOLINTBEGIN
387#ifdef LL_PLAT_C
388 MCNAPI void $postInit(::std::weak_ptr<::ContainerManagerController> self);
389
390 MCNAPI void $registerContainerCallbacks();
391
392 MCNAPI void $setPreviewItemName(::Bedrock::Safety::RedactableString const& name);
393
394 MCNAPI void $setItemName(::Bedrock::Safety::RedactableString const& name);
395
396 MCNAPI ::Bedrock::Safety::RedactableString const& $getPreviewItemName() const;
397
398 MCNAPI ::Bedrock::Safety::RedactableString const& $getItemName() const;
399
400 MCNAPI void $updatePreviewItem();
401
402 MCNAPI ::ItemStackBase const& $getTakeableItemStackBase(::SlotData const& slot) const;
403
404 MCNAPI bool $handleTakeAmount(::SlotData const& dstSlot, int amount, ::SlotData const& srcSlot);
405
406 MCNAPI bool $handleTakeAll(::SlotData const& dstSlot, ::SlotData const& srcSlot);
407
408 MCNAPI bool $handlePlaceAll(::SelectedSlotInfo const& selected, ::SlotData const& dstSlot);
409
410 MCNAPI bool $handleTakeHalf(::SlotData const& dstSlot, ::SlotData const& srcSlot);
411
412 MCNAPI bool $handlePlaceOne(::SlotData const& srcSlot, ::SlotData const& dstSlot);
413
414 MCNAPI bool $handlePlaceAmount(::SlotData const& srcSlot, int amount, ::SlotData const& dstSlot);
415
416 MCAPI int $handleAutoPlace(
417 ::SlotData const& srcSlot,
418 int amount,
419 ::std::vector<::AutoPlaceItem> const& autoPlaceOrder,
420 ::std::vector<::AutoPlaceResult>& destinations
421 );
422
423 MCAPI int $handleAutoPlaceStack(
424 ::SlotData const& srcSlot,
425 ::ItemTakeType takeType,
426 ::std::vector<::AutoPlaceItem> const& autoPlaceOrder,
427 ::std::vector<::AutoPlaceResult>& destinations
428 );
429
430 MCNAPI void $handleSplitSingle(::SlotData const& srcSlot, ::SlotData const& dstSlot);
431
432 MCNAPI void
433 $handleSplitMultiple(::SlotData const& selected, ::ItemInstance const& itemTemplate, ::SlotData const& dstSlot);
434
435 MCNAPI void $handleSplitMultiple(
436 ::SelectedSlotInfo const& selected,
437 ::ItemInstance const& itemTemplate,
438 ::SlotData const& dstSlot
439 );
440
441 MCNAPI bool $handleCoalesce(
442 ::SlotData const& dstSlot,
443 ::std::vector<::std::string> const& coalesceOrder,
444 ::std::string const& coalesceSrc
445 );
446
447 MCNAPI bool $handleSwap(::SlotData const& slotA, ::SlotData const& slotB);
448
449 MCNAPI bool $handleDrop(::SlotData const& srcSlot, ::ItemTransferAmount const transferAmount);
450
451 MCNAPI bool $handleDestroy(::SelectedSlotInfo const& selected, ::ItemTransferAmount const transferAmount);
452
453 MCNAPI bool $handleDestroy(::SlotData const& srcSlot, ::ItemTransferAmount const transferAmount);
454
455 MCNAPI bool $handleConsume(::SlotData const& srcSlot, ::ItemTransferAmount const transferAmount);
456
457 MCNAPI bool $handleAddToStack(::SlotData const& dstSlot, ::SlotData const& srcSlot, ::ItemTakeType type);
458
459 MCNAPI void $closeContainers();
460
461 MCNAPI bool $isOutputSlot(::std::string const& collectionName) const;
462
463 MCNAPI void $_updateItemStackRequest(
464 ::ContainerScreenRequestActionType,
467 );
468
469 MCNAPI ::CreateContainerItemScope
470 $_makeCreateItemScope(::SlotData const& srcSlot, ::ItemTransferAmount const& takeAmount);
471
472 MCNAPI void $_onItemTransferredFrom(::ItemInstance const& stack, ::SlotData const& srcSlot);
473
474 MCNAPI void $_onItemTransferredTo(::ItemInstance const& stack, ::SlotData const& dstSlot);
475
476 MCNAPI void $_onItemAcquired(::ItemInstance const& stack, ::SlotData const& srcSlot);
477
478 MCNAPI void $_onItemPlaced(::ItemInstance const& stack, ::SlotData const& dstSlot);
479
480 MCNAPI void $_onContainerScreenAction(::ContainerScreenActionResult const& result);
481#endif
482
483
484 // NOLINTEND
485};
Definition RedactableString.h:10
Definition BlockPos.h:14
Definition ContainerController.h:20
Definition ContainerManagerModel.h:32
Definition ContainerModel.h:23
Definition ContainerScreenSimulation.h:32
Definition Container.h:36
Definition ItemInstance.h:15
Definition ItemStackBase.h:45
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:13
Definition SelectedSlotInfo.h:10
Definition SlotData.h:5