diff --git a/MinecraftClient/MinecraftClient.csproj b/MinecraftClient/MinecraftClient.csproj index 20bdfd58..49f1e6b4 100644 --- a/MinecraftClient/MinecraftClient.csproj +++ b/MinecraftClient/MinecraftClient.csproj @@ -152,10 +152,21 @@ - - + + + + + + + + + + + + + + - @@ -335,4 +346,4 @@ --> - + \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/PacketIncomingType.cs b/MinecraftClient/Protocol/Handlers/PacketIncomingType.cs deleted file mode 100644 index 03d8da68..00000000 --- a/MinecraftClient/Protocol/Handlers/PacketIncomingType.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace MinecraftClient.Protocol.Handlers -{ - /// - /// Abstract incoming packet numbering - /// - /// - /// Please add new entries at the bottom of the list (but above UnknownPakcket) - /// You'll also need to add them to Protocol18PacketTypes for all MC versions since MC 1.7 - /// - enum PacketIncomingType - { - KeepAlive, - JoinGame, - ChatMessage, - Respawn, - PlayerPositionAndLook, - ChunkData, - MultiBlockChange, - BlockChange, - MapChunkBulk, - UnloadChunk, - PlayerListUpdate, - TabCompleteResult, - PluginMessage, - KickPacket, - NetworkCompressionTreshold, - ResourcePackSend, - CloseWindow, - OpenWindow, - WindowItems, - WindowConfirmation, - SetSlot, - SpawnEntity, - SpawnLivingEntity, - SpawnPlayer, - DestroyEntities, - SetCooldown, - EntityPosition, - EntityPositionAndRotation, - EntityProperties, - EntityTeleport, - EntityEquipment, - EntityVelocity, - EntityEffect, - EntityMetadata, - TimeUpdate, - UpdateHealth, - SetExperience, - HeldItemChange, - Explosion, - MapData, - Title, - ScoreboardObjective, - UpdateScore, - - /// - /// Represents a packet not implemented in MCC. - /// - UnknownPacket, - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketOutgoingType.cs b/MinecraftClient/Protocol/Handlers/PacketOutgoingType.cs deleted file mode 100644 index 4bf3aa6e..00000000 --- a/MinecraftClient/Protocol/Handlers/PacketOutgoingType.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace MinecraftClient.Protocol.Handlers -{ - /// - /// Abstract outgoing packet numbering - /// - /// /// - /// Please add new entries at the bottom of the list - /// You'll also need to add them to Protocol18PacketTypes for all MC versions since MC 1.7 - /// - enum PacketOutgoingType - { - KeepAlive, - ResourcePackStatus, - ChatMessage, - ClientStatus, - ClientSettings, - PluginMessage, - TabComplete, - EntityAction, - PlayerPosition, - PlayerPositionAndLook, - TeleportConfirm, - HeldItemChange, - InteractEntity, - UseItem, - ClickWindow, - CloseWindow, - WindowConfirmation, - PlayerBlockPlacement, - CreativeInventoryAction, - Animation, - PlayerDigging, - UpdateSign, - UpdateCommandBlock, - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette110.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette110.cs new file mode 100644 index 00000000..8cf774ed --- /dev/null +++ b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette110.cs @@ -0,0 +1,134 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace MinecraftClient.Protocol.Handlers.PacketPalettes +{ + public class PacketPalette110 : PacketTypePalette + { + private Dictionary typeIn = new Dictionary() + { + { 0x00, PacketTypesIn.SpawnEntity }, + { 0x01, PacketTypesIn.SpawnExperienceOrb }, + { 0x02, PacketTypesIn.SpawnWeatherEntity }, + { 0x03, PacketTypesIn.SpawnLivingEntity }, + { 0x04, PacketTypesIn.SpawnPainting }, + { 0x05, PacketTypesIn.SpawnPlayer }, + { 0x06, PacketTypesIn.EntityAnimation }, + { 0x07, PacketTypesIn.Statistics }, + { 0x08, PacketTypesIn.BlockBreakAnimation }, + { 0x09, PacketTypesIn.BlockEntityData }, + { 0x0A, PacketTypesIn.BlockAction }, + { 0x0B, PacketTypesIn.BlockChange }, + { 0x0C, PacketTypesIn.BossBar }, + { 0x0D, PacketTypesIn.ServerDifficulty }, + { 0x0E, PacketTypesIn.TabComplete }, + { 0x0F, PacketTypesIn.ChatMessage }, + { 0x10, PacketTypesIn.MultiBlockChange }, + { 0x11, PacketTypesIn.WindowConfirmation }, + { 0x12, PacketTypesIn.CloseWindow }, + { 0x13, PacketTypesIn.OpenWindow }, + { 0x14, PacketTypesIn.WindowItems }, + { 0x15, PacketTypesIn.WindowProperty }, + { 0x16, PacketTypesIn.SetSlot }, + { 0x17, PacketTypesIn.SetCooldown }, + { 0x18, PacketTypesIn.PluginMessage }, + { 0x19, PacketTypesIn.NamedSoundEffect }, + { 0x1A, PacketTypesIn.Disconnect }, + { 0x1B, PacketTypesIn.EntityStatus }, + { 0x1C, PacketTypesIn.Explosion }, + { 0x1D, PacketTypesIn.UnloadChunk }, + { 0x1E, PacketTypesIn.ChangeGameState }, + { 0x1F, PacketTypesIn.KeepAlive }, + { 0x20, PacketTypesIn.ChunkData }, + { 0x21, PacketTypesIn.Effect }, + { 0x22, PacketTypesIn.Particle }, + { 0x23, PacketTypesIn.JoinGame }, + { 0x24, PacketTypesIn.MapData }, + { 0x25, PacketTypesIn.EntityPosition }, + { 0x26, PacketTypesIn.EntityPositionAndRotation }, + { 0x27, PacketTypesIn.EntityRotation }, + { 0x28, PacketTypesIn.EntityMovement }, + { 0x29, PacketTypesIn.VehicleMove }, + { 0x2A, PacketTypesIn.OpenSignEditor }, + { 0x2B, PacketTypesIn.PlayerAbilities }, + { 0x2C, PacketTypesIn.CombatEvent }, + { 0x2D, PacketTypesIn.PlayerInfo }, + { 0x2E, PacketTypesIn.PlayerPositionAndLook }, + { 0x2F, PacketTypesIn.UseBed }, + { 0x30, PacketTypesIn.DestroyEntities }, + { 0x31, PacketTypesIn.RemoveEntityEffect }, + { 0x32, PacketTypesIn.ResourcePackSend }, + { 0x33, PacketTypesIn.Respawn }, + { 0x34, PacketTypesIn.EntityHeadLook }, + { 0x35, PacketTypesIn.WorldBorder }, + { 0x36, PacketTypesIn.Camera }, + { 0x37, PacketTypesIn.HeldItemChange }, + { 0x38, PacketTypesIn.DisplayScoreboard }, + { 0x39, PacketTypesIn.EntityMetadata }, + { 0x3A, PacketTypesIn.AttachEntity }, + { 0x3B, PacketTypesIn.EntityVelocity }, + { 0x3C, PacketTypesIn.EntityEquipment }, + { 0x3D, PacketTypesIn.SetExperience }, + { 0x3E, PacketTypesIn.UpdateHealth }, + { 0x3F, PacketTypesIn.ScoreboardObjective }, + { 0x40, PacketTypesIn.SetPassengers }, + { 0x41, PacketTypesIn.Teams }, + { 0x42, PacketTypesIn.UpdateScore }, + { 0x43, PacketTypesIn.SpawnPosition }, + { 0x44, PacketTypesIn.TimeUpdate }, + { 0x45, PacketTypesIn.Title }, + { 0x46, PacketTypesIn.SoundEffect }, + { 0x47, PacketTypesIn.PlayerListHeaderAndFooter }, + { 0x48, PacketTypesIn.CollectItem }, + { 0x49, PacketTypesIn.EntityTeleport }, + { 0x4A, PacketTypesIn.EntityProperties }, + { 0x4B, PacketTypesIn.EntityEffect }, + }; + + private Dictionary typeOut = new Dictionary() + { + { 0x00, PacketTypesOut.TeleportConfirm }, + { 0x01, PacketTypesOut.TabComplete }, + { 0x02, PacketTypesOut.ChatMessage }, + { 0x03, PacketTypesOut.ClientStatus }, + { 0x04, PacketTypesOut.ClientSettings }, + { 0x05, PacketTypesOut.WindowConfirmation }, + { 0x06, PacketTypesOut.EnchantItem }, + { 0x07, PacketTypesOut.ClickWindow }, + { 0x08, PacketTypesOut.CloseWindow }, + { 0x09, PacketTypesOut.PluginMessage }, + { 0x0A, PacketTypesOut.InteractEntity }, + { 0x0B, PacketTypesOut.KeepAlive }, + { 0x0C, PacketTypesOut.PlayerPosition }, + { 0x0D, PacketTypesOut.PlayerPositionAndRotation }, + { 0x0E, PacketTypesOut.PlayerRotation }, + { 0x0F, PacketTypesOut.PlayerMovement }, + { 0x10, PacketTypesOut.VehicleMove }, + { 0x11, PacketTypesOut.SteerBoat }, + { 0x12, PacketTypesOut.PlayerAbilities }, + { 0x13, PacketTypesOut.PlayerDigging }, + { 0x14, PacketTypesOut.EntityAction }, + { 0x15, PacketTypesOut.SteerVehicle }, + { 0x16, PacketTypesOut.ResourcePackStatus }, + { 0x17, PacketTypesOut.HeldItemChange }, + { 0x18, PacketTypesOut.CreativeInventoryAction }, + { 0x19, PacketTypesOut.UpdateSign }, + { 0x1A, PacketTypesOut.Animation }, + { 0x1B, PacketTypesOut.Spectate }, + { 0x1C, PacketTypesOut.PlayerBlockPlacement }, + { 0x1D, PacketTypesOut.UseItem }, + }; + + protected override Dictionary GetListIn() + { + return typeIn; + } + + protected override Dictionary GetListOut() + { + return typeOut; + } + } +} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette112.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette112.cs new file mode 100644 index 00000000..a2aae370 --- /dev/null +++ b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette112.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace MinecraftClient.Protocol.Handlers.PacketPalettes +{ + public class PacketPalette112 : PacketTypePalette + { + private Dictionary typeIn = new Dictionary() + { + { 0x00, PacketTypesIn.SpawnEntity }, + { 0x01, PacketTypesIn.SpawnExperienceOrb }, + { 0x02, PacketTypesIn.SpawnWeatherEntity }, + { 0x03, PacketTypesIn.SpawnLivingEntity }, + { 0x04, PacketTypesIn.SpawnPainting }, + { 0x05, PacketTypesIn.SpawnPlayer }, + { 0x06, PacketTypesIn.EntityAnimation }, + { 0x07, PacketTypesIn.Statistics }, + { 0x08, PacketTypesIn.BlockBreakAnimation }, + { 0x09, PacketTypesIn.BlockEntityData }, + { 0x0A, PacketTypesIn.BlockAction }, + { 0x0B, PacketTypesIn.BlockChange }, + { 0x0C, PacketTypesIn.BossBar }, + { 0x0D, PacketTypesIn.ServerDifficulty }, + { 0x0E, PacketTypesIn.TabComplete }, + { 0x0F, PacketTypesIn.ChatMessage }, + { 0x10, PacketTypesIn.MultiBlockChange }, + { 0x11, PacketTypesIn.WindowConfirmation }, + { 0x12, PacketTypesIn.CloseWindow }, + { 0x13, PacketTypesIn.OpenWindow }, + { 0x14, PacketTypesIn.WindowItems }, + { 0x15, PacketTypesIn.WindowProperty }, + { 0x16, PacketTypesIn.SetSlot }, + { 0x17, PacketTypesIn.SetCooldown }, + { 0x18, PacketTypesIn.PluginMessage }, + { 0x19, PacketTypesIn.NamedSoundEffect }, + { 0x1A, PacketTypesIn.Disconnect }, + { 0x1B, PacketTypesIn.EntityStatus }, + { 0x1C, PacketTypesIn.Explosion }, + { 0x1D, PacketTypesIn.UnloadChunk }, + { 0x1E, PacketTypesIn.ChangeGameState }, + { 0x1F, PacketTypesIn.KeepAlive }, + { 0x20, PacketTypesIn.ChunkData }, + { 0x21, PacketTypesIn.Effect }, + { 0x22, PacketTypesIn.Particle }, + { 0x23, PacketTypesIn.JoinGame }, + { 0x24, PacketTypesIn.MapData }, + { 0x25, PacketTypesIn.EntityMovement }, + { 0x26, PacketTypesIn.EntityPosition }, + { 0x27, PacketTypesIn.EntityPositionAndRotation }, + { 0x28, PacketTypesIn.EntityRotation }, + { 0x29, PacketTypesIn.VehicleMove }, + { 0x2A, PacketTypesIn.OpenSignEditor }, + { 0x2B, PacketTypesIn.PlayerAbilities }, + { 0x2C, PacketTypesIn.CombatEvent }, + { 0x2D, PacketTypesIn.PlayerInfo }, + { 0x2E, PacketTypesIn.PlayerPositionAndLook }, + { 0x2F, PacketTypesIn.UseBed }, + { 0x30, PacketTypesIn.UnlockRecipes }, + { 0x31, PacketTypesIn.DestroyEntities }, + { 0x32, PacketTypesIn.RemoveEntityEffect }, + { 0x33, PacketTypesIn.ResourcePackSend }, + { 0x34, PacketTypesIn.Respawn }, + { 0x35, PacketTypesIn.EntityHeadLook }, + { 0x36, PacketTypesIn.SelectAdvancementTab }, + { 0x37, PacketTypesIn.WorldBorder }, + { 0x38, PacketTypesIn.Camera }, + { 0x39, PacketTypesIn.HeldItemChange }, + { 0x3A, PacketTypesIn.DisplayScoreboard }, + { 0x3B, PacketTypesIn.EntityMetadata }, + { 0x3C, PacketTypesIn.AttachEntity }, + { 0x3D, PacketTypesIn.EntityVelocity }, + { 0x3E, PacketTypesIn.EntityEquipment }, + { 0x3F, PacketTypesIn.SetExperience }, + { 0x40, PacketTypesIn.UpdateHealth }, + { 0x41, PacketTypesIn.ScoreboardObjective }, + { 0x42, PacketTypesIn.SetPassengers }, + { 0x43, PacketTypesIn.Teams }, + { 0x44, PacketTypesIn.UpdateScore }, + { 0x45, PacketTypesIn.SpawnPosition }, + { 0x46, PacketTypesIn.TimeUpdate }, + { 0x47, PacketTypesIn.Title }, + { 0x48, PacketTypesIn.SoundEffect }, + { 0x49, PacketTypesIn.PlayerListHeaderAndFooter }, + { 0x4A, PacketTypesIn.CollectItem }, + { 0x4B, PacketTypesIn.EntityTeleport }, + { 0x4C, PacketTypesIn.Advancements }, + { 0x4D, PacketTypesIn.EntityProperties }, + { 0x4E, PacketTypesIn.EntityEffect }, + }; + + private Dictionary typeOut = new Dictionary() + { + { 0x00, PacketTypesOut.TeleportConfirm }, + { 0x01, PacketTypesOut.Unknown }, + { 0x02, PacketTypesOut.TabComplete }, + { 0x03, PacketTypesOut.ChatMessage }, + { 0x04, PacketTypesOut.ClientStatus }, + { 0x05, PacketTypesOut.ClientSettings }, + { 0x06, PacketTypesOut.WindowConfirmation }, + { 0x07, PacketTypesOut.EnchantItem }, + { 0x08, PacketTypesOut.ClickWindow }, + { 0x09, PacketTypesOut.CloseWindow }, + { 0x0A, PacketTypesOut.PluginMessage }, + { 0x0B, PacketTypesOut.InteractEntity }, + { 0x0C, PacketTypesOut.KeepAlive }, + { 0x0D, PacketTypesOut.PlayerMovement }, + { 0x0E, PacketTypesOut.PlayerPosition }, + { 0x0F, PacketTypesOut.PlayerPositionAndRotation }, + { 0x10, PacketTypesOut.PlayerRotation }, + { 0x11, PacketTypesOut.VehicleMove }, + { 0x12, PacketTypesOut.SteerBoat }, + { 0x13, PacketTypesOut.PlayerAbilities }, + { 0x14, PacketTypesOut.PlayerDigging }, + { 0x15, PacketTypesOut.EntityAction }, + { 0x16, PacketTypesOut.SteerVehicle }, + { 0x17, PacketTypesOut.RecipeBookData }, + { 0x18, PacketTypesOut.ResourcePackStatus }, + { 0x19, PacketTypesOut.AdvancementTab }, + { 0x1A, PacketTypesOut.HeldItemChange }, + { 0x1B, PacketTypesOut.CreativeInventoryAction }, + { 0x1C, PacketTypesOut.UpdateSign }, + { 0x1D, PacketTypesOut.Animation }, + { 0x1E, PacketTypesOut.Spectate }, + { 0x1F, PacketTypesOut.PlayerBlockPlacement }, + { 0x20, PacketTypesOut.UseItem }, + }; + + protected override Dictionary GetListIn() + { + return typeIn; + } + + protected override Dictionary GetListOut() + { + return typeOut; + } + } +} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1122.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1122.cs new file mode 100644 index 00000000..0b0052c4 --- /dev/null +++ b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1122.cs @@ -0,0 +1,141 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace MinecraftClient.Protocol.Handlers.PacketPalettes +{ + public class PacketPalette1122 : PacketTypePalette + { + private Dictionary typeIn = new Dictionary() + { + { 0x00, PacketTypesIn.SpawnEntity }, + { 0x01, PacketTypesIn.SpawnExperienceOrb }, + { 0x02, PacketTypesIn.SpawnWeatherEntity }, + { 0x03, PacketTypesIn.SpawnLivingEntity }, + { 0x04, PacketTypesIn.SpawnPainting }, + { 0x05, PacketTypesIn.SpawnPlayer }, + { 0x06, PacketTypesIn.EntityAnimation }, + { 0x07, PacketTypesIn.Statistics }, + { 0x08, PacketTypesIn.BlockBreakAnimation }, + { 0x09, PacketTypesIn.BlockEntityData }, + { 0x0A, PacketTypesIn.BlockAction }, + { 0x0B, PacketTypesIn.BlockChange }, + { 0x0C, PacketTypesIn.BossBar }, + { 0x0D, PacketTypesIn.ServerDifficulty }, + { 0x0E, PacketTypesIn.TabComplete }, + { 0x0F, PacketTypesIn.ChatMessage }, + { 0x10, PacketTypesIn.MultiBlockChange }, + { 0x11, PacketTypesIn.WindowConfirmation }, + { 0x12, PacketTypesIn.CloseWindow }, + { 0x13, PacketTypesIn.OpenWindow }, + { 0x14, PacketTypesIn.WindowItems }, + { 0x15, PacketTypesIn.WindowProperty }, + { 0x16, PacketTypesIn.SetSlot }, + { 0x17, PacketTypesIn.SetCooldown }, + { 0x18, PacketTypesIn.PluginMessage }, + { 0x19, PacketTypesIn.NamedSoundEffect }, + { 0x1A, PacketTypesIn.Disconnect }, + { 0x1B, PacketTypesIn.EntityStatus }, + { 0x1C, PacketTypesIn.Explosion }, + { 0x1D, PacketTypesIn.UnloadChunk }, + { 0x1E, PacketTypesIn.ChangeGameState }, + { 0x1F, PacketTypesIn.KeepAlive }, + { 0x20, PacketTypesIn.ChunkData }, + { 0x21, PacketTypesIn.Effect }, + { 0x22, PacketTypesIn.Particle }, + { 0x23, PacketTypesIn.JoinGame }, + { 0x24, PacketTypesIn.MapData }, + { 0x25, PacketTypesIn.EntityMovement }, + { 0x26, PacketTypesIn.EntityPosition }, + { 0x27, PacketTypesIn.EntityPositionAndRotation }, + { 0x28, PacketTypesIn.EntityRotation }, + { 0x29, PacketTypesIn.VehicleMove }, + { 0x2A, PacketTypesIn.OpenSignEditor }, + { 0x2B, PacketTypesIn.CraftRecipeResponse }, + { 0x2C, PacketTypesIn.PlayerAbilities }, + { 0x2D, PacketTypesIn.CombatEvent }, + { 0x2E, PacketTypesIn.PlayerInfo }, + { 0x2F, PacketTypesIn.PlayerPositionAndLook }, + { 0x30, PacketTypesIn.UseBed }, + { 0x31, PacketTypesIn.UnlockRecipes }, + { 0x32, PacketTypesIn.DestroyEntities }, + { 0x33, PacketTypesIn.RemoveEntityEffect }, + { 0x34, PacketTypesIn.ResourcePackSend }, + { 0x35, PacketTypesIn.Respawn }, + { 0x36, PacketTypesIn.EntityHeadLook }, + { 0x37, PacketTypesIn.SelectAdvancementTab }, + { 0x38, PacketTypesIn.WorldBorder }, + { 0x39, PacketTypesIn.Camera }, + { 0x3A, PacketTypesIn.HeldItemChange }, + { 0x3B, PacketTypesIn.DisplayScoreboard }, + { 0x3C, PacketTypesIn.EntityMetadata }, + { 0x3D, PacketTypesIn.AttachEntity }, + { 0x3E, PacketTypesIn.EntityVelocity }, + { 0x3F, PacketTypesIn.EntityEquipment }, + { 0x40, PacketTypesIn.SetExperience }, + { 0x41, PacketTypesIn.UpdateHealth }, + { 0x42, PacketTypesIn.ScoreboardObjective }, + { 0x43, PacketTypesIn.SetPassengers }, + { 0x44, PacketTypesIn.Teams }, + { 0x45, PacketTypesIn.UpdateScore }, + { 0x46, PacketTypesIn.SpawnPosition }, + { 0x47, PacketTypesIn.TimeUpdate }, + { 0x48, PacketTypesIn.Title }, + { 0x49, PacketTypesIn.SoundEffect }, + { 0x4A, PacketTypesIn.PlayerListHeaderAndFooter }, + { 0x4B, PacketTypesIn.CollectItem }, + { 0x4C, PacketTypesIn.EntityTeleport }, + { 0x4D, PacketTypesIn.Advancements }, + { 0x4E, PacketTypesIn.EntityProperties }, + { 0x4F, PacketTypesIn.EntityEffect }, + }; + + private Dictionary typeOut = new Dictionary() + { + { 0x00, PacketTypesOut.TeleportConfirm }, + { 0x01, PacketTypesOut.TabComplete }, + { 0x02, PacketTypesOut.ChatMessage }, + { 0x03, PacketTypesOut.ClientStatus }, + { 0x04, PacketTypesOut.ClientSettings }, + { 0x05, PacketTypesOut.WindowConfirmation }, + { 0x06, PacketTypesOut.EnchantItem }, + { 0x07, PacketTypesOut.ClickWindow }, + { 0x08, PacketTypesOut.CloseWindow }, + { 0x09, PacketTypesOut.PluginMessage }, + { 0x0A, PacketTypesOut.InteractEntity }, + { 0x0B, PacketTypesOut.KeepAlive }, + { 0x0C, PacketTypesOut.PlayerMovement }, + { 0x0D, PacketTypesOut.PlayerPosition }, + { 0x0E, PacketTypesOut.PlayerPositionAndRotation }, + { 0x0F, PacketTypesOut.PlayerRotation }, + { 0x10, PacketTypesOut.VehicleMove }, + { 0x11, PacketTypesOut.SteerBoat }, + { 0x12, PacketTypesOut.CraftRecipeRequest }, + { 0x13, PacketTypesOut.PlayerAbilities }, + { 0x14, PacketTypesOut.PlayerDigging }, + { 0x15, PacketTypesOut.EntityAction }, + { 0x16, PacketTypesOut.SteerVehicle }, + { 0x17, PacketTypesOut.RecipeBookData }, + { 0x18, PacketTypesOut.ResourcePackStatus }, + { 0x19, PacketTypesOut.AdvancementTab }, + { 0x1A, PacketTypesOut.HeldItemChange }, + { 0x1B, PacketTypesOut.CreativeInventoryAction }, + { 0x1C, PacketTypesOut.UpdateSign }, + { 0x1D, PacketTypesOut.Animation }, + { 0x1E, PacketTypesOut.Spectate }, + { 0x1F, PacketTypesOut.PlayerBlockPlacement }, + { 0x20, PacketTypesOut.UseItem }, + }; + + protected override Dictionary GetListIn() + { + return typeIn; + } + + protected override Dictionary GetListOut() + { + return typeOut; + } + } +} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette113.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette113.cs new file mode 100644 index 00000000..bc20057e --- /dev/null +++ b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette113.cs @@ -0,0 +1,157 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace MinecraftClient.Protocol.Handlers.PacketPalettes +{ + public class PacketPalette113 : PacketTypePalette + { + private Dictionary typeIn = new Dictionary() + { + { 0x00, PacketTypesIn.SpawnEntity }, + { 0x01, PacketTypesIn.SpawnExperienceOrb }, + { 0x02, PacketTypesIn.SpawnWeatherEntity }, + { 0x03, PacketTypesIn.SpawnLivingEntity }, + { 0x04, PacketTypesIn.SpawnPainting }, + { 0x05, PacketTypesIn.SpawnPlayer }, + { 0x06, PacketTypesIn.EntityAnimation }, + { 0x07, PacketTypesIn.Statistics }, + { 0x08, PacketTypesIn.BlockBreakAnimation }, + { 0x09, PacketTypesIn.BlockEntityData }, + { 0x0A, PacketTypesIn.BlockAction }, + { 0x0B, PacketTypesIn.BlockChange }, + { 0x0C, PacketTypesIn.BossBar }, + { 0x0D, PacketTypesIn.ServerDifficulty }, + { 0x0E, PacketTypesIn.ChatMessage }, + { 0x0F, PacketTypesIn.MultiBlockChange }, + { 0x10, PacketTypesIn.TabComplete }, + { 0x11, PacketTypesIn.DeclareCommands }, + { 0x12, PacketTypesIn.WindowConfirmation }, + { 0x13, PacketTypesIn.CloseWindow }, + { 0x14, PacketTypesIn.OpenWindow }, + { 0x15, PacketTypesIn.WindowItems }, + { 0x16, PacketTypesIn.WindowProperty }, + { 0x17, PacketTypesIn.SetSlot }, + { 0x18, PacketTypesIn.SetCooldown }, + { 0x19, PacketTypesIn.PluginMessage }, + { 0x1A, PacketTypesIn.NamedSoundEffect }, + { 0x1B, PacketTypesIn.Disconnect }, + { 0x1C, PacketTypesIn.EntityStatus }, + { 0x1D, PacketTypesIn.NBTQueryResponse }, + { 0x1E, PacketTypesIn.Explosion }, + { 0x1F, PacketTypesIn.UnloadChunk }, + { 0x20, PacketTypesIn.ChangeGameState }, + { 0x21, PacketTypesIn.KeepAlive }, + { 0x22, PacketTypesIn.ChunkData }, + { 0x23, PacketTypesIn.Effect }, + { 0x24, PacketTypesIn.Particle }, + { 0x25, PacketTypesIn.JoinGame }, + { 0x26, PacketTypesIn.MapData }, + { 0x27, PacketTypesIn.EntityMovement }, + { 0x28, PacketTypesIn.EntityPosition }, + { 0x29, PacketTypesIn.EntityPositionAndRotation }, + { 0x2A, PacketTypesIn.EntityRotation }, + { 0x2B, PacketTypesIn.VehicleMove }, + { 0x2C, PacketTypesIn.OpenSignEditor }, + { 0x2D, PacketTypesIn.CraftRecipeResponse }, + { 0x2E, PacketTypesIn.PlayerAbilities }, + { 0x2F, PacketTypesIn.CombatEvent }, + { 0x30, PacketTypesIn.PlayerInfo }, + { 0x31, PacketTypesIn.FacePlayer }, + { 0x32, PacketTypesIn.PlayerPositionAndLook }, + { 0x33, PacketTypesIn.UseBed }, + { 0x34, PacketTypesIn.UnlockRecipes }, + { 0x35, PacketTypesIn.DestroyEntities }, + { 0x36, PacketTypesIn.RemoveEntityEffect }, + { 0x37, PacketTypesIn.ResourcePackSend }, + { 0x38, PacketTypesIn.Respawn }, + { 0x39, PacketTypesIn.EntityHeadLook }, + { 0x3A, PacketTypesIn.SelectAdvancementTab }, + { 0x3B, PacketTypesIn.WorldBorder }, + { 0x3C, PacketTypesIn.Camera }, + { 0x3D, PacketTypesIn.HeldItemChange }, + { 0x3E, PacketTypesIn.DisplayScoreboard }, + { 0x3F, PacketTypesIn.EntityMetadata }, + { 0x40, PacketTypesIn.AttachEntity }, + { 0x41, PacketTypesIn.EntityVelocity }, + { 0x42, PacketTypesIn.EntityEquipment }, + { 0x43, PacketTypesIn.SetExperience }, + { 0x44, PacketTypesIn.UpdateHealth }, + { 0x45, PacketTypesIn.ScoreboardObjective }, + { 0x46, PacketTypesIn.SetPassengers }, + { 0x47, PacketTypesIn.Teams }, + { 0x48, PacketTypesIn.UpdateScore }, + { 0x49, PacketTypesIn.SpawnPosition }, + { 0x4A, PacketTypesIn.TimeUpdate }, + { 0x4B, PacketTypesIn.Title }, + { 0x4C, PacketTypesIn.StopSound }, + { 0x4D, PacketTypesIn.SoundEffect }, + { 0x4E, PacketTypesIn.PlayerListHeaderAndFooter }, + { 0x4F, PacketTypesIn.CollectItem }, + { 0x50, PacketTypesIn.EntityTeleport }, + { 0x51, PacketTypesIn.Advancements }, + { 0x52, PacketTypesIn.EntityProperties }, + { 0x53, PacketTypesIn.EntityEffect }, + { 0x54, PacketTypesIn.DeclareRecipes }, + { 0x55, PacketTypesIn.Tags }, + }; + + private Dictionary typeOut = new Dictionary() + { + { 0x00, PacketTypesOut.TeleportConfirm }, + { 0x01, PacketTypesOut.QueryBlockNBT }, + { 0x02, PacketTypesOut.ChatMessage }, + { 0x03, PacketTypesOut.ClientStatus }, + { 0x04, PacketTypesOut.ClientSettings }, + { 0x05, PacketTypesOut.TabComplete }, + { 0x06, PacketTypesOut.WindowConfirmation }, + { 0x07, PacketTypesOut.EnchantItem }, + { 0x08, PacketTypesOut.ClickWindow }, + { 0x09, PacketTypesOut.CloseWindow }, + { 0x0A, PacketTypesOut.PluginMessage }, + { 0x0B, PacketTypesOut.EditBook }, + { 0x0C, PacketTypesOut.EntityNBTRequest }, + { 0x0D, PacketTypesOut.InteractEntity }, + { 0x0E, PacketTypesOut.KeepAlive }, + { 0x0F, PacketTypesOut.PlayerMovement }, + { 0x10, PacketTypesOut.PlayerPosition }, + { 0x11, PacketTypesOut.PlayerPositionAndRotation }, + { 0x12, PacketTypesOut.PlayerPosition }, + { 0x13, PacketTypesOut.VehicleMove }, + { 0x14, PacketTypesOut.SteerBoat }, + { 0x15, PacketTypesOut.PickItem }, + { 0x16, PacketTypesOut.CraftRecipeRequest }, + { 0x17, PacketTypesOut.PlayerAbilities }, + { 0x18, PacketTypesOut.PlayerDigging }, + { 0x19, PacketTypesOut.EntityAction }, + { 0x1A, PacketTypesOut.SteerVehicle }, + { 0x1B, PacketTypesOut.RecipeBookData }, + { 0x1C, PacketTypesOut.NameItem }, + { 0x1D, PacketTypesOut.ResourcePackStatus }, + { 0x1E, PacketTypesOut.AdvancementTab }, + { 0x1F, PacketTypesOut.SelectTrade }, + { 0x20, PacketTypesOut.SetBeaconEffect }, + { 0x21, PacketTypesOut.HeldItemChange }, + { 0x22, PacketTypesOut.UpdateCommandBlock }, + { 0x23, PacketTypesOut.UpdateCommandBlockMinecart }, + { 0x24, PacketTypesOut.CreativeInventoryAction }, + { 0x25, PacketTypesOut.UpdateStructureBlock }, + { 0x26, PacketTypesOut.UpdateSign }, + { 0x27, PacketTypesOut.Animation }, + { 0x28, PacketTypesOut.Spectate }, + { 0x29, PacketTypesOut.PlayerBlockPlacement }, + { 0x2A, PacketTypesOut.UseItem }, + }; + + protected override Dictionary GetListIn() + { + return typeIn; + } + + protected override Dictionary GetListOut() + { + return typeOut; + } + } +} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette114.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette114.cs new file mode 100644 index 00000000..fb6a17c7 --- /dev/null +++ b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette114.cs @@ -0,0 +1,167 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace MinecraftClient.Protocol.Handlers.PacketPalettes +{ + public class PacketPalette114 : PacketTypePalette + { + private Dictionary typeIn = new Dictionary() + { + { 0x00, PacketTypesIn.SpawnEntity }, + { 0x01, PacketTypesIn.SpawnExperienceOrb }, + { 0x02, PacketTypesIn.SpawnWeatherEntity }, + { 0x03, PacketTypesIn.SpawnLivingEntity }, + { 0x04, PacketTypesIn.SpawnPainting }, + { 0x05, PacketTypesIn.SpawnPlayer }, + { 0x06, PacketTypesIn.EntityAnimation }, + { 0x07, PacketTypesIn.Statistics }, + { 0x08, PacketTypesIn.BlockBreakAnimation }, + { 0x09, PacketTypesIn.BlockEntityData }, + { 0x0A, PacketTypesIn.BlockAction }, + { 0x0B, PacketTypesIn.BlockChange }, + { 0x0C, PacketTypesIn.BossBar }, + { 0x0D, PacketTypesIn.ServerDifficulty }, + { 0x0E, PacketTypesIn.ChatMessage }, + { 0x0F, PacketTypesIn.MultiBlockChange }, + { 0x10, PacketTypesIn.TabComplete }, + { 0x11, PacketTypesIn.DeclareCommands }, + { 0x12, PacketTypesIn.WindowConfirmation }, + { 0x13, PacketTypesIn.CloseWindow }, + { 0x14, PacketTypesIn.WindowItems }, + { 0x15, PacketTypesIn.WindowProperty }, + { 0x16, PacketTypesIn.SetSlot }, + { 0x17, PacketTypesIn.SetCooldown }, + { 0x18, PacketTypesIn.PluginMessage }, + { 0x19, PacketTypesIn.NamedSoundEffect }, + { 0x1A, PacketTypesIn.Disconnect }, + { 0x1B, PacketTypesIn.EntityStatus }, + { 0x1C, PacketTypesIn.Explosion }, + { 0x1D, PacketTypesIn.UnloadChunk }, + { 0x1E, PacketTypesIn.ChangeGameState }, + { 0x1F, PacketTypesIn.OpenHorseWindow }, + { 0x20, PacketTypesIn.KeepAlive }, + { 0x21, PacketTypesIn.ChunkData }, + { 0x22, PacketTypesIn.Effect }, + { 0x23, PacketTypesIn.Particle }, + { 0x24, PacketTypesIn.UpdateLight }, + { 0x25, PacketTypesIn.JoinGame }, + { 0x26, PacketTypesIn.MapData }, + { 0x27, PacketTypesIn.TradeList }, + { 0x28, PacketTypesIn.EntityPosition }, + { 0x29, PacketTypesIn.EntityPositionAndRotation }, + { 0x2A, PacketTypesIn.EntityRotation }, + { 0x2B, PacketTypesIn.EntityMovement }, + { 0x2C, PacketTypesIn.VehicleMove }, + { 0x2D, PacketTypesIn.OpenBook }, + { 0x2E, PacketTypesIn.OpenWindow }, + { 0x2F, PacketTypesIn.OpenSignEditor }, + { 0x30, PacketTypesIn.CraftRecipeResponse }, + { 0x31, PacketTypesIn.PlayerAbilities }, + { 0x32, PacketTypesIn.CombatEvent }, + { 0x33, PacketTypesIn.PlayerInfo }, + { 0x34, PacketTypesIn.FacePlayer }, + { 0x35, PacketTypesIn.PlayerPositionAndLook }, + { 0x36, PacketTypesIn.UnlockRecipes }, + { 0x37, PacketTypesIn.DestroyEntities }, + { 0x38, PacketTypesIn.RemoveEntityEffect }, + { 0x39, PacketTypesIn.ResourcePackSend }, + { 0x3A, PacketTypesIn.Respawn }, + { 0x3B, PacketTypesIn.EntityHeadLook }, + { 0x3C, PacketTypesIn.SelectAdvancementTab }, + { 0x3D, PacketTypesIn.WorldBorder }, + { 0x3E, PacketTypesIn.Camera }, + { 0x3F, PacketTypesIn.HeldItemChange }, + { 0x40, PacketTypesIn.UpdateViewPosition }, + { 0x41, PacketTypesIn.UpdateViewDistance }, + { 0x42, PacketTypesIn.DisplayScoreboard }, + { 0x43, PacketTypesIn.EntityMetadata }, + { 0x44, PacketTypesIn.AttachEntity }, + { 0x45, PacketTypesIn.EntityVelocity }, + { 0x46, PacketTypesIn.EntityEquipment }, + { 0x47, PacketTypesIn.SetExperience }, + { 0x48, PacketTypesIn.UpdateHealth }, + { 0x49, PacketTypesIn.ScoreboardObjective }, + { 0x4A, PacketTypesIn.SetPassengers }, + { 0x4B, PacketTypesIn.Teams }, + { 0x4C, PacketTypesIn.UpdateScore }, + { 0x4D, PacketTypesIn.SpawnPosition }, + { 0x4E, PacketTypesIn.TimeUpdate }, + { 0x4F, PacketTypesIn.Title }, + { 0x50, PacketTypesIn.EntitySoundEffect }, + { 0x51, PacketTypesIn.SoundEffect }, + { 0x52, PacketTypesIn.StopSound }, + { 0x53, PacketTypesIn.PlayerListHeaderAndFooter }, + { 0x54, PacketTypesIn.NBTQueryResponse }, + { 0x55, PacketTypesIn.CollectItem }, + { 0x56, PacketTypesIn.EntityTeleport }, + { 0x57, PacketTypesIn.Advancements }, + { 0x58, PacketTypesIn.EntityProperties }, + { 0x59, PacketTypesIn.EntityEffect }, + { 0x5A, PacketTypesIn.DeclareRecipes }, + { 0x5B, PacketTypesIn.Tags }, + { 0x5C, PacketTypesIn.AcknowledgePlayerDigging }, + }; + + private Dictionary typeOut = new Dictionary() + { + { 0x00, PacketTypesOut.TeleportConfirm }, + { 0x01, PacketTypesOut.QueryBlockNBT }, + { 0x02, PacketTypesOut.SetDifficulty }, + { 0x03, PacketTypesOut.ChatMessage }, + { 0x04, PacketTypesOut.ClientStatus }, + { 0x05, PacketTypesOut.ClientSettings }, + { 0x06, PacketTypesOut.TabComplete }, + { 0x07, PacketTypesOut.WindowConfirmation }, + { 0x08, PacketTypesOut.ClickWindowButton }, + { 0x09, PacketTypesOut.ClickWindow }, + { 0x0A, PacketTypesOut.CloseWindow }, + { 0x0B, PacketTypesOut.PluginMessage }, + { 0x0C, PacketTypesOut.EditBook }, + { 0x0D, PacketTypesOut.EntityNBTRequest }, + { 0x0E, PacketTypesOut.InteractEntity }, + { 0x0F, PacketTypesOut.KeepAlive }, + { 0x10, PacketTypesOut.LockDifficulty }, + { 0x11, PacketTypesOut.PlayerPosition }, + { 0x12, PacketTypesOut.PlayerPositionAndRotation }, + { 0x13, PacketTypesOut.PlayerRotation }, + { 0x14, PacketTypesOut.PlayerMovement }, + { 0x15, PacketTypesOut.VehicleMove }, + { 0x16, PacketTypesOut.SteerBoat }, + { 0x17, PacketTypesOut.PickItem }, + { 0x18, PacketTypesOut.CraftRecipeRequest }, + { 0x19, PacketTypesOut.PlayerAbilities }, + { 0x1A, PacketTypesOut.PlayerDigging }, + { 0x1B, PacketTypesOut.EntityAction }, + { 0x1C, PacketTypesOut.SteerVehicle }, + { 0x1D, PacketTypesOut.RecipeBookData }, + { 0x1E, PacketTypesOut.NameItem }, + { 0x1F, PacketTypesOut.ResourcePackStatus }, + { 0x20, PacketTypesOut.AdvancementTab }, + { 0x21, PacketTypesOut.SelectTrade }, + { 0x22, PacketTypesOut.SetBeaconEffect }, + { 0x23, PacketTypesOut.HeldItemChange }, + { 0x24, PacketTypesOut.UpdateCommandBlock }, + { 0x25, PacketTypesOut.UpdateCommandBlockMinecart }, + { 0x26, PacketTypesOut.CreativeInventoryAction }, + { 0x27, PacketTypesOut.UpdateJigsawBlock }, + { 0x28, PacketTypesOut.UpdateStructureBlock }, + { 0x29, PacketTypesOut.UpdateSign }, + { 0x2A, PacketTypesOut.Animation }, + { 0x2B, PacketTypesOut.Spectate }, + { 0x2C, PacketTypesOut.PlayerBlockPlacement }, + { 0x2D, PacketTypesOut.UseItem }, + }; + + protected override Dictionary GetListIn() + { + return typeIn; + } + + protected override Dictionary GetListOut() + { + return typeOut; + } + } +} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette115.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette115.cs new file mode 100644 index 00000000..51372120 --- /dev/null +++ b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette115.cs @@ -0,0 +1,167 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace MinecraftClient.Protocol.Handlers.PacketPalettes +{ + public class PacketPalette115 : PacketTypePalette + { + private Dictionary typeIn = new Dictionary() + { + { 0x00, PacketTypesIn.SpawnEntity }, + { 0x01, PacketTypesIn.SpawnExperienceOrb }, + { 0x02, PacketTypesIn.SpawnWeatherEntity }, + { 0x03, PacketTypesIn.SpawnLivingEntity }, + { 0x04, PacketTypesIn.SpawnPainting }, + { 0x05, PacketTypesIn.SpawnPlayer }, + { 0x06, PacketTypesIn.EntityAnimation }, + { 0x07, PacketTypesIn.Statistics }, + { 0x08, PacketTypesIn.AcknowledgePlayerDigging }, + { 0x09, PacketTypesIn.BlockBreakAnimation }, + { 0x0A, PacketTypesIn.BlockEntityData }, + { 0x0B, PacketTypesIn.BlockAction }, + { 0x0C, PacketTypesIn.BlockChange }, + { 0x0D, PacketTypesIn.BossBar }, + { 0x0E, PacketTypesIn.ServerDifficulty }, + { 0x0F, PacketTypesIn.ChatMessage }, + { 0x10, PacketTypesIn.MultiBlockChange }, + { 0x11, PacketTypesIn.TabComplete }, + { 0x12, PacketTypesIn.DeclareCommands }, + { 0x13, PacketTypesIn.WindowConfirmation }, + { 0x14, PacketTypesIn.CloseWindow }, + { 0x15, PacketTypesIn.WindowItems }, + { 0x16, PacketTypesIn.WindowProperty }, + { 0x17, PacketTypesIn.SetSlot }, + { 0x18, PacketTypesIn.SetCooldown }, + { 0x19, PacketTypesIn.PluginMessage }, + { 0x1A, PacketTypesIn.NamedSoundEffect }, + { 0x1B, PacketTypesIn.Disconnect }, + { 0x1C, PacketTypesIn.EntityStatus }, + { 0x1D, PacketTypesIn.Explosion }, + { 0x1E, PacketTypesIn.UnloadChunk }, + { 0x1F, PacketTypesIn.ChangeGameState }, + { 0x20, PacketTypesIn.OpenHorseWindow }, + { 0x21, PacketTypesIn.KeepAlive }, + { 0x22, PacketTypesIn.ChunkData }, + { 0x23, PacketTypesIn.Effect }, + { 0x24, PacketTypesIn.Particle }, + { 0x25, PacketTypesIn.UpdateLight }, + { 0x26, PacketTypesIn.JoinGame }, + { 0x27, PacketTypesIn.MapData }, + { 0x28, PacketTypesIn.TradeList }, + { 0x29, PacketTypesIn.EntityPosition }, + { 0x2A, PacketTypesIn.EntityPositionAndRotation }, + { 0x2B, PacketTypesIn.EntityRotation }, + { 0x2C, PacketTypesIn.EntityMovement }, + { 0x2D, PacketTypesIn.VehicleMove }, + { 0x2E, PacketTypesIn.OpenBook }, + { 0x2F, PacketTypesIn.OpenWindow }, + { 0x30, PacketTypesIn.OpenSignEditor }, + { 0x31, PacketTypesIn.CraftRecipeResponse }, + { 0x32, PacketTypesIn.PlayerAbilities }, + { 0x33, PacketTypesIn.CombatEvent }, + { 0x34, PacketTypesIn.PlayerInfo }, + { 0x35, PacketTypesIn.FacePlayer }, + { 0x36, PacketTypesIn.PlayerPositionAndLook }, + { 0x37, PacketTypesIn.UnlockRecipes }, + { 0x38, PacketTypesIn.DestroyEntities }, + { 0x39, PacketTypesIn.RemoveEntityEffect }, + { 0x3A, PacketTypesIn.ResourcePackSend }, + { 0x3B, PacketTypesIn.Respawn }, + { 0x3C, PacketTypesIn.EntityHeadLook }, + { 0x3D, PacketTypesIn.SelectAdvancementTab }, + { 0x3E, PacketTypesIn.WorldBorder }, + { 0x3F, PacketTypesIn.Camera }, + { 0x40, PacketTypesIn.HeldItemChange }, + { 0x41, PacketTypesIn.UpdateViewPosition }, + { 0x42, PacketTypesIn.UpdateViewDistance }, + { 0x43, PacketTypesIn.DisplayScoreboard }, + { 0x44, PacketTypesIn.EntityMetadata }, + { 0x45, PacketTypesIn.AttachEntity }, + { 0x46, PacketTypesIn.EntityVelocity }, + { 0x47, PacketTypesIn.EntityEquipment }, + { 0x48, PacketTypesIn.SetExperience }, + { 0x49, PacketTypesIn.UpdateHealth }, + { 0x4A, PacketTypesIn.ScoreboardObjective }, + { 0x4B, PacketTypesIn.SetPassengers }, + { 0x4C, PacketTypesIn.Teams }, + { 0x4D, PacketTypesIn.UpdateScore }, + { 0x4E, PacketTypesIn.SpawnPosition }, + { 0x4F, PacketTypesIn.TimeUpdate }, + { 0x50, PacketTypesIn.Title }, + { 0x51, PacketTypesIn.EntitySoundEffect }, + { 0x52, PacketTypesIn.SoundEffect }, + { 0x53, PacketTypesIn.StopSound }, + { 0x54, PacketTypesIn.PlayerListHeaderAndFooter }, + { 0x55, PacketTypesIn.NBTQueryResponse }, + { 0x56, PacketTypesIn.CollectItem }, + { 0x57, PacketTypesIn.EntityTeleport }, + { 0x58, PacketTypesIn.Advancements }, + { 0x59, PacketTypesIn.EntityProperties }, + { 0x5A, PacketTypesIn.EntityEffect }, + { 0x5B, PacketTypesIn.DeclareRecipes }, + { 0x5C, PacketTypesIn.Tags }, + }; + + private Dictionary typeOut = new Dictionary() + { + { 0x00, PacketTypesOut.TeleportConfirm }, + { 0x01, PacketTypesOut.QueryBlockNBT }, + { 0x02, PacketTypesOut.SetDifficulty }, + { 0x03, PacketTypesOut.ChatMessage }, + { 0x04, PacketTypesOut.ClientStatus }, + { 0x05, PacketTypesOut.ClientSettings }, + { 0x06, PacketTypesOut.TabComplete }, + { 0x07, PacketTypesOut.WindowConfirmation }, + { 0x08, PacketTypesOut.ClickWindowButton }, + { 0x09, PacketTypesOut.ClickWindow }, + { 0x0A, PacketTypesOut.CloseWindow }, + { 0x0B, PacketTypesOut.PluginMessage }, + { 0x0C, PacketTypesOut.EditBook }, + { 0x0D, PacketTypesOut.EntityNBTRequest }, + { 0x0E, PacketTypesOut.InteractEntity }, + { 0x0F, PacketTypesOut.KeepAlive }, + { 0x10, PacketTypesOut.LockDifficulty }, + { 0x11, PacketTypesOut.PlayerPosition }, + { 0x12, PacketTypesOut.PlayerPositionAndRotation }, + { 0x13, PacketTypesOut.PlayerRotation }, + { 0x14, PacketTypesOut.PlayerMovement }, + { 0x15, PacketTypesOut.VehicleMove }, + { 0x16, PacketTypesOut.SteerBoat }, + { 0x17, PacketTypesOut.PickItem }, + { 0x18, PacketTypesOut.CraftRecipeRequest }, + { 0x19, PacketTypesOut.PlayerAbilities }, + { 0x1A, PacketTypesOut.PlayerDigging }, + { 0x1B, PacketTypesOut.EntityAction }, + { 0x1C, PacketTypesOut.SteerVehicle }, + { 0x1D, PacketTypesOut.RecipeBookData }, + { 0x1E, PacketTypesOut.NameItem }, + { 0x1F, PacketTypesOut.ResourcePackStatus }, + { 0x20, PacketTypesOut.AdvancementTab }, + { 0x21, PacketTypesOut.SelectTrade }, + { 0x22, PacketTypesOut.SetBeaconEffect }, + { 0x23, PacketTypesOut.HeldItemChange }, + { 0x24, PacketTypesOut.UpdateCommandBlock }, + { 0x25, PacketTypesOut.UpdateCommandBlockMinecart }, + { 0x26, PacketTypesOut.CreativeInventoryAction }, + { 0x27, PacketTypesOut.UpdateJigsawBlock }, + { 0x28, PacketTypesOut.UpdateStructureBlock }, + { 0x29, PacketTypesOut.UpdateSign }, + { 0x2A, PacketTypesOut.Animation }, + { 0x2B, PacketTypesOut.Spectate }, + { 0x2C, PacketTypesOut.PlayerBlockPlacement }, + { 0x2D, PacketTypesOut.UseItem }, + }; + + protected override Dictionary GetListIn() + { + return typeIn; + } + + protected override Dictionary GetListOut() + { + return typeOut; + } + } +} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette116.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette116.cs new file mode 100644 index 00000000..11833d63 --- /dev/null +++ b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette116.cs @@ -0,0 +1,167 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace MinecraftClient.Protocol.Handlers.PacketPalettes +{ + public class PacketPalette116 : PacketTypePalette + { + private Dictionary typeIn = new Dictionary() + { + { 0x00, PacketTypesIn.SpawnEntity }, + { 0x01, PacketTypesIn.SpawnExperienceOrb }, + { 0x02, PacketTypesIn.SpawnLivingEntity }, + { 0x03, PacketTypesIn.SpawnPainting }, + { 0x04, PacketTypesIn.SpawnPlayer }, + { 0x05, PacketTypesIn.EntityAnimation }, + { 0x06, PacketTypesIn.Statistics }, + { 0x07, PacketTypesIn.AcknowledgePlayerDigging }, + { 0x08, PacketTypesIn.BlockBreakAnimation }, + { 0x09, PacketTypesIn.BlockEntityData }, + { 0x0A, PacketTypesIn.BlockAction }, + { 0x0B, PacketTypesIn.BlockChange }, + { 0x0C, PacketTypesIn.BossBar }, + { 0x0D, PacketTypesIn.ServerDifficulty }, + { 0x0E, PacketTypesIn.ChatMessage }, + { 0x0F, PacketTypesIn.MultiBlockChange }, + { 0x10, PacketTypesIn.TabComplete }, + { 0x11, PacketTypesIn.DeclareCommands }, + { 0x12, PacketTypesIn.WindowConfirmation }, + { 0x13, PacketTypesIn.CloseWindow }, + { 0x14, PacketTypesIn.WindowItems }, + { 0x15, PacketTypesIn.WindowProperty }, + { 0x16, PacketTypesIn.SetSlot }, + { 0x17, PacketTypesIn.SetCooldown }, + { 0x18, PacketTypesIn.PluginMessage }, + { 0x19, PacketTypesIn.NamedSoundEffect }, + { 0x1A, PacketTypesIn.Disconnect }, + { 0x1B, PacketTypesIn.EntityStatus }, + { 0x1C, PacketTypesIn.Explosion }, + { 0x1D, PacketTypesIn.UnloadChunk }, + { 0x1E, PacketTypesIn.ChangeGameState }, + { 0x1F, PacketTypesIn.OpenHorseWindow }, + { 0x20, PacketTypesIn.KeepAlive }, + { 0x21, PacketTypesIn.ChunkData }, + { 0x22, PacketTypesIn.Effect }, + { 0x23, PacketTypesIn.Particle }, + { 0x24, PacketTypesIn.UpdateLight }, + { 0x25, PacketTypesIn.JoinGame }, + { 0x26, PacketTypesIn.MapData }, + { 0x27, PacketTypesIn.TradeList }, + { 0x28, PacketTypesIn.EntityPosition }, + { 0x29, PacketTypesIn.EntityPositionAndRotation }, + { 0x2A, PacketTypesIn.EntityRotation }, + { 0x2B, PacketTypesIn.EntityMovement }, + { 0x2C, PacketTypesIn.VehicleMove }, + { 0x2D, PacketTypesIn.OpenBook }, + { 0x2E, PacketTypesIn.OpenWindow }, + { 0x2F, PacketTypesIn.OpenSignEditor }, + { 0x30, PacketTypesIn.CraftRecipeResponse }, + { 0x31, PacketTypesIn.PlayerAbilities }, + { 0x32, PacketTypesIn.CombatEvent }, + { 0x33, PacketTypesIn.PlayerInfo }, + { 0x34, PacketTypesIn.FacePlayer }, + { 0x35, PacketTypesIn.PlayerPositionAndLook }, + { 0x36, PacketTypesIn.UnlockRecipes }, + { 0x37, PacketTypesIn.DestroyEntities }, + { 0x38, PacketTypesIn.RemoveEntityEffect }, + { 0x39, PacketTypesIn.ResourcePackSend }, + { 0x3A, PacketTypesIn.Respawn }, + { 0x3B, PacketTypesIn.EntityHeadLook }, + { 0x3C, PacketTypesIn.SelectAdvancementTab }, + { 0x3D, PacketTypesIn.WorldBorder }, + { 0x3E, PacketTypesIn.Camera }, + { 0x3F, PacketTypesIn.HeldItemChange }, + { 0x40, PacketTypesIn.UpdateViewPosition }, + { 0x41, PacketTypesIn.UpdateViewDistance }, + { 0x42, PacketTypesIn.SpawnPosition }, + { 0x43, PacketTypesIn.DisplayScoreboard }, + { 0x44, PacketTypesIn.EntityMetadata }, + { 0x45, PacketTypesIn.AttachEntity }, + { 0x46, PacketTypesIn.EntityVelocity }, + { 0x47, PacketTypesIn.EntityEquipment }, + { 0x48, PacketTypesIn.SetExperience }, + { 0x49, PacketTypesIn.UpdateHealth }, + { 0x4A, PacketTypesIn.ScoreboardObjective }, + { 0x4B, PacketTypesIn.SetPassengers }, + { 0x4C, PacketTypesIn.Teams }, + { 0x4D, PacketTypesIn.UpdateScore }, + { 0x4E, PacketTypesIn.TimeUpdate }, + { 0x4F, PacketTypesIn.Title }, + { 0x50, PacketTypesIn.EntitySoundEffect }, + { 0x51, PacketTypesIn.SoundEffect }, + { 0x52, PacketTypesIn.StopSound }, + { 0x53, PacketTypesIn.PlayerListHeaderAndFooter }, + { 0x54, PacketTypesIn.NBTQueryResponse }, + { 0x55, PacketTypesIn.CollectItem }, + { 0x56, PacketTypesIn.EntityTeleport }, + { 0x57, PacketTypesIn.Advancements }, + { 0x58, PacketTypesIn.EntityProperties }, + { 0x59, PacketTypesIn.EntityEffect }, + { 0x5A, PacketTypesIn.DeclareRecipes }, + { 0x5B, PacketTypesIn.Tags }, + }; + + private Dictionary typeOut = new Dictionary() + { + { 0x00, PacketTypesOut.TeleportConfirm }, + { 0x01, PacketTypesOut.QueryBlockNBT }, + { 0x02, PacketTypesOut.SetDifficulty }, + { 0x03, PacketTypesOut.ChatMessage }, + { 0x04, PacketTypesOut.ClientStatus }, + { 0x05, PacketTypesOut.ClientSettings }, + { 0x06, PacketTypesOut.TabComplete }, + { 0x07, PacketTypesOut.WindowConfirmation }, + { 0x08, PacketTypesOut.ClickWindowButton }, + { 0x09, PacketTypesOut.ClickWindow }, + { 0x0A, PacketTypesOut.CloseWindow }, + { 0x0B, PacketTypesOut.PluginMessage }, + { 0x0C, PacketTypesOut.EditBook }, + { 0x0D, PacketTypesOut.EntityNBTRequest }, + { 0x0E, PacketTypesOut.InteractEntity }, + { 0x0F, PacketTypesOut.GenerateStructure }, + { 0x10, PacketTypesOut.KeepAlive }, + { 0x11, PacketTypesOut.LockDifficulty }, + { 0x12, PacketTypesOut.PlayerPosition }, + { 0x13, PacketTypesOut.PlayerPositionAndRotation }, + { 0x14, PacketTypesOut.PlayerRotation }, + { 0x15, PacketTypesOut.PlayerMovement }, + { 0x16, PacketTypesOut.VehicleMove }, + { 0x17, PacketTypesOut.SteerBoat }, + { 0x18, PacketTypesOut.PickItem }, + { 0x19, PacketTypesOut.CraftRecipeRequest }, + { 0x1A, PacketTypesOut.PlayerAbilities }, + { 0x1B, PacketTypesOut.PlayerDigging }, + { 0x1C, PacketTypesOut.EntityAction }, + { 0x1D, PacketTypesOut.SteerVehicle }, + { 0x1E, PacketTypesOut.RecipeBookData }, + { 0x1F, PacketTypesOut.NameItem }, + { 0x20, PacketTypesOut.ResourcePackStatus }, + { 0x21, PacketTypesOut.AdvancementTab }, + { 0x22, PacketTypesOut.SelectTrade }, + { 0x23, PacketTypesOut.SetBeaconEffect }, + { 0x24, PacketTypesOut.HeldItemChange }, + { 0x25, PacketTypesOut.UpdateCommandBlock }, + { 0x26, PacketTypesOut.UpdateCommandBlockMinecart }, + { 0x27, PacketTypesOut.CreativeInventoryAction }, + { 0x28, PacketTypesOut.UpdateJigsawBlock }, + { 0x29, PacketTypesOut.UpdateStructureBlock }, + { 0x2A, PacketTypesOut.UpdateSign }, + { 0x2B, PacketTypesOut.Animation }, + { 0x2C, PacketTypesOut.Spectate }, + { 0x2D, PacketTypesOut.PlayerBlockPlacement }, + { 0x2E, PacketTypesOut.UseItem }, + }; + + protected override Dictionary GetListIn() + { + return typeIn; + } + + protected override Dictionary GetListOut() + { + return typeOut; + } + } +} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1162.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1162.cs new file mode 100644 index 00000000..469997f7 --- /dev/null +++ b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1162.cs @@ -0,0 +1,168 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace MinecraftClient.Protocol.Handlers.PacketPalettes +{ + public class PacketPalette1162 : PacketTypePalette + { + private Dictionary typeIn = new Dictionary() + { + { 0x00, PacketTypesIn.SpawnEntity }, + { 0x01, PacketTypesIn.SpawnExperienceOrb }, + { 0x02, PacketTypesIn.SpawnLivingEntity }, + { 0x03, PacketTypesIn.SpawnPainting }, + { 0x04, PacketTypesIn.SpawnPlayer }, + { 0x05, PacketTypesIn.EntityAnimation }, + { 0x06, PacketTypesIn.Statistics }, + { 0x07, PacketTypesIn.AcknowledgePlayerDigging }, + { 0x08, PacketTypesIn.BlockBreakAnimation }, + { 0x09, PacketTypesIn.BlockEntityData }, + { 0x0A, PacketTypesIn.BlockAction }, + { 0x0B, PacketTypesIn.BlockChange }, + { 0x0C, PacketTypesIn.BossBar }, + { 0x0D, PacketTypesIn.ServerDifficulty }, + { 0x0E, PacketTypesIn.ChatMessage }, + { 0x0F, PacketTypesIn.TabComplete }, + { 0x10, PacketTypesIn.DeclareCommands }, + { 0x11, PacketTypesIn.WindowConfirmation }, + { 0x12, PacketTypesIn.CloseWindow }, + { 0x13, PacketTypesIn.WindowItems }, + { 0x14, PacketTypesIn.WindowProperty }, + { 0x15, PacketTypesIn.SetSlot }, + { 0x16, PacketTypesIn.SetCooldown }, + { 0x17, PacketTypesIn.PluginMessage }, + { 0x18, PacketTypesIn.NamedSoundEffect }, + { 0x19, PacketTypesIn.Disconnect }, + { 0x1A, PacketTypesIn.EntityStatus }, + { 0x1B, PacketTypesIn.Explosion }, + { 0x1C, PacketTypesIn.UnloadChunk }, + { 0x1D, PacketTypesIn.ChangeGameState }, + { 0x1E, PacketTypesIn.OpenHorseWindow }, + { 0x1F, PacketTypesIn.KeepAlive }, + { 0x20, PacketTypesIn.ChunkData }, + { 0x21, PacketTypesIn.Effect }, + { 0x22, PacketTypesIn.Particle }, + { 0x23, PacketTypesIn.UpdateLight }, + { 0x24, PacketTypesIn.JoinGame }, + { 0x25, PacketTypesIn.MapData }, + { 0x26, PacketTypesIn.TradeList }, + { 0x27, PacketTypesIn.EntityPosition }, + { 0x28, PacketTypesIn.EntityPositionAndRotation }, + { 0x29, PacketTypesIn.EntityRotation }, + { 0x2A, PacketTypesIn.EntityMovement }, + { 0x2B, PacketTypesIn.VehicleMove }, + { 0x2C, PacketTypesIn.OpenBook }, + { 0x2D, PacketTypesIn.OpenWindow }, + { 0x2E, PacketTypesIn.OpenSignEditor }, + { 0x2F, PacketTypesIn.CraftRecipeResponse }, + { 0x30, PacketTypesIn.PlayerAbilities }, + { 0x31, PacketTypesIn.CombatEvent }, + { 0x32, PacketTypesIn.PlayerInfo }, + { 0x33, PacketTypesIn.FacePlayer }, + { 0x34, PacketTypesIn.PlayerPositionAndLook }, + { 0x35, PacketTypesIn.UnlockRecipes }, + { 0x36, PacketTypesIn.DestroyEntities }, + { 0x37, PacketTypesIn.RemoveEntityEffect }, + { 0x38, PacketTypesIn.ResourcePackSend }, + { 0x39, PacketTypesIn.Respawn }, + { 0x3A, PacketTypesIn.EntityHeadLook }, + { 0x3B, PacketTypesIn.MultiBlockChange }, + { 0x3C, PacketTypesIn.SelectAdvancementTab }, + { 0x3D, PacketTypesIn.WorldBorder }, + { 0x3E, PacketTypesIn.Camera }, + { 0x3F, PacketTypesIn.HeldItemChange }, + { 0x40, PacketTypesIn.UpdateViewPosition }, + { 0x41, PacketTypesIn.UpdateViewDistance }, + { 0x42, PacketTypesIn.SpawnPosition }, + { 0x43, PacketTypesIn.DisplayScoreboard }, + { 0x44, PacketTypesIn.EntityMetadata }, + { 0x45, PacketTypesIn.AttachEntity }, + { 0x46, PacketTypesIn.EntityVelocity }, + { 0x47, PacketTypesIn.EntityEquipment }, + { 0x48, PacketTypesIn.SetExperience }, + { 0x49, PacketTypesIn.UpdateHealth }, + { 0x4A, PacketTypesIn.ScoreboardObjective }, + { 0x4B, PacketTypesIn.SetPassengers }, + { 0x4C, PacketTypesIn.Teams }, + { 0x4D, PacketTypesIn.UpdateScore }, + { 0x4E, PacketTypesIn.TimeUpdate }, + { 0x4F, PacketTypesIn.Title }, + { 0x50, PacketTypesIn.EntitySoundEffect }, + { 0x51, PacketTypesIn.SoundEffect }, + { 0x52, PacketTypesIn.StopSound }, + { 0x53, PacketTypesIn.PlayerListHeaderAndFooter }, + { 0x54, PacketTypesIn.NBTQueryResponse }, + { 0x55, PacketTypesIn.CollectItem }, + { 0x56, PacketTypesIn.EntityTeleport }, + { 0x57, PacketTypesIn.Advancements }, + { 0x58, PacketTypesIn.EntityProperties }, + { 0x59, PacketTypesIn.EntityEffect }, + { 0x5A, PacketTypesIn.DeclareRecipes }, + { 0x5B, PacketTypesIn.Tags }, + }; + + private Dictionary typeOut = new Dictionary() + { + { 0x00, PacketTypesOut.TeleportConfirm }, + { 0x01, PacketTypesOut.QueryBlockNBT }, + { 0x02, PacketTypesOut.SetDifficulty }, + { 0x03, PacketTypesOut.ChatMessage }, + { 0x04, PacketTypesOut.ClientStatus }, + { 0x05, PacketTypesOut.ClientSettings }, + { 0x06, PacketTypesOut.TabComplete }, + { 0x07, PacketTypesOut.WindowConfirmation }, + { 0x08, PacketTypesOut.ClickWindowButton }, + { 0x09, PacketTypesOut.ClickWindow }, + { 0x0A, PacketTypesOut.CloseWindow }, + { 0x0B, PacketTypesOut.PluginMessage }, + { 0x0C, PacketTypesOut.EditBook }, + { 0x0D, PacketTypesOut.EntityNBTRequest }, + { 0x0E, PacketTypesOut.InteractEntity }, + { 0x0F, PacketTypesOut.GenerateStructure }, + { 0x10, PacketTypesOut.KeepAlive }, + { 0x11, PacketTypesOut.LockDifficulty }, + { 0x12, PacketTypesOut.PlayerPosition }, + { 0x13, PacketTypesOut.PlayerPositionAndRotation }, + { 0x14, PacketTypesOut.PlayerRotation }, + { 0x15, PacketTypesOut.PlayerMovement }, + { 0x16, PacketTypesOut.VehicleMove }, + { 0x17, PacketTypesOut.SteerBoat }, + { 0x18, PacketTypesOut.PickItem }, + { 0x19, PacketTypesOut.CraftRecipeRequest }, + { 0x1A, PacketTypesOut.PlayerAbilities }, + { 0x1B, PacketTypesOut.PlayerDigging }, + { 0x1C, PacketTypesOut.EntityAction }, + { 0x1D, PacketTypesOut.SteerVehicle }, + { 0x1E, PacketTypesOut.SetDisplayedRecipe }, + { 0x1F, PacketTypesOut.SetRecipeBookState }, + { 0x20, PacketTypesOut.NameItem }, + { 0x21, PacketTypesOut.ResourcePackStatus }, + { 0x22, PacketTypesOut.AdvancementTab }, + { 0x23, PacketTypesOut.SelectTrade }, + { 0x24, PacketTypesOut.SetBeaconEffect }, + { 0x25, PacketTypesOut.HeldItemChange }, + { 0x26, PacketTypesOut.UpdateCommandBlock }, + { 0x27, PacketTypesOut.UpdateCommandBlockMinecart }, + { 0x28, PacketTypesOut.CreativeInventoryAction }, + { 0x29, PacketTypesOut.UpdateJigsawBlock }, + { 0x2A, PacketTypesOut.UpdateStructureBlock }, + { 0x2B, PacketTypesOut.UpdateSign }, + { 0x2C, PacketTypesOut.Animation }, + { 0x2D, PacketTypesOut.Spectate }, + { 0x2E, PacketTypesOut.PlayerBlockPlacement }, + { 0x2F, PacketTypesOut.UseItem }, + }; + + protected override Dictionary GetListIn() + { + return typeIn; + } + + protected override Dictionary GetListOut() + { + return typeOut; + } + } +} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette17.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette17.cs new file mode 100644 index 00000000..c87eb535 --- /dev/null +++ b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette17.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace MinecraftClient.Protocol.Handlers.PacketPalettes +{ + public class PacketPalette17 : PacketTypePalette + { + private Dictionary typeIn = new Dictionary() + { + { 0x00, PacketTypesIn.KeepAlive }, + { 0x01, PacketTypesIn.JoinGame }, + { 0x02, PacketTypesIn.ChatMessage }, + { 0x03, PacketTypesIn.TimeUpdate }, + { 0x04, PacketTypesIn.EntityEquipment }, + { 0x05, PacketTypesIn.SpawnPosition }, + { 0x06, PacketTypesIn.UpdateHealth }, + { 0x07, PacketTypesIn.Respawn }, + { 0x08, PacketTypesIn.PlayerPositionAndLook }, + { 0x09, PacketTypesIn.HeldItemChange }, + { 0x0A, PacketTypesIn.UseBed }, + { 0x0B, PacketTypesIn.EntityAnimation }, + { 0x0C, PacketTypesIn.SpawnPlayer }, + { 0x0D, PacketTypesIn.CollectItem }, + { 0x0E, PacketTypesIn.SpawnEntity }, + { 0x0F, PacketTypesIn.SpawnLivingEntity }, + { 0x10, PacketTypesIn.SpawnPainting }, + { 0x11, PacketTypesIn.SpawnExperienceOrb }, + { 0x12, PacketTypesIn.EntityVelocity }, + { 0x13, PacketTypesIn.DestroyEntities }, + { 0x14, PacketTypesIn.EntityMovement }, + { 0x15, PacketTypesIn.EntityPosition }, + { 0x16, PacketTypesIn.EntityRotation }, + { 0x17, PacketTypesIn.EntityPositionAndRotation }, + { 0x18, PacketTypesIn.EntityTeleport }, + { 0x19, PacketTypesIn.EntityHeadLook }, + { 0x1A, PacketTypesIn.EntityStatus }, + { 0x1B, PacketTypesIn.AttachEntity }, + { 0x1C, PacketTypesIn.EntityMetadata }, + { 0x1D, PacketTypesIn.EntityEffect }, + { 0x1E, PacketTypesIn.RemoveEntityEffect }, + { 0x1F, PacketTypesIn.SetExperience }, + { 0x20, PacketTypesIn.EntityProperties }, + { 0x21, PacketTypesIn.ChunkData }, + { 0x22, PacketTypesIn.MultiBlockChange }, + { 0x23, PacketTypesIn.BlockChange }, + { 0x24, PacketTypesIn.BlockAction }, + { 0x25, PacketTypesIn.BlockBreakAnimation }, + { 0x26, PacketTypesIn.MapChunkBulk }, + { 0x27, PacketTypesIn.Explosion }, + { 0x28, PacketTypesIn.Effect }, + { 0x29, PacketTypesIn.SoundEffect }, + { 0x2A, PacketTypesIn.Particle }, + { 0x2B, PacketTypesIn.ChangeGameState }, + { 0x2C, PacketTypesIn.SpawnWeatherEntity }, + { 0x2D, PacketTypesIn.OpenWindow }, + { 0x2E, PacketTypesIn.CloseWindow }, + { 0x2F, PacketTypesIn.SetSlot }, + { 0x30, PacketTypesIn.WindowItems }, + { 0x31, PacketTypesIn.WindowProperty }, + { 0x32, PacketTypesIn.WindowConfirmation }, + { 0x33, PacketTypesIn.UpdateSign }, + { 0x34, PacketTypesIn.MapData }, + { 0x35, PacketTypesIn.BlockEntityData }, + { 0x36, PacketTypesIn.OpenSignEditor }, + { 0x37, PacketTypesIn.Statistics }, + { 0x38, PacketTypesIn.PlayerInfo }, + { 0x39, PacketTypesIn.PlayerAbilities }, + { 0x3A, PacketTypesIn.TabComplete }, + { 0x3B, PacketTypesIn.ScoreboardObjective }, + { 0x3C, PacketTypesIn.UpdateScore }, + { 0x3D, PacketTypesIn.DisplayScoreboard }, + { 0x3E, PacketTypesIn.Teams }, + { 0x3F, PacketTypesIn.PluginMessage }, + { 0x40, PacketTypesIn.Disconnect }, + { 0x41, PacketTypesIn.ServerDifficulty }, + { 0x42, PacketTypesIn.CombatEvent }, + { 0x43, PacketTypesIn.Camera }, + { 0x44, PacketTypesIn.WorldBorder }, + { 0x45, PacketTypesIn.Title }, + { 0x46, PacketTypesIn.SetCompression }, + { 0x47, PacketTypesIn.PlayerListHeaderAndFooter }, + { 0x48, PacketTypesIn.ResourcePackSend }, + { 0x49, PacketTypesIn.UpdateEntityNBT }, + }; + + private Dictionary typeOut = new Dictionary() + { + { 0x00, PacketTypesOut.KeepAlive }, + { 0x01, PacketTypesOut.ChatMessage }, + { 0x02, PacketTypesOut.InteractEntity }, + { 0x03, PacketTypesOut.PlayerMovement }, + { 0x04, PacketTypesOut.PlayerPosition }, + { 0x05, PacketTypesOut.PlayerRotation }, + { 0x06, PacketTypesOut.PlayerPositionAndRotation }, + { 0x07, PacketTypesOut.PlayerDigging }, + { 0x08, PacketTypesOut.PlayerBlockPlacement }, + { 0x09, PacketTypesOut.HeldItemChange }, + { 0x0A, PacketTypesOut.Animation }, + { 0x0B, PacketTypesOut.EntityAction }, + { 0x0C, PacketTypesOut.SteerVehicle }, + { 0x0D, PacketTypesOut.CloseWindow }, + { 0x0E, PacketTypesOut.ClickWindow }, + { 0x0F, PacketTypesOut.WindowConfirmation }, + { 0x10, PacketTypesOut.CreativeInventoryAction }, + { 0x11, PacketTypesOut.EnchantItem }, + { 0x12, PacketTypesOut.UpdateSign }, + { 0x13, PacketTypesOut.PlayerAbilities }, + { 0x14, PacketTypesOut.TabComplete }, + { 0x15, PacketTypesOut.ClientSettings }, + { 0x16, PacketTypesOut.ClientStatus }, + { 0x17, PacketTypesOut.PluginMessage }, + { 0x18, PacketTypesOut.Spectate }, + { 0x19, PacketTypesOut.ResourcePackStatus }, + }; + + protected override Dictionary GetListIn() + { + return typeIn; + } + + protected override Dictionary GetListOut() + { + return typeOut; + } + } +} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPaletteHelper.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPaletteHelper.cs new file mode 100644 index 00000000..fdaebcb7 --- /dev/null +++ b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPaletteHelper.cs @@ -0,0 +1,164 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO; + +namespace MinecraftClient.Protocol.Handlers.PacketPalettes +{ + public static class PacketPaletteHelper + { + /// + /// Generate a code snippet of updated IDs from a modified packet palette (usually when you have updated packet item position) + /// + /// + /// You have inserted a new packet type with ID 0x02 into the copied new packet palette: + /// { 0x00, PacketTypesIn.SpawnEntity }, + /// { 0x01, PacketTypesIn.SpawnExperienceOrb }, + /// { 0xFF, PacketTypesIn.IamNewPacket }, // use 0xFF because it has conflict with old packet ID, we will correct the IDs now + /// { 0x02, PacketTypesIn.SpawnWeatherEntity }, + /// ... + /// + /// Call this method with your new packet palette: + /// UpdatePacketIdByItemPosition(new PacketPaletteXXXX(), "code_snippet.txt"); + /// And it will generate a Dictionary format with the Packet IDs corrected for you to copy and paste: + /// { 0x00, PacketTypesIn.SpawnEntity }, + /// { 0x01, PacketTypesIn.SpawnExperienceOrb }, + /// { 0x02, PacketTypesIn.IamNewPacket }, + /// { 0x03, PacketTypesIn.SpawnWeatherEntity }, + /// ... + /// + /// + /// + public static void UpdatePacketIdByItemPosition(PacketTypePalette palette, string outputFile) + { + // I am just too tired to create another full .cs file so... please just copy and paste + List lines = new List(); + lines.Add("=== Inbound Packets ==="); + int i = 0; + foreach(var t in palette.GetMappingIn()) + { + lines.Add(string.Format("{{ 0x{0}, {1} }},", i.ToString("X2"), t.Value)); + i++; + } + lines.Add("=== End of Inbound ==="); + lines.Add(""); + lines.Add("=== Outbound Packets ==="); + i = 0; + foreach (var t in palette.GetMappingOut()) + { + lines.Add(string.Format("{{ 0x{0}, {1} }},", i.ToString("X2"), t.Value)); + i++; + } + lines.Add("=== End of Outbound ==="); + + File.WriteAllText(outputFile, string.Join("\r\n", lines)); + } + + /// + /// Generate a code snippet of rearranged order of packet types from a modified packet palette (usually when you have updated packet IDs) + /// + /// + /// You have changed some packet IDs: + /// { 0x00, PacketTypesIn.SpawnEntity }, + /// { 0x02, PacketTypesIn.SpawnExperienceOrb }, // ID changed from 0x02 -> 0x01 + /// { 0x01, PacketTypesIn.SpawnWeatherEntity }, // ID changed from 0x01 -> 0x02 + /// ... + /// + /// Call this method with your new packet palette: + /// UpdatePacketPositionToAscending(new PacketPaletteXXXX(), "code_snippet.txt"); + /// And it will generate a Dictionary format with the ascending order of Packet IDs for you to copy and paste: + /// { 0x00, PacketTypesIn.SpawnEntity }, + /// { 0x01, PacketTypesIn.SpawnWeatherEntity }, + /// { 0x02, PacketTypesIn.SpawnExperienceOrb }, + /// ... + /// + /// + /// + public static void UpdatePacketPositionToAscending(PacketTypePalette palette, string outputFile) + { + // I am just too tired to create another full .cs file so... please just copy and paste + List lines = new List(); + lines.Add("=== Inbound Packets ==="); + for (int i = 0; i < palette.GetMappingIn().Count; i++) + { + lines.Add(string.Format("{{ 0x{0}, {1} }},", i.ToString("X2"), palette.GetMappingIn()[i])); + } + lines.Add("=== End of Inbound ==="); + lines.Add(""); + lines.Add("=== Outbound Packets ==="); + for (int i = 0; i < palette.GetMappingOut().Count; i++) + { + lines.Add(string.Format("{{ 0x{0}, {1} }},", i.ToString("X2"), palette.GetMappingOut()[i])); + } + lines.Add("=== End of Outbound ==="); + + File.WriteAllText(outputFile, string.Join("\r\n", lines)); + } + + /// + /// Generate PacketPaletteXXX.cs by feeding PacketTypesIn and PacketTypesOut list + /// + /// The output file name + /// The namespace to use in the generated class + /// Class name + /// List of PacketTypesIn + /// List of PacketTypesOut + /// + /// You need to make sure the order of each item are all correct for that MC version + /// Example format: + /// List pIn = new List() + /// { + /// PacketTypesIn.SpawnEntity, // packet ID of 0x00 + /// PacketTypesIn.SpawnExperienceOrb, // packet ID of 0x01 and so on + /// ... + /// } + /// + public static void GenerateIDsPacketByList(string outputFile, string namespaceToUse, string className, List pIn, List pOut) + { + const string TAB = " "; + const string TAB2 = " "; + const string TAB3 = " "; + List lines = new List(); + lines.Add("using System;"); + lines.Add("using System.Collections.Generic;"); + lines.Add("using System.Linq;"); + lines.Add("using System.Text;"); + lines.Add(""); + lines.Add("namespace " + namespaceToUse); + lines.Add("{"); + lines.Add(TAB + "public class " + className + " : PacketTypePalette"); + lines.Add(TAB + "{"); + lines.Add(TAB2 + "private Dictionary typeIn = new Dictionary()"); + lines.Add(TAB2 + "{"); + for (int i = 0; i < pIn.Count; i++) + { + lines.Add(TAB3 + string.Format("{{ 0x{0}, PacketTypesIn.{1} }},", i.ToString("X2"), pIn[i])); + } + lines.Add(TAB2 + "};"); + lines.Add(""); + lines.Add(TAB2 + "private Dictionary typeOut = new Dictionary()"); + lines.Add(TAB2 + "{"); + for (int i = 0; i < pOut.Count; i++) + { + lines.Add(TAB3 + string.Format("{{ 0x{0}, PacketTypesOut.{1} }},", i.ToString("X2"), pOut[i])); + } + lines.Add(TAB2 + "};"); + lines.Add(""); + lines.Add(TAB2 + "protected override Dictionary GetListIn()"); + lines.Add(TAB2 + "{"); + lines.Add(TAB3 + "return typeIn;"); + lines.Add(TAB2 + "}"); + lines.Add(""); + lines.Add(TAB2 + "protected override Dictionary GetListOut()"); + lines.Add(TAB2 + "{"); + lines.Add(TAB3 + "return typeOut;"); + lines.Add(TAB2 + "}"); + lines.Add(TAB + "}"); + lines.Add("}"); + lines.Add(""); + + File.WriteAllText(outputFile, string.Join("\r\n", lines)); + } + } +} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketTypePalette.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketTypePalette.cs new file mode 100644 index 00000000..666d90ed --- /dev/null +++ b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketTypePalette.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace MinecraftClient.Protocol.Handlers.PacketPalettes +{ + /// + /// Packet type palette + /// + /// + /// Steps for implementing palette for new Minecraft version: + /// 1. Check out https://wiki.vg/Pre-release_protocol to see if there is any packet got added/removed + /// 2. Add new packet type to PacketTypesIn.cs and PacketTypesOut.cs (if any) + /// 3. Create a new PacketPaletteXXX.cs by copying the latest version of existing PacketPaletteXXX.cs (could reduce massive works on writing a brand new one) + /// 4. Apply change to the copied PacketPaletteXXX.cs by either: + /// - Inserting new packet type to the correct position + /// - Removing packet type that got deleted + /// OR + /// - Changing the packet IDs manually + /// 5. Use PacketPaletteHelper to generate a code snippet and copy the generated code snippet back to PacketPaletteXXX.cs + /// - Use UpdatePacketPositionToAscending() if you changed the packet IDs manually + /// - Use UpdatePacketIdByItemPosition() if you inserted some packet type into the dictionary + /// Simply add the method call in Program.cs and run the program once. The code snippet will be generated + /// + /// + /// The way how Mojang change the packet ID is simple: + /// * Either adding/removing a packet from middle and cause packet ID below it get shifted + /// * Append a new packet at the end (but this is rare) + /// + public abstract class PacketTypePalette + { + protected abstract Dictionary GetListIn(); + protected abstract Dictionary GetListOut(); + + private Dictionary reverseMappingIn = new Dictionary(); + + private Dictionary reverseMappingOut = new Dictionary(); + + public PacketTypePalette() + { + foreach (var p in GetListIn()) + { + reverseMappingIn.Add(p.Value, p.Key); + } + foreach (var p in GetListOut()) + { + reverseMappingOut.Add(p.Value, p.Key); + } + } + + /// + /// Get incomming packet type by packet ID + /// + /// packet ID + /// Packet type + public PacketTypesIn GetIncommingTypeById(int packetId) + { + return GetListIn()[packetId]; + } + + /// + /// Get incomming packet ID by packet type + /// + /// Packet type + /// packet ID + public int GetIncommingIdByType(PacketTypesIn packetType) + { + return reverseMappingIn[packetType]; + } + + /// + /// Get outgoing packet type by packet ID + /// + /// Packet ID + /// Packet type + public PacketTypesOut GetOutgoingTypeById(int packetId) + { + return GetListOut()[packetId]; + } + + /// + /// Get outgoing packet ID by packet type + /// + /// Packet type + /// Packet ID + public int GetOutgoingIdByType(PacketTypesOut packetType) + { + return reverseMappingOut[packetType]; + } + + + /// + /// Public method for getting the type mapping + /// + /// PacketTypesIn with packet ID as index + public Dictionary GetMappingIn() + { + return GetListIn(); + } + + /// + /// Public method for getting the type mapping + /// + /// PacketTypesOut with packet ID as index + public Dictionary GetMappingOut() + { + return GetListOut(); + } + } +} diff --git a/MinecraftClient/Protocol/Handlers/PacketType18Handler.cs b/MinecraftClient/Protocol/Handlers/PacketType18Handler.cs new file mode 100644 index 00000000..8a78cbae --- /dev/null +++ b/MinecraftClient/Protocol/Handlers/PacketType18Handler.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using MinecraftClient.Protocol.Handlers; +using MinecraftClient.Protocol.Handlers.PacketPalettes; + +namespace MinecraftClient.Protocol.Handlers +{ + public class PacketTypeHandler + { + private int protocol; + + /// + /// Initialize the handler + /// + /// Protocol version to use + public PacketTypeHandler(int protocol) + { + this.protocol = protocol; + } + /// + /// Initialize the handler + /// + public PacketTypeHandler() { } + + /// + /// Get the packet type palette + /// + /// + public PacketTypePalette GetTypeHandler() + { + return GetTypeHandler(this.protocol); + } + /// + /// Get the packet type palette + /// + /// Protocol version to use + /// + public PacketTypePalette GetTypeHandler(int protocol) + { + if (protocol > Protocol18Handler.MC1162Version) + throw new NotImplementedException("Please update packet type palette for this Minecraft version. See PacketTypePalette.cs"); + if (protocol <= Protocol18Handler.MC18Version) + return new PacketPalette17(); + else if (protocol <= Protocol18Handler.MC1112Version) + return new PacketPalette110(); + else if (protocol <= Protocol18Handler.MC112Version) + return new PacketPalette112(); + else if (protocol <= Protocol18Handler.MC1122Version) + return new PacketPalette1122(); + else if (protocol <= Protocol18Handler.MC114Version) + return new PacketPalette113(); + else if (protocol <= Protocol18Handler.MC115Version) + return new PacketPalette114(); + else if (protocol <= Protocol18Handler.MC1152Version) + return new PacketPalette115(); + else if (protocol <= Protocol18Handler.MC1161Version) + return new PacketPalette116(); + else return new PacketPalette1162(); + } + } +} diff --git a/MinecraftClient/Protocol/Handlers/PacketTypesIn.cs b/MinecraftClient/Protocol/Handlers/PacketTypesIn.cs new file mode 100644 index 00000000..d20ee268 --- /dev/null +++ b/MinecraftClient/Protocol/Handlers/PacketTypesIn.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace MinecraftClient.Protocol.Handlers +{ + /// + /// Incomming packet types + /// + public enum PacketTypesIn + { + SpawnEntity, + SpawnExperienceOrb, + SpawnWeatherEntity, + SpawnLivingEntity, + SpawnPainting, + SpawnPlayer, + EntityAnimation, + Statistics, + AcknowledgePlayerDigging, + BlockBreakAnimation, + BlockEntityData, + BlockAction, + BlockChange, + BossBar, + ServerDifficulty, + ChatMessage, + MultiBlockChange, + TabComplete, + DeclareCommands, + WindowConfirmation, + CloseWindow, + WindowItems, + WindowProperty, + SetSlot, + SetCooldown, + PluginMessage, + NamedSoundEffect, + Disconnect, + EntityStatus, + Explosion, + UnloadChunk, + ChangeGameState, + OpenHorseWindow, + KeepAlive, + ChunkData, + Effect, + Particle, + UpdateLight, + JoinGame, + MapData, + TradeList, + EntityPosition, + EntityPositionAndRotation, + EntityRotation, + EntityMovement, + VehicleMove, + OpenBook, + OpenWindow, + OpenSignEditor, + CraftRecipeResponse, + PlayerAbilities, + CombatEvent, + PlayerInfo, + FacePlayer, + PlayerPositionAndLook, + UnlockRecipes, + DestroyEntities, + RemoveEntityEffect, + ResourcePackSend, + Respawn, + EntityHeadLook, + SelectAdvancementTab, + WorldBorder, + Camera, + HeldItemChange, + UpdateViewPosition, + UpdateViewDistance, + DisplayScoreboard, + EntityMetadata, + AttachEntity, + EntityVelocity, + EntityEquipment, + SetExperience, + UpdateHealth, + ScoreboardObjective, + SetPassengers, + Teams, + UpdateScore, + SpawnPosition, + TimeUpdate, + Title, + EntitySoundEffect, + SoundEffect, + StopSound, + PlayerListHeaderAndFooter, + NBTQueryResponse, + CollectItem, + EntityTeleport, + Advancements, + EntityProperties, + EntityEffect, + DeclareRecipes, + Tags, + UseBed, // For 1.13.2 or below + MapChunkBulk, // For 1.8 or below + SetCompression, // For 1.8 or below + UpdateSign, // For 1.8 or below + UpdateEntityNBT, // For 1.8 or below + Unknown, // For old version packet that have been removed and not used by mcc + } +} diff --git a/MinecraftClient/Protocol/Handlers/PacketTypesOut.cs b/MinecraftClient/Protocol/Handlers/PacketTypesOut.cs new file mode 100644 index 00000000..ee241e94 --- /dev/null +++ b/MinecraftClient/Protocol/Handlers/PacketTypesOut.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace MinecraftClient.Protocol.Handlers +{ + /// + /// Outgoing packet types + /// + public enum PacketTypesOut + { + TeleportConfirm, + QueryBlockNBT, + SetDifficulty, + ChatMessage, + ClientStatus, + ClientSettings, + TabComplete, + WindowConfirmation, + ClickWindowButton, + ClickWindow, + CloseWindow, + PluginMessage, + EditBook, + EntityNBTRequest, + InteractEntity, + KeepAlive, + LockDifficulty, + PlayerPosition, + PlayerPositionAndRotation, + PlayerRotation, + PlayerMovement, + VehicleMove, + SteerBoat, + PickItem, + CraftRecipeRequest, + PlayerAbilities, + PlayerDigging, + EntityAction, + SteerVehicle, + RecipeBookData, + NameItem, + ResourcePackStatus, + AdvancementTab, + SelectTrade, + SetBeaconEffect, + HeldItemChange, + UpdateCommandBlock, + UpdateCommandBlockMinecart, + CreativeInventoryAction, + UpdateJigsawBlock, + UpdateStructureBlock, + UpdateSign, + Animation, + Spectate, + PlayerBlockPlacement, + UseItem, + PrepareCraftingGrid, // For 1.12 - 1.12.1 only + EnchantItem, // For 1.13.2 or below + GenerateStructure, // Added in 1.16 + SetDisplayedRecipe, // Added in 1.16.2 + SetRecipeBookState, // Added in 1.16.2 + Unknown // For old version packet that have been removed and not used by mcc + } +} diff --git a/MinecraftClient/Protocol/Handlers/Protocol18.cs b/MinecraftClient/Protocol/Handlers/Protocol18.cs index 98b8b5f6..88ecc0dd 100644 --- a/MinecraftClient/Protocol/Handlers/Protocol18.cs +++ b/MinecraftClient/Protocol/Handlers/Protocol18.cs @@ -16,6 +16,7 @@ using System.Windows.Forms; using System.Data.SqlClient; using System.Diagnostics; using MinecraftClient.Inventory.ItemPalettes; +using MinecraftClient.Protocol.Handlers.PacketPalettes; namespace MinecraftClient.Protocol.Handlers { @@ -26,7 +27,7 @@ namespace MinecraftClient.Protocol.Handlers /// Typical update steps for implementing protocol changes for a new Minecraft version: /// - Perform a diff between latest supported version in MCC and new stable version to support on https://wiki.vg/Protocol /// - If there are any changes in packets implemented by MCC, add MCXXXVersion field below and implement new packet layouts - /// - If packet IDs were changed, also update getPacketIncomingType() and getPacketOutgoingID() inside Protocol18PacketTypes.cs + /// - Add the packet type palette for that Minecraft version. Please see PacketTypePalette.cs for more information /// - Also see Material.cs and ItemType.cs for updating block and item data inside MCC /// class Protocol18Handler : IMinecraftCom @@ -60,6 +61,7 @@ namespace MinecraftClient.Protocol.Handlers IMinecraftComHandler handler; EntityPalette entityPalette; ItemPalette itemPalette; + PacketTypePalette packetPalette; SocketWrapper socketWrapper; DataTypes dataTypes; Thread netRead; @@ -74,6 +76,7 @@ namespace MinecraftClient.Protocol.Handlers this.handler = handler; this.pForge = new Protocol18Forge(forgeInfo, protocolVersion, dataTypes, this, handler); this.pTerrain = new Protocol18Terrain(protocolVersion, dataTypes, handler); + this.packetPalette = new PacketTypeHandler(protocolVersion).GetTypeHandler(); if (handler.GetTerrainEnabled() && protocolversion > MC1152Version) { @@ -241,13 +244,13 @@ namespace MinecraftClient.Protocol.Handlers } } // Regular in-game packets - else switch (Protocol18PacketTypes.GetPacketIncomingType(packetID, protocolversion)) + else switch (packetPalette.GetIncommingTypeById(packetID)) { - case PacketIncomingType.KeepAlive: - SendPacket(PacketOutgoingType.KeepAlive, packetData); + case PacketTypesIn.KeepAlive: + SendPacket(PacketTypesOut.KeepAlive, packetData); handler.OnServerKeepAlive(); break; - case PacketIncomingType.JoinGame: + case PacketTypesIn.JoinGame: handler.OnGameJoined(); int playerEntityID = dataTypes.ReadNextInt(packetData); handler.OnReceivePlayerEntityID(playerEntityID); @@ -308,7 +311,7 @@ namespace MinecraftClient.Protocol.Handlers dataTypes.ReadNextBool(packetData); // Is Flat - 1.16 and above } break; - case PacketIncomingType.ChatMessage: + case PacketTypesIn.ChatMessage: string message = dataTypes.ReadNextString(packetData); if (protocolversion >= MC18Version) { @@ -320,7 +323,7 @@ namespace MinecraftClient.Protocol.Handlers } handler.OnTextReceived(message, true); break; - case PacketIncomingType.Respawn: + case PacketTypesIn.Respawn: if (protocolversion >= MC116Version) { // TODO handle dimensions for 1.16+, needed for terrain handling @@ -351,7 +354,7 @@ namespace MinecraftClient.Protocol.Handlers } handler.OnRespawn(); break; - case PacketIncomingType.PlayerPositionAndLook: + case PacketTypesIn.PlayerPositionAndLook: // These always need to be read, since we need the field after them for teleport confirm double x = dataTypes.ReadNextDouble(packetData); double y = dataTypes.ReadNextDouble(packetData); @@ -378,10 +381,10 @@ namespace MinecraftClient.Protocol.Handlers { int teleportID = dataTypes.ReadNextVarInt(packetData); // Teleport confirm packet - SendPacket(PacketOutgoingType.TeleportConfirm, dataTypes.GetVarInt(teleportID)); + SendPacket(PacketTypesOut.TeleportConfirm, dataTypes.GetVarInt(teleportID)); } break; - case PacketIncomingType.ChunkData: + case PacketTypesIn.ChunkData: if (handler.GetTerrainEnabled()) { int chunkX = dataTypes.ReadNextInt(packetData); @@ -409,7 +412,7 @@ namespace MinecraftClient.Protocol.Handlers } } break; - case PacketIncomingType.MapData: + case PacketTypesIn.MapData: int mapid = dataTypes.ReadNextVarInt(packetData); byte scale = dataTypes.ReadNextByte(packetData); bool trackingposition = dataTypes.ReadNextBool(packetData); @@ -421,7 +424,7 @@ namespace MinecraftClient.Protocol.Handlers int iconcount = dataTypes.ReadNextVarInt(packetData); handler.OnMapData(mapid, scale, trackingposition, locked, iconcount); break; - case PacketIncomingType.Title: + case PacketTypesIn.Title: if (protocolversion >= MC18Version) { int action2 = dataTypes.ReadNextVarInt(packetData); @@ -478,7 +481,7 @@ namespace MinecraftClient.Protocol.Handlers handler.OnTitle(action2, titletext, subtitletext, actionbartext, fadein, stay, fadeout, json); } break; - case PacketIncomingType.MultiBlockChange: + case PacketTypesIn.MultiBlockChange: if (handler.GetTerrainEnabled()) { int chunkX = dataTypes.ReadNextInt(packetData); @@ -513,7 +516,7 @@ namespace MinecraftClient.Protocol.Handlers } } break; - case PacketIncomingType.BlockChange: + case PacketTypesIn.BlockChange: if (handler.GetTerrainEnabled()) { if (protocolversion < MC18Version) @@ -528,7 +531,7 @@ namespace MinecraftClient.Protocol.Handlers else handler.GetWorld().SetBlock(dataTypes.ReadNextLocation(packetData), new Block((ushort)dataTypes.ReadNextVarInt(packetData))); } break; - case PacketIncomingType.MapChunkBulk: + case PacketTypesIn.MapChunkBulk: if (protocolversion < MC19Version && handler.GetTerrainEnabled()) { int chunkCount; @@ -571,7 +574,7 @@ namespace MinecraftClient.Protocol.Handlers pTerrain.ProcessChunkColumnData(chunkXs[chunkColumnNo], chunkZs[chunkColumnNo], chunkMasks[chunkColumnNo], addBitmaps[chunkColumnNo], hasSkyLight, true, currentDimension, chunkData); } break; - case PacketIncomingType.UnloadChunk: + case PacketTypesIn.UnloadChunk: if (protocolversion >= MC19Version && handler.GetTerrainEnabled()) { int chunkX = dataTypes.ReadNextInt(packetData); @@ -579,7 +582,7 @@ namespace MinecraftClient.Protocol.Handlers handler.GetWorld()[chunkX, chunkZ] = null; } break; - case PacketIncomingType.PlayerListUpdate: + case PacketTypesIn.PlayerInfo: if (protocolversion >= MC18Version) { int action = dataTypes.ReadNextVarInt(packetData); @@ -636,7 +639,7 @@ namespace MinecraftClient.Protocol.Handlers else handler.OnPlayerLeave(FakeUUID); } break; - case PacketIncomingType.TabCompleteResult: + case PacketTypesIn.TabComplete: if (protocolversion >= MC113Version) { autocomplete_transaction_id = dataTypes.ReadNextVarInt(packetData); @@ -660,21 +663,21 @@ namespace MinecraftClient.Protocol.Handlers autocomplete_received = true; break; - case PacketIncomingType.PluginMessage: + case PacketTypesIn.PluginMessage: String channel = dataTypes.ReadNextString(packetData); // Length is unneeded as the whole remaining packetData is the entire payload of the packet. if (protocolversion < MC18Version) pForge.ReadNextVarShort(packetData); handler.OnPluginChannelMessage(channel, packetData.ToArray()); return pForge.HandlePluginMessage(channel, packetData, ref currentDimension); - case PacketIncomingType.KickPacket: + case PacketTypesIn.Disconnect: handler.OnConnectionLost(ChatBot.DisconnectReason.InGameKick, ChatParser.ParseText(dataTypes.ReadNextString(packetData))); return false; - case PacketIncomingType.NetworkCompressionTreshold: + case PacketTypesIn.SetCompression: if (protocolversion >= MC18Version && protocolversion < MC19Version) compression_treshold = dataTypes.ReadNextVarInt(packetData); break; - case PacketIncomingType.OpenWindow: + case PacketTypesIn.OpenWindow: if (handler.GetInventoryEnabled()) { if (protocolversion < MC114Version) @@ -699,7 +702,7 @@ namespace MinecraftClient.Protocol.Handlers } } break; - case PacketIncomingType.CloseWindow: + case PacketTypesIn.CloseWindow: if (handler.GetInventoryEnabled()) { byte windowID = dataTypes.ReadNextByte(packetData); @@ -707,7 +710,7 @@ namespace MinecraftClient.Protocol.Handlers handler.OnInventoryClose(windowID); } break; - case PacketIncomingType.WindowItems: + case PacketTypesIn.WindowItems: if (handler.GetInventoryEnabled()) { byte windowId = dataTypes.ReadNextByte(packetData); @@ -722,7 +725,7 @@ namespace MinecraftClient.Protocol.Handlers handler.OnWindowItems(windowId, inventorySlots); } break; - case PacketIncomingType.SetSlot: + case PacketTypesIn.SetSlot: if (handler.GetInventoryEnabled()) { byte windowID = dataTypes.ReadNextByte(packetData); @@ -731,7 +734,7 @@ namespace MinecraftClient.Protocol.Handlers handler.OnSetSlot(windowID, slotID, item); } break; - case PacketIncomingType.WindowConfirmation: + case PacketTypesIn.WindowConfirmation: if (handler.GetInventoryEnabled()) { byte windowID = dataTypes.ReadNextByte(packetData); @@ -743,7 +746,7 @@ namespace MinecraftClient.Protocol.Handlers } } break; - case PacketIncomingType.ResourcePackSend: + case PacketTypesIn.ResourcePackSend: string url = dataTypes.ReadNextString(packetData); string hash = dataTypes.ReadNextString(packetData); // Some server plugins may send invalid resource packs to probe the client and we need to ignore them (issue #1056) @@ -753,17 +756,17 @@ namespace MinecraftClient.Protocol.Handlers byte[] responseHeader = new byte[0]; if (protocolversion < MC110Version) //MC 1.10 does not include resource pack hash in responses responseHeader = dataTypes.ConcatBytes(dataTypes.GetVarInt(hash.Length), Encoding.UTF8.GetBytes(hash)); - SendPacket(PacketOutgoingType.ResourcePackStatus, dataTypes.ConcatBytes(responseHeader, dataTypes.GetVarInt(3))); //Accepted pack - SendPacket(PacketOutgoingType.ResourcePackStatus, dataTypes.ConcatBytes(responseHeader, dataTypes.GetVarInt(0))); //Successfully loaded + SendPacket(PacketTypesOut.ResourcePackStatus, dataTypes.ConcatBytes(responseHeader, dataTypes.GetVarInt(3))); //Accepted pack + SendPacket(PacketTypesOut.ResourcePackStatus, dataTypes.ConcatBytes(responseHeader, dataTypes.GetVarInt(0))); //Successfully loaded break; - case PacketIncomingType.SpawnEntity: + case PacketTypesIn.SpawnEntity: if (handler.GetEntityHandlingEnabled()) { Entity entity = dataTypes.ReadNextEntity(packetData, entityPalette, false); handler.OnSpawnEntity(entity); } break; - case PacketIncomingType.EntityEquipment: + case PacketTypesIn.EntityEquipment: if (handler.GetEntityHandlingEnabled()) { int entityid = dataTypes.ReadNextVarInt(packetData); @@ -788,7 +791,7 @@ namespace MinecraftClient.Protocol.Handlers } } break; - case PacketIncomingType.SpawnLivingEntity: + case PacketTypesIn.SpawnLivingEntity: if (handler.GetEntityHandlingEnabled()) { Entity entity = dataTypes.ReadNextEntity(packetData, entityPalette, true); @@ -798,7 +801,7 @@ namespace MinecraftClient.Protocol.Handlers handler.OnSpawnEntity(entity); } break; - case PacketIncomingType.SpawnPlayer: + case PacketTypesIn.SpawnPlayer: if (handler.GetEntityHandlingEnabled()) { int EntityID = dataTypes.ReadNextVarInt(packetData); @@ -814,7 +817,7 @@ namespace MinecraftClient.Protocol.Handlers handler.OnSpawnPlayer(EntityID, UUID, EntityLocation, Yaw, Pitch); } break; - case PacketIncomingType.EntityEffect: + case PacketTypesIn.EntityEffect: if (handler.GetEntityHandlingEnabled()) { int entityid = dataTypes.ReadNextVarInt(packetData); @@ -828,7 +831,7 @@ namespace MinecraftClient.Protocol.Handlers } } break; - case PacketIncomingType.DestroyEntities: + case PacketTypesIn.DestroyEntities: if (handler.GetEntityHandlingEnabled()) { int EntityCount = dataTypes.ReadNextVarInt(packetData); @@ -840,7 +843,7 @@ namespace MinecraftClient.Protocol.Handlers handler.OnDestroyEntities(EntitiesList); } break; - case PacketIncomingType.EntityPosition: + case PacketTypesIn.EntityPosition: if (handler.GetEntityHandlingEnabled()) { int EntityID = dataTypes.ReadNextVarInt(packetData); @@ -854,7 +857,7 @@ namespace MinecraftClient.Protocol.Handlers handler.OnEntityPosition(EntityID, DeltaX, DeltaY, DeltaZ, OnGround); } break; - case PacketIncomingType.EntityPositionAndRotation: + case PacketTypesIn.EntityPositionAndRotation: if (handler.GetEntityHandlingEnabled()) { int EntityID = dataTypes.ReadNextVarInt(packetData); @@ -870,7 +873,7 @@ namespace MinecraftClient.Protocol.Handlers handler.OnEntityPosition(EntityID, DeltaX, DeltaY, DeltaZ, OnGround); } break; - case PacketIncomingType.EntityProperties: + case PacketTypesIn.EntityProperties: if (handler.GetEntityHandlingEnabled()) { int EntityID = dataTypes.ReadNextVarInt(packetData); @@ -905,7 +908,7 @@ namespace MinecraftClient.Protocol.Handlers handler.OnEntityProperties(EntityID, keys); } break; - case PacketIncomingType.EntityMetadata: + case PacketTypesIn.EntityMetadata: if (handler.GetEntityHandlingEnabled()) { int EntityID = dataTypes.ReadNextVarInt(packetData); @@ -916,12 +919,12 @@ namespace MinecraftClient.Protocol.Handlers handler.OnEntityMetadata(EntityID, metadata); } break; - case PacketIncomingType.TimeUpdate: + case PacketTypesIn.TimeUpdate: long WorldAge = dataTypes.ReadNextLong(packetData); long TimeOfday = dataTypes.ReadNextLong(packetData); handler.OnTimeUpdate(WorldAge, TimeOfday); break; - case PacketIncomingType.EntityTeleport: + case PacketTypesIn.EntityTeleport: if (handler.GetEntityHandlingEnabled()) { int EntityID = dataTypes.ReadNextVarInt(packetData); @@ -934,7 +937,7 @@ namespace MinecraftClient.Protocol.Handlers handler.OnEntityTeleport(EntityID, X, Y, Z, OnGround); } break; - case PacketIncomingType.UpdateHealth: + case PacketTypesIn.UpdateHealth: float health = dataTypes.ReadNextFloat(packetData); int food; if (protocolversion >= MC18Version) @@ -944,24 +947,24 @@ namespace MinecraftClient.Protocol.Handlers dataTypes.ReadNextFloat(packetData); // Food Saturation handler.OnUpdateHealth(health, food); break; - case PacketIncomingType.SetExperience: + case PacketTypesIn.SetExperience: float experiencebar = dataTypes.ReadNextFloat(packetData); int level = dataTypes.ReadNextVarInt(packetData); int totalexperience = dataTypes.ReadNextVarInt(packetData); handler.OnSetExperience(experiencebar, level, totalexperience); break; - case PacketIncomingType.Explosion: + case PacketTypesIn.Explosion: Location explosionLocation = new Location(dataTypes.ReadNextFloat(packetData), dataTypes.ReadNextFloat(packetData), dataTypes.ReadNextFloat(packetData)); float explosionStrength = dataTypes.ReadNextFloat(packetData); int explosionBlockCount = dataTypes.ReadNextInt(packetData); // Ignoring additional fields (records, pushback) handler.OnExplosion(explosionLocation, explosionStrength, explosionBlockCount); break; - case PacketIncomingType.HeldItemChange: + case PacketTypesIn.HeldItemChange: byte slot = dataTypes.ReadNextByte(packetData); handler.OnHeldItemChange(slot); break; - case PacketIncomingType.ScoreboardObjective: + case PacketTypesIn.ScoreboardObjective: string objectivename = dataTypes.ReadNextString(packetData); byte mode = dataTypes.ReadNextByte(packetData); string objectivevalue = String.Empty; @@ -973,7 +976,7 @@ namespace MinecraftClient.Protocol.Handlers } handler.OnScoreboardObjective(objectivename, mode, objectivevalue, type2); break; - case PacketIncomingType.UpdateScore: + case PacketTypesIn.UpdateScore: string entityname = dataTypes.ReadNextString(packetData); byte action3 = dataTypes.ReadNextByte(packetData); string objectivename2 = null; @@ -995,7 +998,7 @@ namespace MinecraftClient.Protocol.Handlers throw; //Thread abort or Connection lost rather than invalid data throw new System.IO.InvalidDataException( String.Format("Failed to process incoming packet of type {0}. (PacketID: {1}, Protocol: {2}, LoginPhase: {3}, InnerException: {4}).", - Protocol18PacketTypes.GetPacketIncomingType(packetID, protocolversion), + packetPalette.GetIncommingTypeById(packetID), packetID, protocolversion, login_phase, @@ -1035,9 +1038,9 @@ namespace MinecraftClient.Protocol.Handlers /// /// packet type /// packet Data - private void SendPacket(PacketOutgoingType packet, IEnumerable packetData) + private void SendPacket(PacketTypesOut packet, IEnumerable packetData) { - SendPacket(Protocol18PacketTypes.GetPacketOutgoingID(packet, protocolversion), packetData); + SendPacket(packetPalette.GetOutgoingIdByType(packet), packetData); } /// @@ -1232,7 +1235,7 @@ namespace MinecraftClient.Protocol.Handlers autocomplete_received = false; autocomplete_result.Clear(); autocomplete_result.Add(BehindCursor); - SendPacket(PacketOutgoingType.TabComplete, tabcomplete_packet); + SendPacket(PacketTypesOut.TabComplete, tabcomplete_packet); int wait_left = 50; //do not wait more than 5 seconds (50 * 100 ms) Thread t1 = new Thread(new ThreadStart(delegate @@ -1338,7 +1341,7 @@ namespace MinecraftClient.Protocol.Handlers try { byte[] message_packet = dataTypes.GetString(message); - SendPacket(PacketOutgoingType.ChatMessage, message_packet); + SendPacket(PacketTypesOut.ChatMessage, message_packet); return true; } catch (SocketException) { return false; } @@ -1354,7 +1357,7 @@ namespace MinecraftClient.Protocol.Handlers fields.AddRange(dataTypes.GetVarInt(PlayerEntityID)); fields.AddRange(dataTypes.GetVarInt(ActionID)); fields.AddRange(dataTypes.GetVarInt(0)); - SendPacket(PacketOutgoingType.EntityAction, fields); + SendPacket(PacketTypesOut.EntityAction, fields); return true; } catch (SocketException) { return false; } @@ -1370,7 +1373,7 @@ namespace MinecraftClient.Protocol.Handlers { try { - SendPacket(PacketOutgoingType.ClientStatus, new byte[] { 0 }); + SendPacket(PacketTypesOut.ClientStatus, new byte[] { 0 }); return true; } catch (SocketException) { return false; } @@ -1429,7 +1432,7 @@ namespace MinecraftClient.Protocol.Handlers else fields.Add(skinParts); if (protocolversion >= MC19Version) fields.AddRange(dataTypes.GetVarInt(mainHand)); - SendPacket(PacketOutgoingType.ClientSettings, fields); + SendPacket(PacketTypesOut.ClientSettings, fields); } catch (SocketException) { } catch (System.IO.IOException) { return false; } @@ -1450,12 +1453,12 @@ namespace MinecraftClient.Protocol.Handlers if (handler.GetTerrainEnabled()) { byte[] yawpitch = new byte[0]; - PacketOutgoingType packetType = PacketOutgoingType.PlayerPosition; + PacketTypesOut packetType = PacketTypesOut.PlayerPosition; if (yaw.HasValue && pitch.HasValue) { yawpitch = dataTypes.ConcatBytes(dataTypes.GetFloat(yaw.Value), dataTypes.GetFloat(pitch.Value)); - packetType = PacketOutgoingType.PlayerPositionAndLook; + packetType = PacketTypesOut.PlayerPositionAndRotation; } try @@ -1494,11 +1497,11 @@ namespace MinecraftClient.Protocol.Handlers byte[] length = BitConverter.GetBytes((short)data.Length); Array.Reverse(length); - SendPacket(PacketOutgoingType.PluginMessage, dataTypes.ConcatBytes(dataTypes.GetString(channel), length, data)); + SendPacket(PacketTypesOut.PluginMessage, dataTypes.ConcatBytes(dataTypes.GetString(channel), length, data)); } else { - SendPacket(PacketOutgoingType.PluginMessage, dataTypes.ConcatBytes(dataTypes.GetString(channel), data)); + SendPacket(PacketTypesOut.PluginMessage, dataTypes.ConcatBytes(dataTypes.GetString(channel), data)); } return true; @@ -1547,7 +1550,7 @@ namespace MinecraftClient.Protocol.Handlers if (protocolversion >= MC116Version) fields.AddRange(dataTypes.GetBool(false)); - SendPacket(PacketOutgoingType.InteractEntity, fields); + SendPacket(PacketTypesOut.InteractEntity, fields); return true; } catch (SocketException) { return false; } @@ -1567,7 +1570,7 @@ namespace MinecraftClient.Protocol.Handlers fields.AddRange(dataTypes.GetFloat(Y)); fields.AddRange(dataTypes.GetFloat(Z)); fields.AddRange(dataTypes.GetVarInt(hand)); - SendPacket(PacketOutgoingType.InteractEntity, fields); + SendPacket(PacketTypesOut.InteractEntity, fields); return true; } catch (SocketException) { return false; } @@ -1582,7 +1585,7 @@ namespace MinecraftClient.Protocol.Handlers fields.AddRange(dataTypes.GetVarInt(EntityID)); fields.AddRange(dataTypes.GetVarInt(type)); fields.AddRange(dataTypes.GetVarInt(hand)); - SendPacket(PacketOutgoingType.InteractEntity, fields); + SendPacket(PacketTypesOut.InteractEntity, fields); return true; } catch (SocketException) { return false; } @@ -1605,7 +1608,7 @@ namespace MinecraftClient.Protocol.Handlers { List packet = new List(); packet.AddRange(dataTypes.GetVarInt(hand)); - SendPacket(PacketOutgoingType.UseItem, packet); + SendPacket(PacketTypesOut.UseItem, packet); return true; } catch (SocketException) { return false; } @@ -1621,7 +1624,7 @@ namespace MinecraftClient.Protocol.Handlers packet.AddRange(dataTypes.GetVarInt(status)); packet.AddRange(dataTypes.GetLocation(location)); packet.AddRange(dataTypes.GetVarInt(dataTypes.GetBlockFace(face))); - SendPacket(PacketOutgoingType.PlayerDigging, packet); + SendPacket(PacketTypesOut.PlayerDigging, packet); return true; } catch (SocketException) { return false; } @@ -1643,7 +1646,7 @@ namespace MinecraftClient.Protocol.Handlers packet.AddRange(dataTypes.GetFloat(0.5f)); // cursorY packet.AddRange(dataTypes.GetFloat(0.5f)); // cursorZ packet.Add(0); // insideBlock = false; - SendPacket(PacketOutgoingType.PlayerBlockPlacement, packet); + SendPacket(PacketTypesOut.PlayerBlockPlacement, packet); return true; } catch (SocketException) { return false; } @@ -1657,7 +1660,7 @@ namespace MinecraftClient.Protocol.Handlers { List packet = new List(); packet.AddRange(dataTypes.GetShort(slot)); - SendPacket(PacketOutgoingType.HeldItemChange, packet); + SendPacket(PacketTypesOut.HeldItemChange, packet); return true; } catch (SocketException) { return false; } @@ -1712,7 +1715,7 @@ namespace MinecraftClient.Protocol.Handlers packet.AddRange(dataTypes.GetItemSlot(item, itemPalette)); - SendPacket(PacketOutgoingType.ClickWindow, packet); + SendPacket(PacketTypesOut.ClickWindow, packet); return true; } catch (SocketException) { return false; } @@ -1727,7 +1730,7 @@ namespace MinecraftClient.Protocol.Handlers List packet = new List(); packet.AddRange(dataTypes.GetShort((short)slot)); packet.AddRange(dataTypes.GetItemSlot(new Item(itemType, count, nbt), itemPalette)); - SendPacket(PacketOutgoingType.CreativeInventoryAction, packet); + SendPacket(PacketTypesOut.CreativeInventoryAction, packet); return true; } catch (SocketException) { return false; } @@ -1757,7 +1760,7 @@ namespace MinecraftClient.Protocol.Handlers packet.AddRange(dataTypes.GetVarInt(animation)); } - SendPacket(PacketOutgoingType.Animation, packet); + SendPacket(PacketTypesOut.Animation, packet); return true; } else @@ -1779,7 +1782,7 @@ namespace MinecraftClient.Protocol.Handlers if (window_actions.ContainsKey(windowId)) window_actions[windowId] = 0; } - SendPacket(PacketOutgoingType.CloseWindow, new[] { (byte)windowId }); + SendPacket(PacketTypesOut.CloseWindow, new[] { (byte)windowId }); return true; } catch (SocketException) { return false; } @@ -1806,7 +1809,7 @@ namespace MinecraftClient.Protocol.Handlers packet.AddRange(dataTypes.GetString(line2)); packet.AddRange(dataTypes.GetString(line3)); packet.AddRange(dataTypes.GetString(line4)); - SendPacket(PacketOutgoingType.UpdateSign, packet); + SendPacket(PacketTypesOut.UpdateSign, packet); return true; } catch (SocketException) { return false; } @@ -1825,7 +1828,7 @@ namespace MinecraftClient.Protocol.Handlers packet.AddRange(dataTypes.GetString(command)); packet.AddRange(dataTypes.GetVarInt((int)mode)); packet.Add((byte)flags); - SendPacket(PacketOutgoingType.UpdateSign, packet); + SendPacket(PacketTypesOut.UpdateSign, packet); return true; } catch (SocketException) { return false; } @@ -1843,7 +1846,7 @@ namespace MinecraftClient.Protocol.Handlers packet.Add(windowID); packet.AddRange(dataTypes.GetShort(actionID)); packet.Add(accepted ? (byte)1 : (byte)0); - SendPacket(PacketOutgoingType.WindowConfirmation, packet); + SendPacket(PacketTypesOut.WindowConfirmation, packet); return true; } catch (SocketException) { return false; } diff --git a/MinecraftClient/Protocol/Handlers/Protocol18PacketTypes.cs b/MinecraftClient/Protocol/Handlers/Protocol18PacketTypes.cs deleted file mode 100644 index f1b9f75c..00000000 --- a/MinecraftClient/Protocol/Handlers/Protocol18PacketTypes.cs +++ /dev/null @@ -1,722 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace MinecraftClient.Protocol.Handlers -{ - /// - /// Contains packet ID mappings for Protocol18 - /// - class Protocol18PacketTypes - { - /// - /// Get abstract numbering of the specified packet ID - /// - /// - /// When adding a new packet, see https://wiki.vg/Protocol_version_numbers - /// For each switch below, see the corresponding page (e.g. MC 1.7, then 1.9) and add the ID - /// By the way, also look for packet layout changes across versions and handle them in Protocol18.cs - /// Please add entries in the same order as they are displayed in PacketIncomingType.cs - /// - /// Packet ID - /// Protocol version - /// Abstract numbering - public static PacketIncomingType GetPacketIncomingType(int packetID, int protocol) - { - if (protocol <= Protocol18Handler.MC18Version) // MC 1.7 and 1.8 - { - switch (packetID) - { - case 0x00: return PacketIncomingType.KeepAlive; - case 0x01: return PacketIncomingType.JoinGame; - case 0x02: return PacketIncomingType.ChatMessage; - case 0x07: return PacketIncomingType.Respawn; - case 0x08: return PacketIncomingType.PlayerPositionAndLook; - case 0x21: return PacketIncomingType.ChunkData; - case 0x22: return PacketIncomingType.MultiBlockChange; - case 0x23: return PacketIncomingType.BlockChange; - case 0x26: return PacketIncomingType.MapChunkBulk; - // UnloadChunk does not exist prior to 1.9 - case 0x38: return PacketIncomingType.PlayerListUpdate; - case 0x3A: return PacketIncomingType.TabCompleteResult; - case 0x3F: return PacketIncomingType.PluginMessage; - case 0x40: return PacketIncomingType.KickPacket; - case 0x46: return PacketIncomingType.NetworkCompressionTreshold; - case 0x48: return PacketIncomingType.ResourcePackSend; - case 0x2E: return PacketIncomingType.CloseWindow; - case 0x2D: return PacketIncomingType.OpenWindow; - case 0x30: return PacketIncomingType.WindowItems; - case 0x32: return PacketIncomingType.WindowConfirmation; - case 0x2F: return PacketIncomingType.SetSlot; - case 0x0E: return PacketIncomingType.SpawnEntity; - case 0x0F: return PacketIncomingType.SpawnLivingEntity; - case 0x05: return PacketIncomingType.SpawnPlayer; - case 0x13: return PacketIncomingType.DestroyEntities; - // SetCooldown does not exist prior to 1.9 - case 0x15: return PacketIncomingType.EntityPosition; - case 0x17: return PacketIncomingType.EntityPositionAndRotation; - case 0x20: return PacketIncomingType.EntityProperties; - case 0x18: return PacketIncomingType.EntityTeleport; - case 0x12: return PacketIncomingType.EntityVelocity; - case 0x04: return PacketIncomingType.EntityEquipment; - case 0x1E: return PacketIncomingType.EntityEffect; - case 0x03: return PacketIncomingType.TimeUpdate; - case 0x06: return PacketIncomingType.UpdateHealth; - case 0x1F: return PacketIncomingType.SetExperience; - case 0x09: return PacketIncomingType.HeldItemChange; - case 0x27: return PacketIncomingType.Explosion; - case 0x34: return PacketIncomingType.MapData; - case 0x45: return PacketIncomingType.Title; - case 0x3B: return PacketIncomingType.ScoreboardObjective; - case 0x3C: return PacketIncomingType.UpdateScore; - } - } - else if (protocol <= Protocol18Handler.MC1112Version) // MC 1.9, 1.10 and 1.11 - { - switch (packetID) - { - case 0x1F: return PacketIncomingType.KeepAlive; - case 0x23: return PacketIncomingType.JoinGame; - case 0x0F: return PacketIncomingType.ChatMessage; - case 0x33: return PacketIncomingType.Respawn; - case 0x2E: return PacketIncomingType.PlayerPositionAndLook; - case 0x20: return PacketIncomingType.ChunkData; - case 0x10: return PacketIncomingType.MultiBlockChange; - case 0x0B: return PacketIncomingType.BlockChange; - // MapChunkBulk has been removed in 1.9 - case 0x1D: return PacketIncomingType.UnloadChunk; - case 0x2D: return PacketIncomingType.PlayerListUpdate; - case 0x0E: return PacketIncomingType.TabCompleteResult; - case 0x18: return PacketIncomingType.PluginMessage; - case 0x1A: return PacketIncomingType.KickPacket; - // NetworkCompressionTreshold has been removed in 1.9 - case 0x32: return PacketIncomingType.ResourcePackSend; - case 0x12: return PacketIncomingType.CloseWindow; - case 0x13: return PacketIncomingType.OpenWindow; - case 0x14: return PacketIncomingType.WindowItems; - case 0x11: return PacketIncomingType.WindowConfirmation; - case 0x16: return PacketIncomingType.SetSlot; - case 0x00: return PacketIncomingType.SpawnEntity; - case 0x03: return PacketIncomingType.SpawnLivingEntity; - case 0x05: return PacketIncomingType.SpawnPlayer; - case 0x30: return PacketIncomingType.DestroyEntities; - case 0x17: return PacketIncomingType.SetCooldown; - case 0x25: return PacketIncomingType.EntityPosition; - case 0x26: return PacketIncomingType.EntityPositionAndRotation; - case 0x4A: return PacketIncomingType.EntityProperties; - case 0x49: return PacketIncomingType.EntityTeleport; - case 0x3B: return PacketIncomingType.EntityVelocity; - case 0x3C: return PacketIncomingType.EntityEquipment; - case 0x4B: return PacketIncomingType.EntityEffect; - case 0x39: return PacketIncomingType.EntityMetadata; - case 0x44: return PacketIncomingType.TimeUpdate; - case 0x3E: return PacketIncomingType.UpdateHealth; - case 0x3D: return PacketIncomingType.SetExperience; - case 0x37: return PacketIncomingType.HeldItemChange; - case 0x1C: return PacketIncomingType.Explosion; - case 0x24: return PacketIncomingType.MapData; - case 0x45: return PacketIncomingType.Title; - case 0x3F: return PacketIncomingType.ScoreboardObjective; - case 0x42: return PacketIncomingType.UpdateScore; - } - } - else if (protocol <= Protocol18Handler.MC112Version) // MC 1.12.0 - { - switch (packetID) - { - case 0x1F: return PacketIncomingType.KeepAlive; - case 0x23: return PacketIncomingType.JoinGame; - case 0x0F: return PacketIncomingType.ChatMessage; - case 0x34: return PacketIncomingType.Respawn; - case 0x2E: return PacketIncomingType.PlayerPositionAndLook; - case 0x20: return PacketIncomingType.ChunkData; - case 0x10: return PacketIncomingType.MultiBlockChange; - case 0x0B: return PacketIncomingType.BlockChange; - // MapChunkBulk does not exist since 1.9 - case 0x1D: return PacketIncomingType.UnloadChunk; - case 0x2D: return PacketIncomingType.PlayerListUpdate; - case 0x0E: return PacketIncomingType.TabCompleteResult; - case 0x18: return PacketIncomingType.PluginMessage; - case 0x1A: return PacketIncomingType.KickPacket; - // NetworkCompressionTreshold does not exist since 1.9 - case 0x33: return PacketIncomingType.ResourcePackSend; - case 0x12: return PacketIncomingType.CloseWindow; - case 0x13: return PacketIncomingType.OpenWindow; - case 0x14: return PacketIncomingType.WindowItems; - case 0x11: return PacketIncomingType.WindowConfirmation; - case 0x16: return PacketIncomingType.SetSlot; - case 0x00: return PacketIncomingType.SpawnEntity; - case 0x03: return PacketIncomingType.SpawnLivingEntity; - case 0x05: return PacketIncomingType.SpawnPlayer; - case 0x31: return PacketIncomingType.DestroyEntities; - case 0x17: return PacketIncomingType.SetCooldown; - case 0x26: return PacketIncomingType.EntityPosition; - case 0x27: return PacketIncomingType.EntityPositionAndRotation; - case 0x4D: return PacketIncomingType.EntityProperties; - case 0x4B: return PacketIncomingType.EntityTeleport; - case 0x3D: return PacketIncomingType.EntityVelocity; - case 0x3E: return PacketIncomingType.EntityEquipment; - case 0x4E: return PacketIncomingType.EntityEffect; - case 0x3B: return PacketIncomingType.EntityMetadata; - case 0x46: return PacketIncomingType.TimeUpdate; - case 0x40: return PacketIncomingType.UpdateHealth; - case 0x3F: return PacketIncomingType.SetExperience; - case 0x39: return PacketIncomingType.HeldItemChange; - case 0x1C: return PacketIncomingType.Explosion; - case 0x24: return PacketIncomingType.MapData; - case 0x47: return PacketIncomingType.Title; - case 0x41: return PacketIncomingType.ScoreboardObjective; - case 0x44: return PacketIncomingType.UpdateScore; - } - } - else if (protocol <= Protocol18Handler.MC1122Version) // MC 1.12.2 - { - switch (packetID) - { - case 0x1F: return PacketIncomingType.KeepAlive; - case 0x23: return PacketIncomingType.JoinGame; - case 0x0F: return PacketIncomingType.ChatMessage; - case 0x35: return PacketIncomingType.Respawn; - case 0x2F: return PacketIncomingType.PlayerPositionAndLook; - case 0x20: return PacketIncomingType.ChunkData; - case 0x10: return PacketIncomingType.MultiBlockChange; - case 0x0B: return PacketIncomingType.BlockChange; - // MapChunkBulk does not exist since 1.9 - case 0x1D: return PacketIncomingType.UnloadChunk; - case 0x2E: return PacketIncomingType.PlayerListUpdate; - case 0x0E: return PacketIncomingType.TabCompleteResult; - case 0x18: return PacketIncomingType.PluginMessage; - case 0x1A: return PacketIncomingType.KickPacket; - // NetworkCompressionTreshold does not exist since 1.9 - case 0x34: return PacketIncomingType.ResourcePackSend; - case 0x12: return PacketIncomingType.CloseWindow; - case 0x13: return PacketIncomingType.OpenWindow; - case 0x14: return PacketIncomingType.WindowItems; - case 0x11: return PacketIncomingType.WindowConfirmation; - case 0x16: return PacketIncomingType.SetSlot; - case 0x00: return PacketIncomingType.SpawnEntity; - case 0x03: return PacketIncomingType.SpawnLivingEntity; - case 0x05: return PacketIncomingType.SpawnPlayer; - case 0x32: return PacketIncomingType.DestroyEntities; - case 0x17: return PacketIncomingType.SetCooldown; - case 0x26: return PacketIncomingType.EntityPosition; - case 0x27: return PacketIncomingType.EntityPositionAndRotation; - case 0x4E: return PacketIncomingType.EntityProperties; - case 0x4C: return PacketIncomingType.EntityTeleport; - case 0x3E: return PacketIncomingType.EntityVelocity; - case 0x3F: return PacketIncomingType.EntityEquipment; - case 0x4F: return PacketIncomingType.EntityEffect; - case 0x3C: return PacketIncomingType.EntityMetadata; - case 0x47: return PacketIncomingType.TimeUpdate; - case 0x41: return PacketIncomingType.UpdateHealth; - case 0x40: return PacketIncomingType.SetExperience; - case 0x3A: return PacketIncomingType.HeldItemChange; - case 0x1C: return PacketIncomingType.Explosion; - case 0x25: return PacketIncomingType.MapData; - case 0x48: return PacketIncomingType.Title; - case 0x42: return PacketIncomingType.ScoreboardObjective; - case 0x45: return PacketIncomingType.UpdateScore; - } - } - else if (protocol < Protocol18Handler.MC114Version) // MC 1.13 to 1.13.2 - { - switch (packetID) - { - case 0x21: return PacketIncomingType.KeepAlive; - case 0x25: return PacketIncomingType.JoinGame; - case 0x0E: return PacketIncomingType.ChatMessage; - case 0x38: return PacketIncomingType.Respawn; - case 0x32: return PacketIncomingType.PlayerPositionAndLook; - case 0x22: return PacketIncomingType.ChunkData; - case 0x0F: return PacketIncomingType.MultiBlockChange; - case 0x0B: return PacketIncomingType.BlockChange; - // MapChunkBulk does not exist since 1.9 - case 0x1F: return PacketIncomingType.UnloadChunk; - case 0x30: return PacketIncomingType.PlayerListUpdate; - case 0x10: return PacketIncomingType.TabCompleteResult; - case 0x19: return PacketIncomingType.PluginMessage; - case 0x1B: return PacketIncomingType.KickPacket; - // NetworkCompressionTreshold does not exist since 1.9 - case 0x37: return PacketIncomingType.ResourcePackSend; - case 0x13: return PacketIncomingType.CloseWindow; - case 0x14: return PacketIncomingType.OpenWindow; - case 0x15: return PacketIncomingType.WindowItems; - case 0x12: return PacketIncomingType.WindowConfirmation; - case 0x17: return PacketIncomingType.SetSlot; - case 0x00: return PacketIncomingType.SpawnEntity; - case 0x03: return PacketIncomingType.SpawnLivingEntity; - case 0x05: return PacketIncomingType.SpawnPlayer; - case 0x35: return PacketIncomingType.DestroyEntities; - case 0x18: return PacketIncomingType.SetCooldown; - case 0x28: return PacketIncomingType.EntityPosition; - case 0x29: return PacketIncomingType.EntityPositionAndRotation; - case 0x52: return PacketIncomingType.EntityProperties; - case 0x50: return PacketIncomingType.EntityTeleport; - case 0x41: return PacketIncomingType.EntityVelocity; - case 0x42: return PacketIncomingType.EntityEquipment; - case 0x53: return PacketIncomingType.EntityEffect; - case 0x3F: return PacketIncomingType.EntityMetadata; - case 0x4A: return PacketIncomingType.TimeUpdate; - case 0x44: return PacketIncomingType.UpdateHealth; - case 0x43: return PacketIncomingType.SetExperience; - case 0x3D: return PacketIncomingType.HeldItemChange; - case 0x1E: return PacketIncomingType.Explosion; - case 0x26: return PacketIncomingType.MapData; - case 0x4B: return PacketIncomingType.Title; - case 0x45: return PacketIncomingType.ScoreboardObjective; - case 0x48: return PacketIncomingType.UpdateScore; - } - } - else if (protocol < Protocol18Handler.MC115Version) // MC 1.14 to 1.14.4 - { - switch (packetID) - { - case 0x20: return PacketIncomingType.KeepAlive; - case 0x25: return PacketIncomingType.JoinGame; - case 0x0E: return PacketIncomingType.ChatMessage; - case 0x3A: return PacketIncomingType.Respawn; - case 0x35: return PacketIncomingType.PlayerPositionAndLook; - case 0x21: return PacketIncomingType.ChunkData; - case 0x0F: return PacketIncomingType.MultiBlockChange; - case 0x0B: return PacketIncomingType.BlockChange; - // MapChunkBulk does not exist since 1.9 - case 0x1D: return PacketIncomingType.UnloadChunk; - case 0x33: return PacketIncomingType.PlayerListUpdate; - case 0x10: return PacketIncomingType.TabCompleteResult; - case 0x18: return PacketIncomingType.PluginMessage; - case 0x1A: return PacketIncomingType.KickPacket; - // NetworkCompressionTreshold does not exist since 1.9 - case 0x39: return PacketIncomingType.ResourcePackSend; - case 0x13: return PacketIncomingType.CloseWindow; - case 0x2E: return PacketIncomingType.OpenWindow; - case 0x14: return PacketIncomingType.WindowItems; - case 0x12: return PacketIncomingType.WindowConfirmation; - case 0x16: return PacketIncomingType.SetSlot; - case 0x00: return PacketIncomingType.SpawnEntity; - case 0x03: return PacketIncomingType.SpawnLivingEntity; - case 0x05: return PacketIncomingType.SpawnPlayer; - case 0x37: return PacketIncomingType.DestroyEntities; - case 0x17: return PacketIncomingType.SetCooldown; - case 0x28: return PacketIncomingType.EntityPosition; - case 0x29: return PacketIncomingType.EntityPositionAndRotation; - case 0x58: return PacketIncomingType.EntityProperties; - case 0x56: return PacketIncomingType.EntityTeleport; - case 0x41: return PacketIncomingType.EntityVelocity; - case 0x46: return PacketIncomingType.EntityEquipment; - case 0x59: return PacketIncomingType.EntityEffect; - case 0x43: return PacketIncomingType.EntityMetadata; - case 0x4E: return PacketIncomingType.TimeUpdate; - case 0x48: return PacketIncomingType.UpdateHealth; - case 0x47: return PacketIncomingType.SetExperience; - case 0x3F: return PacketIncomingType.HeldItemChange; - case 0x1C: return PacketIncomingType.Explosion; - case 0x26: return PacketIncomingType.MapData; - case 0x4F: return PacketIncomingType.Title; - case 0x49: return PacketIncomingType.ScoreboardObjective; - case 0x4C: return PacketIncomingType.UpdateScore; - } - } - else if (protocol <= Protocol18Handler.MC1152Version) // MC 1.15 to 1.15.2 - { - switch (packetID) - { - case 0x21: return PacketIncomingType.KeepAlive; - case 0x26: return PacketIncomingType.JoinGame; - case 0x0F: return PacketIncomingType.ChatMessage; - case 0x3B: return PacketIncomingType.Respawn; - case 0x36: return PacketIncomingType.PlayerPositionAndLook; - case 0x22: return PacketIncomingType.ChunkData; - case 0x10: return PacketIncomingType.MultiBlockChange; - case 0x0C: return PacketIncomingType.BlockChange; - // MapChunkBulk does not exist since 1.9 - case 0x1E: return PacketIncomingType.UnloadChunk; - case 0x34: return PacketIncomingType.PlayerListUpdate; - case 0x11: return PacketIncomingType.TabCompleteResult; - case 0x19: return PacketIncomingType.PluginMessage; - case 0x1B: return PacketIncomingType.KickPacket; - // NetworkCompressionTreshold does not exist since 1.9 - case 0x3A: return PacketIncomingType.ResourcePackSend; - case 0x14: return PacketIncomingType.CloseWindow; - case 0x2F: return PacketIncomingType.OpenWindow; - case 0x15: return PacketIncomingType.WindowItems; - case 0x13: return PacketIncomingType.WindowConfirmation; - case 0x17: return PacketIncomingType.SetSlot; - case 0x00: return PacketIncomingType.SpawnEntity; - case 0x03: return PacketIncomingType.SpawnLivingEntity; - case 0x05: return PacketIncomingType.SpawnPlayer; - case 0x38: return PacketIncomingType.DestroyEntities; - case 0x18: return PacketIncomingType.SetCooldown; - case 0x29: return PacketIncomingType.EntityPosition; - case 0x2A: return PacketIncomingType.EntityPositionAndRotation; - case 0x59: return PacketIncomingType.EntityProperties; - case 0x57: return PacketIncomingType.EntityTeleport; - case 0x46: return PacketIncomingType.EntityVelocity; - case 0x47: return PacketIncomingType.EntityEquipment; - case 0x5A: return PacketIncomingType.EntityEffect; - case 0x44: return PacketIncomingType.EntityMetadata; - case 0x4F: return PacketIncomingType.TimeUpdate; - case 0x49: return PacketIncomingType.UpdateHealth; - case 0x48: return PacketIncomingType.SetExperience; - case 0x40: return PacketIncomingType.HeldItemChange; - case 0x1D: return PacketIncomingType.Explosion; - case 0x27: return PacketIncomingType.MapData; - case 0x50: return PacketIncomingType.Title; - case 0x4A: return PacketIncomingType.ScoreboardObjective; - case 0x4D: return PacketIncomingType.UpdateScore; - - } - } - else if (protocol <= Protocol18Handler.MC1161Version) - { - switch (packetID) // MC 1.16 and 1.16.1 - { - case 0x20: return PacketIncomingType.KeepAlive; - case 0x25: return PacketIncomingType.JoinGame; - case 0x0E: return PacketIncomingType.ChatMessage; - case 0x3A: return PacketIncomingType.Respawn; - case 0x35: return PacketIncomingType.PlayerPositionAndLook; - case 0x21: return PacketIncomingType.ChunkData; - case 0x0F: return PacketIncomingType.MultiBlockChange; - case 0x0B: return PacketIncomingType.BlockChange; - // MapChunkBulk does not exist since 1.9 - case 0x1D: return PacketIncomingType.UnloadChunk; - case 0x33: return PacketIncomingType.PlayerListUpdate; - case 0x10: return PacketIncomingType.TabCompleteResult; - case 0x18: return PacketIncomingType.PluginMessage; - case 0x1A: return PacketIncomingType.KickPacket; - // NetworkCompressionTreshold does not exist since 1.9 - case 0x39: return PacketIncomingType.ResourcePackSend; - case 0x13: return PacketIncomingType.CloseWindow; - case 0x2E: return PacketIncomingType.OpenWindow; - case 0x14: return PacketIncomingType.WindowItems; - case 0x12: return PacketIncomingType.WindowConfirmation; - case 0x16: return PacketIncomingType.SetSlot; - case 0x00: return PacketIncomingType.SpawnEntity; - case 0x02: return PacketIncomingType.SpawnLivingEntity; - case 0x04: return PacketIncomingType.SpawnPlayer; - case 0x37: return PacketIncomingType.DestroyEntities; - case 0x17: return PacketIncomingType.SetCooldown; - case 0x28: return PacketIncomingType.EntityPosition; - case 0x29: return PacketIncomingType.EntityPositionAndRotation; - case 0x58: return PacketIncomingType.EntityProperties; - case 0x56: return PacketIncomingType.EntityTeleport; - case 0x46: return PacketIncomingType.EntityVelocity; - case 0x47: return PacketIncomingType.EntityEquipment; - case 0x59: return PacketIncomingType.EntityEffect; - case 0x44: return PacketIncomingType.EntityMetadata; - case 0x4E: return PacketIncomingType.TimeUpdate; - case 0x49: return PacketIncomingType.UpdateHealth; - case 0x48: return PacketIncomingType.SetExperience; - case 0x3F: return PacketIncomingType.HeldItemChange; - case 0x1C: return PacketIncomingType.Explosion; - case 0x26: return PacketIncomingType.MapData; - case 0x4F: return PacketIncomingType.Title; - case 0x4A: return PacketIncomingType.ScoreboardObjective; - case 0x4D: return PacketIncomingType.UpdateScore; - } - } - else - { - switch (packetID) // MC 1.16.2 - { - case 0x1F: return PacketIncomingType.KeepAlive; - case 0x24: return PacketIncomingType.JoinGame; - case 0x0E: return PacketIncomingType.ChatMessage; - case 0x39: return PacketIncomingType.Respawn; - case 0x35: return PacketIncomingType.PlayerPositionAndLook; - case 0x20: return PacketIncomingType.ChunkData; - case 0x3B: return PacketIncomingType.MultiBlockChange; - case 0x0B: return PacketIncomingType.BlockChange; - // MapChunkBulk does not exist since 1.9 - case 0x1C: return PacketIncomingType.UnloadChunk; - case 0x32: return PacketIncomingType.PlayerListUpdate; - case 0x0F: return PacketIncomingType.TabCompleteResult; - case 0x17: return PacketIncomingType.PluginMessage; - case 0x19: return PacketIncomingType.KickPacket; - // NetworkCompressionTreshold does not exist since 1.9 - case 0x38: return PacketIncomingType.ResourcePackSend; - case 0x12: return PacketIncomingType.CloseWindow; - case 0x2D: return PacketIncomingType.OpenWindow; - case 0x13: return PacketIncomingType.WindowItems; - case 0x11: return PacketIncomingType.WindowConfirmation; - case 0x15: return PacketIncomingType.SetSlot; - case 0x00: return PacketIncomingType.SpawnEntity; - case 0x02: return PacketIncomingType.SpawnLivingEntity; - case 0x04: return PacketIncomingType.SpawnPlayer; - case 0x36: return PacketIncomingType.DestroyEntities; - case 0x16: return PacketIncomingType.SetCooldown; - case 0x27: return PacketIncomingType.EntityPosition; - case 0x28: return PacketIncomingType.EntityPositionAndRotation; - case 0x58: return PacketIncomingType.EntityProperties; - case 0x56: return PacketIncomingType.EntityTeleport; - case 0x46: return PacketIncomingType.EntityVelocity; - case 0x47: return PacketIncomingType.EntityEquipment; - case 0x59: return PacketIncomingType.EntityEffect; - case 0x44: return PacketIncomingType.EntityMetadata; - case 0x4E: return PacketIncomingType.TimeUpdate; - case 0x49: return PacketIncomingType.UpdateHealth; - case 0x48: return PacketIncomingType.SetExperience; - case 0x3F: return PacketIncomingType.HeldItemChange; - case 0x1B: return PacketIncomingType.Explosion; - case 0x25: return PacketIncomingType.MapData; - case 0x4F: return PacketIncomingType.Title; - case 0x4A: return PacketIncomingType.ScoreboardObjective; - case 0x4D: return PacketIncomingType.UpdateScore; - } - } - - return PacketIncomingType.UnknownPacket; - } - - /// - /// Get packet ID of the specified outgoing packet - /// - /// - /// When adding a new packet, see https://wiki.vg/Protocol_version_numbers - /// For each switch below, see the corresponding page (e.g. MC 1.7, then 1.9) and add the ID - /// By the way, also look for packet layout changes across versions and handle them in Protocol18.cs - /// Please add entries in the same order as they are displayed in PacketOutgoingType.cs - /// - /// Abstract packet numbering - /// Protocol version - /// Packet ID - public static int GetPacketOutgoingID(PacketOutgoingType packet, int protocol) - { - if (protocol <= Protocol18Handler.MC18Version) // MC 1.7 and 1.8 - { - switch (packet) - { - case PacketOutgoingType.KeepAlive: return 0x00; - case PacketOutgoingType.ResourcePackStatus: return 0x19; - case PacketOutgoingType.ChatMessage: return 0x01; - case PacketOutgoingType.ClientStatus: return 0x16; - case PacketOutgoingType.ClientSettings: return 0x15; - case PacketOutgoingType.PluginMessage: return 0x17; - case PacketOutgoingType.TabComplete: return 0x14; - case PacketOutgoingType.EntityAction: return 0x0B; - case PacketOutgoingType.PlayerPosition: return 0x04; - case PacketOutgoingType.PlayerPositionAndLook: return 0x06; - case PacketOutgoingType.TeleportConfirm: throw new InvalidOperationException("Teleport confirm is not supported in protocol " + protocol); - case PacketOutgoingType.HeldItemChange: return 0x17; - case PacketOutgoingType.InteractEntity: return 0x02; - case PacketOutgoingType.UseItem: throw new InvalidOperationException("Use item is not supported in protocol " + protocol); - case PacketOutgoingType.ClickWindow: return 0x0E; - case PacketOutgoingType.CloseWindow: return 0x0D; - case PacketOutgoingType.WindowConfirmation: return 0x0f; - case PacketOutgoingType.PlayerBlockPlacement: return 0x08; - case PacketOutgoingType.CreativeInventoryAction: return 0x10; - case PacketOutgoingType.Animation: return 0x0A; - case PacketOutgoingType.PlayerDigging: return 0x07; - case PacketOutgoingType.UpdateSign: return 0x12; - case PacketOutgoingType.UpdateCommandBlock: return 0x20; - } - } - else if (protocol <= Protocol18Handler.MC1112Version) // MC 1.9, 1,10 and 1.11 - { - switch (packet) - { - case PacketOutgoingType.KeepAlive: return 0x0B; - case PacketOutgoingType.ResourcePackStatus: return 0x16; - case PacketOutgoingType.ChatMessage: return 0x02; - case PacketOutgoingType.ClientStatus: return 0x03; - case PacketOutgoingType.ClientSettings: return 0x04; - case PacketOutgoingType.PluginMessage: return 0x09; - case PacketOutgoingType.TabComplete: return 0x01; - case PacketOutgoingType.EntityAction: return 0x14; - case PacketOutgoingType.PlayerPosition: return 0x0C; - case PacketOutgoingType.PlayerPositionAndLook: return 0x0D; - case PacketOutgoingType.TeleportConfirm: return 0x00; - case PacketOutgoingType.HeldItemChange: return 0x17; - case PacketOutgoingType.InteractEntity: return 0x0A; - case PacketOutgoingType.UseItem: return 0x1D; - case PacketOutgoingType.ClickWindow: return 0x07; - case PacketOutgoingType.CloseWindow: return 0x08; - case PacketOutgoingType.WindowConfirmation: return 0x05; - case PacketOutgoingType.PlayerBlockPlacement: return 0x1C; - case PacketOutgoingType.CreativeInventoryAction: return 0x18; - case PacketOutgoingType.Animation: return 0x1A; - case PacketOutgoingType.PlayerDigging: return 0x13; - case PacketOutgoingType.UpdateSign: return 0x19; - case PacketOutgoingType.UpdateCommandBlock: return 0x20; - } - } - else if (protocol <= Protocol18Handler.MC112Version) // MC 1.12 - { - switch (packet) - { - case PacketOutgoingType.KeepAlive: return 0x0C; - case PacketOutgoingType.ResourcePackStatus: return 0x18; - case PacketOutgoingType.ChatMessage: return 0x03; - case PacketOutgoingType.ClientStatus: return 0x04; - case PacketOutgoingType.ClientSettings: return 0x05; - case PacketOutgoingType.PluginMessage: return 0x0A; - case PacketOutgoingType.TabComplete: return 0x02; - case PacketOutgoingType.EntityAction: return 0x15; - case PacketOutgoingType.PlayerPosition: return 0x0E; - case PacketOutgoingType.PlayerPositionAndLook: return 0x0F; - case PacketOutgoingType.TeleportConfirm: return 0x00; - case PacketOutgoingType.HeldItemChange: return 0x1A; - case PacketOutgoingType.InteractEntity: return 0x0B; - case PacketOutgoingType.UseItem: return 0x20; - case PacketOutgoingType.ClickWindow: return 0x07; - case PacketOutgoingType.CloseWindow: return 0x08; - case PacketOutgoingType.WindowConfirmation: return 0x06; - case PacketOutgoingType.PlayerBlockPlacement: return 0x1F; - case PacketOutgoingType.CreativeInventoryAction: return 0x1B; - case PacketOutgoingType.Animation: return 0x1D; - case PacketOutgoingType.PlayerDigging: return 0x14; - case PacketOutgoingType.UpdateSign: return 0x1C; - case PacketOutgoingType.UpdateCommandBlock: return 0x20; - } - } - else if (protocol <= Protocol18Handler.MC1122Version) // 1.12.2 - { - switch (packet) - { - case PacketOutgoingType.KeepAlive: return 0x0B; - case PacketOutgoingType.ResourcePackStatus: return 0x18; - case PacketOutgoingType.ChatMessage: return 0x02; - case PacketOutgoingType.ClientStatus: return 0x03; - case PacketOutgoingType.ClientSettings: return 0x04; - case PacketOutgoingType.PluginMessage: return 0x09; - case PacketOutgoingType.TabComplete: return 0x01; - case PacketOutgoingType.EntityAction: return 0x15; - case PacketOutgoingType.PlayerPosition: return 0x0D; - case PacketOutgoingType.PlayerPositionAndLook: return 0x0E; - case PacketOutgoingType.TeleportConfirm: return 0x00; - case PacketOutgoingType.HeldItemChange: return 0x1F; - case PacketOutgoingType.InteractEntity: return 0x0A; - case PacketOutgoingType.UseItem: return 0x20; - case PacketOutgoingType.ClickWindow: return 0x07; - case PacketOutgoingType.CloseWindow: return 0x08; - case PacketOutgoingType.WindowConfirmation: return 0x05; - case PacketOutgoingType.PlayerBlockPlacement: return 0x1F; - case PacketOutgoingType.CreativeInventoryAction: return 0x1B; - case PacketOutgoingType.Animation: return 0x1D; - case PacketOutgoingType.PlayerDigging: return 0x14; - case PacketOutgoingType.UpdateSign: return 0x1C; - case PacketOutgoingType.UpdateCommandBlock: return 0x20; - } - } - else if (protocol < Protocol18Handler.MC114Version) // MC 1.13 to 1.13.2 - { - switch (packet) - { - case PacketOutgoingType.KeepAlive: return 0x0E; - case PacketOutgoingType.ResourcePackStatus: return 0x1D; - case PacketOutgoingType.ChatMessage: return 0x02; - case PacketOutgoingType.ClientStatus: return 0x03; - case PacketOutgoingType.ClientSettings: return 0x04; - case PacketOutgoingType.PluginMessage: return 0x0A; - case PacketOutgoingType.TabComplete: return 0x05; - case PacketOutgoingType.EntityAction: return 0x19; - case PacketOutgoingType.PlayerPosition: return 0x10; - case PacketOutgoingType.PlayerPositionAndLook: return 0x11; - case PacketOutgoingType.TeleportConfirm: return 0x00; - case PacketOutgoingType.HeldItemChange: return 0x21; - case PacketOutgoingType.InteractEntity: return 0x0D; - case PacketOutgoingType.UseItem: return 0x2A; - case PacketOutgoingType.ClickWindow: return 0x08; - case PacketOutgoingType.CloseWindow: return 0x09; - case PacketOutgoingType.WindowConfirmation: return 0x06; - case PacketOutgoingType.PlayerBlockPlacement: return 0x29; - case PacketOutgoingType.CreativeInventoryAction: return 0x24; - case PacketOutgoingType.Animation: return 0x27; - case PacketOutgoingType.PlayerDigging: return 0x18; - case PacketOutgoingType.UpdateSign: return 0x26; - case PacketOutgoingType.UpdateCommandBlock: return 0x22; - } - } - else if (protocol <= Protocol18Handler.MC1152Version) //MC 1.14 to 1.15.2 - { - switch (packet) - { - case PacketOutgoingType.KeepAlive: return 0x0F; - case PacketOutgoingType.ResourcePackStatus: return 0x1F; - case PacketOutgoingType.ChatMessage: return 0x03; - case PacketOutgoingType.ClientStatus: return 0x04; - case PacketOutgoingType.ClientSettings: return 0x05; - case PacketOutgoingType.PluginMessage: return 0x0B; - case PacketOutgoingType.TabComplete: return 0x06; - case PacketOutgoingType.EntityAction: return 0x1B; - case PacketOutgoingType.PlayerPosition: return 0x11; - case PacketOutgoingType.PlayerPositionAndLook: return 0x12; - case PacketOutgoingType.TeleportConfirm: return 0x00; - case PacketOutgoingType.HeldItemChange: return 0x23; - case PacketOutgoingType.InteractEntity: return 0x0E; - case PacketOutgoingType.UseItem: return 0x2D; - case PacketOutgoingType.ClickWindow: return 0x09; - case PacketOutgoingType.CloseWindow: return 0x0A; - case PacketOutgoingType.WindowConfirmation: return 0x07; - case PacketOutgoingType.PlayerBlockPlacement: return 0x2C; - case PacketOutgoingType.CreativeInventoryAction: return 0x26; - case PacketOutgoingType.Animation: return 0x2A; - case PacketOutgoingType.PlayerDigging: return 0x1A; - case PacketOutgoingType.UpdateSign: return 0x29; - case PacketOutgoingType.UpdateCommandBlock: return 0x24; - } - } - else if (protocol <= Protocol18Handler.MC1161Version) // MC 1.16 and 1.16.1 - { - switch (packet) - { - case PacketOutgoingType.KeepAlive: return 0x10; - case PacketOutgoingType.ResourcePackStatus: return 0x20; - case PacketOutgoingType.ChatMessage: return 0x03; - case PacketOutgoingType.ClientStatus: return 0x04; - case PacketOutgoingType.ClientSettings: return 0x05; - case PacketOutgoingType.PluginMessage: return 0x0B; - case PacketOutgoingType.TabComplete: return 0x06; - case PacketOutgoingType.EntityAction: return 0x1C; - case PacketOutgoingType.PlayerPosition: return 0x12; - case PacketOutgoingType.PlayerPositionAndLook: return 0x13; - case PacketOutgoingType.TeleportConfirm: return 0x00; - case PacketOutgoingType.HeldItemChange: return 0x24; - case PacketOutgoingType.InteractEntity: return 0x0E; - case PacketOutgoingType.UseItem: return 0x2E; - case PacketOutgoingType.ClickWindow: return 0x09; - case PacketOutgoingType.CloseWindow: return 0x0A; - case PacketOutgoingType.WindowConfirmation: return 0x07; - case PacketOutgoingType.PlayerBlockPlacement: return 0x2D; - case PacketOutgoingType.CreativeInventoryAction: return 0x27; - case PacketOutgoingType.Animation: return 0x2B; - case PacketOutgoingType.PlayerDigging: return 0x1B; - case PacketOutgoingType.UpdateSign: return 0x2A; - case PacketOutgoingType.UpdateCommandBlock: return 0x25; - } - } - else - { - switch (packet) - { - case PacketOutgoingType.KeepAlive: return 0x10; - case PacketOutgoingType.ResourcePackStatus: return 0x21; - case PacketOutgoingType.ChatMessage: return 0x03; - case PacketOutgoingType.ClientStatus: return 0x04; - case PacketOutgoingType.ClientSettings: return 0x05; - case PacketOutgoingType.PluginMessage: return 0x0B; - case PacketOutgoingType.TabComplete: return 0x06; - case PacketOutgoingType.EntityAction: return 0x1C; - case PacketOutgoingType.PlayerPosition: return 0x12; - case PacketOutgoingType.PlayerPositionAndLook: return 0x13; - case PacketOutgoingType.TeleportConfirm: return 0x00; - case PacketOutgoingType.HeldItemChange: return 0x25; - case PacketOutgoingType.InteractEntity: return 0x0E; - case PacketOutgoingType.UseItem: return 0x2F; - case PacketOutgoingType.ClickWindow: return 0x09; - case PacketOutgoingType.CloseWindow: return 0x0A; - case PacketOutgoingType.WindowConfirmation: return 0x07; - case PacketOutgoingType.PlayerBlockPlacement: return 0x2E; - case PacketOutgoingType.CreativeInventoryAction: return 0x28; - case PacketOutgoingType.Animation: return 0x2C; - case PacketOutgoingType.PlayerDigging: return 0x1B; - case PacketOutgoingType.UpdateSign: return 0x2B; - case PacketOutgoingType.UpdateCommandBlock: return 0x26; - } - } - - throw new System.ComponentModel.InvalidEnumArgumentException("Unknown PacketOutgoingType (protocol=" + protocol + ")", (int)packet, typeof(PacketOutgoingType)); - } - } -}