LeviLamina
Loading...
Searching...
No Matches
ComponentItem.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5// auto generated inclusion list
6#include "mc/common/WeakPtr.h"
7#include "mc/deps/core/string/HashedString.h"
8#include "mc/deps/core/utility/NonOwnerPointer.h"
9#include "mc/deps/shared_types/item/ItemCooldownType.h"
10#include "mc/deps/shared_types/legacy/LevelSoundEvent.h"
11#include "mc/deps/shared_types/legacy/actor/ActorLocation.h"
12#include "mc/world/item/Item.h"
13#include "mc/world/item/ItemUseMethod.h"
14#include "mc/world/item/enchanting/Enchant.h"
15#include "mc/world/level/block/BlockShape.h"
16
17// auto generated forward declare list
18// clang-format off
19class Actor;
20class BaseGameVersion;
21class Block;
22class BlockPos;
23class BlockSource;
24class BlockType;
25class CompoundTag;
26class Container;
27class Experiments;
31class ItemComponent;
32class ItemDescriptor;
33class ItemStack;
34class ItemStackBase;
35class Level;
36class ListTag;
37class Mob;
38class PackLoadContext;
39class Player;
40class SemVersion;
41class Vec3;
46namespace Bedrock::Safety { class RedactableString; }
47namespace Core { class Path; }
48namespace Json { class Value; }
49namespace PuvLoadData { struct LoadResultWithTiming; }
50namespace cereal { struct ReflectionCtx; }
51namespace mce { class Color; }
52// clang-format on
53
54class ComponentItem : public ::Item {
55public:
56 // member variables
57 // NOLINTBEGIN
58 bool mExcludeUserDataDiffCheck : 1;
59 bool mCanDestroyInCreative : 1;
60 bool mRequiresInteract : 1;
61 bool mIsLiquidClipped : 1;
62 ::ll::TypedStorage<4, 4, float> mSpeed;
63 ::ll::TypedStorage<4, 4, int> mDamage;
64 ::ll::TypedStorage<4, 4, ::Enchant::Slot> mEnchantSlot;
65 ::ll::TypedStorage<4, 4, int> mEnchantValue;
66 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mAlias;
67 ::ll::TypedStorage<1, 1, bool> mIsAttachable;
68 ::ll::TypedStorage<8, 16, ::std::map<::HashedString, ::std::shared_ptr<::ItemComponent>>> mItemComponents;
69 ::ll::TypedStorage<8, 16, ::std::shared_ptr<::IconItemComponent>> mIcon;
70 ::ll::TypedStorage<8, 8, ::WeakPtr<::BlockType const>> mBlockTypeForRendering;
71 ::ll::TypedStorage<8, 16, ::std::map<::std::string, ::std::shared_ptr<::ItemComponent>>>
72 mRegisteredCerealComponents;
73 ::ll::TypedStorage<8, 24, ::Bedrock::NotNullNonOwnerPtr<::cereal::ReflectionCtx const>> mCtx;
74 // NOLINTEND
75
76public:
77 // prevent constructor by default
78 ComponentItem();
79
80public:
81 // virtual functions
82 // NOLINTBEGIN
83 virtual ~ComponentItem() /*override*/;
84
85 virtual ::PuvLoadData::LoadResultWithTiming initServer(
86 ::Json::Value const& data,
87 ::SemVersion const& documentVersion,
88 ::PackLoadContext& packLoadContext
89 ) /*override*/;
90
91 virtual void tearDown() /*override*/;
92
93 virtual bool isComponentBased() const /*override*/;
94
95 virtual bool isHumanoidArmor() const /*override*/;
96
97 virtual bool isBlockPlanterItem() const /*override*/;
98
99 virtual bool isDamageable() const /*override*/;
100
101 virtual bool isDyeable() const /*override*/;
102
103 virtual bool isFood() const /*override*/;
104
105 virtual bool isThrowable() const /*override*/;
106
107 virtual bool isUseable() const /*override*/;
108
109 virtual bool isMusicDisk() const /*override*/;
110
111 virtual bool isTrimAllowed() const /*override*/;
112
113 virtual ::WeakPtr<::BlockType const> const& getBlockTypeForRendering() const /*override*/;
114
115 virtual ::ItemComponent* getComponent(::HashedString const& id) const /*override*/;
116
117 virtual ::IFoodItemComponent* getFood() const /*override*/;
118
119 virtual ::Item& setMaxDamage(int maxDamage) /*override*/;
120
121 virtual ::std::string const& getDescriptionId() const /*override*/;
122
123 virtual ::BlockShape getBlockShape() const /*override*/;
124
125 virtual bool canBeDepleted() const /*override*/;
126
127 virtual bool canDestroySpecial(::Block const& block) const /*override*/;
128
129 virtual int getLevelDataForAuxValue(int) const /*override*/;
130
131 virtual short getMaxDamage() const /*override*/;
132
133 virtual int getAttackDamage() const /*override*/;
134
135 virtual bool isGlint(::ItemStackBase const& stack) const /*override*/;
136
137 virtual bool canDestroyInCreative() const /*override*/;
138
139 virtual bool isDestructive(int) const /*override*/;
140
141 virtual bool isLiquidClipItem() const /*override*/;
142
143 virtual bool requiresInteract() const /*override*/;
144
145 virtual void appendFormattedHovertext(
146 ::ItemStackBase const& stack,
147 ::Level& level,
149 bool const showCategory
150 ) const /*override*/;
151
152 virtual bool isValidRepairItem(
153 ::ItemStackBase const& source,
154 ::ItemStackBase const& repairItem,
155 ::BaseGameVersion const& baseGameVersion
156 ) const /*override*/;
157
158 virtual int getEnchantSlot() const /*override*/;
159
160 virtual int getEnchantValue() const /*override*/;
161
162 virtual int getArmorValue() const /*override*/;
163
164 virtual int getDamageChance(int unbreaking) const /*override*/;
165
166 virtual uint getSwingDuration() const /*override*/;
167
168 virtual bool shouldEmitInUseGameEvents() const /*override*/;
169
170 virtual ::mce::Color getColor(::CompoundTag const* userData, ::ItemDescriptor const& instance) const /*override*/;
171
172 virtual bool hasCustomColor(::ItemStackBase const& instance) const /*override*/;
173
174 virtual void clearColor(::ItemStackBase& instance) const /*override*/;
175
176 virtual void setColor(::ItemStackBase& instance, ::mce::Color const& color) const /*override*/;
177
178 virtual ::std::optional<::SharedTypes::Legacy::LevelSoundEvent> getAttackMissSound() const /*override*/;
179
180 virtual ::std::optional<::SharedTypes::Legacy::LevelSoundEvent> getAttackHitSound() const /*override*/;
181
182 virtual ::std::optional<::SharedTypes::Legacy::LevelSoundEvent> getAttackCriticalHitSound() const /*override*/;
183
184 virtual ::SharedTypes::Legacy::LevelSoundEvent getEquipSound() const /*override*/;
185
186 virtual ::ItemStack& use(::ItemStack& item, ::Player& player) const /*override*/;
187
188 virtual bool canUseAsAttack() const /*override*/;
189
190 virtual ::ItemStack& useAsAttack(::ItemStack& item, ::Player& player, ::Vec3 const& aimDirection) const
191 /*override*/;
192
193 virtual ::Actor* createProjectileActor(
194 ::BlockSource& region,
195 ::ItemStack const& stack,
196 ::Vec3 const& pos,
197 ::Vec3 const& aimDirection
198 ) const /*override*/;
199
200 virtual bool dispense(::BlockSource& region, ::Container& container, int slot, ::Vec3 const& pos, uchar face) const
201 /*override*/;
202
203 virtual ::ItemUseMethod useTimeDepleted(::ItemStack& inoutInstance, ::Level* level, ::Player* player) const
204 /*override*/;
205
206 virtual void releaseUsing(::ItemStack& item, ::Player* player, int durationLeft) const /*override*/;
207
208 virtual float getDestroySpeed(::ItemStackBase const& item, ::Block const& block) const /*override*/;
209
210 virtual void hurtActor(::ItemStack& item, ::Actor& actor, ::Mob& attacker) const /*override*/;
211
212 virtual void hitActor(::ItemStack& item, ::Actor& actor, ::Mob& attacker) const /*override*/;
213
214 virtual void hitBlock(::ItemStack& item, ::Block const& block, ::BlockPos const& blockPos, ::Mob& attacker) const
215 /*override*/;
216
217 virtual ::std::string
218 buildDescriptionId(::ItemDescriptor const& itemDescriptor, ::CompoundTag const* userData) const /*override*/;
219
220 virtual ::std::string buildEffectDescriptionName(::ItemStackBase const& stack, bool playerIsCreative) const
221 /*override*/;
222
223 virtual uchar getMaxStackSize(::ItemDescriptor const&) const /*override*/;
224
225 virtual ::HashedString const& getCooldownCategory() const /*override*/;
226
227 virtual int getCooldownDuration() const /*override*/;
228
229 virtual ::SharedTypes::ItemCooldownType getCooldownType() const /*override*/;
230
231 virtual ::SharedTypes::Legacy::ActorLocation getEquipLocation() const /*override*/;
232
233 virtual bool useVariant(int, int, bool) const;
234
235 virtual int getVariant(int, int, bool) const;
236
237 virtual ::PuvLoadData::LoadResultWithTiming initClient(
238 ::Json::Value const& data,
239 ::SemVersion const& documentVersion,
240 ::PackLoadContext& packLoadContext,
242 ) /*override*/;
243
244 virtual ::std::string getInteractText(::Player const& player) const /*override*/;
245
246 virtual int getAnimationFrameFor(::Mob*, bool, ::ItemStack const*, bool) const /*override*/;
247
248 virtual bool isEmissive(int auxValue) const /*override*/;
249
250 virtual ::ResolvedItemIconInfo
251 getIconInfo(::ItemStackBase const& item, int newAnimationFrame, bool inInventoryPane) const /*override*/;
252
253 virtual ::Item& setIconInfo(::std::string const& name, int frame) /*override*/;
254
255 virtual bool canBeCharged() const /*override*/;
256
257 virtual ::ComponentItem& setDescriptionId(::std::string const& descriptionId) /*override*/;
258
259 virtual bool shouldUseJsonForRenderMatrix() const;
260
261 virtual ::std::unique_ptr<::CompoundTag> buildNetworkTag() const /*override*/;
262
263 virtual void initializeFromNetwork(::CompoundTag const& tag) /*override*/;
264
265 virtual ::std::vector<::std::string> validateFromNetwork(::CompoundTag const& tag) /*override*/;
266
267 virtual bool
268 _checkUseOnPermissions(::Actor& entity, ::ItemStackBase& item, uchar const& face, ::BlockPos const& pos) const
269 /*override*/;
270
271 virtual bool _calculatePlacePos(::ItemStackBase& instance, ::Actor& entity, uchar& face, ::BlockPos& pos) const
272 /*override*/;
273
274 virtual bool _shouldAutoCalculatePlacePos() const /*override*/;
275
276 virtual ::InteractionResult
277 _useOn(::ItemStack& instance, ::Actor& entity, ::BlockPos pos, uchar face, ::Vec3 const& clickPos) const
278 /*override*/;
279 // NOLINTEND
280
281public:
282 // member functions
283 // NOLINTBEGIN
284 MCAPI ComponentItem(::std::string const& nameId, short id, ::cereal::ReflectionCtx const& ctx);
285
286 MCAPI void _addRegisteredCerealComponent(
287 ::std::pair<::std::string const, ::std::shared_ptr<::ItemComponent>>& cerealComponent
288 );
289
290 MCAPI ::std::unique_ptr<::CompoundTag> _buildItemPropertiesNetworkTag(::cereal::ReflectionCtx const& ctx) const;
291
292 MCAPI ::std::unique_ptr<::ListTag> _buildItemTagsNetworkTag() const;
293
294 MCAPI bool _doesNotTakeDurabilityDamage() const;
295
296 MCAPI void _initializeLoadedComponents(
297 ::std::optional<::SemVersion> documentVersion,
298 ::std::optional<::Experiments> _experiments
299 );
300
301 MCAPI void _loadComponentsFromNetworkTag(
302 ::std::string const& componentName,
303 ::CompoundTag const& componentTag,
305 );
306
307 MCAPI void _loadItemPropertiesNetworkTag(::CompoundTag const& tag, ::cereal::ReflectionCtx const& ctx);
308
309 MCAPI void _loadItemTagsNetworkTag(::ListTag const& listTag);
310
311 MCAPI ::PuvLoadData::LoadResultWithTiming _validateSchemaAndInitItem(
312 ::Json::Value const& itemData,
313 ::SemVersion const& documentVersion,
314 ::PackLoadContext& packLoadContext,
315 bool isServer,
317 );
318
319 MCAPI ::std::unique_ptr<::CompoundTag> buildNetworkTag(::cereal::ReflectionCtx const& ctx) const;
320
321 MCAPI void
322 init(::ComponentItemDataAll_Latest&& data, ::SemVersion const& documentVersion, ::Experiments const& experiments);
323 // NOLINTEND
324
325public:
326 // static functions
327 // NOLINTBEGIN
328 MCAPI static void _moveDataToComponentItem(::ComponentItem& item, ::ComponentItemData_Legacy& data);
329
330 MCAPI static void registerItemComponentTypes(::cereal::ReflectionCtx& ctx);
331
332 MCAPI static ::std::pair<bool, ::SemVersion> upgradeJson(
334 ::std::string& document,
335 ::Core::Path const& resourceName,
336 bool betaApis,
337 ::std::optional<::SemVersion> minVersion
338 );
339 // NOLINTEND
340
341public:
342 // constructor thunks
343 // NOLINTBEGIN
344 MCAPI void* $ctor(::std::string const& nameId, short id, ::cereal::ReflectionCtx const& ctx);
345 // NOLINTEND
346
347public:
348 // destructor thunk
349 // NOLINTBEGIN
350 MCAPI void $dtor();
351 // NOLINTEND
352
353public:
354 // virtual function thunks
355 // NOLINTBEGIN
356 MCAPI ::PuvLoadData::LoadResultWithTiming
357 $initServer(::Json::Value const& data, ::SemVersion const& documentVersion, ::PackLoadContext& packLoadContext);
358
359 MCFOLD void $tearDown();
360
361 MCFOLD bool $isComponentBased() const;
362
363 MCAPI bool $isHumanoidArmor() const;
364
365 MCAPI bool $isBlockPlanterItem() const;
366
367 MCAPI bool $isDamageable() const;
368
369 MCAPI bool $isDyeable() const;
370
371 MCFOLD bool $isFood() const;
372
373 MCAPI bool $isThrowable() const;
374
375 MCAPI bool $isUseable() const;
376
377 MCAPI bool $isMusicDisk() const;
378
379 MCAPI bool $isTrimAllowed() const;
380
381 MCAPI ::WeakPtr<::BlockType const> const& $getBlockTypeForRendering() const;
382
383 MCAPI ::ItemComponent* $getComponent(::HashedString const& id) const;
384
385 MCAPI ::IFoodItemComponent* $getFood() const;
386
387 MCAPI ::Item& $setMaxDamage(int maxDamage);
388
389 MCAPI ::std::string const& $getDescriptionId() const;
390
391 MCFOLD ::BlockShape $getBlockShape() const;
392
393 MCAPI bool $canBeDepleted() const;
394
395 MCAPI bool $canDestroySpecial(::Block const& block) const;
396
397 MCFOLD int $getLevelDataForAuxValue(int) const;
398
399 MCAPI short $getMaxDamage() const;
400
401 MCAPI int $getAttackDamage() const;
402
403 MCFOLD bool $isGlint(::ItemStackBase const& stack) const;
404
405 MCAPI bool $canDestroyInCreative() const;
406
407 MCFOLD bool $isDestructive(int) const;
408
409 MCAPI bool $isLiquidClipItem() const;
410
411 MCAPI bool $requiresInteract() const;
412
413 MCAPI void $appendFormattedHovertext(
414 ::ItemStackBase const& stack,
415 ::Level& level,
417 bool const showCategory
418 ) const;
419
420 MCAPI bool $isValidRepairItem(
421 ::ItemStackBase const& source,
422 ::ItemStackBase const& repairItem,
423 ::BaseGameVersion const& baseGameVersion
424 ) const;
425
426 MCAPI int $getEnchantSlot() const;
427
428 MCFOLD int $getEnchantValue() const;
429
430 MCAPI int $getArmorValue() const;
431
432 MCAPI int $getDamageChance(int unbreaking) const;
433
434 MCAPI uint $getSwingDuration() const;
435
436 MCAPI bool $shouldEmitInUseGameEvents() const;
437
438 MCAPI ::mce::Color $getColor(::CompoundTag const* userData, ::ItemDescriptor const& instance) const;
439
440 MCAPI bool $hasCustomColor(::ItemStackBase const& instance) const;
441
442 MCAPI void $clearColor(::ItemStackBase& instance) const;
443
444 MCAPI void $setColor(::ItemStackBase& instance, ::mce::Color const& color) const;
445
446 MCAPI ::std::optional<::SharedTypes::Legacy::LevelSoundEvent> $getAttackMissSound() const;
447
448 MCAPI ::std::optional<::SharedTypes::Legacy::LevelSoundEvent> $getAttackHitSound() const;
449
450 MCAPI ::std::optional<::SharedTypes::Legacy::LevelSoundEvent> $getAttackCriticalHitSound() const;
451
452 MCAPI ::SharedTypes::Legacy::LevelSoundEvent $getEquipSound() const;
453
454 MCAPI ::ItemStack& $use(::ItemStack& item, ::Player& player) const;
455
456 MCAPI bool $canUseAsAttack() const;
457
458 MCAPI ::ItemStack& $useAsAttack(::ItemStack& item, ::Player& player, ::Vec3 const& aimDirection) const;
459
460 MCAPI ::Actor* $createProjectileActor(
461 ::BlockSource& region,
462 ::ItemStack const& stack,
463 ::Vec3 const& pos,
464 ::Vec3 const& aimDirection
465 ) const;
466
467 MCAPI bool $dispense(::BlockSource& region, ::Container& container, int slot, ::Vec3 const& pos, uchar face) const;
468
469 MCAPI ::ItemUseMethod $useTimeDepleted(::ItemStack& inoutInstance, ::Level* level, ::Player* player) const;
470
471 MCAPI void $releaseUsing(::ItemStack& item, ::Player* player, int durationLeft) const;
472
473 MCAPI float $getDestroySpeed(::ItemStackBase const& item, ::Block const& block) const;
474
475 MCAPI void $hurtActor(::ItemStack& item, ::Actor& actor, ::Mob& attacker) const;
476
477 MCAPI void $hitActor(::ItemStack& item, ::Actor& actor, ::Mob& attacker) const;
478
479 MCAPI void $hitBlock(::ItemStack& item, ::Block const& block, ::BlockPos const& blockPos, ::Mob& attacker) const;
480
481 MCAPI ::std::string
482 $buildDescriptionId(::ItemDescriptor const& itemDescriptor, ::CompoundTag const* userData) const;
483
484 MCAPI ::std::string $buildEffectDescriptionName(::ItemStackBase const& stack, bool playerIsCreative) const;
485
486 MCFOLD uchar $getMaxStackSize(::ItemDescriptor const&) const;
487
488 MCAPI ::HashedString const& $getCooldownCategory() const;
489
490 MCAPI int $getCooldownDuration() const;
491
492 MCAPI ::SharedTypes::ItemCooldownType $getCooldownType() const;
493
494 MCAPI ::SharedTypes::Legacy::ActorLocation $getEquipLocation() const;
495
496 MCFOLD bool $useVariant(int, int, bool) const;
497
498 MCFOLD int $getVariant(int, int, bool) const;
499
500 MCAPI ::PuvLoadData::LoadResultWithTiming $initClient(
501 ::Json::Value const& data,
502 ::SemVersion const& documentVersion,
503 ::PackLoadContext& packLoadContext,
505 );
506
507 MCAPI ::std::string $getInteractText(::Player const& player) const;
508
509 MCFOLD int $getAnimationFrameFor(::Mob*, bool, ::ItemStack const*, bool) const;
510
511 MCFOLD bool $isEmissive(int auxValue) const;
512
513 MCAPI ::ResolvedItemIconInfo
514 $getIconInfo(::ItemStackBase const& item, int newAnimationFrame, bool inInventoryPane) const;
515
516 MCAPI ::Item& $setIconInfo(::std::string const& name, int frame);
517
518 MCAPI bool $canBeCharged() const;
519
520 MCAPI ::ComponentItem& $setDescriptionId(::std::string const& descriptionId);
521
522 MCAPI bool $shouldUseJsonForRenderMatrix() const;
523
524 MCAPI ::std::unique_ptr<::CompoundTag> $buildNetworkTag() const;
525
526 MCAPI void $initializeFromNetwork(::CompoundTag const& tag);
527
528 MCAPI ::std::vector<::std::string> $validateFromNetwork(::CompoundTag const& tag);
529
530 MCFOLD bool
531 $_checkUseOnPermissions(::Actor& entity, ::ItemStackBase& item, uchar const& face, ::BlockPos const& pos) const;
532
533 MCAPI bool $_calculatePlacePos(::ItemStackBase& instance, ::Actor& entity, uchar& face, ::BlockPos& pos) const;
534
535 MCAPI bool $_shouldAutoCalculatePlacePos() const;
536
537 MCAPI ::InteractionResult
538 $_useOn(::ItemStack& instance, ::Actor& entity, ::BlockPos pos, uchar face, ::Vec3 const& clickPos) const;
539
540
541 // NOLINTEND
542
543public:
544 // vftables
545 // NOLINTBEGIN
546 MCNAPI static void** $vftable();
547 // NOLINTEND
548};
Definition Actor.h:106
Definition BaseGameVersion.h:8
Definition RedactableString.h:10
Definition BlockPos.h:19
Definition BlockSource.h:71
Definition BlockType.h:84
Definition Block.h:43
static MCAPI void ** $vftable()
Definition CompoundTag.h:23
Definition Container.h:33
Definition Path.h:17
Definition Experiments.h:14
Definition HashedString.h:5
Definition IFoodItemComponent.h:17
Definition IconItemComponent.h:19
Definition InteractionResult.h:5
Definition ItemComponent.h:16
Definition ItemDescriptor.h:24
Definition ItemStackBase.h:44
Definition ItemStack.h:26
Definition Value.h:16
Definition Level.h:250
Definition ListTag.h:19
Definition Mob.h:51
Definition PackLoadContext.h:20
Definition Player.h:129
Definition SemVersion.h:15
Definition Vec3.h:10
Definition Color.h:13
Definition ComponentItemDataAll_Latest.h:10
Definition ComponentItemData_Legacy.h:17
Definition ItemIconInfoFactory.h:15
Definition LoadResultWithTiming.h:7
Definition ResolvedItemIconInfo.h:8
Definition ReflectionCtx.h:11
Definition ctx.h:5