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