386 throw std::runtime_error(
"Unable to create data component with id: " + std::to_string(
static_cast<int>(type)) +
".");
393 return std::make_shared<DataComponentTypeAdventureModePredicate>();
395 return std::make_shared<DataComponentTypeArmorTrim>();
397 return std::make_shared<DataComponentTypeBannerPatternLayers>();
399 return std::make_shared<DataComponentTypeBlockItemStateProperties>();
401 return std::make_shared<DataComponentTypeBoolean>();
403 return std::make_shared<DataComponentTypeBundleContents>();
405 return std::make_shared<DataComponentTypeChargedProjectiles>();
408 return std::make_shared<DataComponentTypeComponent>();
410#if PROTOCOL_VERSION < 773
414 return std::make_shared<DataComponentTypeCustomData>();
416 return std::make_shared<DataComponentTypeCustomModelData>();
424#if PROTOCOL_VERSION > 767
428 return std::make_shared<DataComponentTypeDefault>();
430 return std::make_shared<DataComponentTypeDyeColor>();
432 return std::make_shared<DataComponentTypeDyedItemColor>();
434 return std::make_shared<DataComponentTypeFireworkExplosion>();
436 return std::make_shared<DataComponentTypeFireworks>();
438 return std::make_shared<DataComponentTypeFoodProperties>();
440 return std::make_shared<DataComponentTypeInstrument>();
446#if PROTOCOL_VERSION > 767
449 return std::make_shared<DataComponentTypeInteger>();
451 return std::make_shared<DataComponentTypeItemAttributeModifiers>();
453 return std::make_shared<DataComponentTypeItemContainerContents>();
456 return std::make_shared<DataComponentTypeItemEnchantments>();
458 return std::make_shared<DataComponentTypeItemLore>();
459#if PROTOCOL_VERSION > 766
461 return std::make_shared<DataComponentTypeJukeboxPlayable>();
464 return std::make_shared<DataComponentTypeListBeehiveBlockEntityOccupant>();
466 return std::make_shared<DataComponentTypeLodestoneTracker>();
468 return std::make_shared<DataComponentTypeMapId>();
470 return std::make_shared<DataComponentTypeMapItemColor>();
472 return std::make_shared<DataComponentTypeMapPostProcessing>();
474 return std::make_shared<DataComponentTypePotDecorations>();
476 return std::make_shared<DataComponentTypePotionContents>();
478 return std::make_shared<DataComponentTypeRarity>();
480 return std::make_shared<DataComponentTypeResolvableProfile>();
482#if PROTOCOL_VERSION > 767
484 return std::make_shared<DataComponentTypeDamageResistant>();
488#if PROTOCOL_VERSION < 774
489 return std::make_shared<DataComponentTypeResourceLocation>();
491 return std::make_shared<DataComponentTypeIdentifier>();
494 return std::make_shared<DataComponentTypeSuspiciousStewEffects>();
496 return std::make_shared<DataComponentTypeTool>();
497#if PROTOCOL_VERSION < 770
499 return std::make_shared<DataComponentTypeUnbreakable>();
504#if PROTOCOL_VERSION < 770
505 case DataComponentTypes::HideAdditionalTooltip:
506 case DataComponentTypes::HideTooltip:
509#if PROTOCOL_VERSION < 768
510 case DataComponentTypes::FireResistant:
512 return std::make_shared<DataComponentTypeUnit>();
514 return std::make_shared<DataComponentTypeWritableBookContent>();
516 return std::make_shared<DataComponentTypeWrittenBookContent>();
517#if PROTOCOL_VERSION > 767
519 return std::make_shared<DataComponentTypeConsumable>();
521 return std::make_shared<DataComponentTypeDeathProtection>();
523 return std::make_shared<DataComponentTypeEquippable>();
525 return std::make_shared<DataComponentTypeRepairable>();
527 return std::make_shared<DataComponentTypeUseCooldown>();
529 return std::make_shared<DataComponentTypeUseRemainder>();
531#if PROTOCOL_VERSION > 769
533 return std::make_shared<DataComponentTypeBlocksAttacks>();
535 return std::make_shared<DataComponentTypeBreakSound>();
537 return std::make_shared<DataComponentTypePaintingVariant>();
539 return std::make_shared<DataComponentTypeFloat>();
541 return std::make_shared<DataComponentTypeProvidesBannerPattern>();
543 return std::make_shared<DataComponentTypeProvidesTrimMaterial>();
545 return std::make_shared<DataComponentTypeTooltipDisplay>();
547 return std::make_shared<DataComponentTypeWeapon>();
548#if PROTOCOL_VERSION < 775
550 return std::make_shared<DataComponentTypeEitherRegistryVarint>();
567 return std::make_shared<DataComponentTypeVariantEnum>();
574 return std::make_shared<DataComponentTypeDyeColor>();
576#if PROTOCOL_VERSION > 772
579 return std::make_shared<DataComponentTypeTypedEntityData>();
581#if PROTOCOL_VERSION > 773
583 return std::make_shared<DataComponentTypeUseEffects>();
585 return std::make_shared<DataComponentTypeFloat>();
587 return std::make_shared<DataComponentTypeAttackRange>();
588#if PROTOCOL_VERSION < 775
591 return std::make_shared<DataComponentTypeEitherRegistryVarint>();
594 return std::make_shared<DataComponentTypePiercingWeapon>();
596 return std::make_shared<DataComponentTypeKineticWeapon>();
598 return std::make_shared<DataComponentTypeSwingAnimation>();
600#if PROTOCOL_VERSION > 774
602 return std::make_shared<DataComponentTypeDyeColor>();
610 return std::make_shared<DataComponentTypeVariantEnum>();
612 return std::make_shared<DataComponentTypeInteger>();
616 throw std::runtime_error(
"Unable to create data component with id: " + std::to_string(
static_cast<int>(type)) +
".");
702 const int num_data = ReadData<VarInt>(iter, length);
703 const int num_void = ReadData<VarInt>(iter, length);
707 for (
int i = 0; i < num_data; ++i)
714 data->Read(iter, length);
716 map.insert({ type, data });
719 for (
int i = 0; i < num_void; ++i)
722 map.insert({ type,
nullptr });
729 for (
const auto& p :
map)
731 num_data += p.second !=
nullptr;
733 const int num_void =
static_cast<int>(
map.size()) - num_data;
735 WriteData<VarInt>(num_data, container);
736 WriteData<VarInt>(num_void, container);
738 for (
const auto& p :
map)
740 if (p.second ==
nullptr)
744 WriteData<DataComponentTypes, VarInt>(p.first, container);
745 p.second->Write(container);
748 for (
const auto& p :
map)
750 if (p.second !=
nullptr)
754 WriteData<DataComponentTypes, VarInt>(p.first, container);