447 throw std::runtime_error(
"Unable to create data component with id: " + std::to_string(
static_cast<int>(type)) +
".");
454 return std::make_shared<DataComponentTypeAdventureModePredicate>();
456 return std::make_shared<DataComponentTypeArmorTrim>();
458 return std::make_shared<DataComponentTypeBannerPatternLayers>();
460 return std::make_shared<DataComponentTypeBlockItemStateProperties>();
462 return std::make_shared<DataComponentTypeBoolean>();
464 return std::make_shared<DataComponentTypeBundleContents>();
466 return std::make_shared<DataComponentTypeChargedProjectiles>();
469 return std::make_shared<DataComponentTypeComponent>();
471#if PROTOCOL_VERSION < 773
475 return std::make_shared<DataComponentTypeCustomData>();
477 return std::make_shared<DataComponentTypeCustomModelData>();
486 return std::make_shared<DataComponentTypeDefault>();
488 return std::make_shared<DataComponentTypeDyeColor>();
490 return std::make_shared<DataComponentTypeDyedItemColor>();
492 return std::make_shared<DataComponentTypeFireworkExplosion>();
494 return std::make_shared<DataComponentTypeFireworks>();
496 return std::make_shared<DataComponentTypeFoodProperties>();
498 return std::make_shared<DataComponentTypeInstrument>();
504#if PROTOCOL_VERSION > 767
507 return std::make_shared<DataComponentTypeInteger>();
509 return std::make_shared<DataComponentTypeItemAttributeModifiers>();
511 return std::make_shared<DataComponentTypeItemContainerContents>();
514 return std::make_shared<DataComponentTypeItemEnchantments>();
516 return std::make_shared<DataComponentTypeItemLore>();
517#if PROTOCOL_VERSION > 766
519 return std::make_shared<DataComponentTypeJukeboxPlayable>();
522 return std::make_shared<DataComponentTypeListBeehiveBlockEntityOccupant>();
524 return std::make_shared<DataComponentTypeLodestoneTracker>();
526 return std::make_shared<DataComponentTypeMapId>();
527#if PROTOCOL_VERSION < 777
528 case DataComponentTypes::MapColor:
529 return std::make_shared<DataComponentTypeMapItemColor>();
532 return std::make_shared<DataComponentTypeMapPostProcessing>();
534 return std::make_shared<DataComponentTypePotDecorations>();
536 return std::make_shared<DataComponentTypePotionContents>();
538 return std::make_shared<DataComponentTypeRarity>();
540 return std::make_shared<DataComponentTypeResolvableProfile>();
541#if PROTOCOL_VERSION > 767
543 return std::make_shared<DataComponentTypeDamageResistant>();
548#if PROTOCOL_VERSION < 774
549 return std::make_shared<DataComponentTypeResourceLocation>();
551 return std::make_shared<DataComponentTypeIdentifier>();
554 return std::make_shared<DataComponentTypeSuspiciousStewEffects>();
556 return std::make_shared<DataComponentTypeTool>();
557#if PROTOCOL_VERSION < 770
559 return std::make_shared<DataComponentTypeUnbreakable>();
564#if PROTOCOL_VERSION < 770
565 case DataComponentTypes::HideAdditionalTooltip:
566 case DataComponentTypes::HideTooltip:
569#if PROTOCOL_VERSION < 768
570 case DataComponentTypes::FireResistant:
572#if PROTOCOL_VERSION > 767
575 return std::make_shared<DataComponentTypeUnit>();
577 return std::make_shared<DataComponentTypeWritableBookContent>();
579 return std::make_shared<DataComponentTypeWrittenBookContent>();
580#if PROTOCOL_VERSION > 767
582 return std::make_shared<DataComponentTypeConsumable>();
584 return std::make_shared<DataComponentTypeDeathProtection>();
586 return std::make_shared<DataComponentTypeEquippable>();
588 return std::make_shared<DataComponentTypeRepairable>();
590 return std::make_shared<DataComponentTypeUseCooldown>();
592 return std::make_shared<DataComponentTypeUseRemainder>();
594#if PROTOCOL_VERSION > 769
596 return std::make_shared<DataComponentTypeBlocksAttacks>();
598 return std::make_shared<DataComponentTypeBreakSound>();
600 return std::make_shared<DataComponentTypePaintingVariant>();
602 return std::make_shared<DataComponentTypeFloat>();
604 return std::make_shared<DataComponentTypeProvidesBannerPattern>();
606 return std::make_shared<DataComponentTypeProvidesTrimMaterial>();
608 return std::make_shared<DataComponentTypeTooltipDisplay>();
610 return std::make_shared<DataComponentTypeWeapon>();
611#if PROTOCOL_VERSION < 775
613 return std::make_shared<DataComponentTypeEitherRegistryVarint>();
631 return std::make_shared<DataComponentTypeVariantEnum>();
638 return std::make_shared<DataComponentTypeDyeColor>();
640#if PROTOCOL_VERSION > 772
643 return std::make_shared<DataComponentTypeTypedEntityData>();
645#if PROTOCOL_VERSION > 773
647 return std::make_shared<DataComponentTypeUseEffects>();
649 return std::make_shared<DataComponentTypeFloat>();
651 return std::make_shared<DataComponentTypeAttackRange>();
652#if PROTOCOL_VERSION < 775
655 return std::make_shared<DataComponentTypeEitherRegistryVarint>();
658 return std::make_shared<DataComponentTypePiercingWeapon>();
660 return std::make_shared<DataComponentTypeKineticWeapon>();
662#if PROTOCOL_VERSION > 773 && PROTOCOL_VERSION < 777
663 case DataComponentTypes::SwingAnimation:
664 return std::make_shared<DataComponentTypeSwingAnimation>();
666#if PROTOCOL_VERSION > 774
668 return std::make_shared<DataComponentTypeDyeColor>();
676 return std::make_shared<DataComponentTypeVariantEnum>();
678 return std::make_shared<DataComponentTypeInteger>();
680#if PROTOCOL_VERSION > 775
682 return std::make_shared<DataComponentTypeSulfurCubeContent>();
684#if PROTOCOL_VERSION > 776
687 return std::make_shared<DataComponentTypeSwingAnimation>();
689 return std::make_shared<DataComponentTypeBrewingFuel>();
691 return std::make_shared<DataComponentTypeCompostable>();
693 return std::make_shared<DataComponentTypeCookingFuel>();
696 return std::make_shared<DataComponentTypeVariantEnum>();
698 return std::make_shared<DataComponentTypeMobVisibility>();
701 return std::make_shared<DataComponentTypeSignText>();
703 return std::make_shared<DataComponentTypeVariantEnum>();
705 return std::make_shared<DataComponentTypeUnit>();
707 return std::make_shared<DataComponentTypeDyeColor>();
711 throw std::runtime_error(
"Unable to create data component with id: " + std::to_string(
static_cast<int>(type)) +
".");
805 const int num_data = ReadData<VarInt>(iter, length);
806 const int num_void = ReadData<VarInt>(iter, length);
810 for (
int i = 0; i < num_data; ++i)
817 data->Read(iter, length);
819 map.insert({ type, data });
822 for (
int i = 0; i < num_void; ++i)
825 map.insert({ type,
nullptr });
939 const int num_data = ReadData<VarInt>(iter, length);
940 const int num_void = ReadData<VarInt>(iter, length);
944 for (
int i = 0; i < num_data; ++i)
947 const int data_size = ReadData<VarInt>(iter, length);
952 data->Read(iter, length);
954 map.insert({ type, data });
957 for (
int i = 0; i < num_void; ++i)
960 map.insert({ type,
nullptr });