Add packet palettes (#1236)

* Add packet type palette
* Fix
* test new palette
* Fix 1.16.2 palette
* Add packet ID dumper
* Add document
* Update naming
* Delete old implementation of packet type
* Rename PacketTypeHandler to PacketType18Handler
* Fix packet type namespace
* Add dump to file method for packet type
* Rename packet palette version number
* Replace unknown packet type to explicit type name
Prevent duplicated key while creating reverse mapping
* Include packets ID in packet palette
Add packet palette helper class
* Remove packet ID dumper methods
As packets ID are included in source code now
This commit is contained in:
ReinforceZwei 2020-08-27 01:19:59 +08:00 committed by GitHub
parent 896cabb6ce
commit 3434d95b81
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 1978 additions and 906 deletions

View file

@ -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<int, PacketTypesIn> typeIn = new Dictionary<int, PacketTypesIn>()
{
{ 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<int, PacketTypesOut> typeOut = new Dictionary<int, PacketTypesOut>()
{
{ 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<int, PacketTypesIn> GetListIn()
{
return typeIn;
}
protected override Dictionary<int, PacketTypesOut> GetListOut()
{
return typeOut;
}
}
}

View file

@ -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<int, PacketTypesIn> typeIn = new Dictionary<int, PacketTypesIn>()
{
{ 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<int, PacketTypesOut> typeOut = new Dictionary<int, PacketTypesOut>()
{
{ 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<int, PacketTypesIn> GetListIn()
{
return typeIn;
}
protected override Dictionary<int, PacketTypesOut> GetListOut()
{
return typeOut;
}
}
}

View file

@ -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<int, PacketTypesIn> typeIn = new Dictionary<int, PacketTypesIn>()
{
{ 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<int, PacketTypesOut> typeOut = new Dictionary<int, PacketTypesOut>()
{
{ 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<int, PacketTypesIn> GetListIn()
{
return typeIn;
}
protected override Dictionary<int, PacketTypesOut> GetListOut()
{
return typeOut;
}
}
}

View file

@ -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<int, PacketTypesIn> typeIn = new Dictionary<int, PacketTypesIn>()
{
{ 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<int, PacketTypesOut> typeOut = new Dictionary<int, PacketTypesOut>()
{
{ 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<int, PacketTypesIn> GetListIn()
{
return typeIn;
}
protected override Dictionary<int, PacketTypesOut> GetListOut()
{
return typeOut;
}
}
}

View file

@ -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<int, PacketTypesIn> typeIn = new Dictionary<int, PacketTypesIn>()
{
{ 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<int, PacketTypesOut> typeOut = new Dictionary<int, PacketTypesOut>()
{
{ 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<int, PacketTypesIn> GetListIn()
{
return typeIn;
}
protected override Dictionary<int, PacketTypesOut> GetListOut()
{
return typeOut;
}
}
}

View file

@ -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<int, PacketTypesIn> typeIn = new Dictionary<int, PacketTypesIn>()
{
{ 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<int, PacketTypesOut> typeOut = new Dictionary<int, PacketTypesOut>()
{
{ 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<int, PacketTypesIn> GetListIn()
{
return typeIn;
}
protected override Dictionary<int, PacketTypesOut> GetListOut()
{
return typeOut;
}
}
}

View file

@ -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<int, PacketTypesIn> typeIn = new Dictionary<int, PacketTypesIn>()
{
{ 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<int, PacketTypesOut> typeOut = new Dictionary<int, PacketTypesOut>()
{
{ 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<int, PacketTypesIn> GetListIn()
{
return typeIn;
}
protected override Dictionary<int, PacketTypesOut> GetListOut()
{
return typeOut;
}
}
}

View file

@ -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<int, PacketTypesIn> typeIn = new Dictionary<int, PacketTypesIn>()
{
{ 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<int, PacketTypesOut> typeOut = new Dictionary<int, PacketTypesOut>()
{
{ 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<int, PacketTypesIn> GetListIn()
{
return typeIn;
}
protected override Dictionary<int, PacketTypesOut> GetListOut()
{
return typeOut;
}
}
}

View file

@ -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<int, PacketTypesIn> typeIn = new Dictionary<int, PacketTypesIn>()
{
{ 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<int, PacketTypesOut> typeOut = new Dictionary<int, PacketTypesOut>()
{
{ 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<int, PacketTypesIn> GetListIn()
{
return typeIn;
}
protected override Dictionary<int, PacketTypesOut> GetListOut()
{
return typeOut;
}
}
}

View file

@ -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
{
/// <summary>
/// Generate a code snippet of updated IDs from a modified packet palette (usually when you have updated packet item position)
/// </summary>
/// <example>
/// 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 },
/// ...
/// </example>
/// <param name="palette"></param>
/// <param name="outputFile"></param>
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<string> lines = new List<string>();
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));
}
/// <summary>
/// Generate a code snippet of rearranged order of packet types from a modified packet palette (usually when you have updated packet IDs)
/// </summary>
/// <example>
/// 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 },
/// ...
/// </example>
/// <param name="palette"></param>
/// <param name="outputFile"></param>
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<string> lines = new List<string>();
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));
}
/// <summary>
/// Generate PacketPaletteXXX.cs by feeding PacketTypesIn and PacketTypesOut list
/// </summary>
/// <param name="outputFile">The output file name</param>
/// <param name="namespaceToUse">The namespace to use in the generated class</param>
/// <param name="className">Class name</param>
/// <param name="pIn">List of PacketTypesIn</param>
/// <param name="pOut">List of PacketTypesOut</param>
/// <example>
/// You need to make sure the order of each item are all correct for that MC version
/// Example format:
/// List<PacketTypesIn> pIn = new List<PacketTypesIn>()
/// {
/// PacketTypesIn.SpawnEntity, // packet ID of 0x00
/// PacketTypesIn.SpawnExperienceOrb, // packet ID of 0x01 and so on
/// ...
/// }
/// </example>
public static void GenerateIDsPacketByList(string outputFile, string namespaceToUse, string className, List<PacketTypesIn> pIn, List<PacketTypesOut> pOut)
{
const string TAB = " ";
const string TAB2 = " ";
const string TAB3 = " ";
List<string> lines = new List<string>();
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<int, PacketTypesIn> typeIn = new Dictionary<int, PacketTypesIn>()");
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<int, PacketTypesOut> typeOut = new Dictionary<int, PacketTypesOut>()");
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<int, PacketTypesIn> GetListIn()");
lines.Add(TAB2 + "{");
lines.Add(TAB3 + "return typeIn;");
lines.Add(TAB2 + "}");
lines.Add("");
lines.Add(TAB2 + "protected override Dictionary<int, PacketTypesOut> 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));
}
}
}

View file

@ -0,0 +1,112 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace MinecraftClient.Protocol.Handlers.PacketPalettes
{
/// <summary>
/// Packet type palette
/// </summary>
/// <remarks>
/// 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)
/// </remarks>
public abstract class PacketTypePalette
{
protected abstract Dictionary<int, PacketTypesIn> GetListIn();
protected abstract Dictionary<int, PacketTypesOut> GetListOut();
private Dictionary<PacketTypesIn, int> reverseMappingIn = new Dictionary<PacketTypesIn, int>();
private Dictionary<PacketTypesOut, int> reverseMappingOut = new Dictionary<PacketTypesOut, int>();
public PacketTypePalette()
{
foreach (var p in GetListIn())
{
reverseMappingIn.Add(p.Value, p.Key);
}
foreach (var p in GetListOut())
{
reverseMappingOut.Add(p.Value, p.Key);
}
}
/// <summary>
/// Get incomming packet type by packet ID
/// </summary>
/// <param name="packetId">packet ID</param>
/// <returns>Packet type</returns>
public PacketTypesIn GetIncommingTypeById(int packetId)
{
return GetListIn()[packetId];
}
/// <summary>
/// Get incomming packet ID by packet type
/// </summary>
/// <param name="packetType">Packet type</param>
/// <returns>packet ID</returns>
public int GetIncommingIdByType(PacketTypesIn packetType)
{
return reverseMappingIn[packetType];
}
/// <summary>
/// Get outgoing packet type by packet ID
/// </summary>
/// <param name="packetId">Packet ID</param>
/// <returns>Packet type</returns>
public PacketTypesOut GetOutgoingTypeById(int packetId)
{
return GetListOut()[packetId];
}
/// <summary>
/// Get outgoing packet ID by packet type
/// </summary>
/// <param name="packetType">Packet type</param>
/// <returns>Packet ID</returns>
public int GetOutgoingIdByType(PacketTypesOut packetType)
{
return reverseMappingOut[packetType];
}
/// <summary>
/// Public method for getting the type mapping
/// </summary>
/// <returns>PacketTypesIn with packet ID as index</returns>
public Dictionary<int, PacketTypesIn> GetMappingIn()
{
return GetListIn();
}
/// <summary>
/// Public method for getting the type mapping
/// </summary>
/// <returns>PacketTypesOut with packet ID as index</returns>
public Dictionary<int ,PacketTypesOut> GetMappingOut()
{
return GetListOut();
}
}
}