311 throw std::runtime_error(
"Unable to create data component with id: " + std::to_string(
static_cast<int>(type)) +
".");
318 return std::make_shared<DataComponentTypeAdventureModePredicate>();
320 return std::make_shared<DataComponentTypeArmorTrim>();
322 return std::make_shared<DataComponentTypeBannerPatternLayers>();
324 return std::make_shared<DataComponentTypeBlockItemStateProperties>();
326 return std::make_shared<DataComponentTypeBoolean>();
328 return std::make_shared<DataComponentTypeBundleContents>();
330 return std::make_shared<DataComponentTypeChargedProjectiles>();
333 return std::make_shared<DataComponentTypeComponent>();
337 return std::make_shared<DataComponentTypeCustomData>();
339 return std::make_shared<DataComponentTypeCustomModelData>();
347#if PROTOCOL_VERSION > 767
351 return std::make_shared<DataComponentTypeDefault>();
353 return std::make_shared<DataComponentTypeDyeColor>();
355 return std::make_shared<DataComponentTypeDyedItemColor>();
357 return std::make_shared<DataComponentTypeFireworkExplosion>();
359 return std::make_shared<DataComponentTypeFireworks>();
361 return std::make_shared<DataComponentTypeFoodProperties>();
363 return std::make_shared<DataComponentTypeInstrument>();
369#if PROTOCOL_VERSION > 767
372 return std::make_shared<DataComponentTypeInteger>();
374 return std::make_shared<DataComponentTypeItemAttributeModifiers>();
376 return std::make_shared<DataComponentTypeItemContainerContents>();
379 return std::make_shared<DataComponentTypeItemEnchantments>();
381 return std::make_shared<DataComponentTypeItemLore>();
382#if PROTOCOL_VERSION > 766
384 return std::make_shared<DataComponentTypeJukeboxPlayable>();
387 return std::make_shared<DataComponentTypeListBeehiveBlockEntityOccupant>();
389 return std::make_shared<DataComponentTypeLodestoneTracker>();
391 return std::make_shared<DataComponentTypeMapId>();
393 return std::make_shared<DataComponentTypeMapItemColor>();
395 return std::make_shared<DataComponentTypeMapPostProcessing>();
397 return std::make_shared<DataComponentTypePotDecorations>();
399 return std::make_shared<DataComponentTypePotionContents>();
401 return std::make_shared<DataComponentTypeRarity>();
403 return std::make_shared<DataComponentTypeResolvableProfile>();
405#if PROTOCOL_VERSION > 767
410 return std::make_shared<DataComponentTypeResourceLocation>();
412 return std::make_shared<DataComponentTypeSuspiciousStewEffects>();
414 return std::make_shared<DataComponentTypeTool>();
415#if PROTOCOL_VERSION < 770
417 return std::make_shared<DataComponentTypeUnbreakable>();
422#if PROTOCOL_VERSION < 770
423 case DataComponentTypes::HideAdditionalTooltip:
424 case DataComponentTypes::HideTooltip:
427#if PROTOCOL_VERSION < 768
428 case DataComponentTypes::FireResistant:
430 return std::make_shared<DataComponentTypeUnit>();
432 return std::make_shared<DataComponentTypeWritableBookContent>();
434 return std::make_shared<DataComponentTypeWrittenBookContent>();
435#if PROTOCOL_VERSION > 767
437 return std::make_shared<DataComponentTypeConsumable>();
439 return std::make_shared<DataComponentTypeDeathProtection>();
441 return std::make_shared<DataComponentTypeEquippable>();
443 return std::make_shared<DataComponentTypeRepairable>();
445 return std::make_shared<DataComponentTypeUseCooldown>();
447 return std::make_shared<DataComponentTypeUseRemainder>();
449#if PROTOCOL_VERSION > 769
451 return std::make_shared<DataComponentTypeBlocksAttacks>();
453 return std::make_shared<DataComponentTypeBreakSound>();
455 return std::make_shared<DataComponentTypePaintingVariant>();
457 return std::make_shared<DataComponentTypePotionDurationScale>();
459 return std::make_shared<DataComponentTypeProvidesTrimMaterial>();
461 return std::make_shared<DataComponentTypeTooltipDisplay>();
463 return std::make_shared<DataComponentTypeWeapon>();
480 return std::make_shared<DataComponentTypeVariantEnum>();
487 return std::make_shared<DataComponentTypeDyeColor>();
491 throw std::runtime_error(
"Unable to create data component with id: " + std::to_string(
static_cast<int>(type)) +
".");
577 const int num_data = ReadData<VarInt>(iter, length);
578 const int num_void = ReadData<VarInt>(iter, length);
582 for (
int i = 0; i < num_data; ++i)
589 data->Read(iter, length);
591 map.insert({ type, data });
594 for (
int i = 0; i < num_void; ++i)
597 map.insert({ type,
nullptr });
604 for (
const auto& p :
map)
606 num_data += p.second !=
nullptr;
608 const int num_void =
static_cast<int>(
map.size()) - num_data;
610 WriteData<VarInt>(num_data, container);
611 WriteData<VarInt>(num_void, container);
613 for (
const auto& p :
map)
615 if (p.second ==
nullptr)
619 WriteData<DataComponentTypes, VarInt>(p.first, container);
620 p.second->Write(container);
623 for (
const auto& p :
map)
625 if (p.second !=
nullptr)
629 WriteData<DataComponentTypes, VarInt>(p.first, container);