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;
}