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