367 if (data.size() == 0)
373 size_t length = data.size();
377 const unsigned char index = ProtocolCraft::ReadData<unsigned char>(iter, length);
383 const int type = ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length);
386 enum EntityMetadataTypes
390#if PROTOCOL_VERSION > 760
396#if PROTOCOL_VERSION > 340
403 OptionalBlockPosition,
405#if PROTOCOL_VERSION > 769
406 OptionalLivingEntityReference,
411#if PROTOCOL_VERSION > 761
414#if PROTOCOL_VERSION < 773
417#if PROTOCOL_VERSION > 340
420#if PROTOCOL_VERSION > 765
423#if PROTOCOL_VERSION > 404
428#if PROTOCOL_VERSION > 758
431#if PROTOCOL_VERSION > 774
434#if PROTOCOL_VERSION > 769
437#if PROTOCOL_VERSION > 774
440#if PROTOCOL_VERSION > 765
443#if PROTOCOL_VERSION > 769
446#if PROTOCOL_VERSION > 758
449#if PROTOCOL_VERSION > 769
452#if PROTOCOL_VERSION > 774
455#if PROTOCOL_VERSION > 769
458#if PROTOCOL_VERSION > 774
461#if PROTOCOL_VERSION > 773
462 ZombieNautilusVariant,
464#if PROTOCOL_VERSION > 758
468#if PROTOCOL_VERSION > 761
470#if PROTOCOL_VERSION > 765
473#if PROTOCOL_VERSION > 772
475 WeatheringCopperState,
479#if PROTOCOL_VERSION > 772
483#if PROTOCOL_VERSION > 773
490 case EntityMetadataTypes::Char:
491 value = ProtocolCraft::ReadData<char>(iter, length);
493 case EntityMetadataTypes::Int:
494 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
496#if PROTOCOL_VERSION > 760
497 case EntityMetadataTypes::Long:
498 value =
static_cast<long long int>(ProtocolCraft::ReadData<ProtocolCraft::VarLong>(iter, length));
501 case EntityMetadataTypes::Float:
502 value = ProtocolCraft::ReadData<float>(iter, length);
504 case EntityMetadataTypes::String:
505 value = ProtocolCraft::ReadData<std::string>(iter, length);
507 case EntityMetadataTypes::Chat:
509 std::any_cast<ProtocolCraft::Chat&>(value).Read(iter, length);
511#if PROTOCOL_VERSION > 340
512 case EntityMetadataTypes::OptionalChat:
513 if (ProtocolCraft::ReadData<bool>(iter, length))
516 std::any_cast<std::optional<ProtocolCraft::Chat>&>(value).value().Read(iter, length);
520 value = std::optional<ProtocolCraft::Chat>();
524 case EntityMetadataTypes::Slot:
526 std::any_cast<ProtocolCraft::Slot&>(value).Read(iter, length);
528 case EntityMetadataTypes::Bool:
529 value = ProtocolCraft::ReadData<bool>(iter, length);
531 case EntityMetadataTypes::Rotations:
534 for (
int i = 0; i < 3; ++i)
536 rotation[i] = ProtocolCraft::ReadData<float>(iter, length);
541 case EntityMetadataTypes::BlockPosition:
548 case EntityMetadataTypes::OptionalBlockPosition:
549 if (ProtocolCraft::ReadData<bool>(iter, length))
553 value = std::optional<Position>(
position);
557 value = std::optional<Position>();
560 case EntityMetadataTypes::DirectionType:
561 value =
static_cast<Direction>(
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length)));
563#if PROTOCOL_VERSION > 769
564 case EntityMetadataTypes::OptionalLivingEntityReference:
566 case EntityMetadataTypes::OptionalUUID:
568 if (ProtocolCraft::ReadData<bool>(iter, length))
570 value = std::optional<ProtocolCraft::UUID>(ProtocolCraft::ReadData<ProtocolCraft::UUID>(iter, length));
574 value = std::optional<ProtocolCraft::UUID>();
577 case EntityMetadataTypes::BlockstateType:
578 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
580#if PROTOCOL_VERSION > 761
581 case EntityMetadataTypes::OptionalBlockstate:
582 if (
const int n = ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length))
584 value = std::optional<int>(n);
588 value = std::optional<int>();
592#if PROTOCOL_VERSION < 773
593 case EntityMetadataTypes::NBT:
596 unnamed_value.
Read(iter, length);
601#if PROTOCOL_VERSION > 340
602 case EntityMetadataTypes::Particle:
605 particle.
Read(iter, length);
610#if PROTOCOL_VERSION > 765
611 case EntityMetadataTypes::Particles:
612 value = ProtocolCraft::ReadData<std::vector<ProtocolCraft::Particle>>(iter, length);
615#if PROTOCOL_VERSION > 404
616 case EntityMetadataTypes::VillagerDataType:
618 ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length),
619 ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length),
620 ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length)
623 case EntityMetadataTypes::OptionalUint:
625 const int val = ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length);
626 value = val > 0 ? std::optional<int>(val - 1) : std::optional<int>();
629 case EntityMetadataTypes::PoseType:
630 value =
static_cast<Pose>(
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length)));
633#if PROTOCOL_VERSION > 758
634 case EntityMetadataTypes::CatVariant:
635 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
638#if PROTOCOL_VERSION > 774
639 case EntityMetadataTypes::CatSoundVariant:
640 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
643#if PROTOCOL_VERSION > 769
644 case EntityMetadataTypes::CowVariant:
645 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
648#if PROTOCOL_VERSION > 774
649 case EntityMetadataTypes::CowSoundVariant:
650 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
653#if PROTOCOL_VERSION > 765
654 case EntityMetadataTypes::WolfVariant:
655 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
658#if PROTOCOL_VERSION > 769
659 case EntityMetadataTypes::WolfSoundVariant:
660 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
663#if PROTOCOL_VERSION > 758
664 case EntityMetadataTypes::FrogVariant:
665 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
668#if PROTOCOL_VERSION > 769
669 case EntityMetadataTypes::PigVariant:
670 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
673#if PROTOCOL_VERSION > 774
674 case EntityMetadataTypes::PigSoundVariant:
675 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
678#if PROTOCOL_VERSION > 769
679 case EntityMetadataTypes::ChickenVariant:
680 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
683#if PROTOCOL_VERSION > 774
684 case EntityMetadataTypes::ChickenSoundVariant:
685 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
688#if PROTOCOL_VERSION > 773
689 case EntityMetadataTypes::ZombieNautilusVariant:
690 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
693#if PROTOCOL_VERSION > 758
694 case EntityMetadataTypes::OptionalGlobalPos:
695 if (ProtocolCraft::ReadData<bool>(iter, length))
698 dimension.
Read(iter, length);
700 pos.
Read(iter, length);
702 value = std::optional<GlobalPos>({
709 value = std::optional<GlobalPos>();
712 case EntityMetadataTypes::PaintingVariant:
713 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
716#if PROTOCOL_VERSION > 761
717 case EntityMetadataTypes::SnifferState:
718 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
720#if PROTOCOL_VERSION > 765
721 case EntityMetadataTypes::ArmadilloState:
722 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
725#if PROTOCOL_VERSION > 772
726 case EntityMetadataTypes::CopperGolemState:
727 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
729 case EntityMetadataTypes::WeatheringCopperState:
730 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
733 case EntityMetadataTypes::Vec3:
735 const float x = ProtocolCraft::ReadData<float>(iter, length);
736 const float y = ProtocolCraft::ReadData<float>(iter, length);
737 const float z = ProtocolCraft::ReadData<float>(iter, length);
741 case EntityMetadataTypes::Quaternion:
743 const float x = ProtocolCraft::ReadData<float>(iter, length);
744 const float y = ProtocolCraft::ReadData<float>(iter, length);
745 const float z = ProtocolCraft::ReadData<float>(iter, length);
746 const float w = ProtocolCraft::ReadData<float>(iter, length);
747 value = std::array<float, 4>{x, y, z, w};
751#if PROTOCOL_VERSION > 772
752 case EntityMetadataTypes::ResolvableProfile:
753 value = ProtocolCraft::ReadData<ProtocolCraft::Components::DataComponentTypeResolvableProfile>(iter, length);
756#if PROTOCOL_VERSION > 773
757 case EntityMetadataTypes::HumanoidArm:
758 value =
static_cast<int>(ProtocolCraft::ReadData<ProtocolCraft::VarInt>(iter, length));
762 LOG_ERROR(
"Unknown type in entity metadata : " << type <<
".Stopping current metadata parsing.");
1565#if PROTOCOL_VERSION > 758
1567 return std::make_shared<AllayEntity>();
1570 return std::make_shared<AreaEffectCloudEntity>();
1571#if PROTOCOL_VERSION > 765
1573 return std::make_shared<ArmadilloEntity>();
1576 return std::make_shared<ArmorStandEntity>();
1578 return std::make_shared<ArrowEntity>();
1579#if PROTOCOL_VERSION > 754
1581 return std::make_shared<AxolotlEntity>();
1584 return std::make_shared<BatEntity>();
1585#if PROTOCOL_VERSION > 498
1587 return std::make_shared<BeeEntity>();
1590 return std::make_shared<BlazeEntity>();
1591#if PROTOCOL_VERSION < 768
1592 case EntityType::Boat:
1593 return std::make_shared<BoatEntity>();
1604 return std::make_shared<BoatEntity>(type);
1606#if PROTOCOL_VERSION > 765
1608 return std::make_shared<BoggedEntity>();
1610#if PROTOCOL_VERSION > 764
1612 return std::make_shared<BreezeEntity>();
1614#if PROTOCOL_VERSION > 765
1616 return std::make_shared<BreezeWindChargeEntity>();
1618#if PROTOCOL_VERSION > 758
1619#if PROTOCOL_VERSION < 768
1620 case EntityType::ChestBoat:
1621 return std::make_shared<ChestBoatEntity>();
1632 return std::make_shared<ChestBoatEntity>(type);
1635#if PROTOCOL_VERSION > 767
1637 return std::make_shared<ChestRaftEntity>(type);
1639#if PROTOCOL_VERSION > 404
1641 return std::make_shared<CatEntity>();
1643#if PROTOCOL_VERSION > 760
1645 return std::make_shared<CamelEntity>();
1647#if PROTOCOL_VERSION > 773
1649 return std::make_shared<CamelHuskEntity>();
1652 return std::make_shared<CaveSpiderEntity>();
1654 return std::make_shared<ChickenEntity>();
1655#if PROTOCOL_VERSION > 340
1657 return std::make_shared<CodEntity>();
1659#if PROTOCOL_VERSION > 772
1661 return std::make_shared<CopperGolemEntity>();
1664 return std::make_shared<CowEntity>();
1665#if PROTOCOL_VERSION > 767
1667 return std::make_shared<CreakingEntity>();
1669#if PROTOCOL_VERSION > 767 && PROTOCOL_VERSION < 769
1670 case EntityType::CreakingTransient:
1671 return std::make_shared<CreakingTransientEntity>();
1674 return std::make_shared<CreeperEntity>();
1675#if PROTOCOL_VERSION > 761
1677 return std::make_shared<DisplayBlockDisplayEntity>();
1679 return std::make_shared<DisplayItemDisplayEntity>();
1681 return std::make_shared<DisplayTextDisplayEntity>();
1683#if PROTOCOL_VERSION > 340
1685 return std::make_shared<DolphinEntity>();
1688 return std::make_shared<DonkeyEntity>();
1690 return std::make_shared<DragonFireballEntity>();
1691#if PROTOCOL_VERSION > 340
1693 return std::make_shared<DrownedEntity>();
1696 return std::make_shared<ElderGuardianEntity>();
1698 return std::make_shared<EndCrystalEntity>();
1700 return std::make_shared<EnderDragonEntity>();
1702 return std::make_shared<EnderManEntity>();
1704 return std::make_shared<EndermiteEntity>();
1706 return std::make_shared<EvokerEntity>();
1708 return std::make_shared<EvokerFangsEntity>();
1710 return std::make_shared<ExperienceOrbEntity>();
1712 return std::make_shared<EyeOfEnderEntity>();
1714 return std::make_shared<FallingBlockEntity>();
1716 return std::make_shared<FireworkRocketEntity>();
1717#if PROTOCOL_VERSION > 404
1719 return std::make_shared<FoxEntity>();
1721#if PROTOCOL_VERSION > 758
1723 return std::make_shared<FrogEntity>();
1726 return std::make_shared<GhastEntity>();
1727#if PROTOCOL_VERSION > 770
1729 return std::make_shared<HappyGhastEntity>();
1732 return std::make_shared<GiantEntity>();
1733#if PROTOCOL_VERSION > 754
1735 return std::make_shared<GlowItemFrameEntity>();
1737 return std::make_shared<GlowSquidEntity>();
1739 return std::make_shared<GoatEntity>();
1742 return std::make_shared<GuardianEntity>();
1743#if PROTOCOL_VERSION > 578
1745 return std::make_shared<HoglinEntity>();
1748 return std::make_shared<HorseEntity>();
1750 return std::make_shared<HuskEntity>();
1752 return std::make_shared<IllusionerEntity>();
1753#if PROTOCOL_VERSION > 761
1755 return std::make_shared<InteractionEntity>();
1758 return std::make_shared<IronGolemEntity>();
1760 return std::make_shared<ItemEntity>();
1762 return std::make_shared<ItemFrameEntity>();
1763#if PROTOCOL_VERSION > 765
1765 return std::make_shared<OminousItemSpawnerEntity>();
1768 return std::make_shared<LargeFireballEntity>();
1770 return std::make_shared<LeashFenceKnotEntity>();
1771#if PROTOCOL_VERSION > 340
1773 return std::make_shared<LightningBoltEntity>();
1776 return std::make_shared<LlamaEntity>();
1778 return std::make_shared<LlamaSpitEntity>();
1780 return std::make_shared<MagmaCubeEntity>();
1781#if PROTOCOL_VERSION > 772
1783 return std::make_shared<MannequinEntity>();
1785#if PROTOCOL_VERSION > 754
1787 return std::make_shared<MarkerEntity>();
1790 return std::make_shared<MinecartEntity>();
1792 return std::make_shared<MinecartChestEntity>();
1794 return std::make_shared<MinecartCommandBlockEntity>();
1796 return std::make_shared<MinecartFurnaceEntity>();
1798 return std::make_shared<MinecartHopperEntity>();
1800 return std::make_shared<MinecartSpawnerEntity>();
1802 return std::make_shared<MinecartTNTEntity>();
1804 return std::make_shared<MuleEntity>();
1805#if PROTOCOL_VERSION > 773
1807 return std::make_shared<NautilusEntity>();
1810 return std::make_shared<MushroomCowEntity>();
1812 return std::make_shared<OcelotEntity>();
1814 return std::make_shared<PaintingEntity>();
1815#if PROTOCOL_VERSION > 404
1817 return std::make_shared<PandaEntity>();
1819#if PROTOCOL_VERSION > 773
1821 return std::make_shared<ParchedEntity>();
1824 return std::make_shared<ParrotEntity>();
1825#if PROTOCOL_VERSION > 340
1827 return std::make_shared<PhantomEntity>();
1830 return std::make_shared<PigEntity>();
1831#if PROTOCOL_VERSION > 578
1833 return std::make_shared<PiglinEntity>();
1835#if PROTOCOL_VERSION > 736
1837 return std::make_shared<PiglinBruteEntity>();
1839#if PROTOCOL_VERSION > 404
1841 return std::make_shared<PillagerEntity>();
1844 return std::make_shared<PolarBearEntity>();
1846 return std::make_shared<PrimedTntEntity>();
1847#if PROTOCOL_VERSION > 340
1849 return std::make_shared<PufferfishEntity>();
1852 return std::make_shared<RabbitEntity>();
1853#if PROTOCOL_VERSION > 767
1855 return std::make_shared<RaftEntity>(type);
1857#if PROTOCOL_VERSION > 404
1859 return std::make_shared<RavagerEntity>();
1861#if PROTOCOL_VERSION > 340
1863 return std::make_shared<SalmonEntity>();
1866 return std::make_shared<SheepEntity>();
1868 return std::make_shared<ShulkerEntity>();
1870 return std::make_shared<ShulkerBulletEntity>();
1872 return std::make_shared<SilverfishEntity>();
1874 return std::make_shared<SkeletonEntity>();
1876 return std::make_shared<SkeletonHorseEntity>();
1878 return std::make_shared<SlimeEntity>();
1880 return std::make_shared<SmallFireballEntity>();
1881#if PROTOCOL_VERSION > 761
1883 return std::make_shared<SnifferEntity>();
1886 return std::make_shared<SnowGolemEntity>();
1888 return std::make_shared<SnowballEntity>();
1890 return std::make_shared<SpectralArrowEntity>();
1892 return std::make_shared<SpiderEntity>();
1894 return std::make_shared<SquidEntity>();
1896 return std::make_shared<StrayEntity>();
1897#if PROTOCOL_VERSION > 578
1899 return std::make_shared<StriderEntity>();
1901#if PROTOCOL_VERSION > 758
1903 return std::make_shared<TadpoleEntity>();
1906 return std::make_shared<ThrownEggEntity>();
1908 return std::make_shared<ThrownEnderpearlEntity>();
1910 return std::make_shared<ThrownExperienceBottleEntity>();
1911#if PROTOCOL_VERSION < 770
1912 case EntityType::ThrownPotion:
1913 return std::make_shared<ThrownPotionEntity>();
1916 return std::make_shared<ThrownSplashPotionEntity>();
1918 return std::make_shared<ThrownLingeringPotionEntity>();
1920#if PROTOCOL_VERSION > 340
1922 return std::make_shared<ThrownTridentEntity>();
1924#if PROTOCOL_VERSION > 404
1926 return std::make_shared<TraderLlamaEntity>();
1928#if PROTOCOL_VERSION > 340
1930 return std::make_shared<TropicalFishEntity>();
1932#if PROTOCOL_VERSION > 340
1934 return std::make_shared<TurtleEntity>();
1937 return std::make_shared<VexEntity>();
1939 return std::make_shared<VillagerEntity>();
1941 return std::make_shared<VindicatorEntity>();
1942#if PROTOCOL_VERSION > 404
1944 return std::make_shared<WanderingTraderEntity>();
1946#if PROTOCOL_VERSION > 758
1948 return std::make_shared<WardenEntity>();
1950#if PROTOCOL_VERSION > 764
1952 return std::make_shared<WindChargeEntity>();
1955 return std::make_shared<WitchEntity>();
1957 return std::make_shared<WitherBossEntity>();
1959 return std::make_shared<WitherSkeletonEntity>();
1961 return std::make_shared<WitherSkullEntity>();
1963 return std::make_shared<WolfEntity>();
1964#if PROTOCOL_VERSION > 578
1966 return std::make_shared<ZoglinEntity>();
1969 return std::make_shared<ZombieEntity>();
1971 return std::make_shared<ZombieHorseEntity>();
1972#if PROTOCOL_VERSION > 773
1974 return std::make_shared<ZombieNautilusEntity>();
1977 return std::make_shared<ZombieVillagerEntity>();
1978#if PROTOCOL_VERSION > 578
1980 return std::make_shared<ZombifiedPiglinEntity>();
1982 case EntityType::PigZombie:
1983 return std::make_shared<PigZombieEntity>();
1986 return std::make_shared<PlayerEntity>();
1987#if PROTOCOL_VERSION > 340
1989 return std::make_shared<FishingHookEntity>();
2068 std::scoped_lock<std::shared_mutex> lock(
entity_mutex);
2073 faces = std::vector<Renderer::Face>(6);
2076 for (
int i = 0; i < 6; ++i)
2084 face_descriptors[i].transformations.scales.push_back(std::make_shared<Renderer::Scale>(
2085 static_cast<float>(half_width),
2086 static_cast<float>(half_height),
2087 static_cast<float>(half_width)
2090 face_descriptors[i].transformations.translations.push_back(std::make_shared<Renderer::Translation>(0.0f,
static_cast<float>(half_height), 0.0f));
2092 face_descriptors[i].transformations.translations.push_back(std::make_shared<Renderer::Translation>(
2098 face_descriptors[i].transformations.rotations.push_back(std::make_shared<Renderer::Rotation>(0.0f, 1.0f, 0.0f,
yaw));
2099 face_descriptors[i].transformations.rotations.push_back(std::make_shared<Renderer::Rotation>(1.0f, 0.0f, 0.0f,
pitch));
2104 faces[i].SetDisplayBackface(
false);
2105 faces[i].SetTextureMultipliers({ 0xFFFFFFFF, 0xFFFFFFFF });
2108 std::array<unsigned short, 4> texture_pos = { 0, 0, 0, 0 };
2109 std::array<unsigned short, 4> texture_size = { 0, 0, 0, 0 };
2113 for (
int j = 0; j < std::min(2, static_cast<int>(
face_descriptors[i].texture_names.size())); ++j)
2116 std::tie(texture_pos[2 * j + 0], texture_pos[2 * j + 1]) = texture_data.
position;
2117 std::tie(texture_size[2 * j + 0], texture_size[2 * j + 1]) = texture_data.
size;
2123 std::array<float, 4> coords =
faces[i].GetTextureCoords(
false);
2125 coords[0] = (texture_pos[0] + coords[0] / 16.0f * texture_size[0]) / atlas->
GetWidth();
2126 coords[1] = (texture_pos[1] + coords[1] / 16.0f * height_normalizer) / atlas->
GetHeight();
2127 coords[2] = (texture_pos[0] + coords[2] / 16.0f * texture_size[0]) / atlas->
GetWidth();
2128 coords[3] = (texture_pos[1] + coords[3] / 16.0f * height_normalizer) / atlas->
GetHeight();
2129 faces[i].SetTextureCoords(coords,
false);
2134 coords =
faces[i].GetTextureCoords(
true);
2136 coords[0] = (texture_pos[2] + coords[0] / 16.0f * texture_size[2]) / atlas->
GetWidth();
2137 coords[1] = (texture_pos[3] + coords[1] / 16.0f * height_normalizer) / atlas->
GetHeight();
2138 coords[2] = (texture_pos[2] + coords[2] / 16.0f * texture_size[2]) / atlas->
GetWidth();
2139 coords[3] = (texture_pos[3] + coords[3] / 16.0f * height_normalizer) / atlas->
GetHeight();
2140 faces[i].SetTextureCoords(coords,
true);
2143 faces[i].SetTransparencyData(transparencies[0]);