diff --git a/MinecraftClient/Mapping/EntityMetaDataType.cs b/MinecraftClient/Mapping/EntityMetaDataType.cs index 6bd3ce02..e435c40d 100644 --- a/MinecraftClient/Mapping/EntityMetaDataType.cs +++ b/MinecraftClient/Mapping/EntityMetaDataType.cs @@ -11,24 +11,63 @@ public enum EntityMetaDataType OptionalChat, Slot, Boolean, + /// + /// Float x3 + /// Rotation, Position, OptionalPosition, + /// + /// VarInt + /// Direction, OptionalUuid, + /// + /// VarInt + /// BlockId, + /// + /// VarInt (0 for absent) + /// OptionalBlockId, Nbt, Particle, + /// + /// VarInt x3 + /// VillagerData, OptionalVarInt, + /// + /// VarInt + /// Pose, + /// + /// VarInt + /// CatVariant, FrogVariant, + /// + /// String + Position + /// GlobalPosition, + /// + /// Boolean + String + Position + /// OptionalGlobalPosition, + /// + /// VarInt + /// PaintingVariant, + /// + /// VarInt + /// SnifferState, + /// + /// Float x3 + /// Vector3, + /// + /// Float x4 + /// Quaternion } \ No newline at end of file diff --git a/MinecraftClient/Mapping/EntityMetadataPalette.cs b/MinecraftClient/Mapping/EntityMetadataPalette.cs index a0738408..bcb0b52a 100644 --- a/MinecraftClient/Mapping/EntityMetadataPalette.cs +++ b/MinecraftClient/Mapping/EntityMetadataPalette.cs @@ -16,20 +16,16 @@ public abstract class EntityMetadataPalette public static EntityMetadataPalette GetPalette(int protocolVersion) { - if (protocolVersion < Protocol18Handler.MC_1_9_1_Version) - return new EntityMetadataPalette19(); - else if (protocolVersion <= Protocol18Handler.MC_1_11_2_Version) - return new EntityMetadataPalette111(); - else if (protocolVersion <= Protocol18Handler.MC_1_13_2_Version) - return new EntityMetadataPalette113(); - else if (protocolVersion <= Protocol18Handler.MC_1_14_Version) - return new EntityMetadataPalette114(); + if (protocolVersion < Protocol18Handler.MC_1_9_Version) + throw new NotImplementedException(); + else if (protocolVersion <= Protocol18Handler.MC_1_12_2_Version) + return new EntityMetadataPalette1122(); // 1.9 - 1.12.2 else if (protocolVersion <= Protocol18Handler.MC_1_19_2_Version) - return new EntityMetadataPalette1191(); + return new EntityMetadataPalette1191(); // 1.13 - 1.19.2 else if (protocolVersion <= Protocol18Handler.MC_1_19_3_Version) - return new EntityMetadataPalette1193(); + return new EntityMetadataPalette1193(); // 1.19.3 else if (protocolVersion <= Protocol18Handler.MC_1_19_4_Version) - return new EntityMetadataPalette1194(); + return new EntityMetadataPalette1194(); // 1.19.4 else throw new NotImplementedException(); } diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette111.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1122.cs similarity index 82% rename from MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette111.cs rename to MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1122.cs index 0111205e..1bb24765 100644 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette111.cs +++ b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1122.cs @@ -2,9 +2,9 @@ using System.Collections.Generic; namespace MinecraftClient.Mapping.EntityMetadataPalettes; -public class EntityMetadataPalette111 : EntityMetadataPalette +public class EntityMetadataPalette1122 : EntityMetadataPalette { - // 1.11 : https://wiki.vg/index.php?title=Entity_metadata&oldid=8269 + // 1.9 - 1.12.2 private readonly Dictionary entityMetadataMappings = new() { { 0, EntityMetaDataType.Byte }, @@ -19,7 +19,8 @@ public class EntityMetadataPalette111 : EntityMetadataPalette { 9, EntityMetaDataType.OptionalPosition }, { 10, EntityMetaDataType.Direction }, { 11, EntityMetaDataType.OptionalUuid }, - { 12, EntityMetaDataType.OptionalBlockId } + { 12, EntityMetaDataType.OptionalBlockId }, + { 13, EntityMetaDataType.Nbt }, }; public override Dictionary GetEntityMetadataMappingsList() diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette113.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette113.cs deleted file mode 100644 index e7e98cf0..00000000 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette113.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityMetadataPalettes; - -public class EntityMetadataPalette113 : EntityMetadataPalette -{ - // 1.13 : https://wiki.vg/index.php?title=Entity_metadata&oldid=14539 - private readonly Dictionary entityMetadataMappings = new() - { - { 0, EntityMetaDataType.Byte }, - { 1, EntityMetaDataType.VarInt }, - { 2, EntityMetaDataType.Float }, - { 3, EntityMetaDataType.String }, - { 4, EntityMetaDataType.Chat }, - { 5, EntityMetaDataType.OptionalChat }, - { 6, EntityMetaDataType.Slot }, - { 7, EntityMetaDataType.Boolean }, - { 8, EntityMetaDataType.Rotation }, - { 9, EntityMetaDataType.Position }, - { 10, EntityMetaDataType.OptionalPosition }, - { 11, EntityMetaDataType.Direction }, - { 12, EntityMetaDataType.OptionalUuid }, - { 13, EntityMetaDataType.OptionalBlockId }, - { 14, EntityMetaDataType.Nbt }, - { 15, EntityMetaDataType.Particle } - }; - - public override Dictionary GetEntityMetadataMappingsList() - { - return entityMetadataMappings; - } -} \ No newline at end of file diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette114.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette114.cs deleted file mode 100644 index dd142a29..00000000 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette114.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityMetadataPalettes; - -public class EntityMetadataPalette114 : EntityMetadataPalette -{ - private readonly Dictionary entityMetadataMappings = new() - { - { 0, EntityMetaDataType.Byte }, - { 1, EntityMetaDataType.VarInt }, - { 2, EntityMetaDataType.Float }, - { 3, EntityMetaDataType.String }, - { 4, EntityMetaDataType.Chat }, - { 5, EntityMetaDataType.OptionalChat }, - { 6, EntityMetaDataType.Slot }, - { 7, EntityMetaDataType.Boolean }, - { 8, EntityMetaDataType.Rotation }, - { 9, EntityMetaDataType.Position }, - { 10, EntityMetaDataType.OptionalPosition }, - { 11, EntityMetaDataType.Direction }, - { 12, EntityMetaDataType.OptionalUuid }, - { 13, EntityMetaDataType.OptionalBlockId }, - { 14, EntityMetaDataType.Nbt }, - { 15, EntityMetaDataType.Particle }, - { 16, EntityMetaDataType.VillagerData }, - { 17, EntityMetaDataType.OptionalVarInt }, - { 18, EntityMetaDataType.Pose } - }; - - public override Dictionary GetEntityMetadataMappingsList() - { - return entityMetadataMappings; - } -} \ No newline at end of file diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1191.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1191.cs index fdea2a62..bea16c9a 100644 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1191.cs +++ b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1191.cs @@ -2,6 +2,9 @@ using System.Collections.Generic; namespace MinecraftClient.Mapping.EntityMetadataPalettes; +/// +/// 1.13 - 1.19.2 +/// public class EntityMetadataPalette1191 : EntityMetadataPalette { private readonly Dictionary entityMetadataMappings = new() @@ -27,7 +30,7 @@ public class EntityMetadataPalette1191 : EntityMetadataPalette { 18, EntityMetaDataType.Pose }, { 19, EntityMetaDataType.CatVariant }, { 20, EntityMetaDataType.FrogVariant }, - { 21, EntityMetaDataType.GlobalPosition }, + { 21, EntityMetaDataType.OptionalGlobalPosition }, { 22, EntityMetaDataType.PaintingVariant } }; diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1193.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1193.cs index 859cb4c5..b6dffe4c 100644 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1193.cs +++ b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1193.cs @@ -2,6 +2,9 @@ using System.Collections.Generic; namespace MinecraftClient.Mapping.EntityMetadataPalettes; +/// +/// For 1.19.3 +/// public class EntityMetadataPalette1193 : EntityMetadataPalette { private readonly Dictionary entityMetadataMappings = new() @@ -28,7 +31,7 @@ public class EntityMetadataPalette1193 : EntityMetadataPalette { 19, EntityMetaDataType.Pose }, { 20, EntityMetaDataType.CatVariant }, { 21, EntityMetaDataType.FrogVariant }, - { 22, EntityMetaDataType.GlobalPosition }, + { 22, EntityMetaDataType.OptionalGlobalPosition }, { 23, EntityMetaDataType.PaintingVariant } }; diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1194.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1194.cs index 11e15fe4..2ac0e467 100644 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1194.cs +++ b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1194.cs @@ -2,6 +2,9 @@ using System.Collections.Generic; namespace MinecraftClient.Mapping.EntityMetadataPalettes; +/// +/// For 1.19.4 +/// public class EntityMetadataPalette1194 : EntityMetadataPalette { private readonly Dictionary entityMetadataMappings = new() diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette19.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette19.cs index 2f041c66..39cd4963 100644 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette19.cs +++ b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette19.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; namespace MinecraftClient.Mapping.EntityMetadataPalettes; +// TODO: Use this for 1.8 public class EntityMetadataPalette19 : EntityMetadataPalette { // 1.8 : https://wiki.vg/index.php?title=Entity_metadata&oldid=6220 (Requires a different algorithm) diff --git a/MinecraftClient/Protocol/Handlers/DataTypes.cs b/MinecraftClient/Protocol/Handlers/DataTypes.cs index f813020b..e34f1b3d 100644 --- a/MinecraftClient/Protocol/Handlers/DataTypes.cs +++ b/MinecraftClient/Protocol/Handlers/DataTypes.cs @@ -681,62 +681,8 @@ namespace MinecraftClient.Protocol.Handlers value = ReadNextNbt(cache); break; case EntityMetaDataType.Particle: // Particle - // Currently not handled. Reading data only - int ParticleID = ReadNextVarInt(cache); - // TODO: Go through wiki history and write for every version - // 1.19.3 - https://wiki.vg/index.php?title=Data_types&oldid=17986 - // 1.18 - https://wiki.vg/index.php?title=Data_types&oldid=17180 - // 1.17 - https://wiki.vg/index.php?title=Data_types&oldid=16740 - // 1.15 - https://wiki.vg/index.php?title=Data_types&oldid=15338 - // 1.13 - https://wiki.vg/index.php?title=Data_types&oldid=14271 - switch (ParticleID) - { - case 2: - ReadNextVarInt(cache); - break; - case 3: - ReadNextVarInt(cache); - break; - case 14: - ReadNextFloat(cache); - ReadNextFloat(cache); - ReadNextFloat(cache); - ReadNextFloat(cache); - break; - case 15: - ReadNextFloat(cache); - ReadNextFloat(cache); - ReadNextFloat(cache); - ReadNextFloat(cache); - ReadNextFloat(cache); - ReadNextFloat(cache); - ReadNextFloat(cache); - break; - case 25: - ReadNextVarInt(cache); - break; - case 30: - ReadNextFloat(cache); - break; - case 39: - ReadNextItemSlot(cache, itemPalette); - break; - case 40: - string positionSourceType = ReadNextString(cache); - if (positionSourceType == "minecraft:block") - { - ReadNextLocation(cache); - } - else if (positionSourceType == "minecraft:entity") - { - ReadNextVarInt(cache); - ReadNextFloat(cache); - } - - ReadNextVarInt(cache); - break; - } - + // Skip data only, not used + ReadParticleData(cache, itemPalette); break; case EntityMetaDataType.VillagerData: // Villager Data (3x VarInt) value = new List @@ -766,8 +712,11 @@ namespace MinecraftClient.Protocol.Handlers value = new Tuple(ReadNextString(cache), ReadNextLocation(cache)); break; case EntityMetaDataType.OptionalGlobalPosition: + // FIXME: wiki.vg is bool + string + location + // but minecraft-data is bool + string if (ReadNextBool(cache)) { + // Dimension and blockPos, currently not in use value = new Tuple(ReadNextString(cache), ReadNextLocation(cache)); } break; @@ -799,7 +748,6 @@ namespace MinecraftClient.Protocol.Handlers data[key] = value; key = ReadNextByte(cache); } - ConsoleIO.WriteLine($"Entity MetaData finished {data.Count}"); return data; }