From 86e5fe54eac732ce76d864a901d7a26319da0bbf Mon Sep 17 00:00:00 2001 From: ORelio Date: Tue, 26 May 2020 11:29:38 +0200 Subject: [PATCH] Fix file encoding --- .../Handlers/Protocol18PacketTypes.cs | 854 +++++++++--------- 1 file changed, 427 insertions(+), 427 deletions(-) diff --git a/MinecraftClient/Protocol/Handlers/Protocol18PacketTypes.cs b/MinecraftClient/Protocol/Handlers/Protocol18PacketTypes.cs index 46fe90f4..2d54afb0 100644 --- a/MinecraftClient/Protocol/Handlers/Protocol18PacketTypes.cs +++ b/MinecraftClient/Protocol/Handlers/Protocol18PacketTypes.cs @@ -1,428 +1,428 @@ -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 - /// - /// 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; - case 0x30: return PacketIncomingType.WindowItems; - //UnloadChunk does not exists 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 0x2D: return PacketIncomingType.OpenWindow; - case 0x2E: return PacketIncomingType.CloseWindow; - case 0x2F: return PacketIncomingType.SetSlot; - - // Set Cooldown does not exists - case 0x03: return PacketIncomingType.TimeUpdate; - // Entity handling - case 0x0E: return PacketIncomingType.SpawnEntity; - case 0x0F: return PacketIncomingType.SpawnLivingEntity; - case 0x05: return PacketIncomingType.SpawnPlayer; - case 0x13: return PacketIncomingType.DestroyEntities; - case 0x15: return PacketIncomingType.EntityPosition; - case 0x17: return PacketIncomingType.EntityPositionAndRotation; - case 0x20: return PacketIncomingType.EntityProperties; - case 0x18: return PacketIncomingType.EntityTeleport; - default: return PacketIncomingType.UnknownPacket; - } - } - 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 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; - case 0x12: return PacketIncomingType.CloseWindow; - case 0x13: return PacketIncomingType.OpenWindow; - case 0x14: return PacketIncomingType.WindowItems; - case 0x16: return PacketIncomingType.SetSlot; - //NetworkCompressionTreshold removed in 1.9 - case 0x32: return PacketIncomingType.ResourcePackSend; - - case 0x17: return PacketIncomingType.SetCooldown; - case 0x44: return PacketIncomingType.TimeUpdate; - // Entity handling - case 0x00: return PacketIncomingType.SpawnEntity; - case 0x03: return PacketIncomingType.SpawnLivingEntity; - case 0x05: return PacketIncomingType.SpawnPlayer; - case 0x30: return PacketIncomingType.DestroyEntities; - case 0x25: return PacketIncomingType.EntityPosition; - case 0x26: return PacketIncomingType.EntityPositionAndRotation; - case 0x4A: return PacketIncomingType.EntityProperties; - case 0x49: return PacketIncomingType.EntityTeleport; - default: return PacketIncomingType.UnknownPacket; - } - } - 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 0x14: return PacketIncomingType.WindowItems; - case 0x16: return PacketIncomingType.SetSlot; - case 0x0B: return PacketIncomingType.BlockChange; - 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; - case 0x12: return PacketIncomingType.CloseWindow; - case 0x13: return PacketIncomingType.OpenWindow; - case 0x33: return PacketIncomingType.ResourcePackSend; - - case 0x17: return PacketIncomingType.SetCooldown; - case 0x46: return PacketIncomingType.TimeUpdate; - // Entity handling - case 0x00: return PacketIncomingType.SpawnEntity; - case 0x03: return PacketIncomingType.SpawnLivingEntity; - case 0x05: return PacketIncomingType.SpawnPlayer; - case 0x31: return PacketIncomingType.DestroyEntities; - case 0x26: return PacketIncomingType.EntityPosition; - case 0x27: return PacketIncomingType.EntityPositionAndRotation; - case 0x4D: return PacketIncomingType.EntityProperties; - case 0x4B: return PacketIncomingType.EntityTeleport; - default: return PacketIncomingType.UnknownPacket; - } - } - 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; - 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; - case 0x12: return PacketIncomingType.CloseWindow; - case 0x13: return PacketIncomingType.OpenWindow; - case 0x14: return PacketIncomingType.WindowItems; - case 0x16: return PacketIncomingType.SetSlot; - case 0x34: return PacketIncomingType.ResourcePackSend; - - case 0x17: return PacketIncomingType.SetCooldown; - case 0x47: return PacketIncomingType.TimeUpdate; - // Entity handling - case 0x00: return PacketIncomingType.SpawnEntity; - case 0x03: return PacketIncomingType.SpawnLivingEntity; - case 0x05: return PacketIncomingType.SpawnPlayer; - case 0x32: return PacketIncomingType.DestroyEntities; - case 0x26: return PacketIncomingType.EntityPosition; - case 0x27: return PacketIncomingType.EntityPositionAndRotation; - case 0x4E: return PacketIncomingType.EntityProperties; - case 0x4C: return PacketIncomingType.EntityTeleport; - default: return PacketIncomingType.UnknownPacket; - } - } - 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; - 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; - case 0x37: return PacketIncomingType.ResourcePackSend; - case 0x13: return PacketIncomingType.CloseWindow; - case 0x14: return PacketIncomingType.OpenWindow; - case 0x15: return PacketIncomingType.WindowItems; - case 0x17: return PacketIncomingType.SetSlot; - - case 0x18: return PacketIncomingType.SetCooldown; - case 0x4A: return PacketIncomingType.TimeUpdate; - // Entity handling - case 0x00: return PacketIncomingType.SpawnEntity; - case 0x03: return PacketIncomingType.SpawnLivingEntity; - case 0x05: return PacketIncomingType.SpawnPlayer; - case 0x35: return PacketIncomingType.DestroyEntities; - case 0x28: return PacketIncomingType.EntityPosition; - case 0x29: return PacketIncomingType.EntityPositionAndRotation; - case 0x52: return PacketIncomingType.EntityProperties; - case 0x50: return PacketIncomingType.EntityTeleport; - default: return PacketIncomingType.UnknownPacket; - } - } - 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; - 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; - case 0x39: return PacketIncomingType.ResourcePackSend; - case 0x2E: return PacketIncomingType.OpenWindow; - case 0x13: return PacketIncomingType.CloseWindow; - case 0x14: return PacketIncomingType.WindowItems; - case 0x16: return PacketIncomingType.SetSlot; - case 0x17: return PacketIncomingType.SetCooldown; - case 0x4E: return PacketIncomingType.TimeUpdate; - // Entity handling - case 0x00: return PacketIncomingType.SpawnEntity; - case 0x03: return PacketIncomingType.SpawnLivingEntity; - case 0x05: return PacketIncomingType.SpawnPlayer; - case 0x37: return PacketIncomingType.DestroyEntities; - case 0x28: return PacketIncomingType.EntityPosition; - case 0x29: return PacketIncomingType.EntityPositionAndRotation; - case 0x58: return PacketIncomingType.EntityProperties; - case 0x56: return PacketIncomingType.EntityTeleport; - default: return PacketIncomingType.UnknownPacket; - } - } - else // MC 1.15 - { - 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; - 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; - case 0x3A: return PacketIncomingType.ResourcePackSend; - case 0x2F: return PacketIncomingType.OpenWindow; - case 0x14: return PacketIncomingType.CloseWindow; - case 0x15: return PacketIncomingType.WindowItems; - case 0x17: return PacketIncomingType.SetSlot; - case 0x18: return PacketIncomingType.SetCooldown; - case 0x4F: return PacketIncomingType.TimeUpdate; - // Entity handling - case 0x00: return PacketIncomingType.SpawnEntity; - case 0x03: return PacketIncomingType.SpawnLivingEntity; - case 0x05: return PacketIncomingType.SpawnPlayer; - case 0x38: return PacketIncomingType.DestroyEntities; - case 0x29: return PacketIncomingType.EntityPosition; - case 0x2A: return PacketIncomingType.EntityPositionAndRotation; - case 0x59: return PacketIncomingType.EntityProperties; - case 0x57: return PacketIncomingType.EntityTeleport; - case 0x1C: return PacketIncomingType.EntityStatus; - case 0x49: return PacketIncomingType.UpdateHealth; // TODO: Add backwards support - case 0x40: return PacketIncomingType.HeldItemChange; // TODO: Add backwards support - default: return PacketIncomingType.UnknownPacket; - } - } - } - - /// - /// Get packet ID of the specified outgoing packet - /// - /// 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.PlayerPosition: return 0x04; - case PacketOutgoingType.PlayerPositionAndLook: return 0x06; - case PacketOutgoingType.HeldItemChange: return 0x17; - case PacketOutgoingType.InteractEntity: return 0x02; - case PacketOutgoingType.TeleportConfirm: throw new InvalidOperationException("Teleport confirm is not supported in protocol " + protocol); - case PacketOutgoingType.ClickWindow: return 0x0E; - case PacketOutgoingType.CloseWindow: return 0x0D; - case PacketOutgoingType.EntityAction: return 0x0B; - } - } - 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.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.ClickWindow: return 0x07; - case PacketOutgoingType.CloseWindow: return 0x08; - case PacketOutgoingType.EntityAction: return 0x14; - } - } - 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.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.ClickWindow: return 0x07; - case PacketOutgoingType.CloseWindow: return 0x08; - case PacketOutgoingType.EntityAction: return 0x15; - } - } - 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.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.ClickWindow: return 0x07; - case PacketOutgoingType.CloseWindow: return 0x08; - case PacketOutgoingType.EntityAction: return 0x15; - } - } - 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.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.ClickWindow: return 0x08; - case PacketOutgoingType.CloseWindow: return 0x09; - case PacketOutgoingType.EntityAction: return 0x19; - } - } - else // MC 1.14 to 1.15 - { - 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.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.PlayerBlockPlacement: return 0x2C; - case PacketOutgoingType.ClickWindow: return 0x09; - case PacketOutgoingType.CloseWindow: return 0x0A; +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 + /// + /// 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; + case 0x30: return PacketIncomingType.WindowItems; + //UnloadChunk does not exists 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 0x2D: return PacketIncomingType.OpenWindow; + case 0x2E: return PacketIncomingType.CloseWindow; + case 0x2F: return PacketIncomingType.SetSlot; + + // Set Cooldown does not exists + case 0x03: return PacketIncomingType.TimeUpdate; + // Entity handling + case 0x0E: return PacketIncomingType.SpawnEntity; + case 0x0F: return PacketIncomingType.SpawnLivingEntity; + case 0x05: return PacketIncomingType.SpawnPlayer; + case 0x13: return PacketIncomingType.DestroyEntities; + case 0x15: return PacketIncomingType.EntityPosition; + case 0x17: return PacketIncomingType.EntityPositionAndRotation; + case 0x20: return PacketIncomingType.EntityProperties; + case 0x18: return PacketIncomingType.EntityTeleport; + default: return PacketIncomingType.UnknownPacket; + } + } + 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 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; + case 0x12: return PacketIncomingType.CloseWindow; + case 0x13: return PacketIncomingType.OpenWindow; + case 0x14: return PacketIncomingType.WindowItems; + case 0x16: return PacketIncomingType.SetSlot; + //NetworkCompressionTreshold removed in 1.9 + case 0x32: return PacketIncomingType.ResourcePackSend; + + case 0x17: return PacketIncomingType.SetCooldown; + case 0x44: return PacketIncomingType.TimeUpdate; + // Entity handling + case 0x00: return PacketIncomingType.SpawnEntity; + case 0x03: return PacketIncomingType.SpawnLivingEntity; + case 0x05: return PacketIncomingType.SpawnPlayer; + case 0x30: return PacketIncomingType.DestroyEntities; + case 0x25: return PacketIncomingType.EntityPosition; + case 0x26: return PacketIncomingType.EntityPositionAndRotation; + case 0x4A: return PacketIncomingType.EntityProperties; + case 0x49: return PacketIncomingType.EntityTeleport; + default: return PacketIncomingType.UnknownPacket; + } + } + 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 0x14: return PacketIncomingType.WindowItems; + case 0x16: return PacketIncomingType.SetSlot; + case 0x0B: return PacketIncomingType.BlockChange; + 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; + case 0x12: return PacketIncomingType.CloseWindow; + case 0x13: return PacketIncomingType.OpenWindow; + case 0x33: return PacketIncomingType.ResourcePackSend; + + case 0x17: return PacketIncomingType.SetCooldown; + case 0x46: return PacketIncomingType.TimeUpdate; + // Entity handling + case 0x00: return PacketIncomingType.SpawnEntity; + case 0x03: return PacketIncomingType.SpawnLivingEntity; + case 0x05: return PacketIncomingType.SpawnPlayer; + case 0x31: return PacketIncomingType.DestroyEntities; + case 0x26: return PacketIncomingType.EntityPosition; + case 0x27: return PacketIncomingType.EntityPositionAndRotation; + case 0x4D: return PacketIncomingType.EntityProperties; + case 0x4B: return PacketIncomingType.EntityTeleport; + default: return PacketIncomingType.UnknownPacket; + } + } + 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; + 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; + case 0x12: return PacketIncomingType.CloseWindow; + case 0x13: return PacketIncomingType.OpenWindow; + case 0x14: return PacketIncomingType.WindowItems; + case 0x16: return PacketIncomingType.SetSlot; + case 0x34: return PacketIncomingType.ResourcePackSend; + + case 0x17: return PacketIncomingType.SetCooldown; + case 0x47: return PacketIncomingType.TimeUpdate; + // Entity handling + case 0x00: return PacketIncomingType.SpawnEntity; + case 0x03: return PacketIncomingType.SpawnLivingEntity; + case 0x05: return PacketIncomingType.SpawnPlayer; + case 0x32: return PacketIncomingType.DestroyEntities; + case 0x26: return PacketIncomingType.EntityPosition; + case 0x27: return PacketIncomingType.EntityPositionAndRotation; + case 0x4E: return PacketIncomingType.EntityProperties; + case 0x4C: return PacketIncomingType.EntityTeleport; + default: return PacketIncomingType.UnknownPacket; + } + } + 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; + 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; + case 0x37: return PacketIncomingType.ResourcePackSend; + case 0x13: return PacketIncomingType.CloseWindow; + case 0x14: return PacketIncomingType.OpenWindow; + case 0x15: return PacketIncomingType.WindowItems; + case 0x17: return PacketIncomingType.SetSlot; + + case 0x18: return PacketIncomingType.SetCooldown; + case 0x4A: return PacketIncomingType.TimeUpdate; + // Entity handling + case 0x00: return PacketIncomingType.SpawnEntity; + case 0x03: return PacketIncomingType.SpawnLivingEntity; + case 0x05: return PacketIncomingType.SpawnPlayer; + case 0x35: return PacketIncomingType.DestroyEntities; + case 0x28: return PacketIncomingType.EntityPosition; + case 0x29: return PacketIncomingType.EntityPositionAndRotation; + case 0x52: return PacketIncomingType.EntityProperties; + case 0x50: return PacketIncomingType.EntityTeleport; + default: return PacketIncomingType.UnknownPacket; + } + } + 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; + 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; + case 0x39: return PacketIncomingType.ResourcePackSend; + case 0x2E: return PacketIncomingType.OpenWindow; + case 0x13: return PacketIncomingType.CloseWindow; + case 0x14: return PacketIncomingType.WindowItems; + case 0x16: return PacketIncomingType.SetSlot; + case 0x17: return PacketIncomingType.SetCooldown; + case 0x4E: return PacketIncomingType.TimeUpdate; + // Entity handling + case 0x00: return PacketIncomingType.SpawnEntity; + case 0x03: return PacketIncomingType.SpawnLivingEntity; + case 0x05: return PacketIncomingType.SpawnPlayer; + case 0x37: return PacketIncomingType.DestroyEntities; + case 0x28: return PacketIncomingType.EntityPosition; + case 0x29: return PacketIncomingType.EntityPositionAndRotation; + case 0x58: return PacketIncomingType.EntityProperties; + case 0x56: return PacketIncomingType.EntityTeleport; + default: return PacketIncomingType.UnknownPacket; + } + } + else // MC 1.15 + { + 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; + 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; + case 0x3A: return PacketIncomingType.ResourcePackSend; + case 0x2F: return PacketIncomingType.OpenWindow; + case 0x14: return PacketIncomingType.CloseWindow; + case 0x15: return PacketIncomingType.WindowItems; + case 0x17: return PacketIncomingType.SetSlot; + case 0x18: return PacketIncomingType.SetCooldown; + case 0x4F: return PacketIncomingType.TimeUpdate; + // Entity handling + case 0x00: return PacketIncomingType.SpawnEntity; + case 0x03: return PacketIncomingType.SpawnLivingEntity; + case 0x05: return PacketIncomingType.SpawnPlayer; + case 0x38: return PacketIncomingType.DestroyEntities; + case 0x29: return PacketIncomingType.EntityPosition; + case 0x2A: return PacketIncomingType.EntityPositionAndRotation; + case 0x59: return PacketIncomingType.EntityProperties; + case 0x57: return PacketIncomingType.EntityTeleport; + case 0x1C: return PacketIncomingType.EntityStatus; + case 0x49: return PacketIncomingType.UpdateHealth; // TODO: Add backwards support + case 0x40: return PacketIncomingType.HeldItemChange; // TODO: Add backwards support + default: return PacketIncomingType.UnknownPacket; + } + } + } + + /// + /// Get packet ID of the specified outgoing packet + /// + /// 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.PlayerPosition: return 0x04; + case PacketOutgoingType.PlayerPositionAndLook: return 0x06; + case PacketOutgoingType.HeldItemChange: return 0x17; + case PacketOutgoingType.InteractEntity: return 0x02; + case PacketOutgoingType.TeleportConfirm: throw new InvalidOperationException("Teleport confirm is not supported in protocol " + protocol); + case PacketOutgoingType.ClickWindow: return 0x0E; + case PacketOutgoingType.CloseWindow: return 0x0D; + case PacketOutgoingType.EntityAction: return 0x0B; + } + } + 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.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.ClickWindow: return 0x07; + case PacketOutgoingType.CloseWindow: return 0x08; + case PacketOutgoingType.EntityAction: return 0x14; + } + } + 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.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.ClickWindow: return 0x07; + case PacketOutgoingType.CloseWindow: return 0x08; + case PacketOutgoingType.EntityAction: return 0x15; + } + } + 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.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.ClickWindow: return 0x07; + case PacketOutgoingType.CloseWindow: return 0x08; + case PacketOutgoingType.EntityAction: return 0x15; + } + } + 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.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.ClickWindow: return 0x08; + case PacketOutgoingType.CloseWindow: return 0x09; + case PacketOutgoingType.EntityAction: return 0x19; + } + } + else // MC 1.14 to 1.15 + { + 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.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.PlayerBlockPlacement: return 0x2C; + case PacketOutgoingType.ClickWindow: return 0x09; + case PacketOutgoingType.CloseWindow: return 0x0A; case PacketOutgoingType.EntityAction: return 0x1B; - case PacketOutgoingType.Animation: return 0x2A; - } - } - - throw new System.ComponentModel.InvalidEnumArgumentException("Unknown PacketOutgoingType (protocol=" + protocol + ")", (int)packet, typeof(PacketOutgoingType)); - } - } -} + case PacketOutgoingType.Animation: return 0x2A; + } + } + + throw new System.ComponentModel.InvalidEnumArgumentException("Unknown PacketOutgoingType (protocol=" + protocol + ")", (int)packet, typeof(PacketOutgoingType)); + } + } +}