54 using ItemStackNetIdChangedCallback = ::std::function<void(
int,
::ItemStack const&)>;
57 [[nodiscard]] std::string
const& getTypeName()
const {
return containerTypeMap().at(mContainerType); }
61 [[nodiscard]]
ItemStack& operator[](
int index) {
return this->getItemNonConst(index); }
63 [[nodiscard]] ItemStack
const& operator[](
int index)
const {
return this->getItem(index); }
65 using TransactionContext =
66 ::brstd::copyable_function<void(::Container&,
int, ::ItemStack
const&, ::ItemStack
const&)>;
69 using Iterator = ContainerIterator<Container>;
70 using ConstIterator = ContainerIterator<Container const>;
72 using ReverseIterator = std::reverse_iterator<Iterator>;
73 using ConstReverseIterator = std::reverse_iterator<ConstIterator>;
75 [[nodiscard]]
constexpr Iterator begin() noexcept {
return {
this, 0}; }
76 [[nodiscard]]
constexpr ConstIterator cbegin() const noexcept {
return {
this, 0}; }
77 [[nodiscard]]
constexpr Iterator end() noexcept {
return {
this, getContainerSize()}; }
78 [[nodiscard]]
constexpr ConstIterator cend() const noexcept {
return {
this, getContainerSize()}; }
80 [[nodiscard]]
constexpr ReverseIterator rbegin() noexcept {
return ReverseIterator{end()}; }
81 [[nodiscard]]
constexpr ConstReverseIterator crbegin() const noexcept {
return ConstReverseIterator{cend()}; }
82 [[nodiscard]]
constexpr ReverseIterator rend() noexcept {
return ReverseIterator{begin()}; }
83 [[nodiscard]]
constexpr ConstReverseIterator crend() const noexcept {
return ConstReverseIterator{cbegin()}; }
88 ::SharedTypes::Legacy::ContainerType mContainerType;
89 ::SharedTypes::Legacy::ContainerType mGameplayContainerType;
90 ::std::unordered_set<::ContainerContentChangeListener*> mContentChangeListeners;
91 ::std::unordered_set<::ContainerSizeChangeListener*> mSizeChangeListeners;
92 ::std::unordered_set<::ContainerCloseListener*> mCloseListeners;
93 ::Container::PublisherWrapper mRemovedPublisher;
94 ::std::deque<TransactionContext> mTransactionContextStack;
95 ::Bedrock::Safety::RedactableString mName;
97 ::ContainerOwner mContainerOwner;
98 ::ContainerRuntimeId mContainerRuntimeId;
108 virtual ~Container();
112 virtual void serverInitItemStackIds(
115 ::std::function<
void(
int, ::ItemStack
const&)> onNetIdChanged
118 virtual void addContentChangeListener(::ContainerContentChangeListener* listener);
120 virtual void removeContentChangeListener(::ContainerContentChangeListener* listener);
122 virtual ::Bedrock::PubSub::Connector<void()>* getContainerRemovedConnector();
124 virtual bool hasRemovedSubscribers()
const;
126 virtual ::ItemStack
const& getItem(
int slot)
const = 0;
128 virtual bool hasRoomForItem(::ItemStack
const& item)
const;
130 virtual bool addItem(::ItemStack& item);
132 virtual bool addItemWithForceBalance(::ItemStack& item);
134 virtual bool addItemToFirstEmptySlot(::ItemStack
const& item);
136 virtual void setItem(
int slot, ::ItemStack
const& item) = 0;
138 virtual void setItemWithForceBalance(
int slot, ::ItemStack
const& item,
bool forceBalanced);
140 virtual void removeItem(
int slot,
int count);
142 virtual void removeAllItems();
144 virtual void removeAllItemsWithForceBalance();
146 virtual void containerRemoved();
148 virtual void dropSlotContent(::BlockSource& region, ::Vec3
const& pos,
bool randomizeDrop,
int slot);
150 virtual void dropContents(::BlockSource& region, ::Vec3
const& pos,
bool randomizeDrop);
152 virtual int getContainerSize()
const = 0;
154 virtual int getMaxStackSize()
const = 0;
156 virtual void startOpen(::Actor& actor) = 0;
158 virtual void stopOpen(::Actor& actor);
160 virtual ::std::vector<::ItemStack> getSlotCopies()
const;
162 virtual ::std::vector<::ItemStack const*>
const getSlots()
const;
164 virtual int getEmptySlotsCount()
const;
166 virtual int getItemCount(::ItemStack
const& compare)
const;
168 virtual int firstEmptySlot()
const;
170 virtual int firstItem()
const;
172 virtual int findFirstSlotForItem(::ItemStack
const& item)
const;
174 virtual int reverseFindFirstSlotForItem(::ItemStack
const& item)
const;
176 virtual bool canPushInItem(
int slot,
int face, ::ItemStack
const& item)
const;
178 virtual bool canPullOutItem(
int slot,
int face, ::ItemStack
const& item)
const;
180 virtual void setContainerChanged(
int slot);
182 virtual void setContainerMoved();
184 virtual void setCustomName(::Bedrock::Safety::RedactableString
const& name);
186 virtual bool hasCustomName()
const;
188 virtual void readAdditionalSaveData(::CompoundTag
const& tag);
190 virtual void addAdditionalSaveData(::CompoundTag& tag);
192 virtual void initializeContainerContents(::BlockSource& region);
194 virtual bool isEmpty()
const;
196 virtual bool isSlotDisabled(
int slot)
const;
198 virtual void receiveContainerLifetimes(::DynamicContainerTracker
const& tracker);
206 MCAPI
explicit Container(::SharedTypes::Legacy::ContainerType type);
208 MCAPI Container(::SharedTypes::Legacy::ContainerType type, ::std::string
const& name,
bool customName);
212 ::SharedTypes::Legacy::ContainerType type,
231 MCAPI
int getRedstoneSignalFromContainer(
::BlockSource& region);
247 MCAPI static ::BidirectionalUnorderedMap<::SharedTypes::Legacy::ContainerType, ::std::string>
const&
254 MCNAPI
void*
$ctor(::Container
const&);
256 MCAPI
void*
$ctor(::SharedTypes::Legacy::ContainerType type);
258 MCAPI
void*
$ctor(::SharedTypes::Legacy::ContainerType type, ::std::string
const& name,
bool customName);
281 MCAPI ::Bedrock::PubSub::Connector<void()>* $getContainerRemovedConnector();
283 MCAPI
bool $hasRemovedSubscribers()
const;
285 MCAPI
bool $hasRoomForItem(
::ItemStack const& item)
const;
289 MCAPI
bool $addItemWithForceBalance(
::ItemStack& item);
291 MCAPI
bool $addItemToFirstEmptySlot(
::ItemStack const& item);
293 MCFOLD
void $setItemWithForceBalance(
int slot,
::ItemStack const& item,
bool forceBalanced);
295 MCAPI
void $removeItem(
int slot,
int count);
297 MCAPI
void $removeAllItems();
299 MCAPI
void $removeAllItemsWithForceBalance();
301 MCAPI
void $containerRemoved();
303 MCAPI
void $dropSlotContent(
::BlockSource& region,
::Vec3 const& pos,
bool randomizeDrop,
int slot);
307 MCAPI
void $stopOpen(
::Actor& actor);
309 MCAPI ::std::vector<::ItemStack> $getSlotCopies()
const;
311 MCAPI ::std::vector<::ItemStack const*>
const $getSlots()
const;
313 MCAPI
int $getEmptySlotsCount()
const;
315 MCAPI
int $getItemCount(
::ItemStack const& compare)
const;
317 MCAPI
int $firstEmptySlot()
const;
319 MCAPI
int $firstItem()
const;
321 MCAPI
int $findFirstSlotForItem(
::ItemStack const& item)
const;
323 MCAPI
int $reverseFindFirstSlotForItem(
::ItemStack const& item)
const;
325 MCFOLD
bool $canPushInItem(
int slot,
int face,
::ItemStack const& item)
const;
327 MCFOLD
bool $canPullOutItem(
int slot,
int face,
::ItemStack const& item)
const;
329 MCAPI
void $setContainerChanged(
int slot);
331 MCAPI
void $setContainerMoved();
336 MCAPI
bool $hasCustomName()
const;
338 MCFOLD
bool $hasCustomName()
const;
341 MCAPI
void $readAdditionalSaveData(
::CompoundTag const& tag);
345 MCFOLD
void $initializeContainerContents(
::BlockSource& region);
347 MCAPI
bool $isEmpty()
const;
349 MCFOLD
bool $isSlotDisabled(
int slot)
const;
Definition ContainerContentChangeListener.h:5