65 using ItemStackNetIdChangedCallback = ::std::function<void(
int,
::ItemStack const&)>;
68 [[nodiscard]] std::string
const& getTypeName()
const {
return containerTypeMap().at(mContainerType); }
72 [[nodiscard]]
ItemStack& operator[](
int index) {
return this->getItemNonConst(index); }
74 [[nodiscard]]
ItemStack const& operator[](
int index)
const {
return this->getItem(index); }
82 using ReverseIterator = std::reverse_iterator<Iterator>;
83 using ConstReverseIterator = std::reverse_iterator<ConstIterator>;
85 [[nodiscard]]
constexpr Iterator begin() noexcept {
return {
this, 0}; }
86 [[nodiscard]]
constexpr ConstIterator cbegin() const noexcept {
return {
this, 0}; }
87 [[nodiscard]]
constexpr Iterator end() noexcept {
return {
this, getContainerSize()}; }
88 [[nodiscard]]
constexpr ConstIterator cend() const noexcept {
return {
this, getContainerSize()}; }
90 [[nodiscard]]
constexpr ReverseIterator rbegin() noexcept {
return ReverseIterator{end()}; }
91 [[nodiscard]]
constexpr ConstReverseIterator crbegin() const noexcept {
return ConstReverseIterator{cend()}; }
92 [[nodiscard]]
constexpr ReverseIterator rend() noexcept {
return ReverseIterator{begin()}; }
93 [[nodiscard]]
constexpr ConstReverseIterator crend() const noexcept {
return ConstReverseIterator{cbegin()}; }
98 ::SharedTypes::Legacy::ContainerType mContainerType;
99 ::SharedTypes::Legacy::ContainerType mGameplayContainerType;
100 ::std::unordered_set<::ContainerContentChangeListener*> mContentChangeListeners;
101 ::std::unordered_set<::ContainerSizeChangeListener*> mSizeChangeListeners;
102 ::std::unordered_set<::ContainerCloseListener*> mCloseListeners;
104 ::std::deque<TransactionContext> mTransactionContextStack;
125 virtual void serverInitItemStackIds(
int,
int, ::std::function<
void(
int,
::ItemStack const&)>) = 0;
134 virtual ::Bedrock::PubSub::Connector<void()>* getContainerRemovedConnector();
137 virtual bool hasRemovedSubscribers()
const;
140 virtual ::ItemStack
const& getItem(
int)
const = 0;
143 virtual bool hasRoomForItem(
::ItemStack const& item)
const;
149 virtual bool addItemWithForceBalance(
::ItemStack& item);
152 virtual bool addItemToFirstEmptySlot(
::ItemStack const& item);
155 virtual void setItem(
int modelSlot,
::ItemStack const& item) = 0;
158 virtual void setItemWithForceBalance(
int slot,
::ItemStack const& item,
bool forceBalanced);
161 virtual void removeItem(
int slot,
int count);
164 virtual void removeAllItems();
167 virtual void removeAllItemsWithForceBalance();
170 virtual void containerRemoved();
173 virtual void dropSlotContent(
::BlockSource& region,
::Vec3 const& pos,
bool randomizeDrop,
int slot);
179 virtual int getContainerSize()
const = 0;
182 virtual int getMaxStackSize()
const = 0;
185 virtual void startOpen(
::Actor&) = 0;
188 virtual void stopOpen(
::Actor& actor);
191 virtual ::std::vector<::ItemStack> getSlotCopies()
const;
194 virtual ::std::vector<::ItemStack const*>
const getSlots()
const;
197 virtual int getEmptySlotsCount()
const;
200 virtual int getItemCount(
::ItemStack const& compare)
const;
203 virtual int firstEmptySlot()
const;
206 virtual int firstItem()
const;
209 virtual int findFirstSlotForItem(
::ItemStack const& item)
const;
212 virtual int reverseFindFirstSlotForItem(
::ItemStack const& item)
const;
215 virtual bool canPushInItem(
int,
int,
::ItemStack const&)
const;
218 virtual bool canPullOutItem(
int,
int,
::ItemStack const&)
const;
221 virtual void setContainerChanged(
int slot);
224 virtual void setContainerMoved();
230 virtual bool hasCustomName()
const;
233 virtual void readAdditionalSaveData(
::CompoundTag const& tag);
239 virtual void createTransactionContext(
241 ::std::function<
void()> execute
245 virtual void initializeContainerContents(
::BlockSource& region);
248 virtual bool isEmpty()
const;
251 virtual bool isSlotDisabled(
int)
const;
259 MCAPI
explicit Container(::SharedTypes::Legacy::ContainerType type);
261 MCAPI
Container(::SharedTypes::Legacy::ContainerType type, ::std::string
const& name,
bool customName);
267 _serverInitId(
int slot,
::ItemStack& item, ::std::function<
void(
int,
::ItemStack const&)> onNetIdChanged);
269 MCAPI
int getItemCount(::std::function<
bool(
::ItemStack const&)> comparator)
const;
271 MCAPI
int getRedstoneSignalFromContainer(
::BlockSource& region);
283 MCAPI static ::SharedTypes::Legacy::ContainerType getContainerTypeId(::std::string
const& name);
291 MCAPI static ::BidirectionalUnorderedMap<::SharedTypes::Legacy::ContainerType, ::std::string>
const&
300 MCAPI
void* $ctor(::SharedTypes::Legacy::ContainerType type);
302 MCAPI
void* $ctor(::SharedTypes::Legacy::ContainerType type, ::std::string
const& name,
bool customName);
320 MCFOLD ::Bedrock::PubSub::Connector<void()>* $getContainerRemovedConnector();
322 MCAPI
bool $hasRemovedSubscribers()
const;
324 MCAPI
bool $hasRoomForItem(
::ItemStack const& item)
const;
328 MCAPI
bool $addItemWithForceBalance(
::ItemStack& item);
330 MCAPI
bool $addItemToFirstEmptySlot(
::ItemStack const& item);
332 MCFOLD
void $setItemWithForceBalance(
int slot,
::ItemStack const& item,
bool forceBalanced);
334 MCAPI
void $removeItem(
int slot,
int count);
336 MCAPI
void $removeAllItems();
338 MCAPI
void $removeAllItemsWithForceBalance();
340 MCAPI
void $containerRemoved();
342 MCAPI
void $dropSlotContent(
::BlockSource& region,
::Vec3 const& pos,
bool randomizeDrop,
int slot);
346 MCAPI
void $stopOpen(
::Actor& actor);
348 MCAPI ::std::vector<::ItemStack> $getSlotCopies()
const;
350 MCAPI ::std::vector<::ItemStack const*>
const $getSlots()
const;
352 MCFOLD
int $getEmptySlotsCount()
const;
354 MCAPI
int $getItemCount(
::ItemStack const& compare)
const;
356 MCAPI
int $firstEmptySlot()
const;
358 MCAPI
int $firstItem()
const;
360 MCAPI
int $findFirstSlotForItem(
::ItemStack const& item)
const;
362 MCAPI
int $reverseFindFirstSlotForItem(
::ItemStack const& item)
const;
364 MCFOLD
bool $canPushInItem(
int,
int,
::ItemStack const&)
const;
366 MCFOLD
bool $canPullOutItem(
int,
int,
::ItemStack const&)
const;
368 MCAPI
void $setContainerChanged(
int slot);
370 MCAPI
void $setContainerMoved();
374 MCAPI
bool $hasCustomName()
const;
376 MCAPI
void $readAdditionalSaveData(
::CompoundTag const& tag);
380 MCAPI
void $createTransactionContext(
382 ::std::function<
void()> execute
385 MCFOLD
void $initializeContainerContents(
::BlockSource& region);
387 MCAPI
bool $isEmpty()
const;
389 MCFOLD
bool $isSlotDisabled(
int)
const;
Definition ContainerContentChangeListener.h:5
Definition TransactionContext.h:5