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