diff --git a/MinecraftClient/Mapping/EntityMetaDataType.cs b/MinecraftClient/Mapping/EntityMetaDataType.cs index db24f77b..53afecfa 100644 --- a/MinecraftClient/Mapping/EntityMetaDataType.cs +++ b/MinecraftClient/Mapping/EntityMetaDataType.cs @@ -36,6 +36,10 @@ public enum EntityMetaDataType Nbt, Particle, /// + /// List of Particle (1.20.6+) + /// + Particles, + /// /// VarInt x3 /// VillagerData, @@ -48,6 +52,10 @@ public enum EntityMetaDataType /// VarInt /// CatVariant, + /// + /// VarInt (1.20.6+) + /// + WolfVariant, FrogVariant, /// /// String + Position @@ -66,6 +74,10 @@ public enum EntityMetaDataType /// SnifferState, /// + /// VarInt (1.20.6+) + /// + ArmadilloState, + /// /// Float x3 /// Vector3, diff --git a/MinecraftClient/Mapping/EntityMetadataPalette.cs b/MinecraftClient/Mapping/EntityMetadataPalette.cs index db544f39..e7e5c978 100644 --- a/MinecraftClient/Mapping/EntityMetadataPalette.cs +++ b/MinecraftClient/Mapping/EntityMetadataPalette.cs @@ -22,7 +22,8 @@ public abstract class EntityMetadataPalette <= Protocol18Handler.MC_1_12_2_Version => new EntityMetadataPalette1122(), // 1.9 - 1.12.2 <= Protocol18Handler.MC_1_19_2_Version => new EntityMetadataPalette1191(), // 1.13 - 1.19.2 <= Protocol18Handler.MC_1_19_3_Version => new EntityMetadataPalette1193(), // 1.19.3 - <= Protocol18Handler.MC_1_21_Version => new EntityMetadataPalette1194(), // 1.19.4 - 1.21 + + < Protocol18Handler.MC_1_20_6_Version => new EntityMetadataPalette1194(), // 1.19.4 - 1.20.4 + <= Protocol18Handler.MC_1_21_Version => new EntityMetadataPalette1206(), // 1.20.6 - 1.21 _ => throw new NotImplementedException() }; } diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1206.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1206.cs new file mode 100644 index 00000000..67b61cc3 --- /dev/null +++ b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1206.cs @@ -0,0 +1,51 @@ +using System.Collections.Generic; + +namespace MinecraftClient.Mapping.EntityMetadataPalettes; + +/// +/// For 1.20.6+ +/// Added PARTICLES (id 18), WOLF_VARIANT (id 23), ARMADILLO_STATE (id 28) +/// compared to 1.19.4 palette. +/// +public class EntityMetadataPalette1206 : EntityMetadataPalette +{ + private readonly Dictionary entityMetadataMappings = new() + { + { 0, EntityMetaDataType.Byte }, + { 1, EntityMetaDataType.VarInt }, + { 2, EntityMetaDataType.VarLong }, + { 3, EntityMetaDataType.Float }, + { 4, EntityMetaDataType.String }, + { 5, EntityMetaDataType.Chat }, + { 6, EntityMetaDataType.OptionalChat }, + { 7, EntityMetaDataType.Slot }, + { 8, EntityMetaDataType.Boolean }, + { 9, EntityMetaDataType.Rotation }, + { 10, EntityMetaDataType.Position }, + { 11, EntityMetaDataType.OptionalPosition }, + { 12, EntityMetaDataType.Direction }, + { 13, EntityMetaDataType.OptionalUuid }, + { 14, EntityMetaDataType.BlockId }, + { 15, EntityMetaDataType.OptionalBlockId }, + { 16, EntityMetaDataType.Nbt }, + { 17, EntityMetaDataType.Particle }, + { 18, EntityMetaDataType.Particles }, + { 19, EntityMetaDataType.VillagerData }, + { 20, EntityMetaDataType.OptionalVarInt }, + { 21, EntityMetaDataType.Pose }, + { 22, EntityMetaDataType.CatVariant }, + { 23, EntityMetaDataType.WolfVariant }, + { 24, EntityMetaDataType.FrogVariant }, + { 25, EntityMetaDataType.OptionalGlobalPosition }, + { 26, EntityMetaDataType.PaintingVariant }, + { 27, EntityMetaDataType.SnifferState }, + { 28, EntityMetaDataType.ArmadilloState }, + { 29, EntityMetaDataType.Vector3 }, + { 30, EntityMetaDataType.Quaternion }, + }; + + public override Dictionary GetEntityMetadataMappingsList() + { + return entityMetadataMappings; + } +} diff --git a/MinecraftClient/Protocol/Handlers/DataTypes.cs b/MinecraftClient/Protocol/Handlers/DataTypes.cs index d36ab257..271d98f8 100644 --- a/MinecraftClient/Protocol/Handlers/DataTypes.cs +++ b/MinecraftClient/Protocol/Handlers/DataTypes.cs @@ -842,9 +842,13 @@ namespace MinecraftClient.Protocol.Handlers value = ReadNextNbt(cache); break; case EntityMetaDataType.Particle: // Particle - // Skip data only, not used ReadParticleData(cache, itemPalette); break; + case EntityMetaDataType.Particles: // List of Particle (1.20.6+) + int particleCount = ReadNextVarInt(cache); + for (int i = 0; i < particleCount; i++) + ReadParticleData(cache, itemPalette); + break; case EntityMetaDataType.VillagerData: // Villager Data (3x VarInt) value = new List { @@ -869,7 +873,10 @@ namespace MinecraftClient.Protocol.Handlers case EntityMetaDataType.CatVariant: // Cat Variant value = ReadNextVarInt(cache); break; - case EntityMetaDataType.FrogVariant: // Frog Varint + case EntityMetaDataType.WolfVariant: // Wolf Variant (1.20.6+) + value = ReadNextVarInt(cache); + break; + case EntityMetaDataType.FrogVariant: // Frog Variant value = ReadNextVarInt(cache); break; case EntityMetaDataType.GlobalPosition: // GlobalPos @@ -892,6 +899,9 @@ namespace MinecraftClient.Protocol.Handlers case EntityMetaDataType.SnifferState: // Sniffer state value = ReadNextVarInt(cache); break; + case EntityMetaDataType.ArmadilloState: // Armadillo state (1.20.6+) + value = ReadNextVarInt(cache); + break; case EntityMetaDataType.Vector3: // Vector 3f value = new List {