218 throw std::runtime_error(
"Unable to create data component with id: " + std::to_string(
static_cast<int>(type)) +
".");
225 return std::make_shared<DataComponentTypeAdventureModePredicate>();
227 return std::make_shared<DataComponentTypeArmorTrim>();
229 return std::make_shared<DataComponentTypeBannerPatternLayers>();
231 return std::make_shared<DataComponentTypeBlockItemStateProperties>();
233 return std::make_shared<DataComponentTypeBoolean>();
235 return std::make_shared<DataComponentTypeBundleContents>();
237 return std::make_shared<DataComponentTypeChargedProjectiles>();
240 return std::make_shared<DataComponentTypeComponent>();
244 return std::make_shared<DataComponentTypeCustomData>();
246 return std::make_shared<DataComponentTypeCustomModelData>();
254#if PROTOCOL_VERSION > 767
258 return std::make_shared<DataComponentTypeDefault>();
260 return std::make_shared<DataComponentTypeDyeColor>();
262 return std::make_shared<DataComponentTypeDyedItemColor>();
264 return std::make_shared<DataComponentTypeFireworkExplosion>();
266 return std::make_shared<DataComponentTypeFireworks>();
268 return std::make_shared<DataComponentTypeFoodProperties>();
270 return std::make_shared<DataComponentTypeHolderInstrument>();
276#if PROTOCOL_VERSION > 767
279 return std::make_shared<DataComponentTypeInteger>();
281 return std::make_shared<DataComponentTypeItemAttributeModifiers>();
283 return std::make_shared<DataComponentTypeItemContainerContents>();
286 return std::make_shared<DataComponentTypeItemEnchantments>();
288 return std::make_shared<DataComponentTypeItemLore>();
289#if PROTOCOL_VERSION > 766
291 return std::make_shared<DataComponentTypeJukeboxPlayable>();
294 return std::make_shared<DataComponentTypeListBeehiveBlockEntityOccupant>();
296 return std::make_shared<DataComponentTypeLodestoneTracker>();
298 return std::make_shared<DataComponentTypeMapId>();
300 return std::make_shared<DataComponentTypeMapItemColor>();
302 return std::make_shared<DataComponentTypeMapPostProcessing>();
304 return std::make_shared<DataComponentTypePotDecorations>();
306 return std::make_shared<DataComponentTypePotionContents>();
308 return std::make_shared<DataComponentTypeRarity>();
310 return std::make_shared<DataComponentTypeResolvableProfile>();
312#if PROTOCOL_VERSION > 767
317 return std::make_shared<DataComponentTypeResourceLocation>();
319 return std::make_shared<DataComponentTypeSuspiciousStewEffects>();
321 return std::make_shared<DataComponentTypeTool>();
323 return std::make_shared<DataComponentTypeUnbreakable>();
327#if PROTOCOL_VERSION < 768
328 case DataComponentTypes::FireResistant:
330 return std::make_shared<DataComponentTypeUnit>();
332 return std::make_shared<DataComponentTypeWritableBookContent>();
334 return std::make_shared<DataComponentTypeWrittenBookContent>();
335#if PROTOCOL_VERSION > 767
337 return std::make_shared<DataComponentTypeConsumable>();
339 return std::make_shared<DataComponentTypeDeathProtection>();
341 return std::make_shared<DataComponentTypeEquippable>();
343 return std::make_shared<DataComponentTypeRepairable>();
345 return std::make_shared<DataComponentTypeUseCooldown>();
347 return std::make_shared<DataComponentTypeUseRemainder>();
351 throw std::runtime_error(
"Unable to create data component with id: " + std::to_string(
static_cast<int>(type)) +
".");
437 const int num_data = ReadData<VarInt>(iter, length);
438 const int num_void = ReadData<VarInt>(iter, length);
442 for (
int i = 0; i < num_data; ++i)
449 data->Read(iter, length);
451 map.insert({ type, data });
454 for (
int i = 0; i < num_void; ++i)
457 map.insert({ type,
nullptr });
464 for (
const auto& p :
map)
466 num_data += p.second !=
nullptr;
468 const int num_void =
static_cast<int>(
map.size()) - num_data;
470 WriteData<VarInt>(num_data, container);
471 WriteData<VarInt>(num_void, container);
473 for (
const auto& p :
map)
475 if (p.second ==
nullptr)
479 WriteData<DataComponentTypes, VarInt>(p.first, container);
480 p.second->Write(container);
483 for (
const auto& p :
map)
485 if (p.second !=
nullptr)
489 WriteData<DataComponentTypes, VarInt>(p.first, container);