321 throw std::runtime_error(
"Unable to create data component with id: " + std::to_string(
static_cast<int>(type)) +
".");
328 return std::make_shared<DataComponentTypeAdventureModePredicate>();
330 return std::make_shared<DataComponentTypeArmorTrim>();
332 return std::make_shared<DataComponentTypeBannerPatternLayers>();
334 return std::make_shared<DataComponentTypeBlockItemStateProperties>();
336 return std::make_shared<DataComponentTypeBoolean>();
338 return std::make_shared<DataComponentTypeBundleContents>();
340 return std::make_shared<DataComponentTypeChargedProjectiles>();
343 return std::make_shared<DataComponentTypeComponent>();
345#if PROTOCOL_VERSION < 773
349 return std::make_shared<DataComponentTypeCustomData>();
351 return std::make_shared<DataComponentTypeCustomModelData>();
359#if PROTOCOL_VERSION > 767
363 return std::make_shared<DataComponentTypeDefault>();
365 return std::make_shared<DataComponentTypeDyeColor>();
367 return std::make_shared<DataComponentTypeDyedItemColor>();
369 return std::make_shared<DataComponentTypeFireworkExplosion>();
371 return std::make_shared<DataComponentTypeFireworks>();
373 return std::make_shared<DataComponentTypeFoodProperties>();
375 return std::make_shared<DataComponentTypeInstrument>();
381#if PROTOCOL_VERSION > 767
384 return std::make_shared<DataComponentTypeInteger>();
386 return std::make_shared<DataComponentTypeItemAttributeModifiers>();
388 return std::make_shared<DataComponentTypeItemContainerContents>();
391 return std::make_shared<DataComponentTypeItemEnchantments>();
393 return std::make_shared<DataComponentTypeItemLore>();
394#if PROTOCOL_VERSION > 766
396 return std::make_shared<DataComponentTypeJukeboxPlayable>();
399 return std::make_shared<DataComponentTypeListBeehiveBlockEntityOccupant>();
401 return std::make_shared<DataComponentTypeLodestoneTracker>();
403 return std::make_shared<DataComponentTypeMapId>();
405 return std::make_shared<DataComponentTypeMapItemColor>();
407 return std::make_shared<DataComponentTypeMapPostProcessing>();
409 return std::make_shared<DataComponentTypePotDecorations>();
411 return std::make_shared<DataComponentTypePotionContents>();
413 return std::make_shared<DataComponentTypeRarity>();
415 return std::make_shared<DataComponentTypeResolvableProfile>();
417#if PROTOCOL_VERSION > 767
422 return std::make_shared<DataComponentTypeResourceLocation>();
424 return std::make_shared<DataComponentTypeSuspiciousStewEffects>();
426 return std::make_shared<DataComponentTypeTool>();
427#if PROTOCOL_VERSION < 770
429 return std::make_shared<DataComponentTypeUnbreakable>();
434#if PROTOCOL_VERSION < 770
435 case DataComponentTypes::HideAdditionalTooltip:
436 case DataComponentTypes::HideTooltip:
439#if PROTOCOL_VERSION < 768
440 case DataComponentTypes::FireResistant:
442 return std::make_shared<DataComponentTypeUnit>();
444 return std::make_shared<DataComponentTypeWritableBookContent>();
446 return std::make_shared<DataComponentTypeWrittenBookContent>();
447#if PROTOCOL_VERSION > 767
449 return std::make_shared<DataComponentTypeConsumable>();
451 return std::make_shared<DataComponentTypeDeathProtection>();
453 return std::make_shared<DataComponentTypeEquippable>();
455 return std::make_shared<DataComponentTypeRepairable>();
457 return std::make_shared<DataComponentTypeUseCooldown>();
459 return std::make_shared<DataComponentTypeUseRemainder>();
461#if PROTOCOL_VERSION > 769
463 return std::make_shared<DataComponentTypeBlocksAttacks>();
465 return std::make_shared<DataComponentTypeBreakSound>();
467 return std::make_shared<DataComponentTypePaintingVariant>();
469 return std::make_shared<DataComponentTypePotionDurationScale>();
471 return std::make_shared<DataComponentTypeProvidesTrimMaterial>();
473 return std::make_shared<DataComponentTypeTooltipDisplay>();
475 return std::make_shared<DataComponentTypeWeapon>();
492 return std::make_shared<DataComponentTypeVariantEnum>();
499 return std::make_shared<DataComponentTypeDyeColor>();
501#if PROTOCOL_VERSION > 772
504 return std::make_shared<DataComponentTypeTypedEntityData>();
508 throw std::runtime_error(
"Unable to create data component with id: " + std::to_string(
static_cast<int>(type)) +
".");
594 const int num_data = ReadData<VarInt>(iter, length);
595 const int num_void = ReadData<VarInt>(iter, length);
599 for (
int i = 0; i < num_data; ++i)
606 data->Read(iter, length);
608 map.insert({ type, data });
611 for (
int i = 0; i < num_void; ++i)
614 map.insert({ type,
nullptr });
621 for (
const auto& p :
map)
623 num_data += p.second !=
nullptr;
625 const int num_void =
static_cast<int>(
map.size()) - num_data;
627 WriteData<VarInt>(num_data, container);
628 WriteData<VarInt>(num_void, container);
630 for (
const auto& p :
map)
632 if (p.second ==
nullptr)
636 WriteData<DataComponentTypes, VarInt>(p.first, container);
637 p.second->Write(container);
640 for (
const auto& p :
map)
642 if (p.second !=
nullptr)
646 WriteData<DataComponentTypes, VarInt>(p.first, container);