364 throw std::runtime_error(
"Unable to create data component with id: " + std::to_string(
static_cast<int>(type)) +
".");
371 return std::make_shared<DataComponentTypeAdventureModePredicate>();
373 return std::make_shared<DataComponentTypeArmorTrim>();
375 return std::make_shared<DataComponentTypeBannerPatternLayers>();
377 return std::make_shared<DataComponentTypeBlockItemStateProperties>();
379 return std::make_shared<DataComponentTypeBoolean>();
381 return std::make_shared<DataComponentTypeBundleContents>();
383 return std::make_shared<DataComponentTypeChargedProjectiles>();
386 return std::make_shared<DataComponentTypeComponent>();
388#if PROTOCOL_VERSION < 773
392 return std::make_shared<DataComponentTypeCustomData>();
394 return std::make_shared<DataComponentTypeCustomModelData>();
402#if PROTOCOL_VERSION > 767
406 return std::make_shared<DataComponentTypeDefault>();
408 return std::make_shared<DataComponentTypeDyeColor>();
410 return std::make_shared<DataComponentTypeDyedItemColor>();
412 return std::make_shared<DataComponentTypeFireworkExplosion>();
414 return std::make_shared<DataComponentTypeFireworks>();
416 return std::make_shared<DataComponentTypeFoodProperties>();
418 return std::make_shared<DataComponentTypeInstrument>();
424#if PROTOCOL_VERSION > 767
427 return std::make_shared<DataComponentTypeInteger>();
429 return std::make_shared<DataComponentTypeItemAttributeModifiers>();
431 return std::make_shared<DataComponentTypeItemContainerContents>();
434 return std::make_shared<DataComponentTypeItemEnchantments>();
436 return std::make_shared<DataComponentTypeItemLore>();
437#if PROTOCOL_VERSION > 766
439 return std::make_shared<DataComponentTypeJukeboxPlayable>();
442 return std::make_shared<DataComponentTypeListBeehiveBlockEntityOccupant>();
444 return std::make_shared<DataComponentTypeLodestoneTracker>();
446 return std::make_shared<DataComponentTypeMapId>();
448 return std::make_shared<DataComponentTypeMapItemColor>();
450 return std::make_shared<DataComponentTypeMapPostProcessing>();
452 return std::make_shared<DataComponentTypePotDecorations>();
454 return std::make_shared<DataComponentTypePotionContents>();
456 return std::make_shared<DataComponentTypeRarity>();
458 return std::make_shared<DataComponentTypeResolvableProfile>();
460#if PROTOCOL_VERSION > 767
465#if PROTOCOL_VERSION < 774
466 return std::make_shared<DataComponentTypeResourceLocation>();
468 return std::make_shared<DataComponentTypeIdentifier>();
471 return std::make_shared<DataComponentTypeSuspiciousStewEffects>();
473 return std::make_shared<DataComponentTypeTool>();
474#if PROTOCOL_VERSION < 770
476 return std::make_shared<DataComponentTypeUnbreakable>();
481#if PROTOCOL_VERSION < 770
482 case DataComponentTypes::HideAdditionalTooltip:
483 case DataComponentTypes::HideTooltip:
486#if PROTOCOL_VERSION < 768
487 case DataComponentTypes::FireResistant:
489 return std::make_shared<DataComponentTypeUnit>();
491 return std::make_shared<DataComponentTypeWritableBookContent>();
493 return std::make_shared<DataComponentTypeWrittenBookContent>();
494#if PROTOCOL_VERSION > 767
496 return std::make_shared<DataComponentTypeConsumable>();
498 return std::make_shared<DataComponentTypeDeathProtection>();
500 return std::make_shared<DataComponentTypeEquippable>();
502 return std::make_shared<DataComponentTypeRepairable>();
504 return std::make_shared<DataComponentTypeUseCooldown>();
506 return std::make_shared<DataComponentTypeUseRemainder>();
508#if PROTOCOL_VERSION > 769
510 return std::make_shared<DataComponentTypeBlocksAttacks>();
512 return std::make_shared<DataComponentTypeBreakSound>();
514 return std::make_shared<DataComponentTypePaintingVariant>();
516 return std::make_shared<DataComponentTypeFloat>();
518 return std::make_shared<DataComponentTypeProvidesTrimMaterial>();
520 return std::make_shared<DataComponentTypeTooltipDisplay>();
522 return std::make_shared<DataComponentTypeWeapon>();
524 return std::make_shared<DataComponentTypeEitherRegistryVarint>();
540 return std::make_shared<DataComponentTypeVariantEnum>();
547 return std::make_shared<DataComponentTypeDyeColor>();
549#if PROTOCOL_VERSION > 772
552 return std::make_shared<DataComponentTypeTypedEntityData>();
554#if PROTOCOL_VERSION > 773
556 return std::make_shared<DataComponentTypeUseEffects>();
558 return std::make_shared<DataComponentTypeFloat>();
560 return std::make_shared<DataComponentTypeAttackRange>();
563 return std::make_shared<DataComponentTypeEitherRegistryVarint>();
565 return std::make_shared<DataComponentTypePiercingWeapon>();
567 return std::make_shared<DataComponentTypeKineticWeapon>();
569 return std::make_shared<DataComponentTypeSwingAnimation>();
573 throw std::runtime_error(
"Unable to create data component with id: " + std::to_string(
static_cast<int>(type)) +
".");
659 const int num_data = ReadData<VarInt>(iter, length);
660 const int num_void = ReadData<VarInt>(iter, length);
664 for (
int i = 0; i < num_data; ++i)
671 data->Read(iter, length);
673 map.insert({ type, data });
676 for (
int i = 0; i < num_void; ++i)
679 map.insert({ type,
nullptr });
686 for (
const auto& p :
map)
688 num_data += p.second !=
nullptr;
690 const int num_void =
static_cast<int>(
map.size()) - num_data;
692 WriteData<VarInt>(num_data, container);
693 WriteData<VarInt>(num_void, container);
695 for (
const auto& p :
map)
697 if (p.second ==
nullptr)
701 WriteData<DataComponentTypes, VarInt>(p.first, container);
702 p.second->Write(container);
705 for (
const auto& p :
map)
707 if (p.second !=
nullptr)
711 WriteData<DataComponentTypes, VarInt>(p.first, container);