395 throw std::runtime_error(
"Unable to create data component with id: " + std::to_string(
static_cast<int>(type)) +
".");
402 return std::make_shared<DataComponentTypeAdventureModePredicate>();
404 return std::make_shared<DataComponentTypeArmorTrim>();
406 return std::make_shared<DataComponentTypeBannerPatternLayers>();
408 return std::make_shared<DataComponentTypeBlockItemStateProperties>();
410 return std::make_shared<DataComponentTypeBoolean>();
412 return std::make_shared<DataComponentTypeBundleContents>();
414 return std::make_shared<DataComponentTypeChargedProjectiles>();
417 return std::make_shared<DataComponentTypeComponent>();
419#if PROTOCOL_VERSION < 773
423 return std::make_shared<DataComponentTypeCustomData>();
425 return std::make_shared<DataComponentTypeCustomModelData>();
433#if PROTOCOL_VERSION > 767
437 return std::make_shared<DataComponentTypeDefault>();
439 return std::make_shared<DataComponentTypeDyeColor>();
441 return std::make_shared<DataComponentTypeDyedItemColor>();
443 return std::make_shared<DataComponentTypeFireworkExplosion>();
445 return std::make_shared<DataComponentTypeFireworks>();
447 return std::make_shared<DataComponentTypeFoodProperties>();
449 return std::make_shared<DataComponentTypeInstrument>();
455#if PROTOCOL_VERSION > 767
458 return std::make_shared<DataComponentTypeInteger>();
460 return std::make_shared<DataComponentTypeItemAttributeModifiers>();
462 return std::make_shared<DataComponentTypeItemContainerContents>();
465 return std::make_shared<DataComponentTypeItemEnchantments>();
467 return std::make_shared<DataComponentTypeItemLore>();
468#if PROTOCOL_VERSION > 766
470 return std::make_shared<DataComponentTypeJukeboxPlayable>();
473 return std::make_shared<DataComponentTypeListBeehiveBlockEntityOccupant>();
475 return std::make_shared<DataComponentTypeLodestoneTracker>();
477 return std::make_shared<DataComponentTypeMapId>();
479 return std::make_shared<DataComponentTypeMapItemColor>();
481 return std::make_shared<DataComponentTypeMapPostProcessing>();
483 return std::make_shared<DataComponentTypePotDecorations>();
485 return std::make_shared<DataComponentTypePotionContents>();
487 return std::make_shared<DataComponentTypeRarity>();
489 return std::make_shared<DataComponentTypeResolvableProfile>();
491#if PROTOCOL_VERSION > 767
493 return std::make_shared<DataComponentTypeDamageResistant>();
497#if PROTOCOL_VERSION < 774
498 return std::make_shared<DataComponentTypeResourceLocation>();
500 return std::make_shared<DataComponentTypeIdentifier>();
503 return std::make_shared<DataComponentTypeSuspiciousStewEffects>();
505 return std::make_shared<DataComponentTypeTool>();
506#if PROTOCOL_VERSION < 770
508 return std::make_shared<DataComponentTypeUnbreakable>();
513#if PROTOCOL_VERSION < 770
514 case DataComponentTypes::HideAdditionalTooltip:
515 case DataComponentTypes::HideTooltip:
518#if PROTOCOL_VERSION < 768
519 case DataComponentTypes::FireResistant:
521 return std::make_shared<DataComponentTypeUnit>();
523 return std::make_shared<DataComponentTypeWritableBookContent>();
525 return std::make_shared<DataComponentTypeWrittenBookContent>();
526#if PROTOCOL_VERSION > 767
528 return std::make_shared<DataComponentTypeConsumable>();
530 return std::make_shared<DataComponentTypeDeathProtection>();
532 return std::make_shared<DataComponentTypeEquippable>();
534 return std::make_shared<DataComponentTypeRepairable>();
536 return std::make_shared<DataComponentTypeUseCooldown>();
538 return std::make_shared<DataComponentTypeUseRemainder>();
540#if PROTOCOL_VERSION > 769
542 return std::make_shared<DataComponentTypeBlocksAttacks>();
544 return std::make_shared<DataComponentTypeBreakSound>();
546 return std::make_shared<DataComponentTypePaintingVariant>();
548 return std::make_shared<DataComponentTypeFloat>();
550 return std::make_shared<DataComponentTypeProvidesBannerPattern>();
552 return std::make_shared<DataComponentTypeProvidesTrimMaterial>();
554 return std::make_shared<DataComponentTypeTooltipDisplay>();
556 return std::make_shared<DataComponentTypeWeapon>();
557#if PROTOCOL_VERSION < 775
559 return std::make_shared<DataComponentTypeEitherRegistryVarint>();
576 return std::make_shared<DataComponentTypeVariantEnum>();
583 return std::make_shared<DataComponentTypeDyeColor>();
585#if PROTOCOL_VERSION > 772
588 return std::make_shared<DataComponentTypeTypedEntityData>();
590#if PROTOCOL_VERSION > 773
592 return std::make_shared<DataComponentTypeUseEffects>();
594 return std::make_shared<DataComponentTypeFloat>();
596 return std::make_shared<DataComponentTypeAttackRange>();
597#if PROTOCOL_VERSION < 775
600 return std::make_shared<DataComponentTypeEitherRegistryVarint>();
603 return std::make_shared<DataComponentTypePiercingWeapon>();
605 return std::make_shared<DataComponentTypeKineticWeapon>();
607 return std::make_shared<DataComponentTypeSwingAnimation>();
609#if PROTOCOL_VERSION > 774
611 return std::make_shared<DataComponentTypeDyeColor>();
619 return std::make_shared<DataComponentTypeVariantEnum>();
621 return std::make_shared<DataComponentTypeInteger>();
623#if PROTOCOL_VERSION > 775
625 return std::make_shared<DataComponentTypeSulfurCubeContent>();
629 throw std::runtime_error(
"Unable to create data component with id: " + std::to_string(
static_cast<int>(type)) +
".");
715 const int num_data = ReadData<VarInt>(iter, length);
716 const int num_void = ReadData<VarInt>(iter, length);
720 for (
int i = 0; i < num_data; ++i)
727 data->Read(iter, length);
729 map.insert({ type, data });
732 for (
int i = 0; i < num_void; ++i)
735 map.insert({ type,
nullptr });
742 for (
const auto& p :
map)
744 num_data += p.second !=
nullptr;
746 const int num_void =
static_cast<int>(
map.size()) - num_data;
748 WriteData<VarInt>(num_data, container);
749 WriteData<VarInt>(num_void, container);
751 for (
const auto& p :
map)
753 if (p.second ==
nullptr)
757 WriteData<DataComponentTypes, VarInt>(p.first, container);
758 p.second->Write(container);
761 for (
const auto& p :
map)
763 if (p.second !=
nullptr)
767 WriteData<DataComponentTypes, VarInt>(p.first, container);