LeviLamina
Loading...
Searching...
No Matches
Container.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4#include "mc/safety/RedactableString.h"
5#include "mc/world/ContainerIterator.h"
6#include "mc/world/ContainerOwner.h"
7
8// auto generated inclusion list
9#include "mc/deps/core/utility/pub_sub/Connector.h"
10#include "mc/deps/core/utility/pub_sub/Publisher.h"
11#include "mc/deps/shared_types/legacy/ContainerType.h"
12#include "mc/safety/RedactableString.h"
13#include "mc/util/BidirectionalUnorderedMap.h"
14#include "mc/world/ContainerCloseListener.h"
15#include "mc/world/ContainerContentChangeListener.h"
16#include "mc/world/ContainerOwner.h"
17#include "mc/world/ContainerSizeChangeListener.h"
18#include "mc/world/TypedRuntimeId.h"
19
20// auto generated forward declare list
21// clang-format off
22class Actor;
23class BlockSource;
24class CompoundTag;
25class ItemDescriptor;
26class ItemStack;
27class Random;
28class Vec3;
30namespace Bedrock::PubSub::ThreadModel { struct SingleThreaded; }
31// clang-format on
32
33class Container {
34public:
35 // Container inner types declare
36 // clang-format off
37 struct PublisherWrapper;
38 // clang-format on
39
40 // Container inner types define
42 public:
43 // member variables
44 // NOLINTBEGIN
45 ::ll::
47 mPublisher;
48 // NOLINTEND
49
50 public:
51 // member functions
52 // NOLINTBEGIN
53 MCAPI ~PublisherWrapper();
54 // NOLINTEND
55
56 public:
57 // destructor thunk
58 // NOLINTBEGIN
59 MCFOLD void $dtor();
60 // NOLINTEND
61 };
62
63 using ItemStackNetIdChangedCallback = ::std::function<void(int, ::ItemStack const&)>;
64
65public:
66 [[nodiscard]] std::string const& getTypeName() const { return containerTypeMap().at(mContainerType); }
67
68 LLNDAPI optional_ref<ItemStack> getItemNonConst(int index);
69
70 [[nodiscard]] ItemStack& operator[](int index) { return this->getItemNonConst(index); }
71
72 [[nodiscard]] ItemStack const& operator[](int index) const { return this->getItem(index); }
73
74 using TransactionContext = std::function<void(::Container&, int, ::ItemStack const&, ::ItemStack const&)>;
75
76public:
77 using Iterator = ContainerIterator<Container>;
78 using ConstIterator = ContainerIterator<Container const>;
79
80 using ReverseIterator = std::reverse_iterator<Iterator>;
81 using ConstReverseIterator = std::reverse_iterator<ConstIterator>;
82
83 [[nodiscard]] constexpr Iterator begin() noexcept { return {this, 0}; }
84 [[nodiscard]] constexpr ConstIterator cbegin() const noexcept { return {this, 0}; }
85 [[nodiscard]] constexpr Iterator end() noexcept { return {this, getContainerSize()}; }
86 [[nodiscard]] constexpr ConstIterator cend() const noexcept { return {this, getContainerSize()}; }
87
88 [[nodiscard]] constexpr ReverseIterator rbegin() noexcept { return ReverseIterator{end()}; }
89 [[nodiscard]] constexpr ConstReverseIterator crbegin() const noexcept { return ConstReverseIterator{cend()}; }
90 [[nodiscard]] constexpr ReverseIterator rend() noexcept { return ReverseIterator{begin()}; }
91 [[nodiscard]] constexpr ConstReverseIterator crend() const noexcept { return ConstReverseIterator{cbegin()}; }
92
93public:
94 // member variables
95 // NOLINTBEGIN
96 ::SharedTypes::Legacy::ContainerType mContainerType;
97 ::SharedTypes::Legacy::ContainerType mGameplayContainerType;
98 ::std::unordered_set<::ContainerContentChangeListener*> mContentChangeListeners;
99 ::std::unordered_set<::ContainerSizeChangeListener*> mSizeChangeListeners;
100 ::std::unordered_set<::ContainerCloseListener*> mCloseListeners;
101 ::Container::PublisherWrapper mRemovedPublisher;
102 ::std::deque<TransactionContext> mTransactionContextStack;
103 ::Bedrock::Safety::RedactableString mName;
104 bool mCustomName;
105 ::ContainerOwner mContainerOwner;
106 ::ContainerRuntimeId mContainerRuntimeId;
107 // NOLINTEND
108
109public:
110 // prevent constructor by default
111 Container();
112
113public:
114 // virtual functions
115 // NOLINTBEGIN
116 virtual ~Container();
117
118 virtual void init();
119
120 virtual void serverInitItemStackIds(int, int, ::std::function<void(int, ::ItemStack const&)>) = 0;
121
122 virtual void addContentChangeListener(::ContainerContentChangeListener* listener);
123
124 virtual void removeContentChangeListener(::ContainerContentChangeListener* listener);
125
126 virtual ::Bedrock::PubSub::Connector<void()>* getContainerRemovedConnector();
127
128 virtual bool hasRemovedSubscribers() const;
129
130 virtual ::ItemStack const& getItem(int index) const = 0;
131
132 virtual bool hasRoomForItem(::ItemStack const& item) const;
133
134 virtual bool addItem(::ItemStack& item);
135
136 virtual bool addItemWithForceBalance(::ItemStack& item);
137
138 virtual bool addItemToFirstEmptySlot(::ItemStack const& item);
139
140 virtual void setItem(int modelSlot, ::ItemStack const& item) = 0;
141
142 virtual void setItemWithForceBalance(int slot, ::ItemStack const& item, bool forceBalanced);
143
144 virtual void removeItem(int slot, int count);
145
146 virtual void removeAllItems();
147
148 virtual void removeAllItemsWithForceBalance();
149
150 virtual void containerRemoved();
151
152 virtual void dropSlotContent(::BlockSource& region, ::Vec3 const& pos, bool randomizeDrop, int slot);
153
154 virtual void dropContents(::BlockSource& region, ::Vec3 const& pos, bool randomizeDrop);
155
156 virtual int getContainerSize() const = 0;
157
158 virtual int getMaxStackSize() const = 0;
159
160 virtual void startOpen(::Actor&) = 0;
161
162 virtual void stopOpen(::Actor& actor);
163
164 virtual ::std::vector<::ItemStack> getSlotCopies() const;
165
166 virtual ::std::vector<::ItemStack const*> const getSlots() const;
167
168 virtual int getEmptySlotsCount() const;
169
170 virtual int getItemCount(::ItemStack const& compare) const;
171
172 virtual int firstEmptySlot() const;
173
174 virtual int firstItem() const;
175
176 virtual int findFirstSlotForItem(::ItemStack const& item) const;
177
178 virtual int reverseFindFirstSlotForItem(::ItemStack const& item) const;
179
180 virtual bool canPushInItem(int, int, ::ItemStack const&) const;
181
182 virtual bool canPullOutItem(int, int, ::ItemStack const&) const;
183
184 virtual void setContainerChanged(int slot);
185
186 virtual void setContainerMoved();
187
188 virtual void setCustomName(::Bedrock::Safety::RedactableString const& name);
189
190 virtual bool hasCustomName() const;
191
192 virtual void readAdditionalSaveData(::CompoundTag const& tag);
193
194 virtual void addAdditionalSaveData(::CompoundTag& tag);
195
196 virtual void createTransactionContext(
197 ::std::function<void(::Container&, int, ::ItemStack const&, ::ItemStack const&)> callback,
198 ::std::function<void()> execute
199 );
200
201 virtual void initializeContainerContents(::BlockSource& region);
202
203 virtual bool isEmpty() const;
204
205 virtual bool isSlotDisabled(int) const;
206 // NOLINTEND
207
208public:
209 // member functions
210 // NOLINTBEGIN
211 MCAPI Container(::Container const&);
212
213 MCAPI explicit Container(::SharedTypes::Legacy::ContainerType type);
214
215 MCAPI Container(::SharedTypes::Legacy::ContainerType type, ::std::string const& name, bool customName);
216
217 MCAPI void
218 _dropSlotContent(::BlockSource& region, ::Random& random, ::Vec3 const& pos, bool randomizeDrop, int slot);
219
220 MCAPI void
221 _serverInitId(int slot, ::ItemStack& item, ::std::function<void(int, ::ItemStack const&)> onNetIdChanged);
222
223 MCAPI int getItemCount(::std::function<bool(::ItemStack const&)> comparator) const;
224
225 MCAPI int getRedstoneSignalFromContainer(::BlockSource& region);
226
227 MCAPI ::Container& operator=(::Container const&);
228
229 MCAPI void removeCloseListener(::ContainerCloseListener* listener);
230
231 MCAPI void triggerTransactionChange(int slot, ::ItemStack const& oldItem, ::ItemStack const& newItem);
232 // NOLINTEND
233
234public:
235 // static functions
236 // NOLINTBEGIN
237 MCAPI static ::SharedTypes::Legacy::ContainerType getContainerTypeId(::std::string const& name);
238
239 MCAPI static ::std::function<bool(::ItemStack const&)> sameItemAndAuxComparator(::ItemDescriptor const& descriptor);
240 // NOLINTEND
241
242public:
243 // static variables
244 // NOLINTBEGIN
245 MCAPI static ::BidirectionalUnorderedMap<::SharedTypes::Legacy::ContainerType, ::std::string> const&
246 containerTypeMap();
247 // NOLINTEND
248
249public:
250 // constructor thunks
251 // NOLINTBEGIN
252 MCAPI void* $ctor(::Container const&);
253
254 MCAPI void* $ctor(::SharedTypes::Legacy::ContainerType type);
255
256 MCAPI void* $ctor(::SharedTypes::Legacy::ContainerType type, ::std::string const& name, bool customName);
257
258 MCAPI_C void*
259 $ctor(::SharedTypes::Legacy::ContainerType type, ::Bedrock::Safety::RedactableString const& name, bool customName);
260 // NOLINTEND
261
262public:
263 // destructor thunk
264 // NOLINTBEGIN
265 MCAPI void $dtor();
266 // NOLINTEND
267
268public:
269 // virtual function thunks
270 // NOLINTBEGIN
271 MCFOLD void $init();
272
273 MCAPI void $addContentChangeListener(::ContainerContentChangeListener* listener);
274
275 MCAPI void $removeContentChangeListener(::ContainerContentChangeListener* listener);
276
277 MCFOLD ::Bedrock::PubSub::Connector<void()>* $getContainerRemovedConnector();
278
279 MCAPI bool $hasRemovedSubscribers() const;
280
281 MCAPI bool $hasRoomForItem(::ItemStack const& item) const;
282
283 MCAPI bool $addItem(::ItemStack& item);
284
285 MCAPI bool $addItemWithForceBalance(::ItemStack& item);
286
287 MCAPI bool $addItemToFirstEmptySlot(::ItemStack const& item);
288
289 MCFOLD void $setItemWithForceBalance(int slot, ::ItemStack const& item, bool forceBalanced);
290
291 MCAPI void $removeItem(int slot, int count);
292
293 MCAPI void $removeAllItems();
294
295 MCAPI void $removeAllItemsWithForceBalance();
296
297 MCAPI void $containerRemoved();
298
299 MCAPI void $dropSlotContent(::BlockSource& region, ::Vec3 const& pos, bool randomizeDrop, int slot);
300
301 MCAPI void $dropContents(::BlockSource& region, ::Vec3 const& pos, bool randomizeDrop);
302
303 MCAPI void $stopOpen(::Actor& actor);
304
305 MCAPI ::std::vector<::ItemStack> $getSlotCopies() const;
306
307 MCAPI ::std::vector<::ItemStack const*> const $getSlots() const;
308
309 MCFOLD int $getEmptySlotsCount() const;
310
311 MCAPI int $getItemCount(::ItemStack const& compare) const;
312
313 MCAPI int $firstEmptySlot() const;
314
315 MCAPI int $firstItem() const;
316
317 MCAPI int $findFirstSlotForItem(::ItemStack const& item) const;
318
319 MCAPI int $reverseFindFirstSlotForItem(::ItemStack const& item) const;
320
321 MCFOLD bool $canPushInItem(int, int, ::ItemStack const&) const;
322
323 MCFOLD bool $canPullOutItem(int, int, ::ItemStack const&) const;
324
325 MCAPI void $setContainerChanged(int slot);
326
327 MCAPI void $setContainerMoved();
328
329 MCAPI void $setCustomName(::Bedrock::Safety::RedactableString const& name);
330
331 MCAPI bool $hasCustomName() const;
332
333 MCAPI void $readAdditionalSaveData(::CompoundTag const& tag);
334
335 MCAPI void $addAdditionalSaveData(::CompoundTag& tag);
336
337 MCAPI void $createTransactionContext(
338 ::std::function<void(::Container&, int, ::ItemStack const&, ::ItemStack const&)> callback,
339 ::std::function<void()> execute
340 );
341
342 MCFOLD void $initializeContainerContents(::BlockSource& region);
343
344 MCAPI bool $isEmpty() const;
345
346 MCFOLD bool $isSlotDisabled(int) const;
347
348
349 // NOLINTEND
350
351public:
352 // vftables
353 // NOLINTBEGIN
354 MCAPI static void** $vftable();
355 // NOLINTEND
356};
Definition Actor.h:105
Definition Publisher.h:8
Definition BlockSource.h:68
Definition CompoundTag.h:23
Definition ItemDescriptor.h:23
Definition ItemStack.h:26
Definition Random.h:10
Definition Vec3.h:10
Definition optional_ref.h:10
Definition ContainerRuntimeIdTag.h:5
Definition Container.h:41