diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette112.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette112.cs new file mode 100644 index 00000000..b2394f87 --- /dev/null +++ b/MinecraftClient/Mapping/EntityPalettes/EntityPalette112.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections.Generic; + +namespace MinecraftClient.Mapping.EntityPalettes +{ + /// + /// Defines mappings of entitiy IDs for 1.12.2 and below + /// Generated by ReinforceZwei using custom script + /// Data source: https://github.com/PrismarineJS/minecraft-data + /// + public class EntityPalette112 : EntityPalette + { + private static Dictionary mappingsObjects = new Dictionary() + { + // https://wiki.vg/Entity_metadata#Objects + { 1, EntityType.Boat }, + { 2, EntityType.Item }, + { 3, EntityType.AreaEffectCloud }, + { 10, EntityType.Minecart }, + { 50, EntityType.Tnt }, + { 51, EntityType.EndCrystal }, + { 60, EntityType.Arrow }, + { 61, EntityType.Snowball }, + { 62, EntityType.Egg }, + { 63, EntityType.Fireball }, + { 64, EntityType.SmallFireball }, + { 65, EntityType.EnderPearl }, + { 66, EntityType.WitherSkull }, + { 67, EntityType.ShulkerBullet }, + { 68, EntityType.LlamaSpit }, + { 70, EntityType.FallingBlock }, + { 71, EntityType.ItemFrame }, + { 72, EntityType.EyeOfEnder }, + { 73, EntityType.Egg }, + { 75, EntityType.Snowball }, + { 76, EntityType.FireworkRocket }, + { 77, EntityType.LeashKnot }, + { 78, EntityType.ArmorStand }, + { 79, EntityType.EvokerFangs }, + { 90, EntityType.FishingBobber }, + { 91, EntityType.SpectralArrow }, + { 93, EntityType.DragonFireball }, + }; + + private static Dictionary mappingsMobs = new Dictionary() + { + { 1, EntityType.Item }, + { 2, EntityType.ExperienceOrb }, + { 3, EntityType.AreaEffectCloud }, + { 4, EntityType.ElderGuardian }, + { 5, EntityType.WitherSkeleton }, + { 6, EntityType.Stray }, + { 7, EntityType.Egg }, + { 8, EntityType.LeashKnot }, + { 9, EntityType.Painting }, + { 10, EntityType.Arrow }, + { 11, EntityType.Snowball }, + { 12, EntityType.Fireball }, + { 13, EntityType.SmallFireball }, + { 14, EntityType.EnderPearl }, + { 15, EntityType.EyeOfEnder }, + { 16, EntityType.Potion }, + { 17, EntityType.ExperienceBottle }, + { 18, EntityType.ItemFrame }, + { 19, EntityType.WitherSkull }, + { 20, EntityType.Tnt }, + { 21, EntityType.FallingBlock }, + { 22, EntityType.FireworkRocket }, + { 23, EntityType.Husk }, + { 24, EntityType.SpectralArrow }, + { 25, EntityType.ShulkerBullet }, + { 26, EntityType.DragonFireball }, + { 27, EntityType.ZombieVillager }, + { 28, EntityType.SkeletonHorse }, + { 29, EntityType.ZombieHorse }, + { 30, EntityType.ArmorStand }, + { 31, EntityType.Donkey }, + { 32, EntityType.Mule }, + { 33, EntityType.EvokerFangs }, + { 34, EntityType.Evoker }, + { 35, EntityType.Vex }, + { 36, EntityType.Vindicator }, + { 37, EntityType.Illusioner }, + { 40, EntityType.CommandBlockMinecart }, + { 41, EntityType.Boat }, + { 42, EntityType.Minecart }, + { 43, EntityType.ChestMinecart }, + { 44, EntityType.FurnaceMinecart }, + { 45, EntityType.TntMinecart }, + { 46, EntityType.HopperMinecart }, + { 47, EntityType.SpawnerMinecart }, + { 50, EntityType.Creeper }, + { 51, EntityType.Skeleton }, + { 52, EntityType.Spider }, + { 53, EntityType.Giant }, + { 54, EntityType.Zombie }, + { 55, EntityType.Slime }, + { 56, EntityType.Ghast }, + { 57, EntityType.ZombiePigman }, + { 58, EntityType.Enderman }, + { 59, EntityType.CaveSpider }, + { 60, EntityType.Silverfish }, + { 61, EntityType.Blaze }, + { 62, EntityType.MagmaCube }, + { 63, EntityType.EnderDragon }, + { 64, EntityType.Wither }, + { 65, EntityType.Bat }, + { 66, EntityType.Witch }, + { 67, EntityType.Endermite }, + { 68, EntityType.Guardian }, + { 69, EntityType.Shulker }, + { 90, EntityType.Pig }, + { 91, EntityType.Sheep }, + { 92, EntityType.Cow }, + { 93, EntityType.Chicken }, + { 94, EntityType.Squid }, + { 95, EntityType.Wolf }, + { 96, EntityType.Mooshroom }, + { 97, EntityType.SnowGolem }, + { 98, EntityType.Ocelot }, + { 99, EntityType.IronGolem }, + { 100, EntityType.Horse }, + { 101, EntityType.Rabbit }, + { 102, EntityType.PolarBear }, + { 103, EntityType.Llama }, + { 104, EntityType.LlamaSpit }, + { 105, EntityType.Parrot }, + { 120, EntityType.Villager }, + { 200, EntityType.EndCrystal }, + }; + + protected override Dictionary GetDict() + { + return mappingsMobs; + } + + protected override Dictionary GetDictNonLiving() + { + return mappingsObjects; + } + } +} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette113.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette113.cs index b0253b06..1c7bffe1 100644 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette113.cs +++ b/MinecraftClient/Mapping/EntityPalettes/EntityPalette113.cs @@ -4,9 +4,9 @@ using System.Collections.Generic; namespace MinecraftClient.Mapping.EntityPalettes { /// - /// Defines mappings for pre-1.14 entitiy IDs - /// Pre-1.14 Minecraft has 2 set of ids: One for non-living objects and one for living mobs - /// 1.14+ Minecraft has only one set of ids for all types of entities + /// Defines mappings for Minecraft 1.13. + /// 1.13 and lower has 2 set of ids: One for non-living objects and one for living mobs + /// 1.14+ has only one set of ids for all types of entities /// public class EntityPalette113 : EntityPalette { diff --git a/MinecraftClient/MinecraftClient.csproj b/MinecraftClient/MinecraftClient.csproj index b3f84dac..a866b7fb 100644 --- a/MinecraftClient/MinecraftClient.csproj +++ b/MinecraftClient/MinecraftClient.csproj @@ -132,6 +132,7 @@ + diff --git a/MinecraftClient/Protocol/Handlers/DataTypes.cs b/MinecraftClient/Protocol/Handlers/DataTypes.cs index 8f7ee837..c66d3a17 100644 --- a/MinecraftClient/Protocol/Handlers/DataTypes.cs +++ b/MinecraftClient/Protocol/Handlers/DataTypes.cs @@ -370,7 +370,17 @@ namespace MinecraftClient.Protocol.Handlers entityUUID = ReadNextUUID(cache); } - EntityType entityType = entityPalette.FromId(ReadNextVarInt(cache), living); + EntityType entityType; + // Entity type data type change from byte to varint after 1.14 + if (protocolversion > Protocol18Handler.MC113Version) + { + entityType = entityPalette.FromId(ReadNextVarInt(cache), living); + } + else + { + entityType = entityPalette.FromId(ReadNextByte(cache), living); + } + Double entityX = ReadNextDouble(cache); Double entityY = ReadNextDouble(cache); Double entityZ = ReadNextDouble(cache); diff --git a/MinecraftClient/Protocol/Handlers/Protocol18.cs b/MinecraftClient/Protocol/Handlers/Protocol18.cs index aae34d65..3589d7c9 100644 --- a/MinecraftClient/Protocol/Handlers/Protocol18.cs +++ b/MinecraftClient/Protocol/Handlers/Protocol18.cs @@ -84,7 +84,7 @@ namespace MinecraftClient.Protocol.Handlers handler.SetInventoryEnabled(false); } - if (handler.GetEntityHandlingEnabled() && (protocolversion <= MC1122Version || protocolversion > MC1161Version)) + if (handler.GetEntityHandlingEnabled() && (protocolversion < MC110Version || protocolversion > MC1161Version)) { ConsoleIO.WriteLineFormatted("§8Entities are currently not handled for that MC version."); handler.SetEntityHandlingEnabled(false); @@ -102,7 +102,7 @@ namespace MinecraftClient.Protocol.Handlers } else Block.Palette = new Palette112(); - if (protocolversion >= MC114Version) + if (protocolversion >= MC113Version) { if (protocolversion > MC1161Version && handler.GetEntityHandlingEnabled()) throw new NotImplementedException("Please update entity types handling for this Minecraft version. See EntityType.cs"); @@ -110,9 +110,11 @@ namespace MinecraftClient.Protocol.Handlers entityPalette = new EntityPalette116(); else if (protocolversion >= MC115Version) entityPalette = new EntityPalette115(); - else entityPalette = new EntityPalette114(); + else if (protocolVersion >= MC114Version) + entityPalette = new EntityPalette114(); + else entityPalette = new EntityPalette113(); } - else entityPalette = new EntityPalette113(); + else entityPalette = new EntityPalette112(); } ///