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