400 throw std::runtime_error(
"Unable to create data component with id: " + std::to_string(
static_cast<int>(type)) +
".");
407 return std::make_shared<DataComponentTypeAdventureModePredicate>();
409 return std::make_shared<DataComponentTypeArmorTrim>();
411 return std::make_shared<DataComponentTypeBannerPatternLayers>();
413 return std::make_shared<DataComponentTypeBlockItemStateProperties>();
415 return std::make_shared<DataComponentTypeBoolean>();
417 return std::make_shared<DataComponentTypeBundleContents>();
419 return std::make_shared<DataComponentTypeChargedProjectiles>();
422 return std::make_shared<DataComponentTypeComponent>();
424#if PROTOCOL_VERSION < 773
428 return std::make_shared<DataComponentTypeCustomData>();
430 return std::make_shared<DataComponentTypeCustomModelData>();
439 return std::make_shared<DataComponentTypeDefault>();
441 return std::make_shared<DataComponentTypeDyeColor>();
443 return std::make_shared<DataComponentTypeDyedItemColor>();
445 return std::make_shared<DataComponentTypeFireworkExplosion>();
447 return std::make_shared<DataComponentTypeFireworks>();
449 return std::make_shared<DataComponentTypeFoodProperties>();
451 return std::make_shared<DataComponentTypeInstrument>();
457#if PROTOCOL_VERSION > 767
460 return std::make_shared<DataComponentTypeInteger>();
462 return std::make_shared<DataComponentTypeItemAttributeModifiers>();
464 return std::make_shared<DataComponentTypeItemContainerContents>();
467 return std::make_shared<DataComponentTypeItemEnchantments>();
469 return std::make_shared<DataComponentTypeItemLore>();
470#if PROTOCOL_VERSION > 766
472 return std::make_shared<DataComponentTypeJukeboxPlayable>();
475 return std::make_shared<DataComponentTypeListBeehiveBlockEntityOccupant>();
477 return std::make_shared<DataComponentTypeLodestoneTracker>();
479 return std::make_shared<DataComponentTypeMapId>();
481 return std::make_shared<DataComponentTypeMapItemColor>();
483 return std::make_shared<DataComponentTypeMapPostProcessing>();
485 return std::make_shared<DataComponentTypePotDecorations>();
487 return std::make_shared<DataComponentTypePotionContents>();
489 return std::make_shared<DataComponentTypeRarity>();
491 return std::make_shared<DataComponentTypeResolvableProfile>();
493 return std::make_shared<DataComponentTypeIdentifier>();
494#if PROTOCOL_VERSION > 767
496 return std::make_shared<DataComponentTypeDamageResistant>();
500#if PROTOCOL_VERSION < 774
501 return std::make_shared<DataComponentTypeResourceLocation>();
503 return std::make_shared<DataComponentTypeIdentifier>();
506 return std::make_shared<DataComponentTypeSuspiciousStewEffects>();
508 return std::make_shared<DataComponentTypeTool>();
509#if PROTOCOL_VERSION < 770
511 return std::make_shared<DataComponentTypeUnbreakable>();
516#if PROTOCOL_VERSION < 770
517 case DataComponentTypes::HideAdditionalTooltip:
518 case DataComponentTypes::HideTooltip:
521#if PROTOCOL_VERSION < 768
522 case DataComponentTypes::FireResistant:
524#if PROTOCOL_VERSION > 767
527 return std::make_shared<DataComponentTypeUnit>();
529 return std::make_shared<DataComponentTypeWritableBookContent>();
531 return std::make_shared<DataComponentTypeWrittenBookContent>();
532#if PROTOCOL_VERSION > 767
534 return std::make_shared<DataComponentTypeConsumable>();
536 return std::make_shared<DataComponentTypeDeathProtection>();
538 return std::make_shared<DataComponentTypeEquippable>();
540 return std::make_shared<DataComponentTypeRepairable>();
542 return std::make_shared<DataComponentTypeUseCooldown>();
544 return std::make_shared<DataComponentTypeUseRemainder>();
546#if PROTOCOL_VERSION > 769
548 return std::make_shared<DataComponentTypeBlocksAttacks>();
550 return std::make_shared<DataComponentTypeBreakSound>();
552 return std::make_shared<DataComponentTypePaintingVariant>();
554 return std::make_shared<DataComponentTypeFloat>();
556 return std::make_shared<DataComponentTypeProvidesBannerPattern>();
558 return std::make_shared<DataComponentTypeProvidesTrimMaterial>();
560 return std::make_shared<DataComponentTypeTooltipDisplay>();
562 return std::make_shared<DataComponentTypeWeapon>();
563#if PROTOCOL_VERSION < 775
565 return std::make_shared<DataComponentTypeEitherRegistryVarint>();
583 return std::make_shared<DataComponentTypeVariantEnum>();
590 return std::make_shared<DataComponentTypeDyeColor>();
592#if PROTOCOL_VERSION > 772
595 return std::make_shared<DataComponentTypeTypedEntityData>();
597#if PROTOCOL_VERSION > 773
599 return std::make_shared<DataComponentTypeUseEffects>();
601 return std::make_shared<DataComponentTypeFloat>();
603 return std::make_shared<DataComponentTypeAttackRange>();
604#if PROTOCOL_VERSION < 775
607 return std::make_shared<DataComponentTypeEitherRegistryVarint>();
610 return std::make_shared<DataComponentTypePiercingWeapon>();
612 return std::make_shared<DataComponentTypeKineticWeapon>();
614 return std::make_shared<DataComponentTypeSwingAnimation>();
616#if PROTOCOL_VERSION > 774
618 return std::make_shared<DataComponentTypeDyeColor>();
626 return std::make_shared<DataComponentTypeVariantEnum>();
628 return std::make_shared<DataComponentTypeInteger>();
630#if PROTOCOL_VERSION > 775
632 return std::make_shared<DataComponentTypeSulfurCubeContent>();
636 throw std::runtime_error(
"Unable to create data component with id: " + std::to_string(
static_cast<int>(type)) +
".");
730 const int num_data = ReadData<VarInt>(iter, length);
731 const int num_void = ReadData<VarInt>(iter, length);
735 for (
int i = 0; i < num_data; ++i)
742 data->Read(iter, length);
744 map.insert({ type, data });
747 for (
int i = 0; i < num_void; ++i)
750 map.insert({ type,
nullptr });
757 for (
const auto& p :
map)
759 num_data += p.second !=
nullptr;
761 const int num_void =
static_cast<int>(
map.size()) - num_data;
763 WriteData<VarInt>(num_data, container);
764 WriteData<VarInt>(num_void, container);
766 for (
const auto& p :
map)
768 if (p.second ==
nullptr)
772 WriteData<DataComponentTypes, VarInt>(p.first, container);
773 p.second->Write(container);
776 for (
const auto& p :
map)
778 if (p.second !=
nullptr)
782 WriteData<DataComponentTypes, VarInt>(p.first, container);
862 const int num_data = ReadData<VarInt>(iter, length);
863 const int num_void = ReadData<VarInt>(iter, length);
867 for (
int i = 0; i < num_data; ++i)
870 const int data_size = ReadData<VarInt>(iter, length);
875 data->Read(iter, length);
877 map.insert({ type, data });
880 for (
int i = 0; i < num_void; ++i)
883 map.insert({ type,
nullptr });
890 for (
const auto& p :
map)
892 num_data += p.second !=
nullptr;
894 const int num_void =
static_cast<int>(
map.size()) - num_data;
896 WriteData<VarInt>(num_data, container);
897 WriteData<VarInt>(num_void, container);
899 for (
const auto& p :
map)
901 if (p.second ==
nullptr)
905 WriteData<DataComponentTypes, VarInt>(p.first, container);
908 p.second->Write(temp);
909 WriteData<VarInt>(
static_cast<int>(temp.size()), container);
913 for (
const auto& p :
map)
915 if (p.second !=
nullptr)
919 WriteData<DataComponentTypes, VarInt>(p.first, container);