From 36ece5c7404b40a9456f4125cd9d531937f30f16 Mon Sep 17 00:00:00 2001 From: Titlehhhh Date: Thu, 20 Aug 2026 14:28:23 +0500 Subject: [PATCH 1/9] data: bump protocol data to 26.2 (protocol 776) The data submodule moves from Release 3.102.3 (2025-12-28) to the upstream `pc_26_2` branch head 4dd8762a ("fix: restore 26.2 login protocol fields", open PR PrismarineJS/minecraft-data#1219). The branch is master plus the 26.2 boilerplate, so protocols 773-776 arrive together: 1.21.9-1.21.11, 26.1, 26.2. 26.2 data is bot-generated and not merged upstream yet. The loader range follows: ProtocolDataOptions default ToProtocol 772 -> 776, McpServer end 772 -> 776. Nothing else in the loader is version-name aware - ProtocolLoader keys off the integer in each version.json, so "26.1"/"26.2" folder names need no parser change. Checked: `tools\mcproto-facts.cmd stats` loads the full range, 286 packets, new ids among them (configuration.toClient.code_of_conduct, configuration.toServer.accept_code_of_conduct). `ids --pv 776 --ns play --direction toClient` returns 141 packet ids against 134 at --pv 772. Co-Authored-By: Claude Opus 5 (1M context) --- facts/minecraft-data | 2 +- facts/src/McProtoFacts.Protocol/Loading/ProtocolDataLoader.cs | 2 +- facts/src/McpServer/Program.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/facts/minecraft-data b/facts/minecraft-data index 9dd3f5e..4dd8762 160000 --- a/facts/minecraft-data +++ b/facts/minecraft-data @@ -1 +1 @@ -Subproject commit 9dd3f5eaf0bdbef52b9c5efd08a8bf122f3db33c +Subproject commit 4dd8762a45b97dafdb216b8d7a95ab92379e2c68 diff --git a/facts/src/McProtoFacts.Protocol/Loading/ProtocolDataLoader.cs b/facts/src/McProtoFacts.Protocol/Loading/ProtocolDataLoader.cs index 5562ff9..eaa8852 100644 --- a/facts/src/McProtoFacts.Protocol/Loading/ProtocolDataLoader.cs +++ b/facts/src/McProtoFacts.Protocol/Loading/ProtocolDataLoader.cs @@ -5,7 +5,7 @@ namespace McProtoFacts.Protocol.Loading; -public sealed record ProtocolDataOptions(int FromProtocol = 735, int ToProtocol = 772); +public sealed record ProtocolDataOptions(int FromProtocol = 735, int ToProtocol = 776); public static class ProtocolDataLoader { diff --git a/facts/src/McpServer/Program.cs b/facts/src/McpServer/Program.cs index e9a354a..13d8c16 100644 --- a/facts/src/McpServer/Program.cs +++ b/facts/src/McpServer/Program.cs @@ -11,7 +11,7 @@ using McProtoFacts.Protocol.Loading; var start = 735; -var end = 772; +var end = 776; Console.WriteLine($"[McpServer] Loading protocols {start}-{end}..."); var repository = await ProtocolDataLoader.LoadRepositoryAsync(new ProtocolDataOptions(start, end)); From cbc366b1d310b87063bb7b323140a07bd72bfcdf Mon Sep 17 00:00:00 2001 From: Titlehhhh Date: Thu, 20 Aug 2026 14:40:54 +0500 Subject: [PATCH 2/9] facts: add a versions surface (protocol number -> Minecraft releases) Nothing exposed the mapping between a protocol number and the Minecraft releases that speak it, so extending the coverage table to 773-776 had no lawful source. ProtocolMap already carries it (ProtocolInfo.MinecraftVersions, filled from each version.json); the repository just never published it. IProtocolRepository gains GetVersions() returning ProtocolVersionEntry (protocol number + release names), implemented in ProtocolRepository off the existing map. ProtocolQueryService.GetVersions() orders by protocol number and adds a joined Display string. Wired into all three surfaces: CLI `versions`, REST `GET /api/versions`, stdio MCP `get_protocol_versions`. Command and endpoint lists in AI_CONTEXT.md and README.md follow. Checked: `tools\mcproto-facts.cmd versions --format toon` prints 735-776; the new numbers read 773=1.21.9, 774=1.21.11, 775=26.1, 776=26.2. McpServer builds clean (built to a scratch output path because the running instance holds the normal one). Co-Authored-By: Claude Opus 5 (1M context) --- facts/AI_CONTEXT.md | 3 +++ facts/README.md | 3 +++ facts/src/McProtoFacts.Cli/Program.cs | 5 ++++ facts/src/McProtoFacts.McpStdio/Program.cs | 5 ++++ .../Queries/ProtocolQueryService.cs | 26 +++++++++++++++++++ .../Repository/IProtocolRepository.cs | 6 +++++ .../Repository/ProtocolRepository.cs | 7 +++++ .../McpServer/Endpoints/PacketEndpoints.cs | 18 +++++++++++++ 8 files changed, 73 insertions(+) diff --git a/facts/AI_CONTEXT.md b/facts/AI_CONTEXT.md index 640e6e9..dec337d 100644 --- a/facts/AI_CONTEXT.md +++ b/facts/AI_CONTEXT.md @@ -88,6 +88,7 @@ ids [--format json|toon] ids --pv [--ns namespace] [--direction toClient|toServer] [--format json|toon] chunks [--kind all|packet|type] [--filter text] [--max-chars N] [--format json|toon] stats [--format json|toon] +versions [--format json|toon] order [--format json|toon] graph [--ns play] [--direction toClient] [--include-types false] [--format json|toon] ``` @@ -117,6 +118,7 @@ get_protocol_usage get_protocol_users get_protocol_dependencies get_protocol_stats +get_protocol_versions get_protocol_graph ``` @@ -129,6 +131,7 @@ endpoints are useful when another process is already running the server: GET /api/packets GET /api/packets/{ns}/{dir} GET /api/stats +GET /api/versions GET /api/types GET /api/native-types GET /api/types-by-kind diff --git a/facts/README.md b/facts/README.md index df08e41..0b167a1 100644 --- a/facts/README.md +++ b/facts/README.md @@ -93,6 +93,7 @@ ids [--format json|toon] ids --pv [--ns play] [--direction toClient|toServer] [--format json|toon] chunks [--kind all|packet|type] [--filter text] [--max-chars N] [--format json|toon] stats [--format json|toon] +versions [--format json|toon] (protocol number -> Minecraft releases) order [--format json|toon] (type build order, simple -> complex) graph [--ns play] [--direction toClient] [--include-types false] [--format json|toon] ``` @@ -124,6 +125,7 @@ get_protocol_usage get_protocol_users get_protocol_dependencies get_protocol_stats +get_protocol_versions get_protocol_graph ``` @@ -135,6 +137,7 @@ get_protocol_graph GET /api/packets GET /api/packets/{ns}/{dir} GET /api/stats +GET /api/versions GET /api/types GET /api/native-types GET /api/types-by-kind diff --git a/facts/src/McProtoFacts.Cli/Program.cs b/facts/src/McProtoFacts.Cli/Program.cs index edf50fd..2f7515f 100644 --- a/facts/src/McProtoFacts.Cli/Program.cs +++ b/facts/src/McProtoFacts.Cli/Program.cs @@ -110,6 +110,10 @@ static async Task RunAsync(string[] args) Write(query.GetStats(), format); return Ok; + case "versions": + Write(query.GetVersions(), format); + return Ok; + case "order": case "build-order": Write(query.GetBuildOrder(), format); @@ -265,6 +269,7 @@ usage [--top N] [--kind packet|type|shape|native] [--format json|toon] ids --pv [--ns play] [--direction toClient|toServer] [--format json|toon] chunks [--kind all|packet|type] [--filter text] [--max-chars N] [--format json|toon] stats [--format json|toon] + versions [--format json|toon] (protocol number -> Minecraft releases) order [--format json|toon] (type build order, simple -> complex) graph [--ns play] [--direction toClient] [--include-types false] [--format json|toon] diff --git a/facts/src/McProtoFacts.McpStdio/Program.cs b/facts/src/McProtoFacts.McpStdio/Program.cs index 952bca8..60aeb61 100644 --- a/facts/src/McProtoFacts.McpStdio/Program.cs +++ b/facts/src/McProtoFacts.McpStdio/Program.cs @@ -85,6 +85,11 @@ public static string GetProtocolDependencies(ProtocolUsageQueries usage, string public static string GetProtocolStats(ProtocolQueryService query, string format = "json") => Serialize(query.GetStats(), format); + [McpServerTool(Name = "get_protocol_versions")] + [Description("Returns loaded protocol numbers with the Minecraft releases that speak them.")] + public static string GetProtocolVersions(ProtocolQueryService query, string format = "toon") => + Serialize(query.GetVersions(), format); + [McpServerTool(Name = "get_protocol_graph")] [Description("Returns protocol graph nodes/edges for packets, named types, native types, and protodef shapes.")] public static string GetProtocolGraph( diff --git a/facts/src/McProtoFacts.Protocol/Queries/ProtocolQueryService.cs b/facts/src/McProtoFacts.Protocol/Queries/ProtocolQueryService.cs index e689761..846ec4f 100644 --- a/facts/src/McProtoFacts.Protocol/Queries/ProtocolQueryService.cs +++ b/facts/src/McProtoFacts.Protocol/Queries/ProtocolQueryService.cs @@ -154,6 +154,21 @@ public PacketIdsResult GetPacketIds(string id) .ToArray()); } + /// Loaded protocol numbers with the Minecraft releases that speak them. + public ProtocolVersionsResult GetVersions() + { + var entries = _repository.GetVersions() + .OrderBy(entry => entry.Protocol) + .Select(entry => new ProtocolVersionEntryResult( + entry.Protocol, + entry.Versions.ToArray(), + string.Join(", ", entry.Versions))) + .ToArray(); + + var supported = _repository.GetSupportedProtocols(); + return new ProtocolVersionsResult(entries.Length, supported.From, supported.To, entries); + } + public PacketIdMapResult GetPacketIdMap(int protocolVersion, string? ns = null, string? direction = null) { var supported = _repository.GetSupportedProtocols(); @@ -428,6 +443,17 @@ public sealed record PacketIdsResult( string Name, IReadOnlyList Ranges); +public sealed record ProtocolVersionEntryResult( + int Protocol, + IReadOnlyList Versions, + string Display); + +public sealed record ProtocolVersionsResult( + int Count, + int From, + int To, + IReadOnlyList Protocols); + public sealed record PacketIdMapEntry(string Id, string Hex, int Dec); public sealed record PacketIdMapResult( diff --git a/facts/src/McProtoFacts.Protocol/Repository/IProtocolRepository.cs b/facts/src/McProtoFacts.Protocol/Repository/IProtocolRepository.cs index b132205..93ad9f8 100644 --- a/facts/src/McProtoFacts.Protocol/Repository/IProtocolRepository.cs +++ b/facts/src/McProtoFacts.Protocol/Repository/IProtocolRepository.cs @@ -2,10 +2,16 @@ namespace McProtoFacts.Protocol.Repository; +/// One protocol number with the Minecraft releases that speak it. +public sealed record ProtocolVersionEntry(int Protocol, IReadOnlyList Versions); + public interface IProtocolRepository { ProtocolRange GetSupportedProtocols(); + /// Loaded protocol numbers with their Minecraft release names, ascending. + IReadOnlyList GetVersions(); + IEnumerable GetTypes(); IEnumerable GetNativeTypes(); Dictionary> GetPackets(); diff --git a/facts/src/McProtoFacts.Protocol/Repository/ProtocolRepository.cs b/facts/src/McProtoFacts.Protocol/Repository/ProtocolRepository.cs index 9ad5eae..0cec3c2 100644 --- a/facts/src/McProtoFacts.Protocol/Repository/ProtocolRepository.cs +++ b/facts/src/McProtoFacts.Protocol/Repository/ProtocolRepository.cs @@ -87,6 +87,13 @@ public ProtocolRange GetSupportedProtocols() return _range; } + public IReadOnlyList GetVersions() + { + return _map.Protocols + .Select(kv => new ProtocolVersionEntry(kv.Key, kv.Value.MinecraftVersions.ToArray())) + .ToArray(); + } + public IEnumerable GetTypes() { return diff --git a/facts/src/McpServer/Endpoints/PacketEndpoints.cs b/facts/src/McpServer/Endpoints/PacketEndpoints.cs index bf2ff4a..77f0992 100644 --- a/facts/src/McpServer/Endpoints/PacketEndpoints.cs +++ b/facts/src/McpServer/Endpoints/PacketEndpoints.cs @@ -66,6 +66,24 @@ public static void MapPacketApi(this WebApplication app) }); }); + app.MapGet("/api/versions", (ProtocolQueryService query) => + { + var versions = query.GetVersions(); + + return Results.Ok(new + { + count = versions.Count, + from = versions.From, + to = versions.To, + protocols = versions.Protocols.Select(entry => new + { + protocol = entry.Protocol, + versions = entry.Versions, + display = entry.Display + }).ToArray() + }); + }); + app.MapGet("/api/types", (ProtocolQueryService query) => { return Results.Ok(query.GetTypes()); From efde2ae5d1c25f55fef750d964ebb3b5308af99f Mon Sep 17 00:00:00 2001 From: Titlehhhh Date: Thu, 20 Aug 2026 14:41:08 +0500 Subject: [PATCH 3/9] spec: id manifest and coverage table up to protocol 776 Spec/protocol-ids.json regenerated from the updated facts server: 286 packet entries against 245 before, because the data now reaches 26.2. The packet universe at 776 is 257 ids - 13 more than at 772 (code_of_conduct, accept_code_of_conduct, the five debug_* packets, game_test_highlight_pos, game_rule_values, low_disk_space_warning, set_game_rule, attack, spectate_entity, debug_subscription_request) and one gone (play.toServer.debug_sample_subscription). Coverage.knownVersions gains 773 "1.21.9", 774 "1.21.11", 775 "26.1", 776 "26.2" from the new facts versions surface, so the coverage report stops cutting off at 772. Checked: `dotnet run -- coverage` reports 201/257 covered on pv 776 against 202/245 on pv 772; wire gaps stay at 3 and stubs at 6. Of the 31 packets whose shape changes above 772, 15 already have a spec and need a new wire layer; 16 have no spec at all. Co-Authored-By: Claude Opus 5 (1M context) --- minecraft-protocol-fs/Codegen/Coverage.fs | 6 +- minecraft-protocol-fs/Spec/protocol-ids.json | 30291 +++++++++-------- 2 files changed, 16276 insertions(+), 14021 deletions(-) diff --git a/minecraft-protocol-fs/Codegen/Coverage.fs b/minecraft-protocol-fs/Codegen/Coverage.fs index 875665c..e785490 100644 --- a/minecraft-protocol-fs/Codegen/Coverage.fs +++ b/minecraft-protocol-fs/Codegen/Coverage.fs @@ -11,7 +11,7 @@ open McProtocol.Dsl /// gaps / stubs / missing — per release protocol version. See `dotnet run -- coverage`. module Coverage = - /// Release protocol versions the library targets (735–772), with display names. + /// Release protocol versions the library targets (735–776), with display names. /// Mirrors McProtoNet's `MinecraftVersion` table; snapshot/pre/rc protocols /// (737–750, 752) are left out on purpose — nobody ships against them. let knownVersions = @@ -39,6 +39,10 @@ module Coverage = 770, "1.21.5" 771, "1.21.6" 772, "1.21.7–1.21.8" + 773, "1.21.9" + 774, "1.21.11" + 775, "26.1" + 776, "26.2" ] let private contains pv range = diff --git a/minecraft-protocol-fs/Spec/protocol-ids.json b/minecraft-protocol-fs/Spec/protocol-ids.json index fb65156..6a3a192 100644 --- a/minecraft-protocol-fs/Spec/protocol-ids.json +++ b/minecraft-protocol-fs/Spec/protocol-ids.json @@ -1,14021 +1,16272 @@ -{ - "comment": "Generated from McProtoFacts /api/packets/{ns}/{dir} (protodef \"packet\" mappers of minecraft-data). Regenerate: scripts\\generate-ids-manifest.ps1 with serve-facts running.", - "packets": { - "handshaking.toServer.legacy_server_list_ping": [ - { - "from": 735, - "to": 772, - "id": "0xFE" - } - ], - "handshaking.toServer.set_protocol": [ - { - "from": 735, - "to": 772, - "id": "0x00" - } - ], - "status.toClient.ping": [ - { - "from": 735, - "to": 772, - "id": "0x01" - } - ], - "status.toClient.server_info": [ - { - "from": 735, - "to": 772, - "id": "0x00" - } - ], - "status.toServer.ping": [ - { - "from": 735, - "to": 772, - "id": "0x01" - } - ], - "status.toServer.ping_start": [ - { - "from": 735, - "to": 772, - "id": "0x00" - } - ], - "login.toClient.compress": [ - { - "from": 735, - "to": 765, - "id": "0x03" - }, - { - "from": 766, - "to": 772, - "id": "0x03" - } - ], - "login.toClient.cookie_request": [ - { - "from": 766, - "to": 772, - "id": "0x05" - } - ], - "login.toClient.disconnect": [ - { - "from": 735, - "to": 765, - "id": "0x00" - }, - { - "from": 766, - "to": 772, - "id": "0x00" - } - ], - "login.toClient.encryption_begin": [ - { - "from": 735, - "to": 765, - "id": "0x01" - }, - { - "from": 766, - "to": 772, - "id": "0x01" - } - ], - "login.toClient.login_plugin_request": [ - { - "from": 735, - "to": 765, - "id": "0x04" - }, - { - "from": 766, - "to": 772, - "id": "0x04" - } - ], - "login.toClient.success": [ - { - "from": 735, - "to": 765, - "id": "0x02" - }, - { - "from": 766, - "to": 772, - "id": "0x02" - } - ], - "login.toServer.cookie_response": [ - { - "from": 766, - "to": 772, - "id": "0x04" - } - ], - "login.toServer.encryption_begin": [ - { - "from": 735, - "to": 763, - "id": "0x01" - }, - { - "from": 764, - "to": 765, - "id": "0x01" - }, - { - "from": 766, - "to": 772, - "id": "0x01" - } - ], - "login.toServer.login_acknowledged": [ - { - "from": 764, - "to": 765, - "id": "0x03" - }, - { - "from": 766, - "to": 772, - "id": "0x03" - } - ], - "login.toServer.login_plugin_response": [ - { - "from": 735, - "to": 763, - "id": "0x02" - }, - { - "from": 764, - "to": 765, - "id": "0x02" - }, - { - "from": 766, - "to": 772, - "id": "0x02" - } - ], - "login.toServer.login_start": [ - { - "from": 735, - "to": 763, - "id": "0x00" - }, - { - "from": 764, - "to": 765, - "id": "0x00" - }, - { - "from": 766, - "to": 772, - "id": "0x00" - } - ], - "configuration.toClient.add_resource_pack": [ - { - "from": 765, - "to": 765, - "id": "0x07" - }, - { - "from": 766, - "to": 766, - "id": "0x09" - }, - { - "from": 767, - "to": 770, - "id": "0x09" - }, - { - "from": 771, - "to": 772, - "id": "0x09" - } - ], - "configuration.toClient.clear_dialog": [ - { - "from": 771, - "to": 772, - "id": "0x11" - } - ], - "configuration.toClient.cookie_request": [ - { - "from": 766, - "to": 766, - "id": "0x00" - }, - { - "from": 767, - "to": 770, - "id": "0x00" - }, - { - "from": 771, - "to": 772, - "id": "0x00" - } - ], - "configuration.toClient.custom_payload": [ - { - "from": 764, - "to": 764, - "id": "0x00" - }, - { - "from": 765, - "to": 765, - "id": "0x00" - }, - { - "from": 766, - "to": 766, - "id": "0x01" - }, - { - "from": 767, - "to": 770, - "id": "0x01" - }, - { - "from": 771, - "to": 772, - "id": "0x01" - } - ], - "configuration.toClient.custom_report_details": [ - { - "from": 767, - "to": 770, - "id": "0x0F" - }, - { - "from": 771, - "to": 772, - "id": "0x0F" - } - ], - "configuration.toClient.disconnect": [ - { - "from": 764, - "to": 764, - "id": "0x01" - }, - { - "from": 765, - "to": 765, - "id": "0x01" - }, - { - "from": 766, - "to": 766, - "id": "0x02" - }, - { - "from": 767, - "to": 770, - "id": "0x02" - }, - { - "from": 771, - "to": 772, - "id": "0x02" - } - ], - "configuration.toClient.feature_flags": [ - { - "from": 764, - "to": 764, - "id": "0x07" - }, - { - "from": 765, - "to": 765, - "id": "0x08" - }, - { - "from": 766, - "to": 766, - "id": "0x0C" - }, - { - "from": 767, - "to": 770, - "id": "0x0C" - }, - { - "from": 771, - "to": 772, - "id": "0x0C" - } - ], - "configuration.toClient.finish_configuration": [ - { - "from": 764, - "to": 764, - "id": "0x02" - }, - { - "from": 765, - "to": 765, - "id": "0x02" - }, - { - "from": 766, - "to": 766, - "id": "0x03" - }, - { - "from": 767, - "to": 770, - "id": "0x03" - }, - { - "from": 771, - "to": 772, - "id": "0x03" - } - ], - "configuration.toClient.keep_alive": [ - { - "from": 764, - "to": 764, - "id": "0x03" - }, - { - "from": 765, - "to": 765, - "id": "0x03" - }, - { - "from": 766, - "to": 766, - "id": "0x04" - }, - { - "from": 767, - "to": 770, - "id": "0x04" - }, - { - "from": 771, - "to": 772, - "id": "0x04" - } - ], - "configuration.toClient.ping": [ - { - "from": 764, - "to": 764, - "id": "0x04" - }, - { - "from": 765, - "to": 765, - "id": "0x04" - }, - { - "from": 766, - "to": 766, - "id": "0x05" - }, - { - "from": 767, - "to": 770, - "id": "0x05" - }, - { - "from": 771, - "to": 772, - "id": "0x05" - } - ], - "configuration.toClient.registry_data": [ - { - "from": 764, - "to": 764, - "id": "0x05" - }, - { - "from": 765, - "to": 765, - "id": "0x05" - }, - { - "from": 766, - "to": 766, - "id": "0x07" - }, - { - "from": 767, - "to": 770, - "id": "0x07" - }, - { - "from": 771, - "to": 772, - "id": "0x07" - } - ], - "configuration.toClient.remove_resource_pack": [ - { - "from": 765, - "to": 765, - "id": "0x06" - }, - { - "from": 766, - "to": 766, - "id": "0x08" - }, - { - "from": 767, - "to": 770, - "id": "0x08" - }, - { - "from": 771, - "to": 772, - "id": "0x08" - } - ], - "configuration.toClient.reset_chat": [ - { - "from": 766, - "to": 766, - "id": "0x06" - }, - { - "from": 767, - "to": 770, - "id": "0x06" - }, - { - "from": 771, - "to": 772, - "id": "0x06" - } - ], - "configuration.toClient.resource_pack_send": [ - { - "from": 764, - "to": 764, - "id": "0x06" - } - ], - "configuration.toClient.select_known_packs": [ - { - "from": 766, - "to": 766, - "id": "0x0E" - }, - { - "from": 767, - "to": 770, - "id": "0x0E" - }, - { - "from": 771, - "to": 772, - "id": "0x0E" - } - ], - "configuration.toClient.server_links": [ - { - "from": 767, - "to": 770, - "id": "0x10" - }, - { - "from": 771, - "to": 772, - "id": "0x10" - } - ], - "configuration.toClient.show_dialog": [ - { - "from": 771, - "to": 772, - "id": "0x12" - } - ], - "configuration.toClient.store_cookie": [ - { - "from": 766, - "to": 766, - "id": "0x0A" - }, - { - "from": 767, - "to": 770, - "id": "0x0A" - }, - { - "from": 771, - "to": 772, - "id": "0x0A" - } - ], - "configuration.toClient.tags": [ - { - "from": 764, - "to": 764, - "id": "0x08" - }, - { - "from": 765, - "to": 765, - "id": "0x09" - }, - { - "from": 766, - "to": 766, - "id": "0x0D" - }, - { - "from": 767, - "to": 770, - "id": "0x0D" - }, - { - "from": 771, - "to": 772, - "id": "0x0D" - } - ], - "configuration.toClient.transfer": [ - { - "from": 766, - "to": 766, - "id": "0x0B" - }, - { - "from": 767, - "to": 770, - "id": "0x0B" - }, - { - "from": 771, - "to": 772, - "id": "0x0B" - } - ], - "configuration.toServer.cookie_response": [ - { - "from": 766, - "to": 766, - "id": "0x01" - }, - { - "from": 767, - "to": 770, - "id": "0x01" - }, - { - "from": 771, - "to": 772, - "id": "0x01" - } - ], - "configuration.toServer.custom_click_action": [ - { - "from": 771, - "to": 772, - "id": "0x08" - } - ], - "configuration.toServer.custom_payload": [ - { - "from": 764, - "to": 765, - "id": "0x01" - }, - { - "from": 766, - "to": 766, - "id": "0x02" - }, - { - "from": 767, - "to": 770, - "id": "0x02" - }, - { - "from": 771, - "to": 772, - "id": "0x02" - } - ], - "configuration.toServer.custom_report_details": [ - { - "from": 767, - "to": 770, - "id": "0x08" - } - ], - "configuration.toServer.finish_configuration": [ - { - "from": 764, - "to": 765, - "id": "0x02" - }, - { - "from": 766, - "to": 766, - "id": "0x03" - }, - { - "from": 767, - "to": 770, - "id": "0x03" - }, - { - "from": 771, - "to": 772, - "id": "0x03" - } - ], - "configuration.toServer.keep_alive": [ - { - "from": 764, - "to": 765, - "id": "0x03" - }, - { - "from": 766, - "to": 766, - "id": "0x04" - }, - { - "from": 767, - "to": 770, - "id": "0x04" - }, - { - "from": 771, - "to": 772, - "id": "0x04" - } - ], - "configuration.toServer.pong": [ - { - "from": 764, - "to": 765, - "id": "0x04" - }, - { - "from": 766, - "to": 766, - "id": "0x05" - }, - { - "from": 767, - "to": 770, - "id": "0x05" - }, - { - "from": 771, - "to": 772, - "id": "0x05" - } - ], - "configuration.toServer.resource_pack_receive": [ - { - "from": 764, - "to": 765, - "id": "0x05" - }, - { - "from": 766, - "to": 766, - "id": "0x06" - }, - { - "from": 767, - "to": 770, - "id": "0x06" - }, - { - "from": 771, - "to": 772, - "id": "0x06" - } - ], - "configuration.toServer.select_known_packs": [ - { - "from": 766, - "to": 766, - "id": "0x07" - }, - { - "from": 767, - "to": 770, - "id": "0x07" - }, - { - "from": 771, - "to": 772, - "id": "0x07" - } - ], - "configuration.toServer.server_links": [ - { - "from": 767, - "to": 770, - "id": "0x09" - } - ], - "configuration.toServer.settings": [ - { - "from": 764, - "to": 765, - "id": "0x00" - }, - { - "from": 766, - "to": 766, - "id": "0x00" - }, - { - "from": 767, - "to": 770, - "id": "0x00" - }, - { - "from": 771, - "to": 772, - "id": "0x00" - } - ], - "play.toClient.abilities": [ - { - "from": 735, - "to": 736, - "id": "0x31" - }, - { - "from": 751, - "to": 754, - "id": "0x30" - }, - { - "from": 755, - "to": 755, - "id": "0x32" - }, - { - "from": 756, - "to": 756, - "id": "0x32" - }, - { - "from": 757, - "to": 758, - "id": "0x32" - }, - { - "from": 759, - "to": 759, - "id": "0x2F" - }, - { - "from": 760, - "to": 760, - "id": "0x31" - }, - { - "from": 761, - "to": 761, - "id": "0x30" - }, - { - "from": 762, - "to": 763, - "id": "0x34" - }, - { - "from": 764, - "to": 764, - "id": "0x36" - }, - { - "from": 765, - "to": 765, - "id": "0x36" - }, - { - "from": 766, - "to": 766, - "id": "0x38" - }, - { - "from": 767, - "to": 767, - "id": "0x38" - }, - { - "from": 768, - "to": 769, - "id": "0x3A" - }, - { - "from": 770, - "to": 770, - "id": "0x39" - }, - { - "from": 771, - "to": 772, - "id": "0x39" - } - ], - "play.toClient.acknowledge_player_digging": [ - { - "from": 735, - "to": 736, - "id": "0x07" - }, - { - "from": 751, - "to": 754, - "id": "0x07" - }, - { - "from": 755, - "to": 755, - "id": "0x08" - }, - { - "from": 756, - "to": 756, - "id": "0x08" - }, - { - "from": 757, - "to": 758, - "id": "0x08" - }, - { - "from": 759, - "to": 759, - "id": "0x05" - }, - { - "from": 760, - "to": 760, - "id": "0x05" - }, - { - "from": 761, - "to": 761, - "id": "0x05" - }, - { - "from": 762, - "to": 763, - "id": "0x06" - }, - { - "from": 764, - "to": 764, - "id": "0x05" - }, - { - "from": 765, - "to": 765, - "id": "0x05" - }, - { - "from": 766, - "to": 766, - "id": "0x05" - }, - { - "from": 767, - "to": 767, - "id": "0x05" - }, - { - "from": 768, - "to": 769, - "id": "0x05" - }, - { - "from": 770, - "to": 770, - "id": "0x04" - }, - { - "from": 771, - "to": 772, - "id": "0x04" - } - ], - "play.toClient.action_bar": [ - { - "from": 755, - "to": 755, - "id": "0x41" - }, - { - "from": 756, - "to": 756, - "id": "0x41" - }, - { - "from": 757, - "to": 758, - "id": "0x41" - }, - { - "from": 759, - "to": 759, - "id": "0x40" - }, - { - "from": 760, - "to": 760, - "id": "0x43" - }, - { - "from": 761, - "to": 761, - "id": "0x42" - }, - { - "from": 762, - "to": 763, - "id": "0x46" - }, - { - "from": 764, - "to": 764, - "id": "0x48" - }, - { - "from": 765, - "to": 765, - "id": "0x4A" - }, - { - "from": 766, - "to": 766, - "id": "0x4C" - }, - { - "from": 767, - "to": 767, - "id": "0x4C" - }, - { - "from": 768, - "to": 769, - "id": "0x51" - }, - { - "from": 770, - "to": 770, - "id": "0x50" - }, - { - "from": 771, - "to": 772, - "id": "0x50" - } - ], - "play.toClient.add_resource_pack": [ - { - "from": 765, - "to": 765, - "id": "0x44" - }, - { - "from": 766, - "to": 766, - "id": "0x46" - }, - { - "from": 767, - "to": 767, - "id": "0x46" - }, - { - "from": 768, - "to": 769, - "id": "0x4B" - }, - { - "from": 770, - "to": 770, - "id": "0x4A" - }, - { - "from": 771, - "to": 772, - "id": "0x4A" - } - ], - "play.toClient.advancements": [ - { - "from": 735, - "to": 736, - "id": "0x57" - }, - { - "from": 751, - "to": 754, - "id": "0x57" - }, - { - "from": 755, - "to": 755, - "id": "0x62" - }, - { - "from": 756, - "to": 756, - "id": "0x62" - }, - { - "from": 757, - "to": 758, - "id": "0x63" - }, - { - "from": 759, - "to": 759, - "id": "0x64" - }, - { - "from": 760, - "to": 760, - "id": "0x67" - }, - { - "from": 761, - "to": 761, - "id": "0x65" - }, - { - "from": 762, - "to": 763, - "id": "0x69" - }, - { - "from": 764, - "to": 764, - "id": "0x6C" - }, - { - "from": 765, - "to": 765, - "id": "0x70" - }, - { - "from": 766, - "to": 766, - "id": "0x74" - }, - { - "from": 767, - "to": 767, - "id": "0x74" - }, - { - "from": 768, - "to": 769, - "id": "0x7B" - }, - { - "from": 770, - "to": 770, - "id": "0x7B" - }, - { - "from": 771, - "to": 772, - "id": "0x7B" - } - ], - "play.toClient.animation": [ - { - "from": 735, - "to": 736, - "id": "0x05" - }, - { - "from": 751, - "to": 754, - "id": "0x05" - }, - { - "from": 755, - "to": 755, - "id": "0x06" - }, - { - "from": 756, - "to": 756, - "id": "0x06" - }, - { - "from": 757, - "to": 758, - "id": "0x06" - }, - { - "from": 759, - "to": 759, - "id": "0x03" - }, - { - "from": 760, - "to": 760, - "id": "0x03" - }, - { - "from": 761, - "to": 761, - "id": "0x03" - }, - { - "from": 762, - "to": 763, - "id": "0x04" - }, - { - "from": 764, - "to": 764, - "id": "0x03" - }, - { - "from": 765, - "to": 765, - "id": "0x03" - }, - { - "from": 766, - "to": 766, - "id": "0x03" - }, - { - "from": 767, - "to": 767, - "id": "0x03" - }, - { - "from": 768, - "to": 769, - "id": "0x03" - }, - { - "from": 770, - "to": 770, - "id": "0x02" - }, - { - "from": 771, - "to": 772, - "id": "0x02" - } - ], - "play.toClient.attach_entity": [ - { - "from": 735, - "to": 736, - "id": "0x45" - }, - { - "from": 751, - "to": 754, - "id": "0x45" - }, - { - "from": 755, - "to": 755, - "id": "0x4E" - }, - { - "from": 756, - "to": 756, - "id": "0x4E" - }, - { - "from": 757, - "to": 758, - "id": "0x4E" - }, - { - "from": 759, - "to": 759, - "id": "0x4E" - }, - { - "from": 760, - "to": 760, - "id": "0x51" - }, - { - "from": 761, - "to": 761, - "id": "0x4F" - }, - { - "from": 762, - "to": 763, - "id": "0x53" - }, - { - "from": 764, - "to": 764, - "id": "0x55" - }, - { - "from": 765, - "to": 765, - "id": "0x57" - }, - { - "from": 766, - "to": 766, - "id": "0x59" - }, - { - "from": 767, - "to": 767, - "id": "0x59" - }, - { - "from": 768, - "to": 769, - "id": "0x5E" - }, - { - "from": 770, - "to": 770, - "id": "0x5D" - }, - { - "from": 771, - "to": 772, - "id": "0x5D" - } - ], - "play.toClient.block_action": [ - { - "from": 735, - "to": 736, - "id": "0x0A" - }, - { - "from": 751, - "to": 754, - "id": "0x0A" - }, - { - "from": 755, - "to": 755, - "id": "0x0B" - }, - { - "from": 756, - "to": 756, - "id": "0x0B" - }, - { - "from": 757, - "to": 758, - "id": "0x0B" - }, - { - "from": 759, - "to": 759, - "id": "0x08" - }, - { - "from": 760, - "to": 760, - "id": "0x08" - }, - { - "from": 761, - "to": 761, - "id": "0x08" - }, - { - "from": 762, - "to": 763, - "id": "0x09" - }, - { - "from": 764, - "to": 764, - "id": "0x08" - }, - { - "from": 765, - "to": 765, - "id": "0x08" - }, - { - "from": 766, - "to": 766, - "id": "0x08" - }, - { - "from": 767, - "to": 767, - "id": "0x08" - }, - { - "from": 768, - "to": 769, - "id": "0x08" - }, - { - "from": 770, - "to": 770, - "id": "0x07" - }, - { - "from": 771, - "to": 772, - "id": "0x07" - } - ], - "play.toClient.block_break_animation": [ - { - "from": 735, - "to": 736, - "id": "0x08" - }, - { - "from": 751, - "to": 754, - "id": "0x08" - }, - { - "from": 755, - "to": 755, - "id": "0x09" - }, - { - "from": 756, - "to": 756, - "id": "0x09" - }, - { - "from": 757, - "to": 758, - "id": "0x09" - }, - { - "from": 759, - "to": 759, - "id": "0x06" - }, - { - "from": 760, - "to": 760, - "id": "0x06" - }, - { - "from": 761, - "to": 761, - "id": "0x06" - }, - { - "from": 762, - "to": 763, - "id": "0x07" - }, - { - "from": 764, - "to": 764, - "id": "0x06" - }, - { - "from": 765, - "to": 765, - "id": "0x06" - }, - { - "from": 766, - "to": 766, - "id": "0x06" - }, - { - "from": 767, - "to": 767, - "id": "0x06" - }, - { - "from": 768, - "to": 769, - "id": "0x06" - }, - { - "from": 770, - "to": 770, - "id": "0x05" - }, - { - "from": 771, - "to": 772, - "id": "0x05" - } - ], - "play.toClient.block_change": [ - { - "from": 735, - "to": 736, - "id": "0x0B" - }, - { - "from": 751, - "to": 754, - "id": "0x0B" - }, - { - "from": 755, - "to": 755, - "id": "0x0C" - }, - { - "from": 756, - "to": 756, - "id": "0x0C" - }, - { - "from": 757, - "to": 758, - "id": "0x0C" - }, - { - "from": 759, - "to": 759, - "id": "0x09" - }, - { - "from": 760, - "to": 760, - "id": "0x09" - }, - { - "from": 761, - "to": 761, - "id": "0x09" - }, - { - "from": 762, - "to": 763, - "id": "0x0A" - }, - { - "from": 764, - "to": 764, - "id": "0x09" - }, - { - "from": 765, - "to": 765, - "id": "0x09" - }, - { - "from": 766, - "to": 766, - "id": "0x09" - }, - { - "from": 767, - "to": 767, - "id": "0x09" - }, - { - "from": 768, - "to": 769, - "id": "0x09" - }, - { - "from": 770, - "to": 770, - "id": "0x08" - }, - { - "from": 771, - "to": 772, - "id": "0x08" - } - ], - "play.toClient.boss_bar": [ - { - "from": 735, - "to": 736, - "id": "0x0C" - }, - { - "from": 751, - "to": 754, - "id": "0x0C" - }, - { - "from": 755, - "to": 755, - "id": "0x0D" - }, - { - "from": 756, - "to": 756, - "id": "0x0D" - }, - { - "from": 757, - "to": 758, - "id": "0x0D" - }, - { - "from": 759, - "to": 759, - "id": "0x0A" - }, - { - "from": 760, - "to": 760, - "id": "0x0A" - }, - { - "from": 761, - "to": 761, - "id": "0x0A" - }, - { - "from": 762, - "to": 763, - "id": "0x0B" - }, - { - "from": 764, - "to": 764, - "id": "0x0A" - }, - { - "from": 765, - "to": 765, - "id": "0x0A" - }, - { - "from": 766, - "to": 766, - "id": "0x0A" - }, - { - "from": 767, - "to": 767, - "id": "0x0A" - }, - { - "from": 768, - "to": 769, - "id": "0x0A" - }, - { - "from": 770, - "to": 770, - "id": "0x09" - }, - { - "from": 771, - "to": 772, - "id": "0x09" - } - ], - "play.toClient.bundle_delimiter": [ - { - "from": 762, - "to": 763, - "id": "0x00" - }, - { - "from": 764, - "to": 764, - "id": "0x00" - }, - { - "from": 765, - "to": 765, - "id": "0x00" - }, - { - "from": 766, - "to": 766, - "id": "0x00" - }, - { - "from": 767, - "to": 767, - "id": "0x00" - }, - { - "from": 768, - "to": 769, - "id": "0x00" - }, - { - "from": 770, - "to": 770, - "id": "0x00" - }, - { - "from": 771, - "to": 772, - "id": "0x00" - } - ], - "play.toClient.camera": [ - { - "from": 735, - "to": 736, - "id": "0x3E" - }, - { - "from": 751, - "to": 754, - "id": "0x3E" - }, - { - "from": 755, - "to": 755, - "id": "0x47" - }, - { - "from": 756, - "to": 756, - "id": "0x47" - }, - { - "from": 757, - "to": 758, - "id": "0x47" - }, - { - "from": 759, - "to": 759, - "id": "0x46" - }, - { - "from": 760, - "to": 760, - "id": "0x49" - }, - { - "from": 761, - "to": 761, - "id": "0x48" - }, - { - "from": 762, - "to": 763, - "id": "0x4C" - }, - { - "from": 764, - "to": 764, - "id": "0x4E" - }, - { - "from": 765, - "to": 765, - "id": "0x50" - }, - { - "from": 766, - "to": 766, - "id": "0x52" - }, - { - "from": 767, - "to": 767, - "id": "0x52" - }, - { - "from": 768, - "to": 769, - "id": "0x57" - }, - { - "from": 770, - "to": 770, - "id": "0x56" - }, - { - "from": 771, - "to": 772, - "id": "0x56" - } - ], - "play.toClient.chat": [ - { - "from": 735, - "to": 736, - "id": "0x0E" - }, - { - "from": 751, - "to": 754, - "id": "0x0E" - }, - { - "from": 755, - "to": 755, - "id": "0x0F" - }, - { - "from": 756, - "to": 756, - "id": "0x0F" - }, - { - "from": 757, - "to": 758, - "id": "0x0F" - } - ], - "play.toClient.chat_preview": [ - { - "from": 759, - "to": 759, - "id": "0x0C" - }, - { - "from": 760, - "to": 760, - "id": "0x0C" - } - ], - "play.toClient.chat_suggestions": [ - { - "from": 760, - "to": 760, - "id": "0x15" - }, - { - "from": 761, - "to": 761, - "id": "0x14" - }, - { - "from": 762, - "to": 763, - "id": "0x16" - }, - { - "from": 764, - "to": 764, - "id": "0x17" - }, - { - "from": 765, - "to": 765, - "id": "0x17" - }, - { - "from": 766, - "to": 766, - "id": "0x18" - }, - { - "from": 767, - "to": 767, - "id": "0x18" - }, - { - "from": 768, - "to": 769, - "id": "0x18" - }, - { - "from": 770, - "to": 770, - "id": "0x17" - }, - { - "from": 771, - "to": 772, - "id": "0x17" - } - ], - "play.toClient.chunk_batch_finished": [ - { - "from": 764, - "to": 764, - "id": "0x0C" - }, - { - "from": 765, - "to": 765, - "id": "0x0C" - }, - { - "from": 766, - "to": 766, - "id": "0x0C" - }, - { - "from": 767, - "to": 767, - "id": "0x0C" - }, - { - "from": 768, - "to": 769, - "id": "0x0C" - }, - { - "from": 770, - "to": 770, - "id": "0x0B" - }, - { - "from": 771, - "to": 772, - "id": "0x0B" - } - ], - "play.toClient.chunk_batch_start": [ - { - "from": 764, - "to": 764, - "id": "0x0D" - }, - { - "from": 765, - "to": 765, - "id": "0x0D" - }, - { - "from": 766, - "to": 766, - "id": "0x0D" - }, - { - "from": 767, - "to": 767, - "id": "0x0D" - }, - { - "from": 768, - "to": 769, - "id": "0x0D" - }, - { - "from": 770, - "to": 770, - "id": "0x0C" - }, - { - "from": 771, - "to": 772, - "id": "0x0C" - } - ], - "play.toClient.chunk_biomes": [ - { - "from": 762, - "to": 763, - "id": "0x0D" - }, - { - "from": 764, - "to": 764, - "id": "0x0E" - }, - { - "from": 765, - "to": 765, - "id": "0x0E" - }, - { - "from": 766, - "to": 766, - "id": "0x0E" - }, - { - "from": 767, - "to": 767, - "id": "0x0E" - }, - { - "from": 768, - "to": 769, - "id": "0x0E" - }, - { - "from": 770, - "to": 770, - "id": "0x0D" - }, - { - "from": 771, - "to": 772, - "id": "0x0D" - } - ], - "play.toClient.clear_dialog": [ - { - "from": 771, - "to": 772, - "id": "0x84" - } - ], - "play.toClient.clear_titles": [ - { - "from": 755, - "to": 755, - "id": "0x10" - }, - { - "from": 756, - "to": 756, - "id": "0x10" - }, - { - "from": 757, - "to": 758, - "id": "0x10" - }, - { - "from": 759, - "to": 759, - "id": "0x0D" - }, - { - "from": 760, - "to": 760, - "id": "0x0D" - }, - { - "from": 761, - "to": 761, - "id": "0x0C" - }, - { - "from": 762, - "to": 763, - "id": "0x0E" - }, - { - "from": 764, - "to": 764, - "id": "0x0F" - }, - { - "from": 765, - "to": 765, - "id": "0x0F" - }, - { - "from": 766, - "to": 766, - "id": "0x0F" - }, - { - "from": 767, - "to": 767, - "id": "0x0F" - }, - { - "from": 768, - "to": 769, - "id": "0x0F" - }, - { - "from": 770, - "to": 770, - "id": "0x0E" - }, - { - "from": 771, - "to": 772, - "id": "0x0E" - } - ], - "play.toClient.close_window": [ - { - "from": 735, - "to": 736, - "id": "0x13" - }, - { - "from": 751, - "to": 754, - "id": "0x12" - }, - { - "from": 755, - "to": 755, - "id": "0x13" - }, - { - "from": 756, - "to": 756, - "id": "0x13" - }, - { - "from": 757, - "to": 758, - "id": "0x13" - }, - { - "from": 759, - "to": 759, - "id": "0x10" - }, - { - "from": 760, - "to": 760, - "id": "0x10" - }, - { - "from": 761, - "to": 761, - "id": "0x0F" - }, - { - "from": 762, - "to": 763, - "id": "0x11" - }, - { - "from": 764, - "to": 764, - "id": "0x12" - }, - { - "from": 765, - "to": 765, - "id": "0x12" - }, - { - "from": 766, - "to": 766, - "id": "0x12" - }, - { - "from": 767, - "to": 767, - "id": "0x12" - }, - { - "from": 768, - "to": 769, - "id": "0x12" - }, - { - "from": 770, - "to": 770, - "id": "0x11" - }, - { - "from": 771, - "to": 772, - "id": "0x11" - } - ], - "play.toClient.collect": [ - { - "from": 735, - "to": 736, - "id": "0x55" - }, - { - "from": 751, - "to": 754, - "id": "0x55" - }, - { - "from": 755, - "to": 755, - "id": "0x60" - }, - { - "from": 756, - "to": 756, - "id": "0x60" - }, - { - "from": 757, - "to": 758, - "id": "0x61" - }, - { - "from": 759, - "to": 759, - "id": "0x62" - }, - { - "from": 760, - "to": 760, - "id": "0x65" - }, - { - "from": 761, - "to": 761, - "id": "0x63" - }, - { - "from": 762, - "to": 763, - "id": "0x67" - }, - { - "from": 764, - "to": 764, - "id": "0x6A" - }, - { - "from": 765, - "to": 765, - "id": "0x6C" - }, - { - "from": 766, - "to": 766, - "id": "0x6F" - }, - { - "from": 767, - "to": 767, - "id": "0x6F" - }, - { - "from": 768, - "to": 769, - "id": "0x76" - }, - { - "from": 770, - "to": 770, - "id": "0x75" - }, - { - "from": 771, - "to": 772, - "id": "0x75" - } - ], - "play.toClient.combat_event": [ - { - "from": 735, - "to": 736, - "id": "0x32" - }, - { - "from": 751, - "to": 754, - "id": "0x31" - } - ], - "play.toClient.cookie_request": [ - { - "from": 766, - "to": 766, - "id": "0x16" - }, - { - "from": 767, - "to": 767, - "id": "0x16" - }, - { - "from": 768, - "to": 769, - "id": "0x16" - }, - { - "from": 770, - "to": 770, - "id": "0x15" - }, - { - "from": 771, - "to": 772, - "id": "0x15" - } - ], - "play.toClient.craft_progress_bar": [ - { - "from": 735, - "to": 736, - "id": "0x15" - }, - { - "from": 751, - "to": 754, - "id": "0x14" - }, - { - "from": 755, - "to": 755, - "id": "0x15" - }, - { - "from": 756, - "to": 756, - "id": "0x15" - }, - { - "from": 757, - "to": 758, - "id": "0x15" - }, - { - "from": 759, - "to": 759, - "id": "0x12" - }, - { - "from": 760, - "to": 760, - "id": "0x12" - }, - { - "from": 761, - "to": 761, - "id": "0x11" - }, - { - "from": 762, - "to": 763, - "id": "0x13" - }, - { - "from": 764, - "to": 764, - "id": "0x14" - }, - { - "from": 765, - "to": 765, - "id": "0x14" - }, - { - "from": 766, - "to": 766, - "id": "0x14" - }, - { - "from": 767, - "to": 767, - "id": "0x14" - }, - { - "from": 768, - "to": 769, - "id": "0x14" - }, - { - "from": 770, - "to": 770, - "id": "0x13" - }, - { - "from": 771, - "to": 772, - "id": "0x13" - } - ], - "play.toClient.craft_recipe_response": [ - { - "from": 735, - "to": 736, - "id": "0x30" - }, - { - "from": 751, - "to": 754, - "id": "0x2F" - }, - { - "from": 755, - "to": 755, - "id": "0x31" - }, - { - "from": 756, - "to": 756, - "id": "0x31" - }, - { - "from": 757, - "to": 758, - "id": "0x31" - }, - { - "from": 759, - "to": 759, - "id": "0x2E" - }, - { - "from": 760, - "to": 760, - "id": "0x30" - }, - { - "from": 761, - "to": 761, - "id": "0x2F" - }, - { - "from": 762, - "to": 763, - "id": "0x33" - }, - { - "from": 764, - "to": 764, - "id": "0x35" - }, - { - "from": 765, - "to": 765, - "id": "0x35" - }, - { - "from": 766, - "to": 766, - "id": "0x37" - }, - { - "from": 767, - "to": 767, - "id": "0x37" - }, - { - "from": 768, - "to": 769, - "id": "0x39" - }, - { - "from": 770, - "to": 770, - "id": "0x38" - }, - { - "from": 771, - "to": 772, - "id": "0x38" - } - ], - "play.toClient.custom_payload": [ - { - "from": 735, - "to": 736, - "id": "0x18" - }, - { - "from": 751, - "to": 754, - "id": "0x17" - }, - { - "from": 755, - "to": 755, - "id": "0x18" - }, - { - "from": 756, - "to": 756, - "id": "0x18" - }, - { - "from": 757, - "to": 758, - "id": "0x18" - }, - { - "from": 759, - "to": 759, - "id": "0x15" - }, - { - "from": 760, - "to": 760, - "id": "0x16" - }, - { - "from": 761, - "to": 761, - "id": "0x15" - }, - { - "from": 762, - "to": 763, - "id": "0x17" - }, - { - "from": 764, - "to": 764, - "id": "0x18" - }, - { - "from": 765, - "to": 765, - "id": "0x18" - }, - { - "from": 766, - "to": 766, - "id": "0x19" - }, - { - "from": 767, - "to": 767, - "id": "0x19" - }, - { - "from": 768, - "to": 769, - "id": "0x19" - }, - { - "from": 770, - "to": 770, - "id": "0x18" - }, - { - "from": 771, - "to": 772, - "id": "0x18" - } - ], - "play.toClient.custom_report_details": [ - { - "from": 767, - "to": 767, - "id": "0x7A" - }, - { - "from": 768, - "to": 769, - "id": "0x81" - }, - { - "from": 770, - "to": 770, - "id": "0x81" - }, - { - "from": 771, - "to": 772, - "id": "0x81" - } - ], - "play.toClient.damage_event": [ - { - "from": 762, - "to": 763, - "id": "0x18" - }, - { - "from": 764, - "to": 764, - "id": "0x19" - }, - { - "from": 765, - "to": 765, - "id": "0x19" - }, - { - "from": 766, - "to": 766, - "id": "0x1A" - }, - { - "from": 767, - "to": 767, - "id": "0x1A" - }, - { - "from": 768, - "to": 769, - "id": "0x1A" - }, - { - "from": 770, - "to": 770, - "id": "0x19" - }, - { - "from": 771, - "to": 772, - "id": "0x19" - } - ], - "play.toClient.death_combat_event": [ - { - "from": 755, - "to": 755, - "id": "0x35" - }, - { - "from": 756, - "to": 756, - "id": "0x35" - }, - { - "from": 757, - "to": 758, - "id": "0x35" - }, - { - "from": 759, - "to": 759, - "id": "0x33" - }, - { - "from": 760, - "to": 760, - "id": "0x36" - }, - { - "from": 761, - "to": 761, - "id": "0x34" - }, - { - "from": 762, - "to": 763, - "id": "0x38" - }, - { - "from": 764, - "to": 764, - "id": "0x3A" - }, - { - "from": 765, - "to": 765, - "id": "0x3A" - }, - { - "from": 766, - "to": 766, - "id": "0x3C" - }, - { - "from": 767, - "to": 767, - "id": "0x3C" - }, - { - "from": 768, - "to": 769, - "id": "0x3E" - }, - { - "from": 770, - "to": 770, - "id": "0x3D" - }, - { - "from": 771, - "to": 772, - "id": "0x3D" - } - ], - "play.toClient.debug_sample": [ - { - "from": 766, - "to": 766, - "id": "0x1B" - }, - { - "from": 767, - "to": 767, - "id": "0x1B" - }, - { - "from": 768, - "to": 769, - "id": "0x1B" - }, - { - "from": 770, - "to": 770, - "id": "0x1A" - }, - { - "from": 771, - "to": 772, - "id": "0x1A" - } - ], - "play.toClient.declare_commands": [ - { - "from": 735, - "to": 736, - "id": "0x11" - }, - { - "from": 751, - "to": 754, - "id": "0x10" - }, - { - "from": 755, - "to": 755, - "id": "0x12" - }, - { - "from": 756, - "to": 756, - "id": "0x12" - }, - { - "from": 757, - "to": 758, - "id": "0x12" - }, - { - "from": 759, - "to": 759, - "id": "0x0F" - }, - { - "from": 760, - "to": 760, - "id": "0x0F" - }, - { - "from": 761, - "to": 761, - "id": "0x0E" - }, - { - "from": 762, - "to": 763, - "id": "0x10" - }, - { - "from": 764, - "to": 764, - "id": "0x11" - }, - { - "from": 765, - "to": 765, - "id": "0x11" - }, - { - "from": 766, - "to": 766, - "id": "0x11" - }, - { - "from": 767, - "to": 767, - "id": "0x11" - }, - { - "from": 768, - "to": 769, - "id": "0x11" - }, - { - "from": 770, - "to": 770, - "id": "0x10" - }, - { - "from": 771, - "to": 772, - "id": "0x10" - } - ], - "play.toClient.declare_recipes": [ - { - "from": 735, - "to": 736, - "id": "0x5A" - }, - { - "from": 751, - "to": 754, - "id": "0x5A" - }, - { - "from": 755, - "to": 755, - "id": "0x65" - }, - { - "from": 756, - "to": 756, - "id": "0x65" - }, - { - "from": 757, - "to": 758, - "id": "0x66" - }, - { - "from": 759, - "to": 759, - "id": "0x67" - }, - { - "from": 760, - "to": 760, - "id": "0x6A" - }, - { - "from": 761, - "to": 761, - "id": "0x69" - }, - { - "from": 762, - "to": 763, - "id": "0x6D" - }, - { - "from": 764, - "to": 764, - "id": "0x6F" - }, - { - "from": 765, - "to": 765, - "id": "0x73" - }, - { - "from": 766, - "to": 766, - "id": "0x77" - }, - { - "from": 767, - "to": 767, - "id": "0x77" - }, - { - "from": 768, - "to": 769, - "id": "0x7E" - }, - { - "from": 770, - "to": 770, - "id": "0x7E" - }, - { - "from": 771, - "to": 772, - "id": "0x7E" - } - ], - "play.toClient.destroy_entity": [ - { - "from": 755, - "to": 755, - "id": "0x3A" - } - ], - "play.toClient.difficulty": [ - { - "from": 735, - "to": 736, - "id": "0x0D" - }, - { - "from": 751, - "to": 754, - "id": "0x0D" - }, - { - "from": 755, - "to": 755, - "id": "0x0E" - }, - { - "from": 756, - "to": 756, - "id": "0x0E" - }, - { - "from": 757, - "to": 758, - "id": "0x0E" - }, - { - "from": 759, - "to": 759, - "id": "0x0B" - }, - { - "from": 760, - "to": 760, - "id": "0x0B" - }, - { - "from": 761, - "to": 761, - "id": "0x0B" - }, - { - "from": 762, - "to": 763, - "id": "0x0C" - }, - { - "from": 764, - "to": 764, - "id": "0x0B" - }, - { - "from": 765, - "to": 765, - "id": "0x0B" - }, - { - "from": 766, - "to": 766, - "id": "0x0B" - }, - { - "from": 767, - "to": 767, - "id": "0x0B" - }, - { - "from": 768, - "to": 769, - "id": "0x0B" - }, - { - "from": 770, - "to": 770, - "id": "0x0A" - }, - { - "from": 771, - "to": 772, - "id": "0x0A" - } - ], - "play.toClient.end_combat_event": [ - { - "from": 755, - "to": 755, - "id": "0x33" - }, - { - "from": 756, - "to": 756, - "id": "0x33" - }, - { - "from": 757, - "to": 758, - "id": "0x33" - }, - { - "from": 759, - "to": 759, - "id": "0x31" - }, - { - "from": 760, - "to": 760, - "id": "0x34" - }, - { - "from": 761, - "to": 761, - "id": "0x32" - }, - { - "from": 762, - "to": 763, - "id": "0x36" - }, - { - "from": 764, - "to": 764, - "id": "0x38" - }, - { - "from": 765, - "to": 765, - "id": "0x38" - }, - { - "from": 766, - "to": 766, - "id": "0x3A" - }, - { - "from": 767, - "to": 767, - "id": "0x3A" - }, - { - "from": 768, - "to": 769, - "id": "0x3C" - }, - { - "from": 770, - "to": 770, - "id": "0x3B" - }, - { - "from": 771, - "to": 772, - "id": "0x3B" - } - ], - "play.toClient.enter_combat_event": [ - { - "from": 755, - "to": 755, - "id": "0x34" - }, - { - "from": 756, - "to": 756, - "id": "0x34" - }, - { - "from": 757, - "to": 758, - "id": "0x34" - }, - { - "from": 759, - "to": 759, - "id": "0x32" - }, - { - "from": 760, - "to": 760, - "id": "0x35" - }, - { - "from": 761, - "to": 761, - "id": "0x33" - }, - { - "from": 762, - "to": 763, - "id": "0x37" - }, - { - "from": 764, - "to": 764, - "id": "0x39" - }, - { - "from": 765, - "to": 765, - "id": "0x39" - }, - { - "from": 766, - "to": 766, - "id": "0x3B" - }, - { - "from": 767, - "to": 767, - "id": "0x3B" - }, - { - "from": 768, - "to": 769, - "id": "0x3D" - }, - { - "from": 770, - "to": 770, - "id": "0x3C" - }, - { - "from": 771, - "to": 772, - "id": "0x3C" - } - ], - "play.toClient.entity": [ - { - "from": 735, - "to": 736, - "id": "0x2B" - }, - { - "from": 751, - "to": 754, - "id": "0x2A" - } - ], - "play.toClient.entity_destroy": [ - { - "from": 735, - "to": 736, - "id": "0x37" - }, - { - "from": 751, - "to": 754, - "id": "0x36" - }, - { - "from": 756, - "to": 756, - "id": "0x3A" - }, - { - "from": 757, - "to": 758, - "id": "0x3A" - }, - { - "from": 759, - "to": 759, - "id": "0x38" - }, - { - "from": 760, - "to": 760, - "id": "0x3B" - }, - { - "from": 761, - "to": 761, - "id": "0x3A" - }, - { - "from": 762, - "to": 763, - "id": "0x3E" - }, - { - "from": 764, - "to": 764, - "id": "0x40" - }, - { - "from": 765, - "to": 765, - "id": "0x40" - }, - { - "from": 766, - "to": 766, - "id": "0x42" - }, - { - "from": 767, - "to": 767, - "id": "0x42" - }, - { - "from": 768, - "to": 769, - "id": "0x47" - }, - { - "from": 770, - "to": 770, - "id": "0x46" - }, - { - "from": 771, - "to": 772, - "id": "0x46" - } - ], - "play.toClient.entity_effect": [ - { - "from": 735, - "to": 736, - "id": "0x59" - }, - { - "from": 751, - "to": 754, - "id": "0x59" - }, - { - "from": 755, - "to": 755, - "id": "0x64" - }, - { - "from": 756, - "to": 756, - "id": "0x64" - }, - { - "from": 757, - "to": 758, - "id": "0x65" - }, - { - "from": 759, - "to": 759, - "id": "0x66" - }, - { - "from": 760, - "to": 760, - "id": "0x69" - }, - { - "from": 761, - "to": 761, - "id": "0x68" - }, - { - "from": 762, - "to": 763, - "id": "0x6C" - }, - { - "from": 764, - "to": 764, - "id": "0x6E" - }, - { - "from": 765, - "to": 765, - "id": "0x72" - }, - { - "from": 766, - "to": 766, - "id": "0x76" - }, - { - "from": 767, - "to": 767, - "id": "0x76" - }, - { - "from": 768, - "to": 769, - "id": "0x7D" - }, - { - "from": 770, - "to": 770, - "id": "0x7D" - }, - { - "from": 771, - "to": 772, - "id": "0x7D" - } - ], - "play.toClient.entity_equipment": [ - { - "from": 735, - "to": 736, - "id": "0x47" - }, - { - "from": 751, - "to": 754, - "id": "0x47" - }, - { - "from": 755, - "to": 755, - "id": "0x50" - }, - { - "from": 756, - "to": 756, - "id": "0x50" - }, - { - "from": 757, - "to": 758, - "id": "0x50" - }, - { - "from": 759, - "to": 759, - "id": "0x50" - }, - { - "from": 760, - "to": 760, - "id": "0x53" - }, - { - "from": 761, - "to": 761, - "id": "0x51" - }, - { - "from": 762, - "to": 763, - "id": "0x55" - }, - { - "from": 764, - "to": 764, - "id": "0x57" - }, - { - "from": 765, - "to": 765, - "id": "0x59" - }, - { - "from": 766, - "to": 766, - "id": "0x5B" - }, - { - "from": 767, - "to": 767, - "id": "0x5B" - }, - { - "from": 768, - "to": 769, - "id": "0x60" - }, - { - "from": 770, - "to": 770, - "id": "0x5F" - }, - { - "from": 771, - "to": 772, - "id": "0x5F" - } - ], - "play.toClient.entity_head_rotation": [ - { - "from": 735, - "to": 736, - "id": "0x3B" - }, - { - "from": 751, - "to": 754, - "id": "0x3A" - }, - { - "from": 755, - "to": 755, - "id": "0x3E" - }, - { - "from": 756, - "to": 756, - "id": "0x3E" - }, - { - "from": 757, - "to": 758, - "id": "0x3E" - }, - { - "from": 759, - "to": 759, - "id": "0x3C" - }, - { - "from": 760, - "to": 760, - "id": "0x3F" - }, - { - "from": 761, - "to": 761, - "id": "0x3E" - }, - { - "from": 762, - "to": 763, - "id": "0x42" - }, - { - "from": 764, - "to": 764, - "id": "0x44" - }, - { - "from": 765, - "to": 765, - "id": "0x46" - }, - { - "from": 766, - "to": 766, - "id": "0x48" - }, - { - "from": 767, - "to": 767, - "id": "0x48" - }, - { - "from": 768, - "to": 769, - "id": "0x4D" - }, - { - "from": 770, - "to": 770, - "id": "0x4C" - }, - { - "from": 771, - "to": 772, - "id": "0x4C" - } - ], - "play.toClient.entity_look": [ - { - "from": 735, - "to": 736, - "id": "0x2A" - }, - { - "from": 751, - "to": 754, - "id": "0x29" - }, - { - "from": 755, - "to": 755, - "id": "0x2B" - }, - { - "from": 756, - "to": 756, - "id": "0x2B" - }, - { - "from": 757, - "to": 758, - "id": "0x2B" - }, - { - "from": 759, - "to": 759, - "id": "0x28" - }, - { - "from": 760, - "to": 760, - "id": "0x2A" - }, - { - "from": 761, - "to": 761, - "id": "0x29" - }, - { - "from": 762, - "to": 763, - "id": "0x2D" - }, - { - "from": 764, - "to": 764, - "id": "0x2E" - }, - { - "from": 765, - "to": 765, - "id": "0x2E" - }, - { - "from": 766, - "to": 766, - "id": "0x30" - }, - { - "from": 767, - "to": 767, - "id": "0x30" - }, - { - "from": 768, - "to": 769, - "id": "0x32" - }, - { - "from": 770, - "to": 770, - "id": "0x31" - }, - { - "from": 771, - "to": 772, - "id": "0x31" - } - ], - "play.toClient.entity_metadata": [ - { - "from": 735, - "to": 736, - "id": "0x44" - }, - { - "from": 751, - "to": 754, - "id": "0x44" - }, - { - "from": 755, - "to": 755, - "id": "0x4D" - }, - { - "from": 756, - "to": 756, - "id": "0x4D" - }, - { - "from": 757, - "to": 758, - "id": "0x4D" - }, - { - "from": 759, - "to": 759, - "id": "0x4D" - }, - { - "from": 760, - "to": 760, - "id": "0x50" - }, - { - "from": 761, - "to": 761, - "id": "0x4E" - }, - { - "from": 762, - "to": 763, - "id": "0x52" - }, - { - "from": 764, - "to": 764, - "id": "0x54" - }, - { - "from": 765, - "to": 765, - "id": "0x56" - }, - { - "from": 766, - "to": 766, - "id": "0x58" - }, - { - "from": 767, - "to": 767, - "id": "0x58" - }, - { - "from": 768, - "to": 769, - "id": "0x5D" - }, - { - "from": 770, - "to": 770, - "id": "0x5C" - }, - { - "from": 771, - "to": 772, - "id": "0x5C" - } - ], - "play.toClient.entity_move_look": [ - { - "from": 735, - "to": 736, - "id": "0x29" - }, - { - "from": 751, - "to": 754, - "id": "0x28" - }, - { - "from": 755, - "to": 755, - "id": "0x2A" - }, - { - "from": 756, - "to": 756, - "id": "0x2A" - }, - { - "from": 757, - "to": 758, - "id": "0x2A" - }, - { - "from": 759, - "to": 759, - "id": "0x27" - }, - { - "from": 760, - "to": 760, - "id": "0x29" - }, - { - "from": 761, - "to": 761, - "id": "0x28" - }, - { - "from": 762, - "to": 763, - "id": "0x2C" - }, - { - "from": 764, - "to": 764, - "id": "0x2D" - }, - { - "from": 765, - "to": 765, - "id": "0x2D" - }, - { - "from": 766, - "to": 766, - "id": "0x2F" - }, - { - "from": 767, - "to": 767, - "id": "0x2F" - }, - { - "from": 768, - "to": 769, - "id": "0x30" - }, - { - "from": 770, - "to": 770, - "id": "0x2F" - }, - { - "from": 771, - "to": 772, - "id": "0x2F" - } - ], - "play.toClient.entity_sound_effect": [ - { - "from": 735, - "to": 736, - "id": "0x50" - }, - { - "from": 751, - "to": 754, - "id": "0x50" - }, - { - "from": 755, - "to": 755, - "id": "0x5B" - }, - { - "from": 756, - "to": 756, - "id": "0x5B" - }, - { - "from": 757, - "to": 758, - "id": "0x5C" - }, - { - "from": 759, - "to": 759, - "id": "0x5C" - }, - { - "from": 760, - "to": 760, - "id": "0x5F" - }, - { - "from": 761, - "to": 761, - "id": "0x5D" - }, - { - "from": 762, - "to": 763, - "id": "0x61" - }, - { - "from": 764, - "to": 764, - "id": "0x63" - }, - { - "from": 765, - "to": 765, - "id": "0x65" - }, - { - "from": 766, - "to": 766, - "id": "0x67" - }, - { - "from": 767, - "to": 767, - "id": "0x67" - }, - { - "from": 768, - "to": 769, - "id": "0x6E" - }, - { - "from": 770, - "to": 770, - "id": "0x6D" - }, - { - "from": 771, - "to": 772, - "id": "0x6D" - } - ], - "play.toClient.entity_status": [ - { - "from": 735, - "to": 736, - "id": "0x1B" - }, - { - "from": 751, - "to": 754, - "id": "0x1A" - }, - { - "from": 755, - "to": 755, - "id": "0x1B" - }, - { - "from": 756, - "to": 756, - "id": "0x1B" - }, - { - "from": 757, - "to": 758, - "id": "0x1B" - }, - { - "from": 759, - "to": 759, - "id": "0x18" - }, - { - "from": 760, - "to": 760, - "id": "0x1A" - }, - { - "from": 761, - "to": 761, - "id": "0x19" - }, - { - "from": 762, - "to": 763, - "id": "0x1C" - }, - { - "from": 764, - "to": 764, - "id": "0x1D" - }, - { - "from": 765, - "to": 765, - "id": "0x1D" - }, - { - "from": 766, - "to": 766, - "id": "0x1F" - }, - { - "from": 767, - "to": 767, - "id": "0x1F" - }, - { - "from": 768, - "to": 769, - "id": "0x1F" - }, - { - "from": 770, - "to": 770, - "id": "0x1E" - }, - { - "from": 771, - "to": 772, - "id": "0x1E" - } - ], - "play.toClient.entity_teleport": [ - { - "from": 735, - "to": 736, - "id": "0x56" - }, - { - "from": 751, - "to": 754, - "id": "0x56" - }, - { - "from": 755, - "to": 755, - "id": "0x61" - }, - { - "from": 756, - "to": 756, - "id": "0x61" - }, - { - "from": 757, - "to": 758, - "id": "0x62" - }, - { - "from": 759, - "to": 759, - "id": "0x63" - }, - { - "from": 760, - "to": 760, - "id": "0x66" - }, - { - "from": 761, - "to": 761, - "id": "0x64" - }, - { - "from": 762, - "to": 763, - "id": "0x68" - }, - { - "from": 764, - "to": 764, - "id": "0x6B" - }, - { - "from": 765, - "to": 765, - "id": "0x6D" - }, - { - "from": 766, - "to": 766, - "id": "0x70" - }, - { - "from": 767, - "to": 767, - "id": "0x70" - }, - { - "from": 768, - "to": 769, - "id": "0x77" - }, - { - "from": 770, - "to": 770, - "id": "0x76" - }, - { - "from": 771, - "to": 772, - "id": "0x76" - } - ], - "play.toClient.entity_update_attributes": [ - { - "from": 735, - "to": 736, - "id": "0x58" - }, - { - "from": 751, - "to": 754, - "id": "0x58" - }, - { - "from": 755, - "to": 755, - "id": "0x63" - }, - { - "from": 756, - "to": 756, - "id": "0x63" - }, - { - "from": 757, - "to": 758, - "id": "0x64" - }, - { - "from": 759, - "to": 759, - "id": "0x65" - }, - { - "from": 760, - "to": 760, - "id": "0x68" - }, - { - "from": 761, - "to": 761, - "id": "0x66" - }, - { - "from": 762, - "to": 763, - "id": "0x6A" - }, - { - "from": 764, - "to": 764, - "id": "0x6D" - }, - { - "from": 765, - "to": 765, - "id": "0x71" - }, - { - "from": 766, - "to": 766, - "id": "0x75" - }, - { - "from": 767, - "to": 767, - "id": "0x75" - }, - { - "from": 768, - "to": 769, - "id": "0x7C" - }, - { - "from": 770, - "to": 770, - "id": "0x7C" - }, - { - "from": 771, - "to": 772, - "id": "0x7C" - } - ], - "play.toClient.entity_velocity": [ - { - "from": 735, - "to": 736, - "id": "0x46" - }, - { - "from": 751, - "to": 754, - "id": "0x46" - }, - { - "from": 755, - "to": 755, - "id": "0x4F" - }, - { - "from": 756, - "to": 756, - "id": "0x4F" - }, - { - "from": 757, - "to": 758, - "id": "0x4F" - }, - { - "from": 759, - "to": 759, - "id": "0x4F" - }, - { - "from": 760, - "to": 760, - "id": "0x52" - }, - { - "from": 761, - "to": 761, - "id": "0x50" - }, - { - "from": 762, - "to": 763, - "id": "0x54" - }, - { - "from": 764, - "to": 764, - "id": "0x56" - }, - { - "from": 765, - "to": 765, - "id": "0x58" - }, - { - "from": 766, - "to": 766, - "id": "0x5A" - }, - { - "from": 767, - "to": 767, - "id": "0x5A" - }, - { - "from": 768, - "to": 769, - "id": "0x5F" - }, - { - "from": 770, - "to": 770, - "id": "0x5E" - }, - { - "from": 771, - "to": 772, - "id": "0x5E" - } - ], - "play.toClient.experience": [ - { - "from": 735, - "to": 736, - "id": "0x48" - }, - { - "from": 751, - "to": 754, - "id": "0x48" - }, - { - "from": 755, - "to": 755, - "id": "0x51" - }, - { - "from": 756, - "to": 756, - "id": "0x51" - }, - { - "from": 757, - "to": 758, - "id": "0x51" - }, - { - "from": 759, - "to": 759, - "id": "0x51" - }, - { - "from": 760, - "to": 760, - "id": "0x54" - }, - { - "from": 761, - "to": 761, - "id": "0x52" - }, - { - "from": 762, - "to": 763, - "id": "0x56" - }, - { - "from": 764, - "to": 764, - "id": "0x58" - }, - { - "from": 765, - "to": 765, - "id": "0x5A" - }, - { - "from": 766, - "to": 766, - "id": "0x5C" - }, - { - "from": 767, - "to": 767, - "id": "0x5C" - }, - { - "from": 768, - "to": 769, - "id": "0x61" - }, - { - "from": 770, - "to": 770, - "id": "0x60" - }, - { - "from": 771, - "to": 772, - "id": "0x60" - } - ], - "play.toClient.explosion": [ - { - "from": 735, - "to": 736, - "id": "0x1C" - }, - { - "from": 751, - "to": 754, - "id": "0x1B" - }, - { - "from": 755, - "to": 755, - "id": "0x1C" - }, - { - "from": 756, - "to": 756, - "id": "0x1C" - }, - { - "from": 757, - "to": 758, - "id": "0x1C" - }, - { - "from": 759, - "to": 759, - "id": "0x19" - }, - { - "from": 760, - "to": 760, - "id": "0x1B" - }, - { - "from": 761, - "to": 761, - "id": "0x1A" - }, - { - "from": 762, - "to": 763, - "id": "0x1D" - }, - { - "from": 764, - "to": 764, - "id": "0x1E" - }, - { - "from": 765, - "to": 765, - "id": "0x1E" - }, - { - "from": 766, - "to": 766, - "id": "0x20" - }, - { - "from": 767, - "to": 767, - "id": "0x20" - }, - { - "from": 768, - "to": 769, - "id": "0x21" - }, - { - "from": 770, - "to": 770, - "id": "0x20" - }, - { - "from": 771, - "to": 772, - "id": "0x20" - } - ], - "play.toClient.face_player": [ - { - "from": 735, - "to": 736, - "id": "0x34" - }, - { - "from": 751, - "to": 754, - "id": "0x33" - }, - { - "from": 755, - "to": 755, - "id": "0x37" - }, - { - "from": 756, - "to": 756, - "id": "0x37" - }, - { - "from": 757, - "to": 758, - "id": "0x37" - }, - { - "from": 759, - "to": 759, - "id": "0x35" - }, - { - "from": 760, - "to": 760, - "id": "0x38" - }, - { - "from": 761, - "to": 761, - "id": "0x37" - }, - { - "from": 762, - "to": 763, - "id": "0x3B" - }, - { - "from": 764, - "to": 764, - "id": "0x3D" - }, - { - "from": 765, - "to": 765, - "id": "0x3D" - }, - { - "from": 766, - "to": 766, - "id": "0x3F" - }, - { - "from": 767, - "to": 767, - "id": "0x3F" - }, - { - "from": 768, - "to": 769, - "id": "0x41" - }, - { - "from": 770, - "to": 770, - "id": "0x40" - }, - { - "from": 771, - "to": 772, - "id": "0x40" - } - ], - "play.toClient.feature_flags": [ - { - "from": 761, - "to": 761, - "id": "0x67" - }, - { - "from": 762, - "to": 763, - "id": "0x6B" - } - ], - "play.toClient.game_state_change": [ - { - "from": 735, - "to": 736, - "id": "0x1E" - }, - { - "from": 751, - "to": 754, - "id": "0x1D" - }, - { - "from": 755, - "to": 755, - "id": "0x1E" - }, - { - "from": 756, - "to": 756, - "id": "0x1E" - }, - { - "from": 757, - "to": 758, - "id": "0x1E" - }, - { - "from": 759, - "to": 759, - "id": "0x1B" - }, - { - "from": 760, - "to": 760, - "id": "0x1D" - }, - { - "from": 761, - "to": 761, - "id": "0x1C" - }, - { - "from": 762, - "to": 763, - "id": "0x1F" - }, - { - "from": 764, - "to": 764, - "id": "0x20" - }, - { - "from": 765, - "to": 765, - "id": "0x20" - }, - { - "from": 766, - "to": 766, - "id": "0x22" - }, - { - "from": 767, - "to": 767, - "id": "0x22" - }, - { - "from": 768, - "to": 769, - "id": "0x23" - }, - { - "from": 770, - "to": 770, - "id": "0x22" - }, - { - "from": 771, - "to": 772, - "id": "0x22" - } - ], - "play.toClient.held_item_slot": [ - { - "from": 735, - "to": 736, - "id": "0x3F" - }, - { - "from": 751, - "to": 754, - "id": "0x3F" - }, - { - "from": 755, - "to": 755, - "id": "0x48" - }, - { - "from": 756, - "to": 756, - "id": "0x48" - }, - { - "from": 757, - "to": 758, - "id": "0x48" - }, - { - "from": 759, - "to": 759, - "id": "0x47" - }, - { - "from": 760, - "to": 760, - "id": "0x4A" - }, - { - "from": 761, - "to": 761, - "id": "0x49" - }, - { - "from": 762, - "to": 763, - "id": "0x4D" - }, - { - "from": 764, - "to": 764, - "id": "0x4F" - }, - { - "from": 765, - "to": 765, - "id": "0x51" - }, - { - "from": 766, - "to": 766, - "id": "0x53" - }, - { - "from": 767, - "to": 767, - "id": "0x53" - }, - { - "from": 768, - "to": 769, - "id": "0x63" - }, - { - "from": 770, - "to": 770, - "id": "0x62" - }, - { - "from": 771, - "to": 772, - "id": "0x62" - } - ], - "play.toClient.hide_message": [ - { - "from": 760, - "to": 760, - "id": "0x18" - }, - { - "from": 761, - "to": 761, - "id": "0x16" - }, - { - "from": 762, - "to": 763, - "id": "0x19" - }, - { - "from": 764, - "to": 764, - "id": "0x1A" - }, - { - "from": 765, - "to": 765, - "id": "0x1A" - }, - { - "from": 766, - "to": 766, - "id": "0x1C" - }, - { - "from": 767, - "to": 767, - "id": "0x1C" - }, - { - "from": 768, - "to": 769, - "id": "0x1C" - }, - { - "from": 770, - "to": 770, - "id": "0x1B" - }, - { - "from": 771, - "to": 772, - "id": "0x1B" - } - ], - "play.toClient.hurt_animation": [ - { - "from": 762, - "to": 763, - "id": "0x21" - }, - { - "from": 764, - "to": 764, - "id": "0x22" - }, - { - "from": 765, - "to": 765, - "id": "0x22" - }, - { - "from": 766, - "to": 766, - "id": "0x24" - }, - { - "from": 767, - "to": 767, - "id": "0x24" - }, - { - "from": 768, - "to": 769, - "id": "0x25" - }, - { - "from": 770, - "to": 770, - "id": "0x24" - }, - { - "from": 771, - "to": 772, - "id": "0x24" - } - ], - "play.toClient.initialize_world_border": [ - { - "from": 755, - "to": 755, - "id": "0x20" - }, - { - "from": 756, - "to": 756, - "id": "0x20" - }, - { - "from": 757, - "to": 758, - "id": "0x20" - }, - { - "from": 759, - "to": 759, - "id": "0x1D" - }, - { - "from": 760, - "to": 760, - "id": "0x1F" - }, - { - "from": 761, - "to": 761, - "id": "0x1E" - }, - { - "from": 762, - "to": 763, - "id": "0x22" - }, - { - "from": 764, - "to": 764, - "id": "0x23" - }, - { - "from": 765, - "to": 765, - "id": "0x23" - }, - { - "from": 766, - "to": 766, - "id": "0x25" - }, - { - "from": 767, - "to": 767, - "id": "0x25" - }, - { - "from": 768, - "to": 769, - "id": "0x26" - }, - { - "from": 770, - "to": 770, - "id": "0x25" - }, - { - "from": 771, - "to": 772, - "id": "0x25" - } - ], - "play.toClient.keep_alive": [ - { - "from": 735, - "to": 736, - "id": "0x20" - }, - { - "from": 751, - "to": 754, - "id": "0x1F" - }, - { - "from": 755, - "to": 755, - "id": "0x21" - }, - { - "from": 756, - "to": 756, - "id": "0x21" - }, - { - "from": 757, - "to": 758, - "id": "0x21" - }, - { - "from": 759, - "to": 759, - "id": "0x1E" - }, - { - "from": 760, - "to": 760, - "id": "0x20" - }, - { - "from": 761, - "to": 761, - "id": "0x1F" - }, - { - "from": 762, - "to": 763, - "id": "0x23" - }, - { - "from": 764, - "to": 764, - "id": "0x24" - }, - { - "from": 765, - "to": 765, - "id": "0x24" - }, - { - "from": 766, - "to": 766, - "id": "0x26" - }, - { - "from": 767, - "to": 767, - "id": "0x26" - }, - { - "from": 768, - "to": 769, - "id": "0x27" - }, - { - "from": 770, - "to": 770, - "id": "0x26" - }, - { - "from": 771, - "to": 772, - "id": "0x26" - } - ], - "play.toClient.kick_disconnect": [ - { - "from": 735, - "to": 736, - "id": "0x1A" - }, - { - "from": 751, - "to": 754, - "id": "0x19" - }, - { - "from": 755, - "to": 755, - "id": "0x1A" - }, - { - "from": 756, - "to": 756, - "id": "0x1A" - }, - { - "from": 757, - "to": 758, - "id": "0x1A" - }, - { - "from": 759, - "to": 759, - "id": "0x17" - }, - { - "from": 760, - "to": 760, - "id": "0x19" - }, - { - "from": 761, - "to": 761, - "id": "0x17" - }, - { - "from": 762, - "to": 763, - "id": "0x1A" - }, - { - "from": 764, - "to": 764, - "id": "0x1B" - }, - { - "from": 765, - "to": 765, - "id": "0x1B" - }, - { - "from": 766, - "to": 766, - "id": "0x1D" - }, - { - "from": 767, - "to": 767, - "id": "0x1D" - }, - { - "from": 768, - "to": 769, - "id": "0x1D" - }, - { - "from": 770, - "to": 770, - "id": "0x1C" - }, - { - "from": 771, - "to": 772, - "id": "0x1C" - } - ], - "play.toClient.login": [ - { - "from": 735, - "to": 736, - "id": "0x25" - }, - { - "from": 751, - "to": 754, - "id": "0x24" - }, - { - "from": 755, - "to": 755, - "id": "0x26" - }, - { - "from": 756, - "to": 756, - "id": "0x26" - }, - { - "from": 757, - "to": 758, - "id": "0x26" - }, - { - "from": 759, - "to": 759, - "id": "0x23" - }, - { - "from": 760, - "to": 760, - "id": "0x25" - }, - { - "from": 761, - "to": 761, - "id": "0x24" - }, - { - "from": 762, - "to": 763, - "id": "0x28" - }, - { - "from": 764, - "to": 764, - "id": "0x29" - }, - { - "from": 765, - "to": 765, - "id": "0x29" - }, - { - "from": 766, - "to": 766, - "id": "0x2B" - }, - { - "from": 767, - "to": 767, - "id": "0x2B" - }, - { - "from": 768, - "to": 769, - "id": "0x2C" - }, - { - "from": 770, - "to": 770, - "id": "0x2B" - }, - { - "from": 771, - "to": 772, - "id": "0x2B" - } - ], - "play.toClient.map": [ - { - "from": 735, - "to": 736, - "id": "0x26" - }, - { - "from": 751, - "to": 754, - "id": "0x25" - }, - { - "from": 755, - "to": 755, - "id": "0x27" - }, - { - "from": 756, - "to": 756, - "id": "0x27" - }, - { - "from": 757, - "to": 758, - "id": "0x27" - }, - { - "from": 759, - "to": 759, - "id": "0x24" - }, - { - "from": 760, - "to": 760, - "id": "0x26" - }, - { - "from": 761, - "to": 761, - "id": "0x25" - }, - { - "from": 762, - "to": 763, - "id": "0x29" - }, - { - "from": 764, - "to": 764, - "id": "0x2A" - }, - { - "from": 765, - "to": 765, - "id": "0x2A" - }, - { - "from": 766, - "to": 766, - "id": "0x2C" - }, - { - "from": 767, - "to": 767, - "id": "0x2C" - }, - { - "from": 768, - "to": 769, - "id": "0x2D" - }, - { - "from": 770, - "to": 770, - "id": "0x2C" - }, - { - "from": 771, - "to": 772, - "id": "0x2C" - } - ], - "play.toClient.map_chunk": [ - { - "from": 735, - "to": 736, - "id": "0x21" - }, - { - "from": 751, - "to": 754, - "id": "0x20" - }, - { - "from": 755, - "to": 755, - "id": "0x22" - }, - { - "from": 756, - "to": 756, - "id": "0x22" - }, - { - "from": 757, - "to": 758, - "id": "0x22" - }, - { - "from": 759, - "to": 759, - "id": "0x1F" - }, - { - "from": 760, - "to": 760, - "id": "0x21" - }, - { - "from": 761, - "to": 761, - "id": "0x20" - }, - { - "from": 762, - "to": 763, - "id": "0x24" - }, - { - "from": 764, - "to": 764, - "id": "0x25" - }, - { - "from": 765, - "to": 765, - "id": "0x25" - }, - { - "from": 766, - "to": 766, - "id": "0x27" - }, - { - "from": 767, - "to": 767, - "id": "0x27" - }, - { - "from": 768, - "to": 769, - "id": "0x28" - }, - { - "from": 770, - "to": 770, - "id": "0x27" - }, - { - "from": 771, - "to": 772, - "id": "0x27" - } - ], - "play.toClient.message_header": [ - { - "from": 760, - "to": 760, - "id": "0x32" - } - ], - "play.toClient.move_minecart": [ - { - "from": 768, - "to": 769, - "id": "0x31" - }, - { - "from": 770, - "to": 770, - "id": "0x30" - }, - { - "from": 771, - "to": 772, - "id": "0x30" - } - ], - "play.toClient.multi_block_change": [ - { - "from": 735, - "to": 736, - "id": "0x0F" - }, - { - "from": 751, - "to": 754, - "id": "0x3B" - }, - { - "from": 755, - "to": 755, - "id": "0x3F" - }, - { - "from": 756, - "to": 756, - "id": "0x3F" - }, - { - "from": 757, - "to": 758, - "id": "0x3F" - }, - { - "from": 759, - "to": 759, - "id": "0x3D" - }, - { - "from": 760, - "to": 760, - "id": "0x40" - }, - { - "from": 761, - "to": 761, - "id": "0x3F" - }, - { - "from": 762, - "to": 763, - "id": "0x43" - }, - { - "from": 764, - "to": 764, - "id": "0x45" - }, - { - "from": 765, - "to": 765, - "id": "0x47" - }, - { - "from": 766, - "to": 766, - "id": "0x49" - }, - { - "from": 767, - "to": 767, - "id": "0x49" - }, - { - "from": 768, - "to": 769, - "id": "0x4E" - }, - { - "from": 770, - "to": 770, - "id": "0x4D" - }, - { - "from": 771, - "to": 772, - "id": "0x4D" - } - ], - "play.toClient.named_entity_spawn": [ - { - "from": 735, - "to": 736, - "id": "0x04" - }, - { - "from": 751, - "to": 754, - "id": "0x04" - }, - { - "from": 755, - "to": 755, - "id": "0x04" - }, - { - "from": 756, - "to": 756, - "id": "0x04" - }, - { - "from": 757, - "to": 758, - "id": "0x04" - }, - { - "from": 759, - "to": 759, - "id": "0x02" - }, - { - "from": 760, - "to": 760, - "id": "0x02" - }, - { - "from": 761, - "to": 761, - "id": "0x02" - }, - { - "from": 762, - "to": 763, - "id": "0x03" - } - ], - "play.toClient.named_sound_effect": [ - { - "from": 735, - "to": 736, - "id": "0x19" - }, - { - "from": 751, - "to": 754, - "id": "0x18" - }, - { - "from": 755, - "to": 755, - "id": "0x19" - }, - { - "from": 756, - "to": 756, - "id": "0x19" - }, - { - "from": 757, - "to": 758, - "id": "0x19" - }, - { - "from": 759, - "to": 759, - "id": "0x16" - }, - { - "from": 760, - "to": 760, - "id": "0x17" - } - ], - "play.toClient.nbt_query_response": [ - { - "from": 735, - "to": 736, - "id": "0x54" - }, - { - "from": 751, - "to": 754, - "id": "0x54" - }, - { - "from": 755, - "to": 755, - "id": "0x5F" - }, - { - "from": 756, - "to": 756, - "id": "0x5F" - }, - { - "from": 757, - "to": 758, - "id": "0x60" - }, - { - "from": 759, - "to": 759, - "id": "0x61" - }, - { - "from": 760, - "to": 760, - "id": "0x64" - }, - { - "from": 761, - "to": 761, - "id": "0x62" - }, - { - "from": 762, - "to": 763, - "id": "0x66" - }, - { - "from": 764, - "to": 764, - "id": "0x69" - }, - { - "from": 765, - "to": 765, - "id": "0x6B" - }, - { - "from": 766, - "to": 766, - "id": "0x6E" - }, - { - "from": 767, - "to": 767, - "id": "0x6E" - }, - { - "from": 768, - "to": 769, - "id": "0x75" - }, - { - "from": 770, - "to": 770, - "id": "0x74" - }, - { - "from": 771, - "to": 772, - "id": "0x74" - } - ], - "play.toClient.open_book": [ - { - "from": 735, - "to": 736, - "id": "0x2D" - }, - { - "from": 751, - "to": 754, - "id": "0x2C" - }, - { - "from": 755, - "to": 755, - "id": "0x2D" - }, - { - "from": 756, - "to": 756, - "id": "0x2D" - }, - { - "from": 757, - "to": 758, - "id": "0x2D" - }, - { - "from": 759, - "to": 759, - "id": "0x2A" - }, - { - "from": 760, - "to": 760, - "id": "0x2C" - }, - { - "from": 761, - "to": 761, - "id": "0x2B" - }, - { - "from": 762, - "to": 763, - "id": "0x2F" - }, - { - "from": 764, - "to": 764, - "id": "0x30" - }, - { - "from": 765, - "to": 765, - "id": "0x30" - }, - { - "from": 766, - "to": 766, - "id": "0x32" - }, - { - "from": 767, - "to": 767, - "id": "0x32" - }, - { - "from": 768, - "to": 769, - "id": "0x34" - }, - { - "from": 770, - "to": 770, - "id": "0x33" - }, - { - "from": 771, - "to": 772, - "id": "0x33" - } - ], - "play.toClient.open_horse_window": [ - { - "from": 735, - "to": 736, - "id": "0x1F" - }, - { - "from": 751, - "to": 754, - "id": "0x1E" - }, - { - "from": 755, - "to": 755, - "id": "0x1F" - }, - { - "from": 756, - "to": 756, - "id": "0x1F" - }, - { - "from": 757, - "to": 758, - "id": "0x1F" - }, - { - "from": 759, - "to": 759, - "id": "0x1C" - }, - { - "from": 760, - "to": 760, - "id": "0x1E" - }, - { - "from": 761, - "to": 761, - "id": "0x1D" - }, - { - "from": 762, - "to": 763, - "id": "0x20" - }, - { - "from": 764, - "to": 764, - "id": "0x21" - }, - { - "from": 765, - "to": 765, - "id": "0x21" - }, - { - "from": 766, - "to": 766, - "id": "0x23" - }, - { - "from": 767, - "to": 767, - "id": "0x23" - }, - { - "from": 768, - "to": 769, - "id": "0x24" - }, - { - "from": 770, - "to": 770, - "id": "0x23" - }, - { - "from": 771, - "to": 772, - "id": "0x23" - } - ], - "play.toClient.open_sign_entity": [ - { - "from": 735, - "to": 736, - "id": "0x2F" - }, - { - "from": 751, - "to": 754, - "id": "0x2E" - }, - { - "from": 755, - "to": 755, - "id": "0x2F" - }, - { - "from": 756, - "to": 756, - "id": "0x2F" - }, - { - "from": 757, - "to": 758, - "id": "0x2F" - }, - { - "from": 759, - "to": 759, - "id": "0x2C" - }, - { - "from": 760, - "to": 760, - "id": "0x2E" - }, - { - "from": 761, - "to": 761, - "id": "0x2D" - }, - { - "from": 762, - "to": 763, - "id": "0x31" - }, - { - "from": 764, - "to": 764, - "id": "0x32" - }, - { - "from": 765, - "to": 765, - "id": "0x32" - }, - { - "from": 766, - "to": 766, - "id": "0x34" - }, - { - "from": 767, - "to": 767, - "id": "0x34" - }, - { - "from": 768, - "to": 769, - "id": "0x36" - }, - { - "from": 770, - "to": 770, - "id": "0x35" - }, - { - "from": 771, - "to": 772, - "id": "0x35" - } - ], - "play.toClient.open_window": [ - { - "from": 735, - "to": 736, - "id": "0x2E" - }, - { - "from": 751, - "to": 754, - "id": "0x2D" - }, - { - "from": 755, - "to": 755, - "id": "0x2E" - }, - { - "from": 756, - "to": 756, - "id": "0x2E" - }, - { - "from": 757, - "to": 758, - "id": "0x2E" - }, - { - "from": 759, - "to": 759, - "id": "0x2B" - }, - { - "from": 760, - "to": 760, - "id": "0x2D" - }, - { - "from": 761, - "to": 761, - "id": "0x2C" - }, - { - "from": 762, - "to": 763, - "id": "0x30" - }, - { - "from": 764, - "to": 764, - "id": "0x31" - }, - { - "from": 765, - "to": 765, - "id": "0x31" - }, - { - "from": 766, - "to": 766, - "id": "0x33" - }, - { - "from": 767, - "to": 767, - "id": "0x33" - }, - { - "from": 768, - "to": 769, - "id": "0x35" - }, - { - "from": 770, - "to": 770, - "id": "0x34" - }, - { - "from": 771, - "to": 772, - "id": "0x34" - } - ], - "play.toClient.ping": [ - { - "from": 755, - "to": 755, - "id": "0x30" - }, - { - "from": 756, - "to": 756, - "id": "0x30" - }, - { - "from": 757, - "to": 758, - "id": "0x30" - }, - { - "from": 759, - "to": 759, - "id": "0x2D" - }, - { - "from": 760, - "to": 760, - "id": "0x2F" - }, - { - "from": 761, - "to": 761, - "id": "0x2E" - }, - { - "from": 762, - "to": 763, - "id": "0x32" - }, - { - "from": 764, - "to": 764, - "id": "0x33" - }, - { - "from": 765, - "to": 765, - "id": "0x33" - }, - { - "from": 766, - "to": 766, - "id": "0x35" - }, - { - "from": 767, - "to": 767, - "id": "0x35" - }, - { - "from": 768, - "to": 769, - "id": "0x37" - }, - { - "from": 770, - "to": 770, - "id": "0x36" - }, - { - "from": 771, - "to": 772, - "id": "0x36" - } - ], - "play.toClient.ping_response": [ - { - "from": 764, - "to": 764, - "id": "0x34" - }, - { - "from": 765, - "to": 765, - "id": "0x34" - }, - { - "from": 766, - "to": 766, - "id": "0x36" - }, - { - "from": 767, - "to": 767, - "id": "0x36" - }, - { - "from": 768, - "to": 769, - "id": "0x38" - }, - { - "from": 770, - "to": 770, - "id": "0x37" - }, - { - "from": 771, - "to": 772, - "id": "0x37" - } - ], - "play.toClient.player_chat": [ - { - "from": 759, - "to": 759, - "id": "0x30" - }, - { - "from": 760, - "to": 760, - "id": "0x33" - }, - { - "from": 761, - "to": 761, - "id": "0x31" - }, - { - "from": 762, - "to": 763, - "id": "0x35" - }, - { - "from": 764, - "to": 764, - "id": "0x37" - }, - { - "from": 765, - "to": 765, - "id": "0x37" - }, - { - "from": 766, - "to": 766, - "id": "0x39" - }, - { - "from": 767, - "to": 767, - "id": "0x39" - }, - { - "from": 768, - "to": 769, - "id": "0x3B" - }, - { - "from": 770, - "to": 770, - "id": "0x3A" - }, - { - "from": 771, - "to": 772, - "id": "0x3A" - } - ], - "play.toClient.player_info": [ - { - "from": 735, - "to": 736, - "id": "0x33" - }, - { - "from": 751, - "to": 754, - "id": "0x32" - }, - { - "from": 755, - "to": 755, - "id": "0x36" - }, - { - "from": 756, - "to": 756, - "id": "0x36" - }, - { - "from": 757, - "to": 758, - "id": "0x36" - }, - { - "from": 759, - "to": 759, - "id": "0x34" - }, - { - "from": 760, - "to": 760, - "id": "0x37" - }, - { - "from": 761, - "to": 761, - "id": "0x36" - }, - { - "from": 762, - "to": 763, - "id": "0x3A" - }, - { - "from": 764, - "to": 764, - "id": "0x3C" - }, - { - "from": 765, - "to": 765, - "id": "0x3C" - }, - { - "from": 766, - "to": 766, - "id": "0x3E" - }, - { - "from": 767, - "to": 767, - "id": "0x3E" - }, - { - "from": 768, - "to": 769, - "id": "0x40" - }, - { - "from": 770, - "to": 770, - "id": "0x3F" - }, - { - "from": 771, - "to": 772, - "id": "0x3F" - } - ], - "play.toClient.player_remove": [ - { - "from": 761, - "to": 761, - "id": "0x35" - }, - { - "from": 762, - "to": 763, - "id": "0x39" - }, - { - "from": 764, - "to": 764, - "id": "0x3B" - }, - { - "from": 765, - "to": 765, - "id": "0x3B" - }, - { - "from": 766, - "to": 766, - "id": "0x3D" - }, - { - "from": 767, - "to": 767, - "id": "0x3D" - }, - { - "from": 768, - "to": 769, - "id": "0x3F" - }, - { - "from": 770, - "to": 770, - "id": "0x3E" - }, - { - "from": 771, - "to": 772, - "id": "0x3E" - } - ], - "play.toClient.player_rotation": [ - { - "from": 768, - "to": 769, - "id": "0x43" - }, - { - "from": 770, - "to": 770, - "id": "0x42" - }, - { - "from": 771, - "to": 772, - "id": "0x42" - } - ], - "play.toClient.playerlist_header": [ - { - "from": 735, - "to": 736, - "id": "0x53" - }, - { - "from": 751, - "to": 754, - "id": "0x53" - }, - { - "from": 755, - "to": 755, - "id": "0x5E" - }, - { - "from": 756, - "to": 756, - "id": "0x5E" - }, - { - "from": 757, - "to": 758, - "id": "0x5F" - }, - { - "from": 759, - "to": 759, - "id": "0x60" - }, - { - "from": 760, - "to": 760, - "id": "0x63" - }, - { - "from": 761, - "to": 761, - "id": "0x61" - }, - { - "from": 762, - "to": 763, - "id": "0x65" - }, - { - "from": 764, - "to": 764, - "id": "0x68" - }, - { - "from": 765, - "to": 765, - "id": "0x6A" - }, - { - "from": 766, - "to": 766, - "id": "0x6D" - }, - { - "from": 767, - "to": 767, - "id": "0x6D" - }, - { - "from": 768, - "to": 769, - "id": "0x74" - }, - { - "from": 770, - "to": 770, - "id": "0x73" - }, - { - "from": 771, - "to": 772, - "id": "0x73" - } - ], - "play.toClient.position": [ - { - "from": 735, - "to": 736, - "id": "0x35" - }, - { - "from": 751, - "to": 754, - "id": "0x34" - }, - { - "from": 755, - "to": 755, - "id": "0x38" - }, - { - "from": 756, - "to": 756, - "id": "0x38" - }, - { - "from": 757, - "to": 758, - "id": "0x38" - }, - { - "from": 759, - "to": 759, - "id": "0x36" - }, - { - "from": 760, - "to": 760, - "id": "0x39" - }, - { - "from": 761, - "to": 761, - "id": "0x38" - }, - { - "from": 762, - "to": 763, - "id": "0x3C" - }, - { - "from": 764, - "to": 764, - "id": "0x3E" - }, - { - "from": 765, - "to": 765, - "id": "0x3E" - }, - { - "from": 766, - "to": 766, - "id": "0x40" - }, - { - "from": 767, - "to": 767, - "id": "0x40" - }, - { - "from": 768, - "to": 769, - "id": "0x42" - }, - { - "from": 770, - "to": 770, - "id": "0x41" - }, - { - "from": 771, - "to": 772, - "id": "0x41" - } - ], - "play.toClient.profileless_chat": [ - { - "from": 761, - "to": 761, - "id": "0x18" - }, - { - "from": 762, - "to": 763, - "id": "0x1B" - }, - { - "from": 764, - "to": 764, - "id": "0x1C" - }, - { - "from": 765, - "to": 765, - "id": "0x1C" - }, - { - "from": 766, - "to": 766, - "id": "0x1E" - }, - { - "from": 767, - "to": 767, - "id": "0x1E" - }, - { - "from": 768, - "to": 769, - "id": "0x1E" - }, - { - "from": 770, - "to": 770, - "id": "0x1D" - }, - { - "from": 771, - "to": 772, - "id": "0x1D" - } - ], - "play.toClient.recipe_book_add": [ - { - "from": 768, - "to": 769, - "id": "0x44" - }, - { - "from": 770, - "to": 770, - "id": "0x43" - }, - { - "from": 771, - "to": 772, - "id": "0x43" - } - ], - "play.toClient.recipe_book_remove": [ - { - "from": 768, - "to": 769, - "id": "0x45" - }, - { - "from": 770, - "to": 770, - "id": "0x44" - }, - { - "from": 771, - "to": 772, - "id": "0x44" - } - ], - "play.toClient.recipe_book_settings": [ - { - "from": 768, - "to": 769, - "id": "0x46" - }, - { - "from": 770, - "to": 770, - "id": "0x45" - }, - { - "from": 771, - "to": 772, - "id": "0x45" - } - ], - "play.toClient.rel_entity_move": [ - { - "from": 735, - "to": 736, - "id": "0x28" - }, - { - "from": 751, - "to": 754, - "id": "0x27" - }, - { - "from": 755, - "to": 755, - "id": "0x29" - }, - { - "from": 756, - "to": 756, - "id": "0x29" - }, - { - "from": 757, - "to": 758, - "id": "0x29" - }, - { - "from": 759, - "to": 759, - "id": "0x26" - }, - { - "from": 760, - "to": 760, - "id": "0x28" - }, - { - "from": 761, - "to": 761, - "id": "0x27" - }, - { - "from": 762, - "to": 763, - "id": "0x2B" - }, - { - "from": 764, - "to": 764, - "id": "0x2C" - }, - { - "from": 765, - "to": 765, - "id": "0x2C" - }, - { - "from": 766, - "to": 766, - "id": "0x2E" - }, - { - "from": 767, - "to": 767, - "id": "0x2E" - }, - { - "from": 768, - "to": 769, - "id": "0x2F" - }, - { - "from": 770, - "to": 770, - "id": "0x2E" - }, - { - "from": 771, - "to": 772, - "id": "0x2E" - } - ], - "play.toClient.remove_entity_effect": [ - { - "from": 735, - "to": 736, - "id": "0x38" - }, - { - "from": 751, - "to": 754, - "id": "0x37" - }, - { - "from": 755, - "to": 755, - "id": "0x3B" - }, - { - "from": 756, - "to": 756, - "id": "0x3B" - }, - { - "from": 757, - "to": 758, - "id": "0x3B" - }, - { - "from": 759, - "to": 759, - "id": "0x39" - }, - { - "from": 760, - "to": 760, - "id": "0x3C" - }, - { - "from": 761, - "to": 761, - "id": "0x3B" - }, - { - "from": 762, - "to": 763, - "id": "0x3F" - }, - { - "from": 764, - "to": 764, - "id": "0x41" - }, - { - "from": 765, - "to": 765, - "id": "0x41" - }, - { - "from": 766, - "to": 766, - "id": "0x43" - }, - { - "from": 767, - "to": 767, - "id": "0x43" - }, - { - "from": 768, - "to": 769, - "id": "0x48" - }, - { - "from": 770, - "to": 770, - "id": "0x47" - }, - { - "from": 771, - "to": 772, - "id": "0x47" - } - ], - "play.toClient.remove_resource_pack": [ - { - "from": 765, - "to": 765, - "id": "0x43" - }, - { - "from": 766, - "to": 766, - "id": "0x45" - }, - { - "from": 767, - "to": 767, - "id": "0x45" - }, - { - "from": 768, - "to": 769, - "id": "0x4A" - }, - { - "from": 770, - "to": 770, - "id": "0x49" - }, - { - "from": 771, - "to": 772, - "id": "0x49" - } - ], - "play.toClient.reset_score": [ - { - "from": 765, - "to": 765, - "id": "0x42" - }, - { - "from": 766, - "to": 766, - "id": "0x44" - }, - { - "from": 767, - "to": 767, - "id": "0x44" - }, - { - "from": 768, - "to": 769, - "id": "0x49" - }, - { - "from": 770, - "to": 770, - "id": "0x48" - }, - { - "from": 771, - "to": 772, - "id": "0x48" - } - ], - "play.toClient.resource_pack_send": [ - { - "from": 735, - "to": 736, - "id": "0x39" - }, - { - "from": 751, - "to": 754, - "id": "0x38" - }, - { - "from": 755, - "to": 755, - "id": "0x3C" - }, - { - "from": 756, - "to": 756, - "id": "0x3C" - }, - { - "from": 757, - "to": 758, - "id": "0x3C" - }, - { - "from": 759, - "to": 759, - "id": "0x3A" - }, - { - "from": 760, - "to": 760, - "id": "0x3D" - }, - { - "from": 761, - "to": 761, - "id": "0x3C" - }, - { - "from": 762, - "to": 763, - "id": "0x40" - }, - { - "from": 764, - "to": 764, - "id": "0x42" - } - ], - "play.toClient.respawn": [ - { - "from": 735, - "to": 736, - "id": "0x3A" - }, - { - "from": 751, - "to": 754, - "id": "0x39" - }, - { - "from": 755, - "to": 755, - "id": "0x3D" - }, - { - "from": 756, - "to": 756, - "id": "0x3D" - }, - { - "from": 757, - "to": 758, - "id": "0x3D" - }, - { - "from": 759, - "to": 759, - "id": "0x3B" - }, - { - "from": 760, - "to": 760, - "id": "0x3E" - }, - { - "from": 761, - "to": 761, - "id": "0x3D" - }, - { - "from": 762, - "to": 763, - "id": "0x41" - }, - { - "from": 764, - "to": 764, - "id": "0x43" - }, - { - "from": 765, - "to": 765, - "id": "0x45" - }, - { - "from": 766, - "to": 766, - "id": "0x47" - }, - { - "from": 767, - "to": 767, - "id": "0x47" - }, - { - "from": 768, - "to": 769, - "id": "0x4C" - }, - { - "from": 770, - "to": 770, - "id": "0x4B" - }, - { - "from": 771, - "to": 772, - "id": "0x4B" - } - ], - "play.toClient.scoreboard_display_objective": [ - { - "from": 735, - "to": 736, - "id": "0x43" - }, - { - "from": 751, - "to": 754, - "id": "0x43" - }, - { - "from": 755, - "to": 755, - "id": "0x4C" - }, - { - "from": 756, - "to": 756, - "id": "0x4C" - }, - { - "from": 757, - "to": 758, - "id": "0x4C" - }, - { - "from": 759, - "to": 759, - "id": "0x4C" - }, - { - "from": 760, - "to": 760, - "id": "0x4F" - }, - { - "from": 761, - "to": 761, - "id": "0x4D" - }, - { - "from": 762, - "to": 763, - "id": "0x51" - }, - { - "from": 764, - "to": 764, - "id": "0x53" - }, - { - "from": 765, - "to": 765, - "id": "0x55" - }, - { - "from": 766, - "to": 766, - "id": "0x57" - }, - { - "from": 767, - "to": 767, - "id": "0x57" - }, - { - "from": 768, - "to": 769, - "id": "0x5C" - }, - { - "from": 770, - "to": 770, - "id": "0x5B" - }, - { - "from": 771, - "to": 772, - "id": "0x5B" - } - ], - "play.toClient.scoreboard_objective": [ - { - "from": 735, - "to": 736, - "id": "0x4A" - }, - { - "from": 751, - "to": 754, - "id": "0x4A" - }, - { - "from": 755, - "to": 755, - "id": "0x53" - }, - { - "from": 756, - "to": 756, - "id": "0x53" - }, - { - "from": 757, - "to": 758, - "id": "0x53" - }, - { - "from": 759, - "to": 759, - "id": "0x53" - }, - { - "from": 760, - "to": 760, - "id": "0x56" - }, - { - "from": 761, - "to": 761, - "id": "0x54" - }, - { - "from": 762, - "to": 763, - "id": "0x58" - }, - { - "from": 764, - "to": 764, - "id": "0x5A" - }, - { - "from": 765, - "to": 765, - "id": "0x5C" - }, - { - "from": 766, - "to": 766, - "id": "0x5E" - }, - { - "from": 767, - "to": 767, - "id": "0x5E" - }, - { - "from": 768, - "to": 769, - "id": "0x64" - }, - { - "from": 770, - "to": 770, - "id": "0x63" - }, - { - "from": 771, - "to": 772, - "id": "0x63" - } - ], - "play.toClient.scoreboard_score": [ - { - "from": 735, - "to": 736, - "id": "0x4D" - }, - { - "from": 751, - "to": 754, - "id": "0x4D" - }, - { - "from": 755, - "to": 755, - "id": "0x56" - }, - { - "from": 756, - "to": 756, - "id": "0x56" - }, - { - "from": 757, - "to": 758, - "id": "0x56" - }, - { - "from": 759, - "to": 759, - "id": "0x56" - }, - { - "from": 760, - "to": 760, - "id": "0x59" - }, - { - "from": 761, - "to": 761, - "id": "0x57" - }, - { - "from": 762, - "to": 763, - "id": "0x5B" - }, - { - "from": 764, - "to": 764, - "id": "0x5D" - }, - { - "from": 765, - "to": 765, - "id": "0x5F" - }, - { - "from": 766, - "to": 766, - "id": "0x61" - }, - { - "from": 767, - "to": 767, - "id": "0x61" - }, - { - "from": 768, - "to": 769, - "id": "0x68" - }, - { - "from": 770, - "to": 770, - "id": "0x67" - }, - { - "from": 771, - "to": 772, - "id": "0x67" - } - ], - "play.toClient.sculk_vibration_signal": [ - { - "from": 755, - "to": 755, - "id": "0x05" - }, - { - "from": 756, - "to": 756, - "id": "0x05" - }, - { - "from": 757, - "to": 758, - "id": "0x05" - } - ], - "play.toClient.select_advancement_tab": [ - { - "from": 735, - "to": 736, - "id": "0x3C" - }, - { - "from": 751, - "to": 754, - "id": "0x3C" - }, - { - "from": 755, - "to": 755, - "id": "0x40" - }, - { - "from": 756, - "to": 756, - "id": "0x40" - }, - { - "from": 757, - "to": 758, - "id": "0x40" - }, - { - "from": 759, - "to": 759, - "id": "0x3E" - }, - { - "from": 760, - "to": 760, - "id": "0x41" - }, - { - "from": 761, - "to": 761, - "id": "0x40" - }, - { - "from": 762, - "to": 763, - "id": "0x44" - }, - { - "from": 764, - "to": 764, - "id": "0x46" - }, - { - "from": 765, - "to": 765, - "id": "0x48" - }, - { - "from": 766, - "to": 766, - "id": "0x4A" - }, - { - "from": 767, - "to": 767, - "id": "0x4A" - }, - { - "from": 768, - "to": 769, - "id": "0x4F" - }, - { - "from": 770, - "to": 770, - "id": "0x4E" - }, - { - "from": 771, - "to": 772, - "id": "0x4E" - } - ], - "play.toClient.server_data": [ - { - "from": 759, - "to": 759, - "id": "0x3F" - }, - { - "from": 760, - "to": 760, - "id": "0x42" - }, - { - "from": 761, - "to": 761, - "id": "0x41" - }, - { - "from": 762, - "to": 763, - "id": "0x45" - }, - { - "from": 764, - "to": 764, - "id": "0x47" - }, - { - "from": 765, - "to": 765, - "id": "0x49" - }, - { - "from": 766, - "to": 766, - "id": "0x4B" - }, - { - "from": 767, - "to": 767, - "id": "0x4B" - }, - { - "from": 768, - "to": 769, - "id": "0x50" - }, - { - "from": 770, - "to": 770, - "id": "0x4F" - }, - { - "from": 771, - "to": 772, - "id": "0x4F" - } - ], - "play.toClient.server_links": [ - { - "from": 767, - "to": 767, - "id": "0x7B" - }, - { - "from": 768, - "to": 769, - "id": "0x82" - }, - { - "from": 770, - "to": 770, - "id": "0x82" - }, - { - "from": 771, - "to": 772, - "id": "0x82" - } - ], - "play.toClient.set_cooldown": [ - { - "from": 735, - "to": 736, - "id": "0x17" - }, - { - "from": 751, - "to": 754, - "id": "0x16" - }, - { - "from": 755, - "to": 755, - "id": "0x17" - }, - { - "from": 756, - "to": 756, - "id": "0x17" - }, - { - "from": 757, - "to": 758, - "id": "0x17" - }, - { - "from": 759, - "to": 759, - "id": "0x14" - }, - { - "from": 760, - "to": 760, - "id": "0x14" - }, - { - "from": 761, - "to": 761, - "id": "0x13" - }, - { - "from": 762, - "to": 763, - "id": "0x15" - }, - { - "from": 764, - "to": 764, - "id": "0x16" - }, - { - "from": 765, - "to": 765, - "id": "0x16" - }, - { - "from": 766, - "to": 766, - "id": "0x17" - }, - { - "from": 767, - "to": 767, - "id": "0x17" - }, - { - "from": 768, - "to": 769, - "id": "0x17" - }, - { - "from": 770, - "to": 770, - "id": "0x16" - }, - { - "from": 771, - "to": 772, - "id": "0x16" - } - ], - "play.toClient.set_cursor_item": [ - { - "from": 768, - "to": 769, - "id": "0x5A" - }, - { - "from": 770, - "to": 770, - "id": "0x59" - }, - { - "from": 771, - "to": 772, - "id": "0x59" - } - ], - "play.toClient.set_passengers": [ - { - "from": 735, - "to": 736, - "id": "0x4B" - }, - { - "from": 751, - "to": 754, - "id": "0x4B" - }, - { - "from": 755, - "to": 755, - "id": "0x54" - }, - { - "from": 756, - "to": 756, - "id": "0x54" - }, - { - "from": 757, - "to": 758, - "id": "0x54" - }, - { - "from": 759, - "to": 759, - "id": "0x54" - }, - { - "from": 760, - "to": 760, - "id": "0x57" - }, - { - "from": 761, - "to": 761, - "id": "0x55" - }, - { - "from": 762, - "to": 763, - "id": "0x59" - }, - { - "from": 764, - "to": 764, - "id": "0x5B" - }, - { - "from": 765, - "to": 765, - "id": "0x5D" - }, - { - "from": 766, - "to": 766, - "id": "0x5F" - }, - { - "from": 767, - "to": 767, - "id": "0x5F" - }, - { - "from": 768, - "to": 769, - "id": "0x65" - }, - { - "from": 770, - "to": 770, - "id": "0x64" - }, - { - "from": 771, - "to": 772, - "id": "0x64" - } - ], - "play.toClient.set_player_inventory": [ - { - "from": 768, - "to": 769, - "id": "0x66" - }, - { - "from": 770, - "to": 770, - "id": "0x65" - }, - { - "from": 771, - "to": 772, - "id": "0x65" - } - ], - "play.toClient.set_projectile_power": [ - { - "from": 766, - "to": 766, - "id": "0x79" - }, - { - "from": 767, - "to": 767, - "id": "0x79" - }, - { - "from": 768, - "to": 769, - "id": "0x80" - }, - { - "from": 770, - "to": 770, - "id": "0x80" - }, - { - "from": 771, - "to": 772, - "id": "0x80" - } - ], - "play.toClient.set_slot": [ - { - "from": 735, - "to": 736, - "id": "0x16" - }, - { - "from": 751, - "to": 754, - "id": "0x15" - }, - { - "from": 755, - "to": 755, - "id": "0x16" - }, - { - "from": 756, - "to": 756, - "id": "0x16" - }, - { - "from": 757, - "to": 758, - "id": "0x16" - }, - { - "from": 759, - "to": 759, - "id": "0x13" - }, - { - "from": 760, - "to": 760, - "id": "0x13" - }, - { - "from": 761, - "to": 761, - "id": "0x12" - }, - { - "from": 762, - "to": 763, - "id": "0x14" - }, - { - "from": 764, - "to": 764, - "id": "0x15" - }, - { - "from": 765, - "to": 765, - "id": "0x15" - }, - { - "from": 766, - "to": 766, - "id": "0x15" - }, - { - "from": 767, - "to": 767, - "id": "0x15" - }, - { - "from": 768, - "to": 769, - "id": "0x15" - }, - { - "from": 770, - "to": 770, - "id": "0x14" - }, - { - "from": 771, - "to": 772, - "id": "0x14" - } - ], - "play.toClient.set_ticking_state": [ - { - "from": 765, - "to": 765, - "id": "0x6E" - }, - { - "from": 766, - "to": 766, - "id": "0x71" - }, - { - "from": 767, - "to": 767, - "id": "0x71" - }, - { - "from": 768, - "to": 769, - "id": "0x78" - }, - { - "from": 770, - "to": 770, - "id": "0x78" - }, - { - "from": 771, - "to": 772, - "id": "0x78" - } - ], - "play.toClient.set_title_subtitle": [ - { - "from": 755, - "to": 755, - "id": "0x57" - }, - { - "from": 756, - "to": 756, - "id": "0x57" - }, - { - "from": 757, - "to": 758, - "id": "0x58" - }, - { - "from": 759, - "to": 759, - "id": "0x58" - }, - { - "from": 760, - "to": 760, - "id": "0x5B" - }, - { - "from": 761, - "to": 761, - "id": "0x59" - }, - { - "from": 762, - "to": 763, - "id": "0x5D" - }, - { - "from": 764, - "to": 764, - "id": "0x5F" - }, - { - "from": 765, - "to": 765, - "id": "0x61" - }, - { - "from": 766, - "to": 766, - "id": "0x63" - }, - { - "from": 767, - "to": 767, - "id": "0x63" - }, - { - "from": 768, - "to": 769, - "id": "0x6A" - }, - { - "from": 770, - "to": 770, - "id": "0x69" - }, - { - "from": 771, - "to": 772, - "id": "0x69" - } - ], - "play.toClient.set_title_text": [ - { - "from": 755, - "to": 755, - "id": "0x59" - }, - { - "from": 756, - "to": 756, - "id": "0x59" - }, - { - "from": 757, - "to": 758, - "id": "0x5A" - }, - { - "from": 759, - "to": 759, - "id": "0x5A" - }, - { - "from": 760, - "to": 760, - "id": "0x5D" - }, - { - "from": 761, - "to": 761, - "id": "0x5B" - }, - { - "from": 762, - "to": 763, - "id": "0x5F" - }, - { - "from": 764, - "to": 764, - "id": "0x61" - }, - { - "from": 765, - "to": 765, - "id": "0x63" - }, - { - "from": 766, - "to": 766, - "id": "0x65" - }, - { - "from": 767, - "to": 767, - "id": "0x65" - }, - { - "from": 768, - "to": 769, - "id": "0x6C" - }, - { - "from": 770, - "to": 770, - "id": "0x6B" - }, - { - "from": 771, - "to": 772, - "id": "0x6B" - } - ], - "play.toClient.set_title_time": [ - { - "from": 755, - "to": 755, - "id": "0x5A" - }, - { - "from": 756, - "to": 756, - "id": "0x5A" - }, - { - "from": 757, - "to": 758, - "id": "0x5B" - }, - { - "from": 759, - "to": 759, - "id": "0x5B" - }, - { - "from": 760, - "to": 760, - "id": "0x5E" - }, - { - "from": 761, - "to": 761, - "id": "0x5C" - }, - { - "from": 762, - "to": 763, - "id": "0x60" - }, - { - "from": 764, - "to": 764, - "id": "0x62" - }, - { - "from": 765, - "to": 765, - "id": "0x64" - }, - { - "from": 766, - "to": 766, - "id": "0x66" - }, - { - "from": 767, - "to": 767, - "id": "0x66" - }, - { - "from": 768, - "to": 769, - "id": "0x6D" - }, - { - "from": 770, - "to": 770, - "id": "0x6C" - }, - { - "from": 771, - "to": 772, - "id": "0x6C" - } - ], - "play.toClient.should_display_chat_preview": [ - { - "from": 759, - "to": 759, - "id": "0x4B" - }, - { - "from": 760, - "to": 760, - "id": "0x4E" - } - ], - "play.toClient.show_dialog": [ - { - "from": 771, - "to": 772, - "id": "0x85" - } - ], - "play.toClient.simulation_distance": [ - { - "from": 757, - "to": 758, - "id": "0x57" - }, - { - "from": 759, - "to": 759, - "id": "0x57" - }, - { - "from": 760, - "to": 760, - "id": "0x5A" - }, - { - "from": 761, - "to": 761, - "id": "0x58" - }, - { - "from": 762, - "to": 763, - "id": "0x5C" - }, - { - "from": 764, - "to": 764, - "id": "0x5E" - }, - { - "from": 765, - "to": 765, - "id": "0x60" - }, - { - "from": 766, - "to": 766, - "id": "0x62" - }, - { - "from": 767, - "to": 767, - "id": "0x62" - }, - { - "from": 768, - "to": 769, - "id": "0x69" - }, - { - "from": 770, - "to": 770, - "id": "0x68" - }, - { - "from": 771, - "to": 772, - "id": "0x68" - } - ], - "play.toClient.sound_effect": [ - { - "from": 735, - "to": 736, - "id": "0x51" - }, - { - "from": 751, - "to": 754, - "id": "0x51" - }, - { - "from": 755, - "to": 755, - "id": "0x5C" - }, - { - "from": 756, - "to": 756, - "id": "0x5C" - }, - { - "from": 757, - "to": 758, - "id": "0x5D" - }, - { - "from": 759, - "to": 759, - "id": "0x5D" - }, - { - "from": 760, - "to": 760, - "id": "0x60" - }, - { - "from": 761, - "to": 761, - "id": "0x5E" - }, - { - "from": 762, - "to": 763, - "id": "0x62" - }, - { - "from": 764, - "to": 764, - "id": "0x64" - }, - { - "from": 765, - "to": 765, - "id": "0x66" - }, - { - "from": 766, - "to": 766, - "id": "0x68" - }, - { - "from": 767, - "to": 767, - "id": "0x68" - }, - { - "from": 768, - "to": 769, - "id": "0x6F" - }, - { - "from": 770, - "to": 770, - "id": "0x6E" - }, - { - "from": 771, - "to": 772, - "id": "0x6E" - } - ], - "play.toClient.spawn_entity": [ - { - "from": 735, - "to": 736, - "id": "0x00" - }, - { - "from": 751, - "to": 754, - "id": "0x00" - }, - { - "from": 755, - "to": 755, - "id": "0x00" - }, - { - "from": 756, - "to": 756, - "id": "0x00" - }, - { - "from": 757, - "to": 758, - "id": "0x00" - }, - { - "from": 759, - "to": 759, - "id": "0x00" - }, - { - "from": 760, - "to": 760, - "id": "0x00" - }, - { - "from": 761, - "to": 761, - "id": "0x00" - }, - { - "from": 762, - "to": 763, - "id": "0x01" - }, - { - "from": 764, - "to": 764, - "id": "0x01" - }, - { - "from": 765, - "to": 765, - "id": "0x01" - }, - { - "from": 766, - "to": 766, - "id": "0x01" - }, - { - "from": 767, - "to": 767, - "id": "0x01" - }, - { - "from": 768, - "to": 769, - "id": "0x01" - }, - { - "from": 770, - "to": 770, - "id": "0x01" - }, - { - "from": 771, - "to": 772, - "id": "0x01" - } - ], - "play.toClient.spawn_entity_experience_orb": [ - { - "from": 735, - "to": 736, - "id": "0x01" - }, - { - "from": 751, - "to": 754, - "id": "0x01" - }, - { - "from": 755, - "to": 755, - "id": "0x01" - }, - { - "from": 756, - "to": 756, - "id": "0x01" - }, - { - "from": 757, - "to": 758, - "id": "0x01" - }, - { - "from": 759, - "to": 759, - "id": "0x01" - }, - { - "from": 760, - "to": 760, - "id": "0x01" - }, - { - "from": 761, - "to": 761, - "id": "0x01" - }, - { - "from": 762, - "to": 763, - "id": "0x02" - }, - { - "from": 764, - "to": 764, - "id": "0x02" - }, - { - "from": 765, - "to": 765, - "id": "0x02" - }, - { - "from": 766, - "to": 766, - "id": "0x02" - }, - { - "from": 767, - "to": 767, - "id": "0x02" - }, - { - "from": 768, - "to": 769, - "id": "0x02" - } - ], - "play.toClient.spawn_entity_living": [ - { - "from": 735, - "to": 736, - "id": "0x02" - }, - { - "from": 751, - "to": 754, - "id": "0x02" - }, - { - "from": 755, - "to": 755, - "id": "0x02" - }, - { - "from": 756, - "to": 756, - "id": "0x02" - }, - { - "from": 757, - "to": 758, - "id": "0x02" - } - ], - "play.toClient.spawn_entity_painting": [ - { - "from": 735, - "to": 736, - "id": "0x03" - }, - { - "from": 751, - "to": 754, - "id": "0x03" - }, - { - "from": 755, - "to": 755, - "id": "0x03" - }, - { - "from": 756, - "to": 756, - "id": "0x03" - }, - { - "from": 757, - "to": 758, - "id": "0x03" - } - ], - "play.toClient.spawn_position": [ - { - "from": 735, - "to": 736, - "id": "0x42" - }, - { - "from": 751, - "to": 754, - "id": "0x42" - }, - { - "from": 755, - "to": 755, - "id": "0x4B" - }, - { - "from": 756, - "to": 756, - "id": "0x4B" - }, - { - "from": 757, - "to": 758, - "id": "0x4B" - }, - { - "from": 759, - "to": 759, - "id": "0x4A" - }, - { - "from": 760, - "to": 760, - "id": "0x4D" - }, - { - "from": 761, - "to": 761, - "id": "0x4C" - }, - { - "from": 762, - "to": 763, - "id": "0x50" - }, - { - "from": 764, - "to": 764, - "id": "0x52" - }, - { - "from": 765, - "to": 765, - "id": "0x54" - }, - { - "from": 766, - "to": 766, - "id": "0x56" - }, - { - "from": 767, - "to": 767, - "id": "0x56" - }, - { - "from": 768, - "to": 769, - "id": "0x5B" - }, - { - "from": 770, - "to": 770, - "id": "0x5A" - }, - { - "from": 771, - "to": 772, - "id": "0x5A" - } - ], - "play.toClient.start_configuration": [ - { - "from": 764, - "to": 764, - "id": "0x65" - }, - { - "from": 765, - "to": 765, - "id": "0x67" - }, - { - "from": 766, - "to": 766, - "id": "0x69" - }, - { - "from": 767, - "to": 767, - "id": "0x69" - }, - { - "from": 768, - "to": 769, - "id": "0x70" - }, - { - "from": 770, - "to": 770, - "id": "0x6F" - }, - { - "from": 771, - "to": 772, - "id": "0x6F" - } - ], - "play.toClient.statistics": [ - { - "from": 735, - "to": 736, - "id": "0x06" - }, - { - "from": 751, - "to": 754, - "id": "0x06" - }, - { - "from": 755, - "to": 755, - "id": "0x07" - }, - { - "from": 756, - "to": 756, - "id": "0x07" - }, - { - "from": 757, - "to": 758, - "id": "0x07" - }, - { - "from": 759, - "to": 759, - "id": "0x04" - }, - { - "from": 760, - "to": 760, - "id": "0x04" - }, - { - "from": 761, - "to": 761, - "id": "0x04" - }, - { - "from": 762, - "to": 763, - "id": "0x05" - }, - { - "from": 764, - "to": 764, - "id": "0x04" - }, - { - "from": 765, - "to": 765, - "id": "0x04" - }, - { - "from": 766, - "to": 766, - "id": "0x04" - }, - { - "from": 767, - "to": 767, - "id": "0x04" - }, - { - "from": 768, - "to": 769, - "id": "0x04" - }, - { - "from": 770, - "to": 770, - "id": "0x03" - }, - { - "from": 771, - "to": 772, - "id": "0x03" - } - ], - "play.toClient.step_tick": [ - { - "from": 765, - "to": 765, - "id": "0x6F" - }, - { - "from": 766, - "to": 766, - "id": "0x72" - }, - { - "from": 767, - "to": 767, - "id": "0x72" - }, - { - "from": 768, - "to": 769, - "id": "0x79" - }, - { - "from": 770, - "to": 770, - "id": "0x79" - }, - { - "from": 771, - "to": 772, - "id": "0x79" - } - ], - "play.toClient.stop_sound": [ - { - "from": 735, - "to": 736, - "id": "0x52" - }, - { - "from": 751, - "to": 754, - "id": "0x52" - }, - { - "from": 755, - "to": 755, - "id": "0x5D" - }, - { - "from": 756, - "to": 756, - "id": "0x5D" - }, - { - "from": 757, - "to": 758, - "id": "0x5E" - }, - { - "from": 759, - "to": 759, - "id": "0x5E" - }, - { - "from": 760, - "to": 760, - "id": "0x61" - }, - { - "from": 761, - "to": 761, - "id": "0x5F" - }, - { - "from": 762, - "to": 763, - "id": "0x63" - }, - { - "from": 764, - "to": 764, - "id": "0x66" - }, - { - "from": 765, - "to": 765, - "id": "0x68" - }, - { - "from": 766, - "to": 766, - "id": "0x6A" - }, - { - "from": 767, - "to": 767, - "id": "0x6A" - }, - { - "from": 768, - "to": 769, - "id": "0x71" - }, - { - "from": 770, - "to": 770, - "id": "0x70" - }, - { - "from": 771, - "to": 772, - "id": "0x70" - } - ], - "play.toClient.store_cookie": [ - { - "from": 766, - "to": 766, - "id": "0x6B" - }, - { - "from": 767, - "to": 767, - "id": "0x6B" - }, - { - "from": 768, - "to": 769, - "id": "0x72" - }, - { - "from": 770, - "to": 770, - "id": "0x71" - }, - { - "from": 771, - "to": 772, - "id": "0x71" - } - ], - "play.toClient.sync_entity_position": [ - { - "from": 768, - "to": 769, - "id": "0x20" - }, - { - "from": 770, - "to": 770, - "id": "0x1F" - }, - { - "from": 771, - "to": 772, - "id": "0x1F" - } - ], - "play.toClient.system_chat": [ - { - "from": 759, - "to": 759, - "id": "0x5F" - }, - { - "from": 760, - "to": 760, - "id": "0x62" - }, - { - "from": 761, - "to": 761, - "id": "0x60" - }, - { - "from": 762, - "to": 763, - "id": "0x64" - }, - { - "from": 764, - "to": 764, - "id": "0x67" - }, - { - "from": 765, - "to": 765, - "id": "0x69" - }, - { - "from": 766, - "to": 766, - "id": "0x6C" - }, - { - "from": 767, - "to": 767, - "id": "0x6C" - }, - { - "from": 768, - "to": 769, - "id": "0x73" - }, - { - "from": 770, - "to": 770, - "id": "0x72" - }, - { - "from": 771, - "to": 772, - "id": "0x72" - } - ], - "play.toClient.tab_complete": [ - { - "from": 735, - "to": 736, - "id": "0x10" - }, - { - "from": 751, - "to": 754, - "id": "0x0F" - }, - { - "from": 755, - "to": 755, - "id": "0x11" - }, - { - "from": 756, - "to": 756, - "id": "0x11" - }, - { - "from": 757, - "to": 758, - "id": "0x11" - }, - { - "from": 759, - "to": 759, - "id": "0x0E" - }, - { - "from": 760, - "to": 760, - "id": "0x0E" - }, - { - "from": 761, - "to": 761, - "id": "0x0D" - }, - { - "from": 762, - "to": 763, - "id": "0x0F" - }, - { - "from": 764, - "to": 764, - "id": "0x10" - }, - { - "from": 765, - "to": 765, - "id": "0x10" - }, - { - "from": 766, - "to": 766, - "id": "0x10" - }, - { - "from": 767, - "to": 767, - "id": "0x10" - }, - { - "from": 768, - "to": 769, - "id": "0x10" - }, - { - "from": 770, - "to": 770, - "id": "0x0F" - }, - { - "from": 771, - "to": 772, - "id": "0x0F" - } - ], - "play.toClient.tags": [ - { - "from": 735, - "to": 736, - "id": "0x5B" - }, - { - "from": 751, - "to": 754, - "id": "0x5B" - }, - { - "from": 755, - "to": 755, - "id": "0x66" - }, - { - "from": 756, - "to": 756, - "id": "0x66" - }, - { - "from": 757, - "to": 758, - "id": "0x67" - }, - { - "from": 759, - "to": 759, - "id": "0x68" - }, - { - "from": 760, - "to": 760, - "id": "0x6B" - }, - { - "from": 761, - "to": 761, - "id": "0x6A" - }, - { - "from": 762, - "to": 763, - "id": "0x6E" - }, - { - "from": 764, - "to": 764, - "id": "0x70" - }, - { - "from": 765, - "to": 765, - "id": "0x74" - }, - { - "from": 766, - "to": 766, - "id": "0x78" - }, - { - "from": 767, - "to": 767, - "id": "0x78" - }, - { - "from": 768, - "to": 769, - "id": "0x7F" - }, - { - "from": 770, - "to": 770, - "id": "0x7F" - }, - { - "from": 771, - "to": 772, - "id": "0x7F" - } - ], - "play.toClient.teams": [ - { - "from": 735, - "to": 736, - "id": "0x4C" - }, - { - "from": 751, - "to": 754, - "id": "0x4C" - }, - { - "from": 755, - "to": 755, - "id": "0x55" - }, - { - "from": 756, - "to": 756, - "id": "0x55" - }, - { - "from": 757, - "to": 758, - "id": "0x55" - }, - { - "from": 759, - "to": 759, - "id": "0x55" - }, - { - "from": 760, - "to": 760, - "id": "0x58" - }, - { - "from": 761, - "to": 761, - "id": "0x56" - }, - { - "from": 762, - "to": 763, - "id": "0x5A" - }, - { - "from": 764, - "to": 764, - "id": "0x5C" - }, - { - "from": 765, - "to": 765, - "id": "0x5E" - }, - { - "from": 766, - "to": 766, - "id": "0x60" - }, - { - "from": 767, - "to": 767, - "id": "0x60" - }, - { - "from": 768, - "to": 769, - "id": "0x67" - }, - { - "from": 770, - "to": 770, - "id": "0x66" - }, - { - "from": 771, - "to": 772, - "id": "0x66" - } - ], - "play.toClient.test_instance_block_status": [ - { - "from": 770, - "to": 770, - "id": "0x77" - }, - { - "from": 771, - "to": 772, - "id": "0x77" - } - ], - "play.toClient.tile_entity_data": [ - { - "from": 735, - "to": 736, - "id": "0x09" - }, - { - "from": 751, - "to": 754, - "id": "0x09" - }, - { - "from": 755, - "to": 755, - "id": "0x0A" - }, - { - "from": 756, - "to": 756, - "id": "0x0A" - }, - { - "from": 757, - "to": 758, - "id": "0x0A" - }, - { - "from": 759, - "to": 759, - "id": "0x07" - }, - { - "from": 760, - "to": 760, - "id": "0x07" - }, - { - "from": 761, - "to": 761, - "id": "0x07" - }, - { - "from": 762, - "to": 763, - "id": "0x08" - }, - { - "from": 764, - "to": 764, - "id": "0x07" - }, - { - "from": 765, - "to": 765, - "id": "0x07" - }, - { - "from": 766, - "to": 766, - "id": "0x07" - }, - { - "from": 767, - "to": 767, - "id": "0x07" - }, - { - "from": 768, - "to": 769, - "id": "0x07" - }, - { - "from": 770, - "to": 770, - "id": "0x06" - }, - { - "from": 771, - "to": 772, - "id": "0x06" - } - ], - "play.toClient.title": [ - { - "from": 735, - "to": 736, - "id": "0x4F" - }, - { - "from": 751, - "to": 754, - "id": "0x4F" - } - ], - "play.toClient.tracked_waypoint": [ - { - "from": 771, - "to": 772, - "id": "0x83" - } - ], - "play.toClient.trade_list": [ - { - "from": 735, - "to": 736, - "id": "0x27" - }, - { - "from": 751, - "to": 754, - "id": "0x26" - }, - { - "from": 755, - "to": 755, - "id": "0x28" - }, - { - "from": 756, - "to": 756, - "id": "0x28" - }, - { - "from": 757, - "to": 758, - "id": "0x28" - }, - { - "from": 759, - "to": 759, - "id": "0x25" - }, - { - "from": 760, - "to": 760, - "id": "0x27" - }, - { - "from": 761, - "to": 761, - "id": "0x26" - }, - { - "from": 762, - "to": 763, - "id": "0x2A" - }, - { - "from": 764, - "to": 764, - "id": "0x2B" - }, - { - "from": 765, - "to": 765, - "id": "0x2B" - }, - { - "from": 766, - "to": 766, - "id": "0x2D" - }, - { - "from": 767, - "to": 767, - "id": "0x2D" - }, - { - "from": 768, - "to": 769, - "id": "0x2E" - }, - { - "from": 770, - "to": 770, - "id": "0x2D" - }, - { - "from": 771, - "to": 772, - "id": "0x2D" - } - ], - "play.toClient.transaction": [ - { - "from": 735, - "to": 736, - "id": "0x12" - }, - { - "from": 751, - "to": 754, - "id": "0x11" - } - ], - "play.toClient.transfer": [ - { - "from": 766, - "to": 766, - "id": "0x73" - }, - { - "from": 767, - "to": 767, - "id": "0x73" - }, - { - "from": 768, - "to": 769, - "id": "0x7A" - }, - { - "from": 770, - "to": 770, - "id": "0x7A" - }, - { - "from": 771, - "to": 772, - "id": "0x7A" - } - ], - "play.toClient.unload_chunk": [ - { - "from": 735, - "to": 736, - "id": "0x1D" - }, - { - "from": 751, - "to": 754, - "id": "0x1C" - }, - { - "from": 755, - "to": 755, - "id": "0x1D" - }, - { - "from": 756, - "to": 756, - "id": "0x1D" - }, - { - "from": 757, - "to": 758, - "id": "0x1D" - }, - { - "from": 759, - "to": 759, - "id": "0x1A" - }, - { - "from": 760, - "to": 760, - "id": "0x1C" - }, - { - "from": 761, - "to": 761, - "id": "0x1B" - }, - { - "from": 762, - "to": 763, - "id": "0x1E" - }, - { - "from": 764, - "to": 764, - "id": "0x1F" - }, - { - "from": 765, - "to": 765, - "id": "0x1F" - }, - { - "from": 766, - "to": 766, - "id": "0x21" - }, - { - "from": 767, - "to": 767, - "id": "0x21" - }, - { - "from": 768, - "to": 769, - "id": "0x22" - }, - { - "from": 770, - "to": 770, - "id": "0x21" - }, - { - "from": 771, - "to": 772, - "id": "0x21" - } - ], - "play.toClient.unlock_recipes": [ - { - "from": 735, - "to": 736, - "id": "0x36" - }, - { - "from": 751, - "to": 754, - "id": "0x35" - }, - { - "from": 755, - "to": 755, - "id": "0x39" - }, - { - "from": 756, - "to": 756, - "id": "0x39" - }, - { - "from": 757, - "to": 758, - "id": "0x39" - }, - { - "from": 759, - "to": 759, - "id": "0x37" - }, - { - "from": 760, - "to": 760, - "id": "0x3A" - }, - { - "from": 761, - "to": 761, - "id": "0x39" - }, - { - "from": 762, - "to": 763, - "id": "0x3D" - }, - { - "from": 764, - "to": 764, - "id": "0x3F" - }, - { - "from": 765, - "to": 765, - "id": "0x3F" - }, - { - "from": 766, - "to": 766, - "id": "0x41" - }, - { - "from": 767, - "to": 767, - "id": "0x41" - } - ], - "play.toClient.update_health": [ - { - "from": 735, - "to": 736, - "id": "0x49" - }, - { - "from": 751, - "to": 754, - "id": "0x49" - }, - { - "from": 755, - "to": 755, - "id": "0x52" - }, - { - "from": 756, - "to": 756, - "id": "0x52" - }, - { - "from": 757, - "to": 758, - "id": "0x52" - }, - { - "from": 759, - "to": 759, - "id": "0x52" - }, - { - "from": 760, - "to": 760, - "id": "0x55" - }, - { - "from": 761, - "to": 761, - "id": "0x53" - }, - { - "from": 762, - "to": 763, - "id": "0x57" - }, - { - "from": 764, - "to": 764, - "id": "0x59" - }, - { - "from": 765, - "to": 765, - "id": "0x5B" - }, - { - "from": 766, - "to": 766, - "id": "0x5D" - }, - { - "from": 767, - "to": 767, - "id": "0x5D" - }, - { - "from": 768, - "to": 769, - "id": "0x62" - }, - { - "from": 770, - "to": 770, - "id": "0x61" - }, - { - "from": 771, - "to": 772, - "id": "0x61" - } - ], - "play.toClient.update_light": [ - { - "from": 735, - "to": 736, - "id": "0x24" - }, - { - "from": 751, - "to": 754, - "id": "0x23" - }, - { - "from": 755, - "to": 755, - "id": "0x25" - }, - { - "from": 756, - "to": 756, - "id": "0x25" - }, - { - "from": 757, - "to": 758, - "id": "0x25" - }, - { - "from": 759, - "to": 759, - "id": "0x22" - }, - { - "from": 760, - "to": 760, - "id": "0x24" - }, - { - "from": 761, - "to": 761, - "id": "0x23" - }, - { - "from": 762, - "to": 763, - "id": "0x27" - }, - { - "from": 764, - "to": 764, - "id": "0x28" - }, - { - "from": 765, - "to": 765, - "id": "0x28" - }, - { - "from": 766, - "to": 766, - "id": "0x2A" - }, - { - "from": 767, - "to": 767, - "id": "0x2A" - }, - { - "from": 768, - "to": 769, - "id": "0x2B" - }, - { - "from": 770, - "to": 770, - "id": "0x2A" - }, - { - "from": 771, - "to": 772, - "id": "0x2A" - } - ], - "play.toClient.update_time": [ - { - "from": 735, - "to": 736, - "id": "0x4E" - }, - { - "from": 751, - "to": 754, - "id": "0x4E" - }, - { - "from": 755, - "to": 755, - "id": "0x58" - }, - { - "from": 756, - "to": 756, - "id": "0x58" - }, - { - "from": 757, - "to": 758, - "id": "0x59" - }, - { - "from": 759, - "to": 759, - "id": "0x59" - }, - { - "from": 760, - "to": 760, - "id": "0x5C" - }, - { - "from": 761, - "to": 761, - "id": "0x5A" - }, - { - "from": 762, - "to": 763, - "id": "0x5E" - }, - { - "from": 764, - "to": 764, - "id": "0x60" - }, - { - "from": 765, - "to": 765, - "id": "0x62" - }, - { - "from": 766, - "to": 766, - "id": "0x64" - }, - { - "from": 767, - "to": 767, - "id": "0x64" - }, - { - "from": 768, - "to": 769, - "id": "0x6B" - }, - { - "from": 770, - "to": 770, - "id": "0x6A" - }, - { - "from": 771, - "to": 772, - "id": "0x6A" - } - ], - "play.toClient.update_view_distance": [ - { - "from": 735, - "to": 736, - "id": "0x41" - }, - { - "from": 751, - "to": 754, - "id": "0x41" - }, - { - "from": 755, - "to": 755, - "id": "0x4A" - }, - { - "from": 756, - "to": 756, - "id": "0x4A" - }, - { - "from": 757, - "to": 758, - "id": "0x4A" - }, - { - "from": 759, - "to": 759, - "id": "0x49" - }, - { - "from": 760, - "to": 760, - "id": "0x4C" - }, - { - "from": 761, - "to": 761, - "id": "0x4B" - }, - { - "from": 762, - "to": 763, - "id": "0x4F" - }, - { - "from": 764, - "to": 764, - "id": "0x51" - }, - { - "from": 765, - "to": 765, - "id": "0x53" - }, - { - "from": 766, - "to": 766, - "id": "0x55" - }, - { - "from": 767, - "to": 767, - "id": "0x55" - }, - { - "from": 768, - "to": 769, - "id": "0x59" - }, - { - "from": 770, - "to": 770, - "id": "0x58" - }, - { - "from": 771, - "to": 772, - "id": "0x58" - } - ], - "play.toClient.update_view_position": [ - { - "from": 735, - "to": 736, - "id": "0x40" - }, - { - "from": 751, - "to": 754, - "id": "0x40" - }, - { - "from": 755, - "to": 755, - "id": "0x49" - }, - { - "from": 756, - "to": 756, - "id": "0x49" - }, - { - "from": 757, - "to": 758, - "id": "0x49" - }, - { - "from": 759, - "to": 759, - "id": "0x48" - }, - { - "from": 760, - "to": 760, - "id": "0x4B" - }, - { - "from": 761, - "to": 761, - "id": "0x4A" - }, - { - "from": 762, - "to": 763, - "id": "0x4E" - }, - { - "from": 764, - "to": 764, - "id": "0x50" - }, - { - "from": 765, - "to": 765, - "id": "0x52" - }, - { - "from": 766, - "to": 766, - "id": "0x54" - }, - { - "from": 767, - "to": 767, - "id": "0x54" - }, - { - "from": 768, - "to": 769, - "id": "0x58" - }, - { - "from": 770, - "to": 770, - "id": "0x57" - }, - { - "from": 771, - "to": 772, - "id": "0x57" - } - ], - "play.toClient.vehicle_move": [ - { - "from": 735, - "to": 736, - "id": "0x2C" - }, - { - "from": 751, - "to": 754, - "id": "0x2B" - }, - { - "from": 755, - "to": 755, - "id": "0x2C" - }, - { - "from": 756, - "to": 756, - "id": "0x2C" - }, - { - "from": 757, - "to": 758, - "id": "0x2C" - }, - { - "from": 759, - "to": 759, - "id": "0x29" - }, - { - "from": 760, - "to": 760, - "id": "0x2B" - }, - { - "from": 761, - "to": 761, - "id": "0x2A" - }, - { - "from": 762, - "to": 763, - "id": "0x2E" - }, - { - "from": 764, - "to": 764, - "id": "0x2F" - }, - { - "from": 765, - "to": 765, - "id": "0x2F" - }, - { - "from": 766, - "to": 766, - "id": "0x31" - }, - { - "from": 767, - "to": 767, - "id": "0x31" - }, - { - "from": 768, - "to": 769, - "id": "0x33" - }, - { - "from": 770, - "to": 770, - "id": "0x32" - }, - { - "from": 771, - "to": 772, - "id": "0x32" - } - ], - "play.toClient.window_items": [ - { - "from": 735, - "to": 736, - "id": "0x14" - }, - { - "from": 751, - "to": 754, - "id": "0x13" - }, - { - "from": 755, - "to": 755, - "id": "0x14" - }, - { - "from": 756, - "to": 756, - "id": "0x14" - }, - { - "from": 757, - "to": 758, - "id": "0x14" - }, - { - "from": 759, - "to": 759, - "id": "0x11" - }, - { - "from": 760, - "to": 760, - "id": "0x11" - }, - { - "from": 761, - "to": 761, - "id": "0x10" - }, - { - "from": 762, - "to": 763, - "id": "0x12" - }, - { - "from": 764, - "to": 764, - "id": "0x13" - }, - { - "from": 765, - "to": 765, - "id": "0x13" - }, - { - "from": 766, - "to": 766, - "id": "0x13" - }, - { - "from": 767, - "to": 767, - "id": "0x13" - }, - { - "from": 768, - "to": 769, - "id": "0x13" - }, - { - "from": 770, - "to": 770, - "id": "0x12" - }, - { - "from": 771, - "to": 772, - "id": "0x12" - } - ], - "play.toClient.world_border": [ - { - "from": 735, - "to": 736, - "id": "0x3D" - }, - { - "from": 751, - "to": 754, - "id": "0x3D" - } - ], - "play.toClient.world_border_center": [ - { - "from": 755, - "to": 755, - "id": "0x42" - }, - { - "from": 756, - "to": 756, - "id": "0x42" - }, - { - "from": 757, - "to": 758, - "id": "0x42" - }, - { - "from": 759, - "to": 759, - "id": "0x41" - }, - { - "from": 760, - "to": 760, - "id": "0x44" - }, - { - "from": 761, - "to": 761, - "id": "0x43" - }, - { - "from": 762, - "to": 763, - "id": "0x47" - }, - { - "from": 764, - "to": 764, - "id": "0x49" - }, - { - "from": 765, - "to": 765, - "id": "0x4B" - }, - { - "from": 766, - "to": 766, - "id": "0x4D" - }, - { - "from": 767, - "to": 767, - "id": "0x4D" - }, - { - "from": 768, - "to": 769, - "id": "0x52" - }, - { - "from": 770, - "to": 770, - "id": "0x51" - }, - { - "from": 771, - "to": 772, - "id": "0x51" - } - ], - "play.toClient.world_border_lerp_size": [ - { - "from": 755, - "to": 755, - "id": "0x43" - }, - { - "from": 756, - "to": 756, - "id": "0x43" - }, - { - "from": 757, - "to": 758, - "id": "0x43" - }, - { - "from": 759, - "to": 759, - "id": "0x42" - }, - { - "from": 760, - "to": 760, - "id": "0x45" - }, - { - "from": 761, - "to": 761, - "id": "0x44" - }, - { - "from": 762, - "to": 763, - "id": "0x48" - }, - { - "from": 764, - "to": 764, - "id": "0x4A" - }, - { - "from": 765, - "to": 765, - "id": "0x4C" - }, - { - "from": 766, - "to": 766, - "id": "0x4E" - }, - { - "from": 767, - "to": 767, - "id": "0x4E" - }, - { - "from": 768, - "to": 769, - "id": "0x53" - }, - { - "from": 770, - "to": 770, - "id": "0x52" - }, - { - "from": 771, - "to": 772, - "id": "0x52" - } - ], - "play.toClient.world_border_size": [ - { - "from": 755, - "to": 755, - "id": "0x44" - }, - { - "from": 756, - "to": 756, - "id": "0x44" - }, - { - "from": 757, - "to": 758, - "id": "0x44" - }, - { - "from": 759, - "to": 759, - "id": "0x43" - }, - { - "from": 760, - "to": 760, - "id": "0x46" - }, - { - "from": 761, - "to": 761, - "id": "0x45" - }, - { - "from": 762, - "to": 763, - "id": "0x49" - }, - { - "from": 764, - "to": 764, - "id": "0x4B" - }, - { - "from": 765, - "to": 765, - "id": "0x4D" - }, - { - "from": 766, - "to": 766, - "id": "0x4F" - }, - { - "from": 767, - "to": 767, - "id": "0x4F" - }, - { - "from": 768, - "to": 769, - "id": "0x54" - }, - { - "from": 770, - "to": 770, - "id": "0x53" - }, - { - "from": 771, - "to": 772, - "id": "0x53" - } - ], - "play.toClient.world_border_warning_delay": [ - { - "from": 755, - "to": 755, - "id": "0x45" - }, - { - "from": 756, - "to": 756, - "id": "0x45" - }, - { - "from": 757, - "to": 758, - "id": "0x45" - }, - { - "from": 759, - "to": 759, - "id": "0x44" - }, - { - "from": 760, - "to": 760, - "id": "0x47" - }, - { - "from": 761, - "to": 761, - "id": "0x46" - }, - { - "from": 762, - "to": 763, - "id": "0x4A" - }, - { - "from": 764, - "to": 764, - "id": "0x4C" - }, - { - "from": 765, - "to": 765, - "id": "0x4E" - }, - { - "from": 766, - "to": 766, - "id": "0x50" - }, - { - "from": 767, - "to": 767, - "id": "0x50" - }, - { - "from": 768, - "to": 769, - "id": "0x55" - }, - { - "from": 770, - "to": 770, - "id": "0x54" - }, - { - "from": 771, - "to": 772, - "id": "0x54" - } - ], - "play.toClient.world_border_warning_reach": [ - { - "from": 755, - "to": 755, - "id": "0x46" - }, - { - "from": 756, - "to": 756, - "id": "0x46" - }, - { - "from": 757, - "to": 758, - "id": "0x46" - }, - { - "from": 759, - "to": 759, - "id": "0x45" - }, - { - "from": 760, - "to": 760, - "id": "0x48" - }, - { - "from": 761, - "to": 761, - "id": "0x47" - }, - { - "from": 762, - "to": 763, - "id": "0x4B" - }, - { - "from": 764, - "to": 764, - "id": "0x4D" - }, - { - "from": 765, - "to": 765, - "id": "0x4F" - }, - { - "from": 766, - "to": 766, - "id": "0x51" - }, - { - "from": 767, - "to": 767, - "id": "0x51" - }, - { - "from": 768, - "to": 769, - "id": "0x56" - }, - { - "from": 770, - "to": 770, - "id": "0x55" - }, - { - "from": 771, - "to": 772, - "id": "0x55" - } - ], - "play.toClient.world_event": [ - { - "from": 735, - "to": 736, - "id": "0x22" - }, - { - "from": 751, - "to": 754, - "id": "0x21" - }, - { - "from": 755, - "to": 755, - "id": "0x23" - }, - { - "from": 756, - "to": 756, - "id": "0x23" - }, - { - "from": 757, - "to": 758, - "id": "0x23" - }, - { - "from": 759, - "to": 759, - "id": "0x20" - }, - { - "from": 760, - "to": 760, - "id": "0x22" - }, - { - "from": 761, - "to": 761, - "id": "0x21" - }, - { - "from": 762, - "to": 763, - "id": "0x25" - }, - { - "from": 764, - "to": 764, - "id": "0x26" - }, - { - "from": 765, - "to": 765, - "id": "0x26" - }, - { - "from": 766, - "to": 766, - "id": "0x28" - }, - { - "from": 767, - "to": 767, - "id": "0x28" - }, - { - "from": 768, - "to": 769, - "id": "0x29" - }, - { - "from": 770, - "to": 770, - "id": "0x28" - }, - { - "from": 771, - "to": 772, - "id": "0x28" - } - ], - "play.toClient.world_particles": [ - { - "from": 735, - "to": 736, - "id": "0x23" - }, - { - "from": 751, - "to": 754, - "id": "0x22" - }, - { - "from": 755, - "to": 755, - "id": "0x24" - }, - { - "from": 756, - "to": 756, - "id": "0x24" - }, - { - "from": 757, - "to": 758, - "id": "0x24" - }, - { - "from": 759, - "to": 759, - "id": "0x21" - }, - { - "from": 760, - "to": 760, - "id": "0x23" - }, - { - "from": 761, - "to": 761, - "id": "0x22" - }, - { - "from": 762, - "to": 763, - "id": "0x26" - }, - { - "from": 764, - "to": 764, - "id": "0x27" - }, - { - "from": 765, - "to": 765, - "id": "0x27" - }, - { - "from": 766, - "to": 766, - "id": "0x29" - }, - { - "from": 767, - "to": 767, - "id": "0x29" - }, - { - "from": 768, - "to": 769, - "id": "0x2A" - }, - { - "from": 770, - "to": 770, - "id": "0x29" - }, - { - "from": 771, - "to": 772, - "id": "0x29" - } - ], - "play.toServer.abilities": [ - { - "from": 735, - "to": 736, - "id": "0x1A" - }, - { - "from": 751, - "to": 754, - "id": "0x1A" - }, - { - "from": 755, - "to": 758, - "id": "0x19" - }, - { - "from": 759, - "to": 759, - "id": "0x1B" - }, - { - "from": 760, - "to": 760, - "id": "0x1C" - }, - { - "from": 761, - "to": 761, - "id": "0x1B" - }, - { - "from": 762, - "to": 763, - "id": "0x1C" - }, - { - "from": 764, - "to": 764, - "id": "0x1F" - }, - { - "from": 765, - "to": 765, - "id": "0x20" - }, - { - "from": 766, - "to": 767, - "id": "0x23" - }, - { - "from": 768, - "to": 768, - "id": "0x25" - }, - { - "from": 769, - "to": 769, - "id": "0x26" - }, - { - "from": 770, - "to": 770, - "id": "0x26" - }, - { - "from": 771, - "to": 772, - "id": "0x27" - } - ], - "play.toServer.advancement_tab": [ - { - "from": 735, - "to": 736, - "id": "0x21" - }, - { - "from": 751, - "to": 754, - "id": "0x22" - }, - { - "from": 755, - "to": 758, - "id": "0x22" - }, - { - "from": 759, - "to": 759, - "id": "0x24" - }, - { - "from": 760, - "to": 760, - "id": "0x25" - }, - { - "from": 761, - "to": 761, - "id": "0x25" - }, - { - "from": 762, - "to": 763, - "id": "0x25" - }, - { - "from": 764, - "to": 764, - "id": "0x28" - }, - { - "from": 765, - "to": 765, - "id": "0x29" - }, - { - "from": 766, - "to": 767, - "id": "0x2C" - }, - { - "from": 768, - "to": 768, - "id": "0x2E" - }, - { - "from": 769, - "to": 769, - "id": "0x30" - }, - { - "from": 770, - "to": 770, - "id": "0x30" - }, - { - "from": 771, - "to": 772, - "id": "0x31" - } - ], - "play.toServer.arm_animation": [ - { - "from": 735, - "to": 736, - "id": "0x2B" - }, - { - "from": 751, - "to": 754, - "id": "0x2C" - }, - { - "from": 755, - "to": 758, - "id": "0x2C" - }, - { - "from": 759, - "to": 759, - "id": "0x2E" - }, - { - "from": 760, - "to": 760, - "id": "0x2F" - }, - { - "from": 761, - "to": 761, - "id": "0x2F" - }, - { - "from": 762, - "to": 763, - "id": "0x2F" - }, - { - "from": 764, - "to": 764, - "id": "0x32" - }, - { - "from": 765, - "to": 765, - "id": "0x33" - }, - { - "from": 766, - "to": 767, - "id": "0x36" - }, - { - "from": 768, - "to": 768, - "id": "0x38" - }, - { - "from": 769, - "to": 769, - "id": "0x3A" - }, - { - "from": 770, - "to": 770, - "id": "0x3B" - }, - { - "from": 771, - "to": 772, - "id": "0x3C" - } - ], - "play.toServer.block_dig": [ - { - "from": 735, - "to": 736, - "id": "0x1B" - }, - { - "from": 751, - "to": 754, - "id": "0x1B" - }, - { - "from": 755, - "to": 758, - "id": "0x1A" - }, - { - "from": 759, - "to": 759, - "id": "0x1C" - }, - { - "from": 760, - "to": 760, - "id": "0x1D" - }, - { - "from": 761, - "to": 761, - "id": "0x1C" - }, - { - "from": 762, - "to": 763, - "id": "0x1D" - }, - { - "from": 764, - "to": 764, - "id": "0x20" - }, - { - "from": 765, - "to": 765, - "id": "0x21" - }, - { - "from": 766, - "to": 767, - "id": "0x24" - }, - { - "from": 768, - "to": 768, - "id": "0x26" - }, - { - "from": 769, - "to": 769, - "id": "0x27" - }, - { - "from": 770, - "to": 770, - "id": "0x27" - }, - { - "from": 771, - "to": 772, - "id": "0x28" - } - ], - "play.toServer.block_place": [ - { - "from": 735, - "to": 736, - "id": "0x2D" - }, - { - "from": 751, - "to": 754, - "id": "0x2E" - }, - { - "from": 755, - "to": 758, - "id": "0x2E" - }, - { - "from": 759, - "to": 759, - "id": "0x30" - }, - { - "from": 760, - "to": 760, - "id": "0x31" - }, - { - "from": 761, - "to": 761, - "id": "0x31" - }, - { - "from": 762, - "to": 763, - "id": "0x31" - }, - { - "from": 764, - "to": 764, - "id": "0x34" - }, - { - "from": 765, - "to": 765, - "id": "0x35" - }, - { - "from": 766, - "to": 767, - "id": "0x38" - }, - { - "from": 768, - "to": 768, - "id": "0x3A" - }, - { - "from": 769, - "to": 769, - "id": "0x3C" - }, - { - "from": 770, - "to": 770, - "id": "0x3E" - }, - { - "from": 771, - "to": 772, - "id": "0x3F" - } - ], - "play.toServer.change_gamemode": [ - { - "from": 771, - "to": 772, - "id": "0x04" - } - ], - "play.toServer.chat": [ - { - "from": 735, - "to": 736, - "id": "0x03" - }, - { - "from": 751, - "to": 754, - "id": "0x03" - }, - { - "from": 755, - "to": 758, - "id": "0x03" - } - ], - "play.toServer.chat_command": [ - { - "from": 759, - "to": 759, - "id": "0x03" - }, - { - "from": 760, - "to": 760, - "id": "0x04" - }, - { - "from": 761, - "to": 761, - "id": "0x04" - }, - { - "from": 762, - "to": 763, - "id": "0x04" - }, - { - "from": 764, - "to": 764, - "id": "0x04" - }, - { - "from": 765, - "to": 765, - "id": "0x04" - }, - { - "from": 766, - "to": 767, - "id": "0x04" - }, - { - "from": 768, - "to": 768, - "id": "0x05" - }, - { - "from": 769, - "to": 769, - "id": "0x05" - }, - { - "from": 770, - "to": 770, - "id": "0x05" - }, - { - "from": 771, - "to": 772, - "id": "0x06" - } - ], - "play.toServer.chat_command_signed": [ - { - "from": 766, - "to": 767, - "id": "0x05" - }, - { - "from": 768, - "to": 768, - "id": "0x06" - }, - { - "from": 769, - "to": 769, - "id": "0x06" - }, - { - "from": 770, - "to": 770, - "id": "0x06" - }, - { - "from": 771, - "to": 772, - "id": "0x07" - } - ], - "play.toServer.chat_message": [ - { - "from": 759, - "to": 759, - "id": "0x04" - }, - { - "from": 760, - "to": 760, - "id": "0x05" - }, - { - "from": 761, - "to": 761, - "id": "0x05" - }, - { - "from": 762, - "to": 763, - "id": "0x05" - }, - { - "from": 764, - "to": 764, - "id": "0x05" - }, - { - "from": 765, - "to": 765, - "id": "0x05" - }, - { - "from": 766, - "to": 767, - "id": "0x06" - }, - { - "from": 768, - "to": 768, - "id": "0x07" - }, - { - "from": 769, - "to": 769, - "id": "0x07" - }, - { - "from": 770, - "to": 770, - "id": "0x07" - }, - { - "from": 771, - "to": 772, - "id": "0x08" - } - ], - "play.toServer.chat_preview": [ - { - "from": 759, - "to": 759, - "id": "0x05" - }, - { - "from": 760, - "to": 760, - "id": "0x06" - } - ], - "play.toServer.chat_session_update": [ - { - "from": 761, - "to": 761, - "id": "0x20" - }, - { - "from": 762, - "to": 763, - "id": "0x06" - }, - { - "from": 764, - "to": 764, - "id": "0x06" - }, - { - "from": 765, - "to": 765, - "id": "0x06" - }, - { - "from": 766, - "to": 767, - "id": "0x07" - }, - { - "from": 768, - "to": 768, - "id": "0x08" - }, - { - "from": 769, - "to": 769, - "id": "0x08" - }, - { - "from": 770, - "to": 770, - "id": "0x08" - }, - { - "from": 771, - "to": 772, - "id": "0x09" - } - ], - "play.toServer.chunk_batch_received": [ - { - "from": 764, - "to": 764, - "id": "0x07" - }, - { - "from": 765, - "to": 765, - "id": "0x07" - }, - { - "from": 766, - "to": 767, - "id": "0x08" - }, - { - "from": 768, - "to": 768, - "id": "0x09" - }, - { - "from": 769, - "to": 769, - "id": "0x09" - }, - { - "from": 770, - "to": 770, - "id": "0x09" - }, - { - "from": 771, - "to": 772, - "id": "0x0A" - } - ], - "play.toServer.client_command": [ - { - "from": 735, - "to": 736, - "id": "0x04" - }, - { - "from": 751, - "to": 754, - "id": "0x04" - }, - { - "from": 755, - "to": 758, - "id": "0x04" - }, - { - "from": 759, - "to": 759, - "id": "0x06" - }, - { - "from": 760, - "to": 760, - "id": "0x07" - }, - { - "from": 761, - "to": 761, - "id": "0x06" - }, - { - "from": 762, - "to": 763, - "id": "0x07" - }, - { - "from": 764, - "to": 764, - "id": "0x08" - }, - { - "from": 765, - "to": 765, - "id": "0x08" - }, - { - "from": 766, - "to": 767, - "id": "0x09" - }, - { - "from": 768, - "to": 768, - "id": "0x0A" - }, - { - "from": 769, - "to": 769, - "id": "0x0A" - }, - { - "from": 770, - "to": 770, - "id": "0x0A" - }, - { - "from": 771, - "to": 772, - "id": "0x0B" - } - ], - "play.toServer.close_window": [ - { - "from": 735, - "to": 736, - "id": "0x0A" - }, - { - "from": 751, - "to": 754, - "id": "0x0A" - }, - { - "from": 755, - "to": 758, - "id": "0x09" - }, - { - "from": 759, - "to": 759, - "id": "0x0B" - }, - { - "from": 760, - "to": 760, - "id": "0x0C" - }, - { - "from": 761, - "to": 761, - "id": "0x0B" - }, - { - "from": 762, - "to": 763, - "id": "0x0C" - }, - { - "from": 764, - "to": 764, - "id": "0x0E" - }, - { - "from": 765, - "to": 765, - "id": "0x0E" - }, - { - "from": 766, - "to": 767, - "id": "0x0F" - }, - { - "from": 768, - "to": 768, - "id": "0x11" - }, - { - "from": 769, - "to": 769, - "id": "0x11" - }, - { - "from": 770, - "to": 770, - "id": "0x11" - }, - { - "from": 771, - "to": 772, - "id": "0x12" - } - ], - "play.toServer.configuration_acknowledged": [ - { - "from": 764, - "to": 764, - "id": "0x0B" - }, - { - "from": 765, - "to": 765, - "id": "0x0B" - }, - { - "from": 766, - "to": 767, - "id": "0x0C" - }, - { - "from": 768, - "to": 768, - "id": "0x0E" - }, - { - "from": 769, - "to": 769, - "id": "0x0E" - }, - { - "from": 770, - "to": 770, - "id": "0x0E" - }, - { - "from": 771, - "to": 772, - "id": "0x0F" - } - ], - "play.toServer.cookie_response": [ - { - "from": 766, - "to": 767, - "id": "0x11" - }, - { - "from": 768, - "to": 768, - "id": "0x13" - }, - { - "from": 769, - "to": 769, - "id": "0x13" - }, - { - "from": 770, - "to": 770, - "id": "0x13" - }, - { - "from": 771, - "to": 772, - "id": "0x14" - } - ], - "play.toServer.craft_recipe_request": [ - { - "from": 735, - "to": 736, - "id": "0x19" - }, - { - "from": 751, - "to": 754, - "id": "0x19" - }, - { - "from": 755, - "to": 758, - "id": "0x18" - }, - { - "from": 759, - "to": 759, - "id": "0x1A" - }, - { - "from": 760, - "to": 760, - "id": "0x1B" - }, - { - "from": 761, - "to": 761, - "id": "0x1A" - }, - { - "from": 762, - "to": 763, - "id": "0x1B" - }, - { - "from": 764, - "to": 764, - "id": "0x1E" - }, - { - "from": 765, - "to": 765, - "id": "0x1F" - }, - { - "from": 766, - "to": 767, - "id": "0x22" - }, - { - "from": 768, - "to": 768, - "id": "0x24" - }, - { - "from": 769, - "to": 769, - "id": "0x25" - }, - { - "from": 770, - "to": 770, - "id": "0x25" - }, - { - "from": 771, - "to": 772, - "id": "0x26" - } - ], - "play.toServer.crafting_book_data": [ - { - "from": 735, - "to": 736, - "id": "0x1E" - } - ], - "play.toServer.custom_click_action": [ - { - "from": 771, - "to": 772, - "id": "0x41" - } - ], - "play.toServer.custom_payload": [ - { - "from": 735, - "to": 736, - "id": "0x0B" - }, - { - "from": 751, - "to": 754, - "id": "0x0B" - }, - { - "from": 755, - "to": 758, - "id": "0x0A" - }, - { - "from": 759, - "to": 759, - "id": "0x0C" - }, - { - "from": 760, - "to": 760, - "id": "0x0D" - }, - { - "from": 761, - "to": 761, - "id": "0x0C" - }, - { - "from": 762, - "to": 763, - "id": "0x0D" - }, - { - "from": 764, - "to": 764, - "id": "0x0F" - }, - { - "from": 765, - "to": 765, - "id": "0x10" - }, - { - "from": 766, - "to": 767, - "id": "0x12" - }, - { - "from": 768, - "to": 768, - "id": "0x14" - }, - { - "from": 769, - "to": 769, - "id": "0x14" - }, - { - "from": 770, - "to": 770, - "id": "0x14" - }, - { - "from": 771, - "to": 772, - "id": "0x15" - } - ], - "play.toServer.debug_sample_subscription": [ - { - "from": 766, - "to": 767, - "id": "0x13" - }, - { - "from": 768, - "to": 768, - "id": "0x15" - }, - { - "from": 769, - "to": 769, - "id": "0x15" - }, - { - "from": 770, - "to": 770, - "id": "0x15" - }, - { - "from": 771, - "to": 772, - "id": "0x16" - } - ], - "play.toServer.displayed_recipe": [ - { - "from": 751, - "to": 754, - "id": "0x1F" - }, - { - "from": 755, - "to": 758, - "id": "0x1F" - }, - { - "from": 759, - "to": 759, - "id": "0x21" - }, - { - "from": 760, - "to": 760, - "id": "0x22" - }, - { - "from": 761, - "to": 761, - "id": "0x22" - }, - { - "from": 762, - "to": 763, - "id": "0x22" - }, - { - "from": 764, - "to": 764, - "id": "0x25" - }, - { - "from": 765, - "to": 765, - "id": "0x26" - }, - { - "from": 766, - "to": 767, - "id": "0x29" - }, - { - "from": 768, - "to": 768, - "id": "0x2B" - }, - { - "from": 769, - "to": 769, - "id": "0x2D" - }, - { - "from": 770, - "to": 770, - "id": "0x2D" - }, - { - "from": 771, - "to": 772, - "id": "0x2E" - } - ], - "play.toServer.edit_book": [ - { - "from": 735, - "to": 736, - "id": "0x0C" - }, - { - "from": 751, - "to": 754, - "id": "0x0C" - }, - { - "from": 755, - "to": 758, - "id": "0x0B" - }, - { - "from": 759, - "to": 759, - "id": "0x0D" - }, - { - "from": 760, - "to": 760, - "id": "0x0E" - }, - { - "from": 761, - "to": 761, - "id": "0x0D" - }, - { - "from": 762, - "to": 763, - "id": "0x0E" - }, - { - "from": 764, - "to": 764, - "id": "0x10" - }, - { - "from": 765, - "to": 765, - "id": "0x11" - }, - { - "from": 766, - "to": 767, - "id": "0x14" - }, - { - "from": 768, - "to": 768, - "id": "0x16" - }, - { - "from": 769, - "to": 769, - "id": "0x16" - }, - { - "from": 770, - "to": 770, - "id": "0x16" - }, - { - "from": 771, - "to": 772, - "id": "0x17" - } - ], - "play.toServer.enchant_item": [ - { - "from": 735, - "to": 736, - "id": "0x08" - }, - { - "from": 751, - "to": 754, - "id": "0x08" - }, - { - "from": 755, - "to": 758, - "id": "0x07" - }, - { - "from": 759, - "to": 759, - "id": "0x09" - }, - { - "from": 760, - "to": 760, - "id": "0x0A" - }, - { - "from": 761, - "to": 761, - "id": "0x09" - }, - { - "from": 762, - "to": 763, - "id": "0x0A" - }, - { - "from": 764, - "to": 764, - "id": "0x0C" - }, - { - "from": 765, - "to": 765, - "id": "0x0C" - }, - { - "from": 766, - "to": 767, - "id": "0x0D" - }, - { - "from": 768, - "to": 768, - "id": "0x0F" - }, - { - "from": 769, - "to": 769, - "id": "0x0F" - }, - { - "from": 770, - "to": 770, - "id": "0x0F" - }, - { - "from": 771, - "to": 772, - "id": "0x10" - } - ], - "play.toServer.entity_action": [ - { - "from": 735, - "to": 736, - "id": "0x1C" - }, - { - "from": 751, - "to": 754, - "id": "0x1C" - }, - { - "from": 755, - "to": 758, - "id": "0x1B" - }, - { - "from": 759, - "to": 759, - "id": "0x1D" - }, - { - "from": 760, - "to": 760, - "id": "0x1E" - }, - { - "from": 761, - "to": 761, - "id": "0x1D" - }, - { - "from": 762, - "to": 763, - "id": "0x1E" - }, - { - "from": 764, - "to": 764, - "id": "0x21" - }, - { - "from": 765, - "to": 765, - "id": "0x22" - }, - { - "from": 766, - "to": 767, - "id": "0x25" - }, - { - "from": 768, - "to": 768, - "id": "0x27" - }, - { - "from": 769, - "to": 769, - "id": "0x28" - }, - { - "from": 770, - "to": 770, - "id": "0x28" - }, - { - "from": 771, - "to": 772, - "id": "0x29" - } - ], - "play.toServer.flying": [ - { - "from": 735, - "to": 736, - "id": "0x15" - }, - { - "from": 751, - "to": 754, - "id": "0x15" - }, - { - "from": 755, - "to": 758, - "id": "0x14" - }, - { - "from": 759, - "to": 759, - "id": "0x16" - }, - { - "from": 760, - "to": 760, - "id": "0x17" - }, - { - "from": 761, - "to": 761, - "id": "0x16" - }, - { - "from": 762, - "to": 763, - "id": "0x17" - }, - { - "from": 764, - "to": 764, - "id": "0x19" - }, - { - "from": 765, - "to": 765, - "id": "0x1A" - }, - { - "from": 766, - "to": 767, - "id": "0x1D" - }, - { - "from": 768, - "to": 768, - "id": "0x1F" - }, - { - "from": 769, - "to": 769, - "id": "0x1F" - }, - { - "from": 770, - "to": 770, - "id": "0x1F" - }, - { - "from": 771, - "to": 772, - "id": "0x20" - } - ], - "play.toServer.generate_structure": [ - { - "from": 735, - "to": 736, - "id": "0x0F" - }, - { - "from": 751, - "to": 754, - "id": "0x0F" - }, - { - "from": 755, - "to": 758, - "id": "0x0E" - }, - { - "from": 759, - "to": 759, - "id": "0x10" - }, - { - "from": 760, - "to": 760, - "id": "0x11" - }, - { - "from": 761, - "to": 761, - "id": "0x10" - }, - { - "from": 762, - "to": 763, - "id": "0x11" - }, - { - "from": 764, - "to": 764, - "id": "0x13" - }, - { - "from": 765, - "to": 765, - "id": "0x14" - }, - { - "from": 766, - "to": 767, - "id": "0x17" - }, - { - "from": 768, - "to": 768, - "id": "0x19" - }, - { - "from": 769, - "to": 769, - "id": "0x19" - }, - { - "from": 770, - "to": 770, - "id": "0x19" - }, - { - "from": 771, - "to": 772, - "id": "0x1A" - } - ], - "play.toServer.held_item_slot": [ - { - "from": 735, - "to": 736, - "id": "0x24" - }, - { - "from": 751, - "to": 754, - "id": "0x25" - }, - { - "from": 755, - "to": 758, - "id": "0x25" - }, - { - "from": 759, - "to": 759, - "id": "0x27" - }, - { - "from": 760, - "to": 760, - "id": "0x28" - }, - { - "from": 761, - "to": 761, - "id": "0x28" - }, - { - "from": 762, - "to": 763, - "id": "0x28" - }, - { - "from": 764, - "to": 764, - "id": "0x2B" - }, - { - "from": 765, - "to": 765, - "id": "0x2C" - }, - { - "from": 766, - "to": 767, - "id": "0x2F" - }, - { - "from": 768, - "to": 768, - "id": "0x31" - }, - { - "from": 769, - "to": 769, - "id": "0x33" - }, - { - "from": 770, - "to": 770, - "id": "0x33" - }, - { - "from": 771, - "to": 772, - "id": "0x34" - } - ], - "play.toServer.keep_alive": [ - { - "from": 735, - "to": 736, - "id": "0x10" - }, - { - "from": 751, - "to": 754, - "id": "0x10" - }, - { - "from": 755, - "to": 758, - "id": "0x0F" - }, - { - "from": 759, - "to": 759, - "id": "0x11" - }, - { - "from": 760, - "to": 760, - "id": "0x12" - }, - { - "from": 761, - "to": 761, - "id": "0x11" - }, - { - "from": 762, - "to": 763, - "id": "0x12" - }, - { - "from": 764, - "to": 764, - "id": "0x14" - }, - { - "from": 765, - "to": 765, - "id": "0x15" - }, - { - "from": 766, - "to": 767, - "id": "0x18" - }, - { - "from": 768, - "to": 768, - "id": "0x1A" - }, - { - "from": 769, - "to": 769, - "id": "0x1A" - }, - { - "from": 770, - "to": 770, - "id": "0x1A" - }, - { - "from": 771, - "to": 772, - "id": "0x1B" - } - ], - "play.toServer.lock_difficulty": [ - { - "from": 735, - "to": 736, - "id": "0x11" - }, - { - "from": 751, - "to": 754, - "id": "0x11" - }, - { - "from": 755, - "to": 758, - "id": "0x10" - }, - { - "from": 759, - "to": 759, - "id": "0x12" - }, - { - "from": 760, - "to": 760, - "id": "0x13" - }, - { - "from": 761, - "to": 761, - "id": "0x12" - }, - { - "from": 762, - "to": 763, - "id": "0x13" - }, - { - "from": 764, - "to": 764, - "id": "0x15" - }, - { - "from": 765, - "to": 765, - "id": "0x16" - }, - { - "from": 766, - "to": 767, - "id": "0x19" - }, - { - "from": 768, - "to": 768, - "id": "0x1B" - }, - { - "from": 769, - "to": 769, - "id": "0x1B" - }, - { - "from": 770, - "to": 770, - "id": "0x1B" - }, - { - "from": 771, - "to": 772, - "id": "0x1C" - } - ], - "play.toServer.look": [ - { - "from": 735, - "to": 736, - "id": "0x14" - }, - { - "from": 751, - "to": 754, - "id": "0x14" - }, - { - "from": 755, - "to": 758, - "id": "0x13" - }, - { - "from": 759, - "to": 759, - "id": "0x15" - }, - { - "from": 760, - "to": 760, - "id": "0x16" - }, - { - "from": 761, - "to": 761, - "id": "0x15" - }, - { - "from": 762, - "to": 763, - "id": "0x16" - }, - { - "from": 764, - "to": 764, - "id": "0x18" - }, - { - "from": 765, - "to": 765, - "id": "0x19" - }, - { - "from": 766, - "to": 767, - "id": "0x1C" - }, - { - "from": 768, - "to": 768, - "id": "0x1E" - }, - { - "from": 769, - "to": 769, - "id": "0x1E" - }, - { - "from": 770, - "to": 770, - "id": "0x1E" - }, - { - "from": 771, - "to": 772, - "id": "0x1F" - } - ], - "play.toServer.message_acknowledgement": [ - { - "from": 760, - "to": 760, - "id": "0x03" - }, - { - "from": 761, - "to": 761, - "id": "0x03" - }, - { - "from": 762, - "to": 763, - "id": "0x03" - }, - { - "from": 764, - "to": 764, - "id": "0x03" - }, - { - "from": 765, - "to": 765, - "id": "0x03" - }, - { - "from": 766, - "to": 767, - "id": "0x03" - }, - { - "from": 768, - "to": 768, - "id": "0x04" - }, - { - "from": 769, - "to": 769, - "id": "0x04" - }, - { - "from": 770, - "to": 770, - "id": "0x04" - }, - { - "from": 771, - "to": 772, - "id": "0x05" - } - ], - "play.toServer.name_item": [ - { - "from": 735, - "to": 736, - "id": "0x1F" - }, - { - "from": 751, - "to": 754, - "id": "0x20" - }, - { - "from": 755, - "to": 758, - "id": "0x20" - }, - { - "from": 759, - "to": 759, - "id": "0x22" - }, - { - "from": 760, - "to": 760, - "id": "0x23" - }, - { - "from": 761, - "to": 761, - "id": "0x23" - }, - { - "from": 762, - "to": 763, - "id": "0x23" - }, - { - "from": 764, - "to": 764, - "id": "0x26" - }, - { - "from": 765, - "to": 765, - "id": "0x27" - }, - { - "from": 766, - "to": 767, - "id": "0x2A" - }, - { - "from": 768, - "to": 768, - "id": "0x2C" - }, - { - "from": 769, - "to": 769, - "id": "0x2E" - }, - { - "from": 770, - "to": 770, - "id": "0x2E" - }, - { - "from": 771, - "to": 772, - "id": "0x2F" - } - ], - "play.toServer.pick_item": [ - { - "from": 735, - "to": 736, - "id": "0x18" - }, - { - "from": 751, - "to": 754, - "id": "0x18" - }, - { - "from": 755, - "to": 758, - "id": "0x17" - }, - { - "from": 759, - "to": 759, - "id": "0x19" - }, - { - "from": 760, - "to": 760, - "id": "0x1A" - }, - { - "from": 761, - "to": 761, - "id": "0x19" - }, - { - "from": 762, - "to": 763, - "id": "0x1A" - }, - { - "from": 764, - "to": 764, - "id": "0x1C" - }, - { - "from": 765, - "to": 765, - "id": "0x1D" - }, - { - "from": 766, - "to": 767, - "id": "0x20" - }, - { - "from": 768, - "to": 768, - "id": "0x22" - } - ], - "play.toServer.pick_item_from_block": [ - { - "from": 769, - "to": 769, - "id": "0x22" - }, - { - "from": 770, - "to": 770, - "id": "0x22" - }, - { - "from": 771, - "to": 772, - "id": "0x23" - } - ], - "play.toServer.pick_item_from_entity": [ - { - "from": 769, - "to": 769, - "id": "0x23" - }, - { - "from": 770, - "to": 770, - "id": "0x23" - }, - { - "from": 771, - "to": 772, - "id": "0x24" - } - ], - "play.toServer.ping_request": [ - { - "from": 764, - "to": 764, - "id": "0x1D" - }, - { - "from": 765, - "to": 765, - "id": "0x1E" - }, - { - "from": 766, - "to": 767, - "id": "0x21" - }, - { - "from": 768, - "to": 768, - "id": "0x23" - }, - { - "from": 769, - "to": 769, - "id": "0x24" - }, - { - "from": 770, - "to": 770, - "id": "0x24" - }, - { - "from": 771, - "to": 772, - "id": "0x25" - } - ], - "play.toServer.player_input": [ - { - "from": 768, - "to": 768, - "id": "0x28" - }, - { - "from": 769, - "to": 769, - "id": "0x29" - }, - { - "from": 770, - "to": 770, - "id": "0x29" - }, - { - "from": 771, - "to": 772, - "id": "0x2A" - } - ], - "play.toServer.player_loaded": [ - { - "from": 769, - "to": 769, - "id": "0x2A" - }, - { - "from": 770, - "to": 770, - "id": "0x2A" - }, - { - "from": 771, - "to": 772, - "id": "0x2B" - } - ], - "play.toServer.pong": [ - { - "from": 755, - "to": 758, - "id": "0x1D" - }, - { - "from": 759, - "to": 759, - "id": "0x1F" - }, - { - "from": 760, - "to": 760, - "id": "0x20" - }, - { - "from": 761, - "to": 761, - "id": "0x1F" - }, - { - "from": 762, - "to": 763, - "id": "0x20" - }, - { - "from": 764, - "to": 764, - "id": "0x23" - }, - { - "from": 765, - "to": 765, - "id": "0x24" - }, - { - "from": 766, - "to": 767, - "id": "0x27" - }, - { - "from": 768, - "to": 768, - "id": "0x29" - }, - { - "from": 769, - "to": 769, - "id": "0x2B" - }, - { - "from": 770, - "to": 770, - "id": "0x2B" - }, - { - "from": 771, - "to": 772, - "id": "0x2C" - } - ], - "play.toServer.position": [ - { - "from": 735, - "to": 736, - "id": "0x12" - }, - { - "from": 751, - "to": 754, - "id": "0x12" - }, - { - "from": 755, - "to": 758, - "id": "0x11" - }, - { - "from": 759, - "to": 759, - "id": "0x13" - }, - { - "from": 760, - "to": 760, - "id": "0x14" - }, - { - "from": 761, - "to": 761, - "id": "0x13" - }, - { - "from": 762, - "to": 763, - "id": "0x14" - }, - { - "from": 764, - "to": 764, - "id": "0x16" - }, - { - "from": 765, - "to": 765, - "id": "0x17" - }, - { - "from": 766, - "to": 767, - "id": "0x1A" - }, - { - "from": 768, - "to": 768, - "id": "0x1C" - }, - { - "from": 769, - "to": 769, - "id": "0x1C" - }, - { - "from": 770, - "to": 770, - "id": "0x1C" - }, - { - "from": 771, - "to": 772, - "id": "0x1D" - } - ], - "play.toServer.position_look": [ - { - "from": 735, - "to": 736, - "id": "0x13" - }, - { - "from": 751, - "to": 754, - "id": "0x13" - }, - { - "from": 755, - "to": 758, - "id": "0x12" - }, - { - "from": 759, - "to": 759, - "id": "0x14" - }, - { - "from": 760, - "to": 760, - "id": "0x15" - }, - { - "from": 761, - "to": 761, - "id": "0x14" - }, - { - "from": 762, - "to": 763, - "id": "0x15" - }, - { - "from": 764, - "to": 764, - "id": "0x17" - }, - { - "from": 765, - "to": 765, - "id": "0x18" - }, - { - "from": 766, - "to": 767, - "id": "0x1B" - }, - { - "from": 768, - "to": 768, - "id": "0x1D" - }, - { - "from": 769, - "to": 769, - "id": "0x1D" - }, - { - "from": 770, - "to": 770, - "id": "0x1D" - }, - { - "from": 771, - "to": 772, - "id": "0x1E" - } - ], - "play.toServer.query_block_nbt": [ - { - "from": 735, - "to": 736, - "id": "0x01" - }, - { - "from": 751, - "to": 754, - "id": "0x01" - }, - { - "from": 755, - "to": 758, - "id": "0x01" - }, - { - "from": 759, - "to": 759, - "id": "0x01" - }, - { - "from": 760, - "to": 760, - "id": "0x01" - }, - { - "from": 761, - "to": 761, - "id": "0x01" - }, - { - "from": 762, - "to": 763, - "id": "0x01" - }, - { - "from": 764, - "to": 764, - "id": "0x01" - }, - { - "from": 765, - "to": 765, - "id": "0x01" - }, - { - "from": 766, - "to": 767, - "id": "0x01" - }, - { - "from": 768, - "to": 768, - "id": "0x01" - }, - { - "from": 769, - "to": 769, - "id": "0x01" - }, - { - "from": 770, - "to": 770, - "id": "0x01" - }, - { - "from": 771, - "to": 772, - "id": "0x01" - } - ], - "play.toServer.query_entity_nbt": [ - { - "from": 735, - "to": 736, - "id": "0x0D" - }, - { - "from": 751, - "to": 754, - "id": "0x0D" - }, - { - "from": 755, - "to": 758, - "id": "0x0C" - }, - { - "from": 759, - "to": 759, - "id": "0x0E" - }, - { - "from": 760, - "to": 760, - "id": "0x0F" - }, - { - "from": 761, - "to": 761, - "id": "0x0E" - }, - { - "from": 762, - "to": 763, - "id": "0x0F" - }, - { - "from": 764, - "to": 764, - "id": "0x11" - }, - { - "from": 765, - "to": 765, - "id": "0x12" - }, - { - "from": 766, - "to": 767, - "id": "0x15" - }, - { - "from": 768, - "to": 768, - "id": "0x17" - }, - { - "from": 769, - "to": 769, - "id": "0x17" - }, - { - "from": 770, - "to": 770, - "id": "0x17" - }, - { - "from": 771, - "to": 772, - "id": "0x18" - } - ], - "play.toServer.recipe_book": [ - { - "from": 751, - "to": 754, - "id": "0x1E" - }, - { - "from": 755, - "to": 758, - "id": "0x1E" - }, - { - "from": 759, - "to": 759, - "id": "0x20" - }, - { - "from": 760, - "to": 760, - "id": "0x21" - }, - { - "from": 761, - "to": 761, - "id": "0x21" - }, - { - "from": 762, - "to": 763, - "id": "0x21" - }, - { - "from": 764, - "to": 764, - "id": "0x24" - }, - { - "from": 765, - "to": 765, - "id": "0x25" - }, - { - "from": 766, - "to": 767, - "id": "0x28" - }, - { - "from": 768, - "to": 768, - "id": "0x2A" - }, - { - "from": 769, - "to": 769, - "id": "0x2C" - }, - { - "from": 770, - "to": 770, - "id": "0x2C" - }, - { - "from": 771, - "to": 772, - "id": "0x2D" - } - ], - "play.toServer.resource_pack_receive": [ - { - "from": 735, - "to": 736, - "id": "0x20" - }, - { - "from": 751, - "to": 754, - "id": "0x21" - }, - { - "from": 755, - "to": 758, - "id": "0x21" - }, - { - "from": 759, - "to": 759, - "id": "0x23" - }, - { - "from": 760, - "to": 760, - "id": "0x24" - }, - { - "from": 761, - "to": 761, - "id": "0x24" - }, - { - "from": 762, - "to": 763, - "id": "0x24" - }, - { - "from": 764, - "to": 764, - "id": "0x27" - }, - { - "from": 765, - "to": 765, - "id": "0x28" - }, - { - "from": 766, - "to": 767, - "id": "0x2B" - }, - { - "from": 768, - "to": 768, - "id": "0x2D" - }, - { - "from": 769, - "to": 769, - "id": "0x2F" - }, - { - "from": 770, - "to": 770, - "id": "0x2F" - }, - { - "from": 771, - "to": 772, - "id": "0x30" - } - ], - "play.toServer.select_bundle_item": [ - { - "from": 768, - "to": 768, - "id": "0x02" - }, - { - "from": 769, - "to": 769, - "id": "0x02" - }, - { - "from": 770, - "to": 770, - "id": "0x02" - }, - { - "from": 771, - "to": 772, - "id": "0x02" - } - ], - "play.toServer.select_trade": [ - { - "from": 735, - "to": 736, - "id": "0x22" - }, - { - "from": 751, - "to": 754, - "id": "0x23" - }, - { - "from": 755, - "to": 758, - "id": "0x23" - }, - { - "from": 759, - "to": 759, - "id": "0x25" - }, - { - "from": 760, - "to": 760, - "id": "0x26" - }, - { - "from": 761, - "to": 761, - "id": "0x26" - }, - { - "from": 762, - "to": 763, - "id": "0x26" - }, - { - "from": 764, - "to": 764, - "id": "0x29" - }, - { - "from": 765, - "to": 765, - "id": "0x2A" - }, - { - "from": 766, - "to": 767, - "id": "0x2D" - }, - { - "from": 768, - "to": 768, - "id": "0x2F" - }, - { - "from": 769, - "to": 769, - "id": "0x31" - }, - { - "from": 770, - "to": 770, - "id": "0x31" - }, - { - "from": 771, - "to": 772, - "id": "0x32" - } - ], - "play.toServer.set_beacon_effect": [ - { - "from": 735, - "to": 736, - "id": "0x23" - }, - { - "from": 751, - "to": 754, - "id": "0x24" - }, - { - "from": 755, - "to": 758, - "id": "0x24" - }, - { - "from": 759, - "to": 759, - "id": "0x26" - }, - { - "from": 760, - "to": 760, - "id": "0x27" - }, - { - "from": 761, - "to": 761, - "id": "0x27" - }, - { - "from": 762, - "to": 763, - "id": "0x27" - }, - { - "from": 764, - "to": 764, - "id": "0x2A" - }, - { - "from": 765, - "to": 765, - "id": "0x2B" - }, - { - "from": 766, - "to": 767, - "id": "0x2E" - }, - { - "from": 768, - "to": 768, - "id": "0x30" - }, - { - "from": 769, - "to": 769, - "id": "0x32" - }, - { - "from": 770, - "to": 770, - "id": "0x32" - }, - { - "from": 771, - "to": 772, - "id": "0x33" - } - ], - "play.toServer.set_creative_slot": [ - { - "from": 735, - "to": 736, - "id": "0x27" - }, - { - "from": 751, - "to": 754, - "id": "0x28" - }, - { - "from": 755, - "to": 758, - "id": "0x28" - }, - { - "from": 759, - "to": 759, - "id": "0x2A" - }, - { - "from": 760, - "to": 760, - "id": "0x2B" - }, - { - "from": 761, - "to": 761, - "id": "0x2B" - }, - { - "from": 762, - "to": 763, - "id": "0x2B" - }, - { - "from": 764, - "to": 764, - "id": "0x2E" - }, - { - "from": 765, - "to": 765, - "id": "0x2F" - }, - { - "from": 766, - "to": 767, - "id": "0x32" - }, - { - "from": 768, - "to": 768, - "id": "0x34" - }, - { - "from": 769, - "to": 769, - "id": "0x36" - }, - { - "from": 770, - "to": 770, - "id": "0x36" - }, - { - "from": 771, - "to": 772, - "id": "0x37" - } - ], - "play.toServer.set_difficulty": [ - { - "from": 735, - "to": 736, - "id": "0x02" - }, - { - "from": 751, - "to": 754, - "id": "0x02" - }, - { - "from": 755, - "to": 758, - "id": "0x02" - }, - { - "from": 759, - "to": 759, - "id": "0x02" - }, - { - "from": 760, - "to": 760, - "id": "0x02" - }, - { - "from": 761, - "to": 761, - "id": "0x02" - }, - { - "from": 762, - "to": 763, - "id": "0x02" - }, - { - "from": 764, - "to": 764, - "id": "0x02" - }, - { - "from": 765, - "to": 765, - "id": "0x02" - }, - { - "from": 766, - "to": 767, - "id": "0x02" - }, - { - "from": 768, - "to": 768, - "id": "0x03" - }, - { - "from": 769, - "to": 769, - "id": "0x03" - }, - { - "from": 770, - "to": 770, - "id": "0x03" - }, - { - "from": 771, - "to": 772, - "id": "0x03" - } - ], - "play.toServer.set_slot_state": [ - { - "from": 765, - "to": 765, - "id": "0x0F" - }, - { - "from": 766, - "to": 767, - "id": "0x10" - }, - { - "from": 768, - "to": 768, - "id": "0x12" - }, - { - "from": 769, - "to": 769, - "id": "0x12" - }, - { - "from": 770, - "to": 770, - "id": "0x12" - }, - { - "from": 771, - "to": 772, - "id": "0x13" - } - ], - "play.toServer.set_test_block": [ - { - "from": 770, - "to": 770, - "id": "0x39" - }, - { - "from": 771, - "to": 772, - "id": "0x3A" - } - ], - "play.toServer.settings": [ - { - "from": 735, - "to": 736, - "id": "0x05" - }, - { - "from": 751, - "to": 754, - "id": "0x05" - }, - { - "from": 755, - "to": 758, - "id": "0x05" - }, - { - "from": 759, - "to": 759, - "id": "0x07" - }, - { - "from": 760, - "to": 760, - "id": "0x08" - }, - { - "from": 761, - "to": 761, - "id": "0x07" - }, - { - "from": 762, - "to": 763, - "id": "0x08" - }, - { - "from": 764, - "to": 764, - "id": "0x09" - }, - { - "from": 765, - "to": 765, - "id": "0x09" - }, - { - "from": 766, - "to": 767, - "id": "0x0A" - }, - { - "from": 768, - "to": 768, - "id": "0x0C" - }, - { - "from": 769, - "to": 769, - "id": "0x0C" - }, - { - "from": 770, - "to": 770, - "id": "0x0C" - }, - { - "from": 771, - "to": 772, - "id": "0x0D" - } - ], - "play.toServer.spectate": [ - { - "from": 735, - "to": 736, - "id": "0x2C" - }, - { - "from": 751, - "to": 754, - "id": "0x2D" - }, - { - "from": 755, - "to": 758, - "id": "0x2D" - }, - { - "from": 759, - "to": 759, - "id": "0x2F" - }, - { - "from": 760, - "to": 760, - "id": "0x30" - }, - { - "from": 761, - "to": 761, - "id": "0x30" - }, - { - "from": 762, - "to": 763, - "id": "0x30" - }, - { - "from": 764, - "to": 764, - "id": "0x33" - }, - { - "from": 765, - "to": 765, - "id": "0x34" - }, - { - "from": 766, - "to": 767, - "id": "0x37" - }, - { - "from": 768, - "to": 768, - "id": "0x39" - }, - { - "from": 769, - "to": 769, - "id": "0x3B" - }, - { - "from": 770, - "to": 770, - "id": "0x3D" - }, - { - "from": 771, - "to": 772, - "id": "0x3D" - } - ], - "play.toServer.steer_boat": [ - { - "from": 735, - "to": 736, - "id": "0x17" - }, - { - "from": 751, - "to": 754, - "id": "0x17" - }, - { - "from": 755, - "to": 758, - "id": "0x16" - }, - { - "from": 759, - "to": 759, - "id": "0x18" - }, - { - "from": 760, - "to": 760, - "id": "0x19" - }, - { - "from": 761, - "to": 761, - "id": "0x18" - }, - { - "from": 762, - "to": 763, - "id": "0x19" - }, - { - "from": 764, - "to": 764, - "id": "0x1B" - }, - { - "from": 765, - "to": 765, - "id": "0x1C" - }, - { - "from": 766, - "to": 767, - "id": "0x1F" - }, - { - "from": 768, - "to": 768, - "id": "0x21" - }, - { - "from": 769, - "to": 769, - "id": "0x21" - }, - { - "from": 770, - "to": 770, - "id": "0x21" - }, - { - "from": 771, - "to": 772, - "id": "0x22" - } - ], - "play.toServer.steer_vehicle": [ - { - "from": 735, - "to": 736, - "id": "0x1D" - }, - { - "from": 751, - "to": 754, - "id": "0x1D" - }, - { - "from": 755, - "to": 758, - "id": "0x1C" - }, - { - "from": 759, - "to": 759, - "id": "0x1E" - }, - { - "from": 760, - "to": 760, - "id": "0x1F" - }, - { - "from": 761, - "to": 761, - "id": "0x1E" - }, - { - "from": 762, - "to": 763, - "id": "0x1F" - }, - { - "from": 764, - "to": 764, - "id": "0x22" - }, - { - "from": 765, - "to": 765, - "id": "0x23" - }, - { - "from": 766, - "to": 767, - "id": "0x26" - } - ], - "play.toServer.tab_complete": [ - { - "from": 735, - "to": 736, - "id": "0x06" - }, - { - "from": 751, - "to": 754, - "id": "0x06" - }, - { - "from": 755, - "to": 758, - "id": "0x06" - }, - { - "from": 759, - "to": 759, - "id": "0x08" - }, - { - "from": 760, - "to": 760, - "id": "0x09" - }, - { - "from": 761, - "to": 761, - "id": "0x08" - }, - { - "from": 762, - "to": 763, - "id": "0x09" - }, - { - "from": 764, - "to": 764, - "id": "0x0A" - }, - { - "from": 765, - "to": 765, - "id": "0x0A" - }, - { - "from": 766, - "to": 767, - "id": "0x0B" - }, - { - "from": 768, - "to": 768, - "id": "0x0D" - }, - { - "from": 769, - "to": 769, - "id": "0x0D" - }, - { - "from": 770, - "to": 770, - "id": "0x0D" - }, - { - "from": 771, - "to": 772, - "id": "0x0E" - } - ], - "play.toServer.teleport_confirm": [ - { - "from": 735, - "to": 736, - "id": "0x00" - }, - { - "from": 751, - "to": 754, - "id": "0x00" - }, - { - "from": 755, - "to": 758, - "id": "0x00" - }, - { - "from": 759, - "to": 759, - "id": "0x00" - }, - { - "from": 760, - "to": 760, - "id": "0x00" - }, - { - "from": 761, - "to": 761, - "id": "0x00" - }, - { - "from": 762, - "to": 763, - "id": "0x00" - }, - { - "from": 764, - "to": 764, - "id": "0x00" - }, - { - "from": 765, - "to": 765, - "id": "0x00" - }, - { - "from": 766, - "to": 767, - "id": "0x00" - }, - { - "from": 768, - "to": 768, - "id": "0x00" - }, - { - "from": 769, - "to": 769, - "id": "0x00" - }, - { - "from": 770, - "to": 770, - "id": "0x00" - }, - { - "from": 771, - "to": 772, - "id": "0x00" - } - ], - "play.toServer.test_instance_block_action": [ - { - "from": 770, - "to": 770, - "id": "0x3C" - }, - { - "from": 771, - "to": 772, - "id": "0x3E" - } - ], - "play.toServer.tick_end": [ - { - "from": 768, - "to": 768, - "id": "0x0B" - }, - { - "from": 769, - "to": 769, - "id": "0x0B" - }, - { - "from": 770, - "to": 770, - "id": "0x0B" - }, - { - "from": 771, - "to": 772, - "id": "0x0C" - } - ], - "play.toServer.transaction": [ - { - "from": 735, - "to": 736, - "id": "0x07" - }, - { - "from": 751, - "to": 754, - "id": "0x07" - } - ], - "play.toServer.update_command_block": [ - { - "from": 735, - "to": 736, - "id": "0x25" - }, - { - "from": 751, - "to": 754, - "id": "0x26" - }, - { - "from": 755, - "to": 758, - "id": "0x26" - }, - { - "from": 759, - "to": 759, - "id": "0x28" - }, - { - "from": 760, - "to": 760, - "id": "0x29" - }, - { - "from": 761, - "to": 761, - "id": "0x29" - }, - { - "from": 762, - "to": 763, - "id": "0x29" - }, - { - "from": 764, - "to": 764, - "id": "0x2C" - }, - { - "from": 765, - "to": 765, - "id": "0x2D" - }, - { - "from": 766, - "to": 767, - "id": "0x30" - }, - { - "from": 768, - "to": 768, - "id": "0x32" - }, - { - "from": 769, - "to": 769, - "id": "0x34" - }, - { - "from": 770, - "to": 770, - "id": "0x34" - }, - { - "from": 771, - "to": 772, - "id": "0x35" - } - ], - "play.toServer.update_command_block_minecart": [ - { - "from": 735, - "to": 736, - "id": "0x26" - }, - { - "from": 751, - "to": 754, - "id": "0x27" - }, - { - "from": 755, - "to": 758, - "id": "0x27" - }, - { - "from": 759, - "to": 759, - "id": "0x29" - }, - { - "from": 760, - "to": 760, - "id": "0x2A" - }, - { - "from": 761, - "to": 761, - "id": "0x2A" - }, - { - "from": 762, - "to": 763, - "id": "0x2A" - }, - { - "from": 764, - "to": 764, - "id": "0x2D" - }, - { - "from": 765, - "to": 765, - "id": "0x2E" - }, - { - "from": 766, - "to": 767, - "id": "0x31" - }, - { - "from": 768, - "to": 768, - "id": "0x33" - }, - { - "from": 769, - "to": 769, - "id": "0x35" - }, - { - "from": 770, - "to": 770, - "id": "0x35" - }, - { - "from": 771, - "to": 772, - "id": "0x36" - } - ], - "play.toServer.update_jigsaw_block": [ - { - "from": 735, - "to": 736, - "id": "0x28" - }, - { - "from": 751, - "to": 754, - "id": "0x29" - }, - { - "from": 755, - "to": 758, - "id": "0x29" - }, - { - "from": 759, - "to": 759, - "id": "0x2B" - }, - { - "from": 760, - "to": 760, - "id": "0x2C" - }, - { - "from": 761, - "to": 761, - "id": "0x2C" - }, - { - "from": 762, - "to": 763, - "id": "0x2C" - }, - { - "from": 764, - "to": 764, - "id": "0x2F" - }, - { - "from": 765, - "to": 765, - "id": "0x30" - }, - { - "from": 766, - "to": 767, - "id": "0x33" - }, - { - "from": 768, - "to": 768, - "id": "0x35" - }, - { - "from": 769, - "to": 769, - "id": "0x37" - }, - { - "from": 770, - "to": 770, - "id": "0x37" - }, - { - "from": 771, - "to": 772, - "id": "0x38" - } - ], - "play.toServer.update_sign": [ - { - "from": 735, - "to": 736, - "id": "0x2A" - }, - { - "from": 751, - "to": 754, - "id": "0x2B" - }, - { - "from": 755, - "to": 758, - "id": "0x2B" - }, - { - "from": 759, - "to": 759, - "id": "0x2D" - }, - { - "from": 760, - "to": 760, - "id": "0x2E" - }, - { - "from": 761, - "to": 761, - "id": "0x2E" - }, - { - "from": 762, - "to": 763, - "id": "0x2E" - }, - { - "from": 764, - "to": 764, - "id": "0x31" - }, - { - "from": 765, - "to": 765, - "id": "0x32" - }, - { - "from": 766, - "to": 767, - "id": "0x35" - }, - { - "from": 768, - "to": 768, - "id": "0x37" - }, - { - "from": 769, - "to": 769, - "id": "0x39" - }, - { - "from": 770, - "to": 770, - "id": "0x3A" - }, - { - "from": 771, - "to": 772, - "id": "0x3B" - } - ], - "play.toServer.update_structure_block": [ - { - "from": 735, - "to": 736, - "id": "0x29" - }, - { - "from": 751, - "to": 754, - "id": "0x2A" - }, - { - "from": 755, - "to": 758, - "id": "0x2A" - }, - { - "from": 759, - "to": 759, - "id": "0x2C" - }, - { - "from": 760, - "to": 760, - "id": "0x2D" - }, - { - "from": 761, - "to": 761, - "id": "0x2D" - }, - { - "from": 762, - "to": 763, - "id": "0x2D" - }, - { - "from": 764, - "to": 764, - "id": "0x30" - }, - { - "from": 765, - "to": 765, - "id": "0x31" - }, - { - "from": 766, - "to": 767, - "id": "0x34" - }, - { - "from": 768, - "to": 768, - "id": "0x36" - }, - { - "from": 769, - "to": 769, - "id": "0x38" - }, - { - "from": 770, - "to": 770, - "id": "0x38" - }, - { - "from": 771, - "to": 772, - "id": "0x39" - } - ], - "play.toServer.use_entity": [ - { - "from": 735, - "to": 736, - "id": "0x0E" - }, - { - "from": 751, - "to": 754, - "id": "0x0E" - }, - { - "from": 755, - "to": 758, - "id": "0x0D" - }, - { - "from": 759, - "to": 759, - "id": "0x0F" - }, - { - "from": 760, - "to": 760, - "id": "0x10" - }, - { - "from": 761, - "to": 761, - "id": "0x0F" - }, - { - "from": 762, - "to": 763, - "id": "0x10" - }, - { - "from": 764, - "to": 764, - "id": "0x12" - }, - { - "from": 765, - "to": 765, - "id": "0x13" - }, - { - "from": 766, - "to": 767, - "id": "0x16" - }, - { - "from": 768, - "to": 768, - "id": "0x18" - }, - { - "from": 769, - "to": 769, - "id": "0x18" - }, - { - "from": 770, - "to": 770, - "id": "0x18" - }, - { - "from": 771, - "to": 772, - "id": "0x19" - } - ], - "play.toServer.use_item": [ - { - "from": 735, - "to": 736, - "id": "0x2E" - }, - { - "from": 751, - "to": 754, - "id": "0x2F" - }, - { - "from": 755, - "to": 758, - "id": "0x2F" - }, - { - "from": 759, - "to": 759, - "id": "0x31" - }, - { - "from": 760, - "to": 760, - "id": "0x32" - }, - { - "from": 761, - "to": 761, - "id": "0x32" - }, - { - "from": 762, - "to": 763, - "id": "0x32" - }, - { - "from": 764, - "to": 764, - "id": "0x35" - }, - { - "from": 765, - "to": 765, - "id": "0x36" - }, - { - "from": 766, - "to": 767, - "id": "0x39" - }, - { - "from": 768, - "to": 768, - "id": "0x3B" - }, - { - "from": 769, - "to": 769, - "id": "0x3D" - }, - { - "from": 770, - "to": 770, - "id": "0x3F" - }, - { - "from": 771, - "to": 772, - "id": "0x40" - } - ], - "play.toServer.vehicle_move": [ - { - "from": 735, - "to": 736, - "id": "0x16" - }, - { - "from": 751, - "to": 754, - "id": "0x16" - }, - { - "from": 755, - "to": 758, - "id": "0x15" - }, - { - "from": 759, - "to": 759, - "id": "0x17" - }, - { - "from": 760, - "to": 760, - "id": "0x18" - }, - { - "from": 761, - "to": 761, - "id": "0x17" - }, - { - "from": 762, - "to": 763, - "id": "0x18" - }, - { - "from": 764, - "to": 764, - "id": "0x1A" - }, - { - "from": 765, - "to": 765, - "id": "0x1B" - }, - { - "from": 766, - "to": 767, - "id": "0x1E" - }, - { - "from": 768, - "to": 768, - "id": "0x20" - }, - { - "from": 769, - "to": 769, - "id": "0x20" - }, - { - "from": 770, - "to": 770, - "id": "0x20" - }, - { - "from": 771, - "to": 772, - "id": "0x21" - } - ], - "play.toServer.window_click": [ - { - "from": 735, - "to": 736, - "id": "0x09" - }, - { - "from": 751, - "to": 754, - "id": "0x09" - }, - { - "from": 755, - "to": 758, - "id": "0x08" - }, - { - "from": 759, - "to": 759, - "id": "0x0A" - }, - { - "from": 760, - "to": 760, - "id": "0x0B" - }, - { - "from": 761, - "to": 761, - "id": "0x0A" - }, - { - "from": 762, - "to": 763, - "id": "0x0B" - }, - { - "from": 764, - "to": 764, - "id": "0x0D" - }, - { - "from": 765, - "to": 765, - "id": "0x0D" - }, - { - "from": 766, - "to": 767, - "id": "0x0E" - }, - { - "from": 768, - "to": 768, - "id": "0x10" - }, - { - "from": 769, - "to": 769, - "id": "0x10" - }, - { - "from": 770, - "to": 770, - "id": "0x10" - }, - { - "from": 771, - "to": 772, - "id": "0x11" - } - ] - } +{ + "comment": "Generated from McProtoFacts /api/packets/{ns}/{dir} (protodef \"packet\" mappers of minecraft-data). Regenerate: scripts\\generate-ids-manifest.ps1 with serve-facts running.", + "packets": { + "handshaking.toServer.legacy_server_list_ping": [ + { + "from": 735, + "to": 776, + "id": "0xFE" + } + ], + "handshaking.toServer.set_protocol": [ + { + "from": 735, + "to": 776, + "id": "0x00" + } + ], + "status.toClient.ping": [ + { + "from": 735, + "to": 776, + "id": "0x01" + } + ], + "status.toClient.server_info": [ + { + "from": 735, + "to": 776, + "id": "0x00" + } + ], + "status.toServer.ping": [ + { + "from": 735, + "to": 776, + "id": "0x01" + } + ], + "status.toServer.ping_start": [ + { + "from": 735, + "to": 776, + "id": "0x00" + } + ], + "login.toClient.compress": [ + { + "from": 735, + "to": 765, + "id": "0x03" + }, + { + "from": 766, + "to": 776, + "id": "0x03" + } + ], + "login.toClient.cookie_request": [ + { + "from": 766, + "to": 776, + "id": "0x05" + } + ], + "login.toClient.disconnect": [ + { + "from": 735, + "to": 765, + "id": "0x00" + }, + { + "from": 766, + "to": 776, + "id": "0x00" + } + ], + "login.toClient.encryption_begin": [ + { + "from": 735, + "to": 765, + "id": "0x01" + }, + { + "from": 766, + "to": 776, + "id": "0x01" + } + ], + "login.toClient.login_plugin_request": [ + { + "from": 735, + "to": 765, + "id": "0x04" + }, + { + "from": 766, + "to": 776, + "id": "0x04" + } + ], + "login.toClient.success": [ + { + "from": 735, + "to": 765, + "id": "0x02" + }, + { + "from": 766, + "to": 776, + "id": "0x02" + } + ], + "login.toServer.cookie_response": [ + { + "from": 766, + "to": 776, + "id": "0x04" + } + ], + "login.toServer.encryption_begin": [ + { + "from": 735, + "to": 763, + "id": "0x01" + }, + { + "from": 764, + "to": 765, + "id": "0x01" + }, + { + "from": 766, + "to": 776, + "id": "0x01" + } + ], + "login.toServer.login_acknowledged": [ + { + "from": 764, + "to": 765, + "id": "0x03" + }, + { + "from": 766, + "to": 776, + "id": "0x03" + } + ], + "login.toServer.login_plugin_response": [ + { + "from": 735, + "to": 763, + "id": "0x02" + }, + { + "from": 764, + "to": 765, + "id": "0x02" + }, + { + "from": 766, + "to": 776, + "id": "0x02" + } + ], + "login.toServer.login_start": [ + { + "from": 735, + "to": 763, + "id": "0x00" + }, + { + "from": 764, + "to": 765, + "id": "0x00" + }, + { + "from": 766, + "to": 776, + "id": "0x00" + } + ], + "configuration.toClient.add_resource_pack": [ + { + "from": 765, + "to": 765, + "id": "0x07" + }, + { + "from": 766, + "to": 766, + "id": "0x09" + }, + { + "from": 767, + "to": 770, + "id": "0x09" + }, + { + "from": 771, + "to": 772, + "id": "0x09" + }, + { + "from": 773, + "to": 776, + "id": "0x09" + } + ], + "configuration.toClient.clear_dialog": [ + { + "from": 771, + "to": 772, + "id": "0x11" + }, + { + "from": 773, + "to": 776, + "id": "0x11" + } + ], + "configuration.toClient.code_of_conduct": [ + { + "from": 773, + "to": 776, + "id": "0x13" + } + ], + "configuration.toClient.cookie_request": [ + { + "from": 766, + "to": 766, + "id": "0x00" + }, + { + "from": 767, + "to": 770, + "id": "0x00" + }, + { + "from": 771, + "to": 772, + "id": "0x00" + }, + { + "from": 773, + "to": 776, + "id": "0x00" + } + ], + "configuration.toClient.custom_payload": [ + { + "from": 764, + "to": 764, + "id": "0x00" + }, + { + "from": 765, + "to": 765, + "id": "0x00" + }, + { + "from": 766, + "to": 766, + "id": "0x01" + }, + { + "from": 767, + "to": 770, + "id": "0x01" + }, + { + "from": 771, + "to": 772, + "id": "0x01" + }, + { + "from": 773, + "to": 776, + "id": "0x01" + } + ], + "configuration.toClient.custom_report_details": [ + { + "from": 767, + "to": 770, + "id": "0x0F" + }, + { + "from": 771, + "to": 772, + "id": "0x0F" + }, + { + "from": 773, + "to": 776, + "id": "0x0F" + } + ], + "configuration.toClient.disconnect": [ + { + "from": 764, + "to": 764, + "id": "0x01" + }, + { + "from": 765, + "to": 765, + "id": "0x01" + }, + { + "from": 766, + "to": 766, + "id": "0x02" + }, + { + "from": 767, + "to": 770, + "id": "0x02" + }, + { + "from": 771, + "to": 772, + "id": "0x02" + }, + { + "from": 773, + "to": 776, + "id": "0x02" + } + ], + "configuration.toClient.feature_flags": [ + { + "from": 764, + "to": 764, + "id": "0x07" + }, + { + "from": 765, + "to": 765, + "id": "0x08" + }, + { + "from": 766, + "to": 766, + "id": "0x0C" + }, + { + "from": 767, + "to": 770, + "id": "0x0C" + }, + { + "from": 771, + "to": 772, + "id": "0x0C" + }, + { + "from": 773, + "to": 776, + "id": "0x0C" + } + ], + "configuration.toClient.finish_configuration": [ + { + "from": 764, + "to": 764, + "id": "0x02" + }, + { + "from": 765, + "to": 765, + "id": "0x02" + }, + { + "from": 766, + "to": 766, + "id": "0x03" + }, + { + "from": 767, + "to": 770, + "id": "0x03" + }, + { + "from": 771, + "to": 772, + "id": "0x03" + }, + { + "from": 773, + "to": 776, + "id": "0x03" + } + ], + "configuration.toClient.keep_alive": [ + { + "from": 764, + "to": 764, + "id": "0x03" + }, + { + "from": 765, + "to": 765, + "id": "0x03" + }, + { + "from": 766, + "to": 766, + "id": "0x04" + }, + { + "from": 767, + "to": 770, + "id": "0x04" + }, + { + "from": 771, + "to": 772, + "id": "0x04" + }, + { + "from": 773, + "to": 776, + "id": "0x04" + } + ], + "configuration.toClient.ping": [ + { + "from": 764, + "to": 764, + "id": "0x04" + }, + { + "from": 765, + "to": 765, + "id": "0x04" + }, + { + "from": 766, + "to": 766, + "id": "0x05" + }, + { + "from": 767, + "to": 770, + "id": "0x05" + }, + { + "from": 771, + "to": 772, + "id": "0x05" + }, + { + "from": 773, + "to": 776, + "id": "0x05" + } + ], + "configuration.toClient.registry_data": [ + { + "from": 764, + "to": 764, + "id": "0x05" + }, + { + "from": 765, + "to": 765, + "id": "0x05" + }, + { + "from": 766, + "to": 766, + "id": "0x07" + }, + { + "from": 767, + "to": 770, + "id": "0x07" + }, + { + "from": 771, + "to": 772, + "id": "0x07" + }, + { + "from": 773, + "to": 776, + "id": "0x07" + } + ], + "configuration.toClient.remove_resource_pack": [ + { + "from": 765, + "to": 765, + "id": "0x06" + }, + { + "from": 766, + "to": 766, + "id": "0x08" + }, + { + "from": 767, + "to": 770, + "id": "0x08" + }, + { + "from": 771, + "to": 772, + "id": "0x08" + }, + { + "from": 773, + "to": 776, + "id": "0x08" + } + ], + "configuration.toClient.reset_chat": [ + { + "from": 766, + "to": 766, + "id": "0x06" + }, + { + "from": 767, + "to": 770, + "id": "0x06" + }, + { + "from": 771, + "to": 772, + "id": "0x06" + }, + { + "from": 773, + "to": 776, + "id": "0x06" + } + ], + "configuration.toClient.resource_pack_send": [ + { + "from": 764, + "to": 764, + "id": "0x06" + } + ], + "configuration.toClient.select_known_packs": [ + { + "from": 766, + "to": 766, + "id": "0x0E" + }, + { + "from": 767, + "to": 770, + "id": "0x0E" + }, + { + "from": 771, + "to": 772, + "id": "0x0E" + }, + { + "from": 773, + "to": 776, + "id": "0x0E" + } + ], + "configuration.toClient.server_links": [ + { + "from": 767, + "to": 770, + "id": "0x10" + }, + { + "from": 771, + "to": 772, + "id": "0x10" + }, + { + "from": 773, + "to": 776, + "id": "0x10" + } + ], + "configuration.toClient.show_dialog": [ + { + "from": 771, + "to": 772, + "id": "0x12" + }, + { + "from": 773, + "to": 776, + "id": "0x12" + } + ], + "configuration.toClient.store_cookie": [ + { + "from": 766, + "to": 766, + "id": "0x0A" + }, + { + "from": 767, + "to": 770, + "id": "0x0A" + }, + { + "from": 771, + "to": 772, + "id": "0x0A" + }, + { + "from": 773, + "to": 776, + "id": "0x0A" + } + ], + "configuration.toClient.tags": [ + { + "from": 764, + "to": 764, + "id": "0x08" + }, + { + "from": 765, + "to": 765, + "id": "0x09" + }, + { + "from": 766, + "to": 766, + "id": "0x0D" + }, + { + "from": 767, + "to": 770, + "id": "0x0D" + }, + { + "from": 771, + "to": 772, + "id": "0x0D" + }, + { + "from": 773, + "to": 776, + "id": "0x0D" + } + ], + "configuration.toClient.transfer": [ + { + "from": 766, + "to": 766, + "id": "0x0B" + }, + { + "from": 767, + "to": 770, + "id": "0x0B" + }, + { + "from": 771, + "to": 772, + "id": "0x0B" + }, + { + "from": 773, + "to": 776, + "id": "0x0B" + } + ], + "configuration.toServer.accept_code_of_conduct": [ + { + "from": 773, + "to": 776, + "id": "0x09" + } + ], + "configuration.toServer.cookie_response": [ + { + "from": 766, + "to": 766, + "id": "0x01" + }, + { + "from": 767, + "to": 770, + "id": "0x01" + }, + { + "from": 771, + "to": 772, + "id": "0x01" + }, + { + "from": 773, + "to": 776, + "id": "0x01" + } + ], + "configuration.toServer.custom_click_action": [ + { + "from": 771, + "to": 772, + "id": "0x08" + }, + { + "from": 773, + "to": 776, + "id": "0x08" + } + ], + "configuration.toServer.custom_payload": [ + { + "from": 764, + "to": 765, + "id": "0x01" + }, + { + "from": 766, + "to": 766, + "id": "0x02" + }, + { + "from": 767, + "to": 770, + "id": "0x02" + }, + { + "from": 771, + "to": 772, + "id": "0x02" + }, + { + "from": 773, + "to": 776, + "id": "0x02" + } + ], + "configuration.toServer.custom_report_details": [ + { + "from": 767, + "to": 770, + "id": "0x08" + } + ], + "configuration.toServer.finish_configuration": [ + { + "from": 764, + "to": 765, + "id": "0x02" + }, + { + "from": 766, + "to": 766, + "id": "0x03" + }, + { + "from": 767, + "to": 770, + "id": "0x03" + }, + { + "from": 771, + "to": 772, + "id": "0x03" + }, + { + "from": 773, + "to": 776, + "id": "0x03" + } + ], + "configuration.toServer.keep_alive": [ + { + "from": 764, + "to": 765, + "id": "0x03" + }, + { + "from": 766, + "to": 766, + "id": "0x04" + }, + { + "from": 767, + "to": 770, + "id": "0x04" + }, + { + "from": 771, + "to": 772, + "id": "0x04" + }, + { + "from": 773, + "to": 776, + "id": "0x04" + } + ], + "configuration.toServer.pong": [ + { + "from": 764, + "to": 765, + "id": "0x04" + }, + { + "from": 766, + "to": 766, + "id": "0x05" + }, + { + "from": 767, + "to": 770, + "id": "0x05" + }, + { + "from": 771, + "to": 772, + "id": "0x05" + }, + { + "from": 773, + "to": 776, + "id": "0x05" + } + ], + "configuration.toServer.resource_pack_receive": [ + { + "from": 764, + "to": 765, + "id": "0x05" + }, + { + "from": 766, + "to": 766, + "id": "0x06" + }, + { + "from": 767, + "to": 770, + "id": "0x06" + }, + { + "from": 771, + "to": 772, + "id": "0x06" + }, + { + "from": 773, + "to": 776, + "id": "0x06" + } + ], + "configuration.toServer.select_known_packs": [ + { + "from": 766, + "to": 766, + "id": "0x07" + }, + { + "from": 767, + "to": 770, + "id": "0x07" + }, + { + "from": 771, + "to": 772, + "id": "0x07" + }, + { + "from": 773, + "to": 776, + "id": "0x07" + } + ], + "configuration.toServer.server_links": [ + { + "from": 767, + "to": 770, + "id": "0x09" + } + ], + "configuration.toServer.settings": [ + { + "from": 764, + "to": 765, + "id": "0x00" + }, + { + "from": 766, + "to": 766, + "id": "0x00" + }, + { + "from": 767, + "to": 770, + "id": "0x00" + }, + { + "from": 771, + "to": 772, + "id": "0x00" + }, + { + "from": 773, + "to": 776, + "id": "0x00" + } + ], + "play.toClient.abilities": [ + { + "from": 735, + "to": 736, + "id": "0x31" + }, + { + "from": 751, + "to": 754, + "id": "0x30" + }, + { + "from": 755, + "to": 755, + "id": "0x32" + }, + { + "from": 756, + "to": 756, + "id": "0x32" + }, + { + "from": 757, + "to": 758, + "id": "0x32" + }, + { + "from": 759, + "to": 759, + "id": "0x2F" + }, + { + "from": 760, + "to": 760, + "id": "0x31" + }, + { + "from": 761, + "to": 761, + "id": "0x30" + }, + { + "from": 762, + "to": 763, + "id": "0x34" + }, + { + "from": 764, + "to": 764, + "id": "0x36" + }, + { + "from": 765, + "to": 765, + "id": "0x36" + }, + { + "from": 766, + "to": 766, + "id": "0x38" + }, + { + "from": 767, + "to": 767, + "id": "0x38" + }, + { + "from": 768, + "to": 769, + "id": "0x3A" + }, + { + "from": 770, + "to": 770, + "id": "0x39" + }, + { + "from": 771, + "to": 772, + "id": "0x39" + }, + { + "from": 773, + "to": 774, + "id": "0x3E" + }, + { + "from": 775, + "to": 776, + "id": "0x40" + } + ], + "play.toClient.acknowledge_player_digging": [ + { + "from": 735, + "to": 736, + "id": "0x07" + }, + { + "from": 751, + "to": 754, + "id": "0x07" + }, + { + "from": 755, + "to": 755, + "id": "0x08" + }, + { + "from": 756, + "to": 756, + "id": "0x08" + }, + { + "from": 757, + "to": 758, + "id": "0x08" + }, + { + "from": 759, + "to": 759, + "id": "0x05" + }, + { + "from": 760, + "to": 760, + "id": "0x05" + }, + { + "from": 761, + "to": 761, + "id": "0x05" + }, + { + "from": 762, + "to": 763, + "id": "0x06" + }, + { + "from": 764, + "to": 764, + "id": "0x05" + }, + { + "from": 765, + "to": 765, + "id": "0x05" + }, + { + "from": 766, + "to": 766, + "id": "0x05" + }, + { + "from": 767, + "to": 767, + "id": "0x05" + }, + { + "from": 768, + "to": 769, + "id": "0x05" + }, + { + "from": 770, + "to": 770, + "id": "0x04" + }, + { + "from": 771, + "to": 772, + "id": "0x04" + }, + { + "from": 773, + "to": 774, + "id": "0x04" + }, + { + "from": 775, + "to": 776, + "id": "0x04" + } + ], + "play.toClient.action_bar": [ + { + "from": 755, + "to": 755, + "id": "0x41" + }, + { + "from": 756, + "to": 756, + "id": "0x41" + }, + { + "from": 757, + "to": 758, + "id": "0x41" + }, + { + "from": 759, + "to": 759, + "id": "0x40" + }, + { + "from": 760, + "to": 760, + "id": "0x43" + }, + { + "from": 761, + "to": 761, + "id": "0x42" + }, + { + "from": 762, + "to": 763, + "id": "0x46" + }, + { + "from": 764, + "to": 764, + "id": "0x48" + }, + { + "from": 765, + "to": 765, + "id": "0x4A" + }, + { + "from": 766, + "to": 766, + "id": "0x4C" + }, + { + "from": 767, + "to": 767, + "id": "0x4C" + }, + { + "from": 768, + "to": 769, + "id": "0x51" + }, + { + "from": 770, + "to": 770, + "id": "0x50" + }, + { + "from": 771, + "to": 772, + "id": "0x50" + }, + { + "from": 773, + "to": 774, + "id": "0x55" + }, + { + "from": 775, + "to": 776, + "id": "0x57" + } + ], + "play.toClient.add_resource_pack": [ + { + "from": 765, + "to": 765, + "id": "0x44" + }, + { + "from": 766, + "to": 766, + "id": "0x46" + }, + { + "from": 767, + "to": 767, + "id": "0x46" + }, + { + "from": 768, + "to": 769, + "id": "0x4B" + }, + { + "from": 770, + "to": 770, + "id": "0x4A" + }, + { + "from": 771, + "to": 772, + "id": "0x4A" + }, + { + "from": 773, + "to": 774, + "id": "0x4F" + }, + { + "from": 775, + "to": 776, + "id": "0x51" + } + ], + "play.toClient.advancements": [ + { + "from": 735, + "to": 736, + "id": "0x57" + }, + { + "from": 751, + "to": 754, + "id": "0x57" + }, + { + "from": 755, + "to": 755, + "id": "0x62" + }, + { + "from": 756, + "to": 756, + "id": "0x62" + }, + { + "from": 757, + "to": 758, + "id": "0x63" + }, + { + "from": 759, + "to": 759, + "id": "0x64" + }, + { + "from": 760, + "to": 760, + "id": "0x67" + }, + { + "from": 761, + "to": 761, + "id": "0x65" + }, + { + "from": 762, + "to": 763, + "id": "0x69" + }, + { + "from": 764, + "to": 764, + "id": "0x6C" + }, + { + "from": 765, + "to": 765, + "id": "0x70" + }, + { + "from": 766, + "to": 766, + "id": "0x74" + }, + { + "from": 767, + "to": 767, + "id": "0x74" + }, + { + "from": 768, + "to": 769, + "id": "0x7B" + }, + { + "from": 770, + "to": 770, + "id": "0x7B" + }, + { + "from": 771, + "to": 772, + "id": "0x7B" + }, + { + "from": 773, + "to": 774, + "id": "0x80" + }, + { + "from": 775, + "to": 776, + "id": "0x82" + } + ], + "play.toClient.animation": [ + { + "from": 735, + "to": 736, + "id": "0x05" + }, + { + "from": 751, + "to": 754, + "id": "0x05" + }, + { + "from": 755, + "to": 755, + "id": "0x06" + }, + { + "from": 756, + "to": 756, + "id": "0x06" + }, + { + "from": 757, + "to": 758, + "id": "0x06" + }, + { + "from": 759, + "to": 759, + "id": "0x03" + }, + { + "from": 760, + "to": 760, + "id": "0x03" + }, + { + "from": 761, + "to": 761, + "id": "0x03" + }, + { + "from": 762, + "to": 763, + "id": "0x04" + }, + { + "from": 764, + "to": 764, + "id": "0x03" + }, + { + "from": 765, + "to": 765, + "id": "0x03" + }, + { + "from": 766, + "to": 766, + "id": "0x03" + }, + { + "from": 767, + "to": 767, + "id": "0x03" + }, + { + "from": 768, + "to": 769, + "id": "0x03" + }, + { + "from": 770, + "to": 770, + "id": "0x02" + }, + { + "from": 771, + "to": 772, + "id": "0x02" + }, + { + "from": 773, + "to": 774, + "id": "0x02" + }, + { + "from": 775, + "to": 776, + "id": "0x02" + } + ], + "play.toClient.attach_entity": [ + { + "from": 735, + "to": 736, + "id": "0x45" + }, + { + "from": 751, + "to": 754, + "id": "0x45" + }, + { + "from": 755, + "to": 755, + "id": "0x4E" + }, + { + "from": 756, + "to": 756, + "id": "0x4E" + }, + { + "from": 757, + "to": 758, + "id": "0x4E" + }, + { + "from": 759, + "to": 759, + "id": "0x4E" + }, + { + "from": 760, + "to": 760, + "id": "0x51" + }, + { + "from": 761, + "to": 761, + "id": "0x4F" + }, + { + "from": 762, + "to": 763, + "id": "0x53" + }, + { + "from": 764, + "to": 764, + "id": "0x55" + }, + { + "from": 765, + "to": 765, + "id": "0x57" + }, + { + "from": 766, + "to": 766, + "id": "0x59" + }, + { + "from": 767, + "to": 767, + "id": "0x59" + }, + { + "from": 768, + "to": 769, + "id": "0x5E" + }, + { + "from": 770, + "to": 770, + "id": "0x5D" + }, + { + "from": 771, + "to": 772, + "id": "0x5D" + }, + { + "from": 773, + "to": 774, + "id": "0x62" + }, + { + "from": 775, + "to": 776, + "id": "0x64" + } + ], + "play.toClient.block_action": [ + { + "from": 735, + "to": 736, + "id": "0x0A" + }, + { + "from": 751, + "to": 754, + "id": "0x0A" + }, + { + "from": 755, + "to": 755, + "id": "0x0B" + }, + { + "from": 756, + "to": 756, + "id": "0x0B" + }, + { + "from": 757, + "to": 758, + "id": "0x0B" + }, + { + "from": 759, + "to": 759, + "id": "0x08" + }, + { + "from": 760, + "to": 760, + "id": "0x08" + }, + { + "from": 761, + "to": 761, + "id": "0x08" + }, + { + "from": 762, + "to": 763, + "id": "0x09" + }, + { + "from": 764, + "to": 764, + "id": "0x08" + }, + { + "from": 765, + "to": 765, + "id": "0x08" + }, + { + "from": 766, + "to": 766, + "id": "0x08" + }, + { + "from": 767, + "to": 767, + "id": "0x08" + }, + { + "from": 768, + "to": 769, + "id": "0x08" + }, + { + "from": 770, + "to": 770, + "id": "0x07" + }, + { + "from": 771, + "to": 772, + "id": "0x07" + }, + { + "from": 773, + "to": 774, + "id": "0x07" + }, + { + "from": 775, + "to": 776, + "id": "0x07" + } + ], + "play.toClient.block_break_animation": [ + { + "from": 735, + "to": 736, + "id": "0x08" + }, + { + "from": 751, + "to": 754, + "id": "0x08" + }, + { + "from": 755, + "to": 755, + "id": "0x09" + }, + { + "from": 756, + "to": 756, + "id": "0x09" + }, + { + "from": 757, + "to": 758, + "id": "0x09" + }, + { + "from": 759, + "to": 759, + "id": "0x06" + }, + { + "from": 760, + "to": 760, + "id": "0x06" + }, + { + "from": 761, + "to": 761, + "id": "0x06" + }, + { + "from": 762, + "to": 763, + "id": "0x07" + }, + { + "from": 764, + "to": 764, + "id": "0x06" + }, + { + "from": 765, + "to": 765, + "id": "0x06" + }, + { + "from": 766, + "to": 766, + "id": "0x06" + }, + { + "from": 767, + "to": 767, + "id": "0x06" + }, + { + "from": 768, + "to": 769, + "id": "0x06" + }, + { + "from": 770, + "to": 770, + "id": "0x05" + }, + { + "from": 771, + "to": 772, + "id": "0x05" + }, + { + "from": 773, + "to": 774, + "id": "0x05" + }, + { + "from": 775, + "to": 776, + "id": "0x05" + } + ], + "play.toClient.block_change": [ + { + "from": 735, + "to": 736, + "id": "0x0B" + }, + { + "from": 751, + "to": 754, + "id": "0x0B" + }, + { + "from": 755, + "to": 755, + "id": "0x0C" + }, + { + "from": 756, + "to": 756, + "id": "0x0C" + }, + { + "from": 757, + "to": 758, + "id": "0x0C" + }, + { + "from": 759, + "to": 759, + "id": "0x09" + }, + { + "from": 760, + "to": 760, + "id": "0x09" + }, + { + "from": 761, + "to": 761, + "id": "0x09" + }, + { + "from": 762, + "to": 763, + "id": "0x0A" + }, + { + "from": 764, + "to": 764, + "id": "0x09" + }, + { + "from": 765, + "to": 765, + "id": "0x09" + }, + { + "from": 766, + "to": 766, + "id": "0x09" + }, + { + "from": 767, + "to": 767, + "id": "0x09" + }, + { + "from": 768, + "to": 769, + "id": "0x09" + }, + { + "from": 770, + "to": 770, + "id": "0x08" + }, + { + "from": 771, + "to": 772, + "id": "0x08" + }, + { + "from": 773, + "to": 774, + "id": "0x08" + }, + { + "from": 775, + "to": 776, + "id": "0x08" + } + ], + "play.toClient.boss_bar": [ + { + "from": 735, + "to": 736, + "id": "0x0C" + }, + { + "from": 751, + "to": 754, + "id": "0x0C" + }, + { + "from": 755, + "to": 755, + "id": "0x0D" + }, + { + "from": 756, + "to": 756, + "id": "0x0D" + }, + { + "from": 757, + "to": 758, + "id": "0x0D" + }, + { + "from": 759, + "to": 759, + "id": "0x0A" + }, + { + "from": 760, + "to": 760, + "id": "0x0A" + }, + { + "from": 761, + "to": 761, + "id": "0x0A" + }, + { + "from": 762, + "to": 763, + "id": "0x0B" + }, + { + "from": 764, + "to": 764, + "id": "0x0A" + }, + { + "from": 765, + "to": 765, + "id": "0x0A" + }, + { + "from": 766, + "to": 766, + "id": "0x0A" + }, + { + "from": 767, + "to": 767, + "id": "0x0A" + }, + { + "from": 768, + "to": 769, + "id": "0x0A" + }, + { + "from": 770, + "to": 770, + "id": "0x09" + }, + { + "from": 771, + "to": 772, + "id": "0x09" + }, + { + "from": 773, + "to": 774, + "id": "0x09" + }, + { + "from": 775, + "to": 776, + "id": "0x09" + } + ], + "play.toClient.bundle_delimiter": [ + { + "from": 762, + "to": 763, + "id": "0x00" + }, + { + "from": 764, + "to": 764, + "id": "0x00" + }, + { + "from": 765, + "to": 765, + "id": "0x00" + }, + { + "from": 766, + "to": 766, + "id": "0x00" + }, + { + "from": 767, + "to": 767, + "id": "0x00" + }, + { + "from": 768, + "to": 769, + "id": "0x00" + }, + { + "from": 770, + "to": 770, + "id": "0x00" + }, + { + "from": 771, + "to": 772, + "id": "0x00" + }, + { + "from": 773, + "to": 774, + "id": "0x00" + }, + { + "from": 775, + "to": 776, + "id": "0x00" + } + ], + "play.toClient.camera": [ + { + "from": 735, + "to": 736, + "id": "0x3E" + }, + { + "from": 751, + "to": 754, + "id": "0x3E" + }, + { + "from": 755, + "to": 755, + "id": "0x47" + }, + { + "from": 756, + "to": 756, + "id": "0x47" + }, + { + "from": 757, + "to": 758, + "id": "0x47" + }, + { + "from": 759, + "to": 759, + "id": "0x46" + }, + { + "from": 760, + "to": 760, + "id": "0x49" + }, + { + "from": 761, + "to": 761, + "id": "0x48" + }, + { + "from": 762, + "to": 763, + "id": "0x4C" + }, + { + "from": 764, + "to": 764, + "id": "0x4E" + }, + { + "from": 765, + "to": 765, + "id": "0x50" + }, + { + "from": 766, + "to": 766, + "id": "0x52" + }, + { + "from": 767, + "to": 767, + "id": "0x52" + }, + { + "from": 768, + "to": 769, + "id": "0x57" + }, + { + "from": 770, + "to": 770, + "id": "0x56" + }, + { + "from": 771, + "to": 772, + "id": "0x56" + }, + { + "from": 773, + "to": 774, + "id": "0x5B" + }, + { + "from": 775, + "to": 776, + "id": "0x5D" + } + ], + "play.toClient.chat": [ + { + "from": 735, + "to": 736, + "id": "0x0E" + }, + { + "from": 751, + "to": 754, + "id": "0x0E" + }, + { + "from": 755, + "to": 755, + "id": "0x0F" + }, + { + "from": 756, + "to": 756, + "id": "0x0F" + }, + { + "from": 757, + "to": 758, + "id": "0x0F" + } + ], + "play.toClient.chat_preview": [ + { + "from": 759, + "to": 759, + "id": "0x0C" + }, + { + "from": 760, + "to": 760, + "id": "0x0C" + } + ], + "play.toClient.chat_suggestions": [ + { + "from": 760, + "to": 760, + "id": "0x15" + }, + { + "from": 761, + "to": 761, + "id": "0x14" + }, + { + "from": 762, + "to": 763, + "id": "0x16" + }, + { + "from": 764, + "to": 764, + "id": "0x17" + }, + { + "from": 765, + "to": 765, + "id": "0x17" + }, + { + "from": 766, + "to": 766, + "id": "0x18" + }, + { + "from": 767, + "to": 767, + "id": "0x18" + }, + { + "from": 768, + "to": 769, + "id": "0x18" + }, + { + "from": 770, + "to": 770, + "id": "0x17" + }, + { + "from": 771, + "to": 772, + "id": "0x17" + }, + { + "from": 773, + "to": 774, + "id": "0x17" + }, + { + "from": 775, + "to": 776, + "id": "0x17" + } + ], + "play.toClient.chunk_batch_finished": [ + { + "from": 764, + "to": 764, + "id": "0x0C" + }, + { + "from": 765, + "to": 765, + "id": "0x0C" + }, + { + "from": 766, + "to": 766, + "id": "0x0C" + }, + { + "from": 767, + "to": 767, + "id": "0x0C" + }, + { + "from": 768, + "to": 769, + "id": "0x0C" + }, + { + "from": 770, + "to": 770, + "id": "0x0B" + }, + { + "from": 771, + "to": 772, + "id": "0x0B" + }, + { + "from": 773, + "to": 774, + "id": "0x0B" + }, + { + "from": 775, + "to": 776, + "id": "0x0B" + } + ], + "play.toClient.chunk_batch_start": [ + { + "from": 764, + "to": 764, + "id": "0x0D" + }, + { + "from": 765, + "to": 765, + "id": "0x0D" + }, + { + "from": 766, + "to": 766, + "id": "0x0D" + }, + { + "from": 767, + "to": 767, + "id": "0x0D" + }, + { + "from": 768, + "to": 769, + "id": "0x0D" + }, + { + "from": 770, + "to": 770, + "id": "0x0C" + }, + { + "from": 771, + "to": 772, + "id": "0x0C" + }, + { + "from": 773, + "to": 774, + "id": "0x0C" + }, + { + "from": 775, + "to": 776, + "id": "0x0C" + } + ], + "play.toClient.chunk_biomes": [ + { + "from": 762, + "to": 763, + "id": "0x0D" + }, + { + "from": 764, + "to": 764, + "id": "0x0E" + }, + { + "from": 765, + "to": 765, + "id": "0x0E" + }, + { + "from": 766, + "to": 766, + "id": "0x0E" + }, + { + "from": 767, + "to": 767, + "id": "0x0E" + }, + { + "from": 768, + "to": 769, + "id": "0x0E" + }, + { + "from": 770, + "to": 770, + "id": "0x0D" + }, + { + "from": 771, + "to": 772, + "id": "0x0D" + }, + { + "from": 773, + "to": 774, + "id": "0x0D" + }, + { + "from": 775, + "to": 776, + "id": "0x0D" + } + ], + "play.toClient.clear_dialog": [ + { + "from": 771, + "to": 772, + "id": "0x84" + }, + { + "from": 773, + "to": 774, + "id": "0x89" + }, + { + "from": 775, + "to": 776, + "id": "0x8B" + } + ], + "play.toClient.clear_titles": [ + { + "from": 755, + "to": 755, + "id": "0x10" + }, + { + "from": 756, + "to": 756, + "id": "0x10" + }, + { + "from": 757, + "to": 758, + "id": "0x10" + }, + { + "from": 759, + "to": 759, + "id": "0x0D" + }, + { + "from": 760, + "to": 760, + "id": "0x0D" + }, + { + "from": 761, + "to": 761, + "id": "0x0C" + }, + { + "from": 762, + "to": 763, + "id": "0x0E" + }, + { + "from": 764, + "to": 764, + "id": "0x0F" + }, + { + "from": 765, + "to": 765, + "id": "0x0F" + }, + { + "from": 766, + "to": 766, + "id": "0x0F" + }, + { + "from": 767, + "to": 767, + "id": "0x0F" + }, + { + "from": 768, + "to": 769, + "id": "0x0F" + }, + { + "from": 770, + "to": 770, + "id": "0x0E" + }, + { + "from": 771, + "to": 772, + "id": "0x0E" + }, + { + "from": 773, + "to": 774, + "id": "0x0E" + }, + { + "from": 775, + "to": 776, + "id": "0x0E" + } + ], + "play.toClient.close_window": [ + { + "from": 735, + "to": 736, + "id": "0x13" + }, + { + "from": 751, + "to": 754, + "id": "0x12" + }, + { + "from": 755, + "to": 755, + "id": "0x13" + }, + { + "from": 756, + "to": 756, + "id": "0x13" + }, + { + "from": 757, + "to": 758, + "id": "0x13" + }, + { + "from": 759, + "to": 759, + "id": "0x10" + }, + { + "from": 760, + "to": 760, + "id": "0x10" + }, + { + "from": 761, + "to": 761, + "id": "0x0F" + }, + { + "from": 762, + "to": 763, + "id": "0x11" + }, + { + "from": 764, + "to": 764, + "id": "0x12" + }, + { + "from": 765, + "to": 765, + "id": "0x12" + }, + { + "from": 766, + "to": 766, + "id": "0x12" + }, + { + "from": 767, + "to": 767, + "id": "0x12" + }, + { + "from": 768, + "to": 769, + "id": "0x12" + }, + { + "from": 770, + "to": 770, + "id": "0x11" + }, + { + "from": 771, + "to": 772, + "id": "0x11" + }, + { + "from": 773, + "to": 774, + "id": "0x11" + }, + { + "from": 775, + "to": 776, + "id": "0x11" + } + ], + "play.toClient.collect": [ + { + "from": 735, + "to": 736, + "id": "0x55" + }, + { + "from": 751, + "to": 754, + "id": "0x55" + }, + { + "from": 755, + "to": 755, + "id": "0x60" + }, + { + "from": 756, + "to": 756, + "id": "0x60" + }, + { + "from": 757, + "to": 758, + "id": "0x61" + }, + { + "from": 759, + "to": 759, + "id": "0x62" + }, + { + "from": 760, + "to": 760, + "id": "0x65" + }, + { + "from": 761, + "to": 761, + "id": "0x63" + }, + { + "from": 762, + "to": 763, + "id": "0x67" + }, + { + "from": 764, + "to": 764, + "id": "0x6A" + }, + { + "from": 765, + "to": 765, + "id": "0x6C" + }, + { + "from": 766, + "to": 766, + "id": "0x6F" + }, + { + "from": 767, + "to": 767, + "id": "0x6F" + }, + { + "from": 768, + "to": 769, + "id": "0x76" + }, + { + "from": 770, + "to": 770, + "id": "0x75" + }, + { + "from": 771, + "to": 772, + "id": "0x75" + }, + { + "from": 773, + "to": 774, + "id": "0x7A" + }, + { + "from": 775, + "to": 776, + "id": "0x7C" + } + ], + "play.toClient.combat_event": [ + { + "from": 735, + "to": 736, + "id": "0x32" + }, + { + "from": 751, + "to": 754, + "id": "0x31" + } + ], + "play.toClient.cookie_request": [ + { + "from": 766, + "to": 766, + "id": "0x16" + }, + { + "from": 767, + "to": 767, + "id": "0x16" + }, + { + "from": 768, + "to": 769, + "id": "0x16" + }, + { + "from": 770, + "to": 770, + "id": "0x15" + }, + { + "from": 771, + "to": 772, + "id": "0x15" + }, + { + "from": 773, + "to": 774, + "id": "0x15" + }, + { + "from": 775, + "to": 776, + "id": "0x15" + } + ], + "play.toClient.craft_progress_bar": [ + { + "from": 735, + "to": 736, + "id": "0x15" + }, + { + "from": 751, + "to": 754, + "id": "0x14" + }, + { + "from": 755, + "to": 755, + "id": "0x15" + }, + { + "from": 756, + "to": 756, + "id": "0x15" + }, + { + "from": 757, + "to": 758, + "id": "0x15" + }, + { + "from": 759, + "to": 759, + "id": "0x12" + }, + { + "from": 760, + "to": 760, + "id": "0x12" + }, + { + "from": 761, + "to": 761, + "id": "0x11" + }, + { + "from": 762, + "to": 763, + "id": "0x13" + }, + { + "from": 764, + "to": 764, + "id": "0x14" + }, + { + "from": 765, + "to": 765, + "id": "0x14" + }, + { + "from": 766, + "to": 766, + "id": "0x14" + }, + { + "from": 767, + "to": 767, + "id": "0x14" + }, + { + "from": 768, + "to": 769, + "id": "0x14" + }, + { + "from": 770, + "to": 770, + "id": "0x13" + }, + { + "from": 771, + "to": 772, + "id": "0x13" + }, + { + "from": 773, + "to": 774, + "id": "0x13" + }, + { + "from": 775, + "to": 776, + "id": "0x13" + } + ], + "play.toClient.craft_recipe_response": [ + { + "from": 735, + "to": 736, + "id": "0x30" + }, + { + "from": 751, + "to": 754, + "id": "0x2F" + }, + { + "from": 755, + "to": 755, + "id": "0x31" + }, + { + "from": 756, + "to": 756, + "id": "0x31" + }, + { + "from": 757, + "to": 758, + "id": "0x31" + }, + { + "from": 759, + "to": 759, + "id": "0x2E" + }, + { + "from": 760, + "to": 760, + "id": "0x30" + }, + { + "from": 761, + "to": 761, + "id": "0x2F" + }, + { + "from": 762, + "to": 763, + "id": "0x33" + }, + { + "from": 764, + "to": 764, + "id": "0x35" + }, + { + "from": 765, + "to": 765, + "id": "0x35" + }, + { + "from": 766, + "to": 766, + "id": "0x37" + }, + { + "from": 767, + "to": 767, + "id": "0x37" + }, + { + "from": 768, + "to": 769, + "id": "0x39" + }, + { + "from": 770, + "to": 770, + "id": "0x38" + }, + { + "from": 771, + "to": 772, + "id": "0x38" + }, + { + "from": 773, + "to": 774, + "id": "0x3D" + }, + { + "from": 775, + "to": 776, + "id": "0x3F" + } + ], + "play.toClient.custom_payload": [ + { + "from": 735, + "to": 736, + "id": "0x18" + }, + { + "from": 751, + "to": 754, + "id": "0x17" + }, + { + "from": 755, + "to": 755, + "id": "0x18" + }, + { + "from": 756, + "to": 756, + "id": "0x18" + }, + { + "from": 757, + "to": 758, + "id": "0x18" + }, + { + "from": 759, + "to": 759, + "id": "0x15" + }, + { + "from": 760, + "to": 760, + "id": "0x16" + }, + { + "from": 761, + "to": 761, + "id": "0x15" + }, + { + "from": 762, + "to": 763, + "id": "0x17" + }, + { + "from": 764, + "to": 764, + "id": "0x18" + }, + { + "from": 765, + "to": 765, + "id": "0x18" + }, + { + "from": 766, + "to": 766, + "id": "0x19" + }, + { + "from": 767, + "to": 767, + "id": "0x19" + }, + { + "from": 768, + "to": 769, + "id": "0x19" + }, + { + "from": 770, + "to": 770, + "id": "0x18" + }, + { + "from": 771, + "to": 772, + "id": "0x18" + }, + { + "from": 773, + "to": 774, + "id": "0x18" + }, + { + "from": 775, + "to": 776, + "id": "0x18" + } + ], + "play.toClient.custom_report_details": [ + { + "from": 767, + "to": 767, + "id": "0x7A" + }, + { + "from": 768, + "to": 769, + "id": "0x81" + }, + { + "from": 770, + "to": 770, + "id": "0x81" + }, + { + "from": 771, + "to": 772, + "id": "0x81" + }, + { + "from": 773, + "to": 774, + "id": "0x86" + }, + { + "from": 775, + "to": 776, + "id": "0x88" + } + ], + "play.toClient.damage_event": [ + { + "from": 762, + "to": 763, + "id": "0x18" + }, + { + "from": 764, + "to": 764, + "id": "0x19" + }, + { + "from": 765, + "to": 765, + "id": "0x19" + }, + { + "from": 766, + "to": 766, + "id": "0x1A" + }, + { + "from": 767, + "to": 767, + "id": "0x1A" + }, + { + "from": 768, + "to": 769, + "id": "0x1A" + }, + { + "from": 770, + "to": 770, + "id": "0x19" + }, + { + "from": 771, + "to": 772, + "id": "0x19" + }, + { + "from": 773, + "to": 774, + "id": "0x19" + }, + { + "from": 775, + "to": 776, + "id": "0x19" + } + ], + "play.toClient.death_combat_event": [ + { + "from": 755, + "to": 755, + "id": "0x35" + }, + { + "from": 756, + "to": 756, + "id": "0x35" + }, + { + "from": 757, + "to": 758, + "id": "0x35" + }, + { + "from": 759, + "to": 759, + "id": "0x33" + }, + { + "from": 760, + "to": 760, + "id": "0x36" + }, + { + "from": 761, + "to": 761, + "id": "0x34" + }, + { + "from": 762, + "to": 763, + "id": "0x38" + }, + { + "from": 764, + "to": 764, + "id": "0x3A" + }, + { + "from": 765, + "to": 765, + "id": "0x3A" + }, + { + "from": 766, + "to": 766, + "id": "0x3C" + }, + { + "from": 767, + "to": 767, + "id": "0x3C" + }, + { + "from": 768, + "to": 769, + "id": "0x3E" + }, + { + "from": 770, + "to": 770, + "id": "0x3D" + }, + { + "from": 771, + "to": 772, + "id": "0x3D" + }, + { + "from": 773, + "to": 774, + "id": "0x42" + }, + { + "from": 775, + "to": 776, + "id": "0x44" + } + ], + "play.toClient.debug_block_value": [ + { + "from": 773, + "to": 774, + "id": "0x1A" + }, + { + "from": 775, + "to": 776, + "id": "0x1A" + } + ], + "play.toClient.debug_chunk_value": [ + { + "from": 773, + "to": 774, + "id": "0x1B" + }, + { + "from": 775, + "to": 776, + "id": "0x1B" + } + ], + "play.toClient.debug_entity_value": [ + { + "from": 773, + "to": 774, + "id": "0x1C" + }, + { + "from": 775, + "to": 776, + "id": "0x1C" + } + ], + "play.toClient.debug_event": [ + { + "from": 773, + "to": 774, + "id": "0x1D" + }, + { + "from": 775, + "to": 776, + "id": "0x1D" + } + ], + "play.toClient.debug_sample": [ + { + "from": 766, + "to": 766, + "id": "0x1B" + }, + { + "from": 767, + "to": 767, + "id": "0x1B" + }, + { + "from": 768, + "to": 769, + "id": "0x1B" + }, + { + "from": 770, + "to": 770, + "id": "0x1A" + }, + { + "from": 771, + "to": 772, + "id": "0x1A" + }, + { + "from": 773, + "to": 774, + "id": "0x1E" + }, + { + "from": 775, + "to": 776, + "id": "0x1E" + } + ], + "play.toClient.declare_commands": [ + { + "from": 735, + "to": 736, + "id": "0x11" + }, + { + "from": 751, + "to": 754, + "id": "0x10" + }, + { + "from": 755, + "to": 755, + "id": "0x12" + }, + { + "from": 756, + "to": 756, + "id": "0x12" + }, + { + "from": 757, + "to": 758, + "id": "0x12" + }, + { + "from": 759, + "to": 759, + "id": "0x0F" + }, + { + "from": 760, + "to": 760, + "id": "0x0F" + }, + { + "from": 761, + "to": 761, + "id": "0x0E" + }, + { + "from": 762, + "to": 763, + "id": "0x10" + }, + { + "from": 764, + "to": 764, + "id": "0x11" + }, + { + "from": 765, + "to": 765, + "id": "0x11" + }, + { + "from": 766, + "to": 766, + "id": "0x11" + }, + { + "from": 767, + "to": 767, + "id": "0x11" + }, + { + "from": 768, + "to": 769, + "id": "0x11" + }, + { + "from": 770, + "to": 770, + "id": "0x10" + }, + { + "from": 771, + "to": 772, + "id": "0x10" + }, + { + "from": 773, + "to": 774, + "id": "0x10" + }, + { + "from": 775, + "to": 776, + "id": "0x10" + } + ], + "play.toClient.declare_recipes": [ + { + "from": 735, + "to": 736, + "id": "0x5A" + }, + { + "from": 751, + "to": 754, + "id": "0x5A" + }, + { + "from": 755, + "to": 755, + "id": "0x65" + }, + { + "from": 756, + "to": 756, + "id": "0x65" + }, + { + "from": 757, + "to": 758, + "id": "0x66" + }, + { + "from": 759, + "to": 759, + "id": "0x67" + }, + { + "from": 760, + "to": 760, + "id": "0x6A" + }, + { + "from": 761, + "to": 761, + "id": "0x69" + }, + { + "from": 762, + "to": 763, + "id": "0x6D" + }, + { + "from": 764, + "to": 764, + "id": "0x6F" + }, + { + "from": 765, + "to": 765, + "id": "0x73" + }, + { + "from": 766, + "to": 766, + "id": "0x77" + }, + { + "from": 767, + "to": 767, + "id": "0x77" + }, + { + "from": 768, + "to": 769, + "id": "0x7E" + }, + { + "from": 770, + "to": 770, + "id": "0x7E" + }, + { + "from": 771, + "to": 772, + "id": "0x7E" + }, + { + "from": 773, + "to": 774, + "id": "0x83" + }, + { + "from": 775, + "to": 776, + "id": "0x85" + } + ], + "play.toClient.destroy_entity": [ + { + "from": 755, + "to": 755, + "id": "0x3A" + } + ], + "play.toClient.difficulty": [ + { + "from": 735, + "to": 736, + "id": "0x0D" + }, + { + "from": 751, + "to": 754, + "id": "0x0D" + }, + { + "from": 755, + "to": 755, + "id": "0x0E" + }, + { + "from": 756, + "to": 756, + "id": "0x0E" + }, + { + "from": 757, + "to": 758, + "id": "0x0E" + }, + { + "from": 759, + "to": 759, + "id": "0x0B" + }, + { + "from": 760, + "to": 760, + "id": "0x0B" + }, + { + "from": 761, + "to": 761, + "id": "0x0B" + }, + { + "from": 762, + "to": 763, + "id": "0x0C" + }, + { + "from": 764, + "to": 764, + "id": "0x0B" + }, + { + "from": 765, + "to": 765, + "id": "0x0B" + }, + { + "from": 766, + "to": 766, + "id": "0x0B" + }, + { + "from": 767, + "to": 767, + "id": "0x0B" + }, + { + "from": 768, + "to": 769, + "id": "0x0B" + }, + { + "from": 770, + "to": 770, + "id": "0x0A" + }, + { + "from": 771, + "to": 772, + "id": "0x0A" + }, + { + "from": 773, + "to": 774, + "id": "0x0A" + }, + { + "from": 775, + "to": 776, + "id": "0x0A" + } + ], + "play.toClient.end_combat_event": [ + { + "from": 755, + "to": 755, + "id": "0x33" + }, + { + "from": 756, + "to": 756, + "id": "0x33" + }, + { + "from": 757, + "to": 758, + "id": "0x33" + }, + { + "from": 759, + "to": 759, + "id": "0x31" + }, + { + "from": 760, + "to": 760, + "id": "0x34" + }, + { + "from": 761, + "to": 761, + "id": "0x32" + }, + { + "from": 762, + "to": 763, + "id": "0x36" + }, + { + "from": 764, + "to": 764, + "id": "0x38" + }, + { + "from": 765, + "to": 765, + "id": "0x38" + }, + { + "from": 766, + "to": 766, + "id": "0x3A" + }, + { + "from": 767, + "to": 767, + "id": "0x3A" + }, + { + "from": 768, + "to": 769, + "id": "0x3C" + }, + { + "from": 770, + "to": 770, + "id": "0x3B" + }, + { + "from": 771, + "to": 772, + "id": "0x3B" + }, + { + "from": 773, + "to": 774, + "id": "0x40" + }, + { + "from": 775, + "to": 776, + "id": "0x42" + } + ], + "play.toClient.enter_combat_event": [ + { + "from": 755, + "to": 755, + "id": "0x34" + }, + { + "from": 756, + "to": 756, + "id": "0x34" + }, + { + "from": 757, + "to": 758, + "id": "0x34" + }, + { + "from": 759, + "to": 759, + "id": "0x32" + }, + { + "from": 760, + "to": 760, + "id": "0x35" + }, + { + "from": 761, + "to": 761, + "id": "0x33" + }, + { + "from": 762, + "to": 763, + "id": "0x37" + }, + { + "from": 764, + "to": 764, + "id": "0x39" + }, + { + "from": 765, + "to": 765, + "id": "0x39" + }, + { + "from": 766, + "to": 766, + "id": "0x3B" + }, + { + "from": 767, + "to": 767, + "id": "0x3B" + }, + { + "from": 768, + "to": 769, + "id": "0x3D" + }, + { + "from": 770, + "to": 770, + "id": "0x3C" + }, + { + "from": 771, + "to": 772, + "id": "0x3C" + }, + { + "from": 773, + "to": 774, + "id": "0x41" + }, + { + "from": 775, + "to": 776, + "id": "0x43" + } + ], + "play.toClient.entity": [ + { + "from": 735, + "to": 736, + "id": "0x2B" + }, + { + "from": 751, + "to": 754, + "id": "0x2A" + } + ], + "play.toClient.entity_destroy": [ + { + "from": 735, + "to": 736, + "id": "0x37" + }, + { + "from": 751, + "to": 754, + "id": "0x36" + }, + { + "from": 756, + "to": 756, + "id": "0x3A" + }, + { + "from": 757, + "to": 758, + "id": "0x3A" + }, + { + "from": 759, + "to": 759, + "id": "0x38" + }, + { + "from": 760, + "to": 760, + "id": "0x3B" + }, + { + "from": 761, + "to": 761, + "id": "0x3A" + }, + { + "from": 762, + "to": 763, + "id": "0x3E" + }, + { + "from": 764, + "to": 764, + "id": "0x40" + }, + { + "from": 765, + "to": 765, + "id": "0x40" + }, + { + "from": 766, + "to": 766, + "id": "0x42" + }, + { + "from": 767, + "to": 767, + "id": "0x42" + }, + { + "from": 768, + "to": 769, + "id": "0x47" + }, + { + "from": 770, + "to": 770, + "id": "0x46" + }, + { + "from": 771, + "to": 772, + "id": "0x46" + }, + { + "from": 773, + "to": 774, + "id": "0x4B" + }, + { + "from": 775, + "to": 776, + "id": "0x4D" + } + ], + "play.toClient.entity_effect": [ + { + "from": 735, + "to": 736, + "id": "0x59" + }, + { + "from": 751, + "to": 754, + "id": "0x59" + }, + { + "from": 755, + "to": 755, + "id": "0x64" + }, + { + "from": 756, + "to": 756, + "id": "0x64" + }, + { + "from": 757, + "to": 758, + "id": "0x65" + }, + { + "from": 759, + "to": 759, + "id": "0x66" + }, + { + "from": 760, + "to": 760, + "id": "0x69" + }, + { + "from": 761, + "to": 761, + "id": "0x68" + }, + { + "from": 762, + "to": 763, + "id": "0x6C" + }, + { + "from": 764, + "to": 764, + "id": "0x6E" + }, + { + "from": 765, + "to": 765, + "id": "0x72" + }, + { + "from": 766, + "to": 766, + "id": "0x76" + }, + { + "from": 767, + "to": 767, + "id": "0x76" + }, + { + "from": 768, + "to": 769, + "id": "0x7D" + }, + { + "from": 770, + "to": 770, + "id": "0x7D" + }, + { + "from": 771, + "to": 772, + "id": "0x7D" + }, + { + "from": 773, + "to": 774, + "id": "0x82" + }, + { + "from": 775, + "to": 776, + "id": "0x84" + } + ], + "play.toClient.entity_equipment": [ + { + "from": 735, + "to": 736, + "id": "0x47" + }, + { + "from": 751, + "to": 754, + "id": "0x47" + }, + { + "from": 755, + "to": 755, + "id": "0x50" + }, + { + "from": 756, + "to": 756, + "id": "0x50" + }, + { + "from": 757, + "to": 758, + "id": "0x50" + }, + { + "from": 759, + "to": 759, + "id": "0x50" + }, + { + "from": 760, + "to": 760, + "id": "0x53" + }, + { + "from": 761, + "to": 761, + "id": "0x51" + }, + { + "from": 762, + "to": 763, + "id": "0x55" + }, + { + "from": 764, + "to": 764, + "id": "0x57" + }, + { + "from": 765, + "to": 765, + "id": "0x59" + }, + { + "from": 766, + "to": 766, + "id": "0x5B" + }, + { + "from": 767, + "to": 767, + "id": "0x5B" + }, + { + "from": 768, + "to": 769, + "id": "0x60" + }, + { + "from": 770, + "to": 770, + "id": "0x5F" + }, + { + "from": 771, + "to": 772, + "id": "0x5F" + }, + { + "from": 773, + "to": 774, + "id": "0x64" + }, + { + "from": 775, + "to": 776, + "id": "0x66" + } + ], + "play.toClient.entity_head_rotation": [ + { + "from": 735, + "to": 736, + "id": "0x3B" + }, + { + "from": 751, + "to": 754, + "id": "0x3A" + }, + { + "from": 755, + "to": 755, + "id": "0x3E" + }, + { + "from": 756, + "to": 756, + "id": "0x3E" + }, + { + "from": 757, + "to": 758, + "id": "0x3E" + }, + { + "from": 759, + "to": 759, + "id": "0x3C" + }, + { + "from": 760, + "to": 760, + "id": "0x3F" + }, + { + "from": 761, + "to": 761, + "id": "0x3E" + }, + { + "from": 762, + "to": 763, + "id": "0x42" + }, + { + "from": 764, + "to": 764, + "id": "0x44" + }, + { + "from": 765, + "to": 765, + "id": "0x46" + }, + { + "from": 766, + "to": 766, + "id": "0x48" + }, + { + "from": 767, + "to": 767, + "id": "0x48" + }, + { + "from": 768, + "to": 769, + "id": "0x4D" + }, + { + "from": 770, + "to": 770, + "id": "0x4C" + }, + { + "from": 771, + "to": 772, + "id": "0x4C" + }, + { + "from": 773, + "to": 774, + "id": "0x51" + }, + { + "from": 775, + "to": 776, + "id": "0x53" + } + ], + "play.toClient.entity_look": [ + { + "from": 735, + "to": 736, + "id": "0x2A" + }, + { + "from": 751, + "to": 754, + "id": "0x29" + }, + { + "from": 755, + "to": 755, + "id": "0x2B" + }, + { + "from": 756, + "to": 756, + "id": "0x2B" + }, + { + "from": 757, + "to": 758, + "id": "0x2B" + }, + { + "from": 759, + "to": 759, + "id": "0x28" + }, + { + "from": 760, + "to": 760, + "id": "0x2A" + }, + { + "from": 761, + "to": 761, + "id": "0x29" + }, + { + "from": 762, + "to": 763, + "id": "0x2D" + }, + { + "from": 764, + "to": 764, + "id": "0x2E" + }, + { + "from": 765, + "to": 765, + "id": "0x2E" + }, + { + "from": 766, + "to": 766, + "id": "0x30" + }, + { + "from": 767, + "to": 767, + "id": "0x30" + }, + { + "from": 768, + "to": 769, + "id": "0x32" + }, + { + "from": 770, + "to": 770, + "id": "0x31" + }, + { + "from": 771, + "to": 772, + "id": "0x31" + }, + { + "from": 773, + "to": 774, + "id": "0x36" + }, + { + "from": 775, + "to": 776, + "id": "0x38" + } + ], + "play.toClient.entity_metadata": [ + { + "from": 735, + "to": 736, + "id": "0x44" + }, + { + "from": 751, + "to": 754, + "id": "0x44" + }, + { + "from": 755, + "to": 755, + "id": "0x4D" + }, + { + "from": 756, + "to": 756, + "id": "0x4D" + }, + { + "from": 757, + "to": 758, + "id": "0x4D" + }, + { + "from": 759, + "to": 759, + "id": "0x4D" + }, + { + "from": 760, + "to": 760, + "id": "0x50" + }, + { + "from": 761, + "to": 761, + "id": "0x4E" + }, + { + "from": 762, + "to": 763, + "id": "0x52" + }, + { + "from": 764, + "to": 764, + "id": "0x54" + }, + { + "from": 765, + "to": 765, + "id": "0x56" + }, + { + "from": 766, + "to": 766, + "id": "0x58" + }, + { + "from": 767, + "to": 767, + "id": "0x58" + }, + { + "from": 768, + "to": 769, + "id": "0x5D" + }, + { + "from": 770, + "to": 770, + "id": "0x5C" + }, + { + "from": 771, + "to": 772, + "id": "0x5C" + }, + { + "from": 773, + "to": 774, + "id": "0x61" + }, + { + "from": 775, + "to": 776, + "id": "0x63" + } + ], + "play.toClient.entity_move_look": [ + { + "from": 735, + "to": 736, + "id": "0x29" + }, + { + "from": 751, + "to": 754, + "id": "0x28" + }, + { + "from": 755, + "to": 755, + "id": "0x2A" + }, + { + "from": 756, + "to": 756, + "id": "0x2A" + }, + { + "from": 757, + "to": 758, + "id": "0x2A" + }, + { + "from": 759, + "to": 759, + "id": "0x27" + }, + { + "from": 760, + "to": 760, + "id": "0x29" + }, + { + "from": 761, + "to": 761, + "id": "0x28" + }, + { + "from": 762, + "to": 763, + "id": "0x2C" + }, + { + "from": 764, + "to": 764, + "id": "0x2D" + }, + { + "from": 765, + "to": 765, + "id": "0x2D" + }, + { + "from": 766, + "to": 766, + "id": "0x2F" + }, + { + "from": 767, + "to": 767, + "id": "0x2F" + }, + { + "from": 768, + "to": 769, + "id": "0x30" + }, + { + "from": 770, + "to": 770, + "id": "0x2F" + }, + { + "from": 771, + "to": 772, + "id": "0x2F" + }, + { + "from": 773, + "to": 774, + "id": "0x34" + }, + { + "from": 775, + "to": 776, + "id": "0x36" + } + ], + "play.toClient.entity_sound_effect": [ + { + "from": 735, + "to": 736, + "id": "0x50" + }, + { + "from": 751, + "to": 754, + "id": "0x50" + }, + { + "from": 755, + "to": 755, + "id": "0x5B" + }, + { + "from": 756, + "to": 756, + "id": "0x5B" + }, + { + "from": 757, + "to": 758, + "id": "0x5C" + }, + { + "from": 759, + "to": 759, + "id": "0x5C" + }, + { + "from": 760, + "to": 760, + "id": "0x5F" + }, + { + "from": 761, + "to": 761, + "id": "0x5D" + }, + { + "from": 762, + "to": 763, + "id": "0x61" + }, + { + "from": 764, + "to": 764, + "id": "0x63" + }, + { + "from": 765, + "to": 765, + "id": "0x65" + }, + { + "from": 766, + "to": 766, + "id": "0x67" + }, + { + "from": 767, + "to": 767, + "id": "0x67" + }, + { + "from": 768, + "to": 769, + "id": "0x6E" + }, + { + "from": 770, + "to": 770, + "id": "0x6D" + }, + { + "from": 771, + "to": 772, + "id": "0x6D" + }, + { + "from": 773, + "to": 774, + "id": "0x72" + }, + { + "from": 775, + "to": 776, + "id": "0x74" + } + ], + "play.toClient.entity_status": [ + { + "from": 735, + "to": 736, + "id": "0x1B" + }, + { + "from": 751, + "to": 754, + "id": "0x1A" + }, + { + "from": 755, + "to": 755, + "id": "0x1B" + }, + { + "from": 756, + "to": 756, + "id": "0x1B" + }, + { + "from": 757, + "to": 758, + "id": "0x1B" + }, + { + "from": 759, + "to": 759, + "id": "0x18" + }, + { + "from": 760, + "to": 760, + "id": "0x1A" + }, + { + "from": 761, + "to": 761, + "id": "0x19" + }, + { + "from": 762, + "to": 763, + "id": "0x1C" + }, + { + "from": 764, + "to": 764, + "id": "0x1D" + }, + { + "from": 765, + "to": 765, + "id": "0x1D" + }, + { + "from": 766, + "to": 766, + "id": "0x1F" + }, + { + "from": 767, + "to": 767, + "id": "0x1F" + }, + { + "from": 768, + "to": 769, + "id": "0x1F" + }, + { + "from": 770, + "to": 770, + "id": "0x1E" + }, + { + "from": 771, + "to": 772, + "id": "0x1E" + }, + { + "from": 773, + "to": 774, + "id": "0x22" + }, + { + "from": 775, + "to": 776, + "id": "0x22" + } + ], + "play.toClient.entity_teleport": [ + { + "from": 735, + "to": 736, + "id": "0x56" + }, + { + "from": 751, + "to": 754, + "id": "0x56" + }, + { + "from": 755, + "to": 755, + "id": "0x61" + }, + { + "from": 756, + "to": 756, + "id": "0x61" + }, + { + "from": 757, + "to": 758, + "id": "0x62" + }, + { + "from": 759, + "to": 759, + "id": "0x63" + }, + { + "from": 760, + "to": 760, + "id": "0x66" + }, + { + "from": 761, + "to": 761, + "id": "0x64" + }, + { + "from": 762, + "to": 763, + "id": "0x68" + }, + { + "from": 764, + "to": 764, + "id": "0x6B" + }, + { + "from": 765, + "to": 765, + "id": "0x6D" + }, + { + "from": 766, + "to": 766, + "id": "0x70" + }, + { + "from": 767, + "to": 767, + "id": "0x70" + }, + { + "from": 768, + "to": 769, + "id": "0x77" + }, + { + "from": 770, + "to": 770, + "id": "0x76" + }, + { + "from": 771, + "to": 772, + "id": "0x76" + }, + { + "from": 773, + "to": 774, + "id": "0x7B" + }, + { + "from": 775, + "to": 776, + "id": "0x7D" + } + ], + "play.toClient.entity_update_attributes": [ + { + "from": 735, + "to": 736, + "id": "0x58" + }, + { + "from": 751, + "to": 754, + "id": "0x58" + }, + { + "from": 755, + "to": 755, + "id": "0x63" + }, + { + "from": 756, + "to": 756, + "id": "0x63" + }, + { + "from": 757, + "to": 758, + "id": "0x64" + }, + { + "from": 759, + "to": 759, + "id": "0x65" + }, + { + "from": 760, + "to": 760, + "id": "0x68" + }, + { + "from": 761, + "to": 761, + "id": "0x66" + }, + { + "from": 762, + "to": 763, + "id": "0x6A" + }, + { + "from": 764, + "to": 764, + "id": "0x6D" + }, + { + "from": 765, + "to": 765, + "id": "0x71" + }, + { + "from": 766, + "to": 766, + "id": "0x75" + }, + { + "from": 767, + "to": 767, + "id": "0x75" + }, + { + "from": 768, + "to": 769, + "id": "0x7C" + }, + { + "from": 770, + "to": 770, + "id": "0x7C" + }, + { + "from": 771, + "to": 772, + "id": "0x7C" + }, + { + "from": 773, + "to": 774, + "id": "0x81" + }, + { + "from": 775, + "to": 776, + "id": "0x83" + } + ], + "play.toClient.entity_velocity": [ + { + "from": 735, + "to": 736, + "id": "0x46" + }, + { + "from": 751, + "to": 754, + "id": "0x46" + }, + { + "from": 755, + "to": 755, + "id": "0x4F" + }, + { + "from": 756, + "to": 756, + "id": "0x4F" + }, + { + "from": 757, + "to": 758, + "id": "0x4F" + }, + { + "from": 759, + "to": 759, + "id": "0x4F" + }, + { + "from": 760, + "to": 760, + "id": "0x52" + }, + { + "from": 761, + "to": 761, + "id": "0x50" + }, + { + "from": 762, + "to": 763, + "id": "0x54" + }, + { + "from": 764, + "to": 764, + "id": "0x56" + }, + { + "from": 765, + "to": 765, + "id": "0x58" + }, + { + "from": 766, + "to": 766, + "id": "0x5A" + }, + { + "from": 767, + "to": 767, + "id": "0x5A" + }, + { + "from": 768, + "to": 769, + "id": "0x5F" + }, + { + "from": 770, + "to": 770, + "id": "0x5E" + }, + { + "from": 771, + "to": 772, + "id": "0x5E" + }, + { + "from": 773, + "to": 774, + "id": "0x63" + }, + { + "from": 775, + "to": 776, + "id": "0x65" + } + ], + "play.toClient.experience": [ + { + "from": 735, + "to": 736, + "id": "0x48" + }, + { + "from": 751, + "to": 754, + "id": "0x48" + }, + { + "from": 755, + "to": 755, + "id": "0x51" + }, + { + "from": 756, + "to": 756, + "id": "0x51" + }, + { + "from": 757, + "to": 758, + "id": "0x51" + }, + { + "from": 759, + "to": 759, + "id": "0x51" + }, + { + "from": 760, + "to": 760, + "id": "0x54" + }, + { + "from": 761, + "to": 761, + "id": "0x52" + }, + { + "from": 762, + "to": 763, + "id": "0x56" + }, + { + "from": 764, + "to": 764, + "id": "0x58" + }, + { + "from": 765, + "to": 765, + "id": "0x5A" + }, + { + "from": 766, + "to": 766, + "id": "0x5C" + }, + { + "from": 767, + "to": 767, + "id": "0x5C" + }, + { + "from": 768, + "to": 769, + "id": "0x61" + }, + { + "from": 770, + "to": 770, + "id": "0x60" + }, + { + "from": 771, + "to": 772, + "id": "0x60" + }, + { + "from": 773, + "to": 774, + "id": "0x65" + }, + { + "from": 775, + "to": 776, + "id": "0x67" + } + ], + "play.toClient.explosion": [ + { + "from": 735, + "to": 736, + "id": "0x1C" + }, + { + "from": 751, + "to": 754, + "id": "0x1B" + }, + { + "from": 755, + "to": 755, + "id": "0x1C" + }, + { + "from": 756, + "to": 756, + "id": "0x1C" + }, + { + "from": 757, + "to": 758, + "id": "0x1C" + }, + { + "from": 759, + "to": 759, + "id": "0x19" + }, + { + "from": 760, + "to": 760, + "id": "0x1B" + }, + { + "from": 761, + "to": 761, + "id": "0x1A" + }, + { + "from": 762, + "to": 763, + "id": "0x1D" + }, + { + "from": 764, + "to": 764, + "id": "0x1E" + }, + { + "from": 765, + "to": 765, + "id": "0x1E" + }, + { + "from": 766, + "to": 766, + "id": "0x20" + }, + { + "from": 767, + "to": 767, + "id": "0x20" + }, + { + "from": 768, + "to": 769, + "id": "0x21" + }, + { + "from": 770, + "to": 770, + "id": "0x20" + }, + { + "from": 771, + "to": 772, + "id": "0x20" + }, + { + "from": 773, + "to": 774, + "id": "0x24" + }, + { + "from": 775, + "to": 776, + "id": "0x24" + } + ], + "play.toClient.face_player": [ + { + "from": 735, + "to": 736, + "id": "0x34" + }, + { + "from": 751, + "to": 754, + "id": "0x33" + }, + { + "from": 755, + "to": 755, + "id": "0x37" + }, + { + "from": 756, + "to": 756, + "id": "0x37" + }, + { + "from": 757, + "to": 758, + "id": "0x37" + }, + { + "from": 759, + "to": 759, + "id": "0x35" + }, + { + "from": 760, + "to": 760, + "id": "0x38" + }, + { + "from": 761, + "to": 761, + "id": "0x37" + }, + { + "from": 762, + "to": 763, + "id": "0x3B" + }, + { + "from": 764, + "to": 764, + "id": "0x3D" + }, + { + "from": 765, + "to": 765, + "id": "0x3D" + }, + { + "from": 766, + "to": 766, + "id": "0x3F" + }, + { + "from": 767, + "to": 767, + "id": "0x3F" + }, + { + "from": 768, + "to": 769, + "id": "0x41" + }, + { + "from": 770, + "to": 770, + "id": "0x40" + }, + { + "from": 771, + "to": 772, + "id": "0x40" + }, + { + "from": 773, + "to": 774, + "id": "0x45" + }, + { + "from": 775, + "to": 776, + "id": "0x47" + } + ], + "play.toClient.feature_flags": [ + { + "from": 761, + "to": 761, + "id": "0x67" + }, + { + "from": 762, + "to": 763, + "id": "0x6B" + } + ], + "play.toClient.game_rule_values": [ + { + "from": 775, + "to": 776, + "id": "0x27" + } + ], + "play.toClient.game_state_change": [ + { + "from": 735, + "to": 736, + "id": "0x1E" + }, + { + "from": 751, + "to": 754, + "id": "0x1D" + }, + { + "from": 755, + "to": 755, + "id": "0x1E" + }, + { + "from": 756, + "to": 756, + "id": "0x1E" + }, + { + "from": 757, + "to": 758, + "id": "0x1E" + }, + { + "from": 759, + "to": 759, + "id": "0x1B" + }, + { + "from": 760, + "to": 760, + "id": "0x1D" + }, + { + "from": 761, + "to": 761, + "id": "0x1C" + }, + { + "from": 762, + "to": 763, + "id": "0x1F" + }, + { + "from": 764, + "to": 764, + "id": "0x20" + }, + { + "from": 765, + "to": 765, + "id": "0x20" + }, + { + "from": 766, + "to": 766, + "id": "0x22" + }, + { + "from": 767, + "to": 767, + "id": "0x22" + }, + { + "from": 768, + "to": 769, + "id": "0x23" + }, + { + "from": 770, + "to": 770, + "id": "0x22" + }, + { + "from": 771, + "to": 772, + "id": "0x22" + }, + { + "from": 773, + "to": 774, + "id": "0x26" + }, + { + "from": 775, + "to": 776, + "id": "0x26" + } + ], + "play.toClient.game_test_highlight_pos": [ + { + "from": 773, + "to": 774, + "id": "0x27" + }, + { + "from": 775, + "to": 776, + "id": "0x28" + } + ], + "play.toClient.held_item_slot": [ + { + "from": 735, + "to": 736, + "id": "0x3F" + }, + { + "from": 751, + "to": 754, + "id": "0x3F" + }, + { + "from": 755, + "to": 755, + "id": "0x48" + }, + { + "from": 756, + "to": 756, + "id": "0x48" + }, + { + "from": 757, + "to": 758, + "id": "0x48" + }, + { + "from": 759, + "to": 759, + "id": "0x47" + }, + { + "from": 760, + "to": 760, + "id": "0x4A" + }, + { + "from": 761, + "to": 761, + "id": "0x49" + }, + { + "from": 762, + "to": 763, + "id": "0x4D" + }, + { + "from": 764, + "to": 764, + "id": "0x4F" + }, + { + "from": 765, + "to": 765, + "id": "0x51" + }, + { + "from": 766, + "to": 766, + "id": "0x53" + }, + { + "from": 767, + "to": 767, + "id": "0x53" + }, + { + "from": 768, + "to": 769, + "id": "0x63" + }, + { + "from": 770, + "to": 770, + "id": "0x62" + }, + { + "from": 771, + "to": 772, + "id": "0x62" + }, + { + "from": 773, + "to": 774, + "id": "0x67" + }, + { + "from": 775, + "to": 776, + "id": "0x69" + } + ], + "play.toClient.hide_message": [ + { + "from": 760, + "to": 760, + "id": "0x18" + }, + { + "from": 761, + "to": 761, + "id": "0x16" + }, + { + "from": 762, + "to": 763, + "id": "0x19" + }, + { + "from": 764, + "to": 764, + "id": "0x1A" + }, + { + "from": 765, + "to": 765, + "id": "0x1A" + }, + { + "from": 766, + "to": 766, + "id": "0x1C" + }, + { + "from": 767, + "to": 767, + "id": "0x1C" + }, + { + "from": 768, + "to": 769, + "id": "0x1C" + }, + { + "from": 770, + "to": 770, + "id": "0x1B" + }, + { + "from": 771, + "to": 772, + "id": "0x1B" + }, + { + "from": 773, + "to": 774, + "id": "0x1F" + }, + { + "from": 775, + "to": 776, + "id": "0x1F" + } + ], + "play.toClient.hurt_animation": [ + { + "from": 762, + "to": 763, + "id": "0x21" + }, + { + "from": 764, + "to": 764, + "id": "0x22" + }, + { + "from": 765, + "to": 765, + "id": "0x22" + }, + { + "from": 766, + "to": 766, + "id": "0x24" + }, + { + "from": 767, + "to": 767, + "id": "0x24" + }, + { + "from": 768, + "to": 769, + "id": "0x25" + }, + { + "from": 770, + "to": 770, + "id": "0x24" + }, + { + "from": 771, + "to": 772, + "id": "0x24" + }, + { + "from": 773, + "to": 774, + "id": "0x29" + }, + { + "from": 775, + "to": 776, + "id": "0x2A" + } + ], + "play.toClient.initialize_world_border": [ + { + "from": 755, + "to": 755, + "id": "0x20" + }, + { + "from": 756, + "to": 756, + "id": "0x20" + }, + { + "from": 757, + "to": 758, + "id": "0x20" + }, + { + "from": 759, + "to": 759, + "id": "0x1D" + }, + { + "from": 760, + "to": 760, + "id": "0x1F" + }, + { + "from": 761, + "to": 761, + "id": "0x1E" + }, + { + "from": 762, + "to": 763, + "id": "0x22" + }, + { + "from": 764, + "to": 764, + "id": "0x23" + }, + { + "from": 765, + "to": 765, + "id": "0x23" + }, + { + "from": 766, + "to": 766, + "id": "0x25" + }, + { + "from": 767, + "to": 767, + "id": "0x25" + }, + { + "from": 768, + "to": 769, + "id": "0x26" + }, + { + "from": 770, + "to": 770, + "id": "0x25" + }, + { + "from": 771, + "to": 772, + "id": "0x25" + }, + { + "from": 773, + "to": 774, + "id": "0x2A" + }, + { + "from": 775, + "to": 776, + "id": "0x2B" + } + ], + "play.toClient.keep_alive": [ + { + "from": 735, + "to": 736, + "id": "0x20" + }, + { + "from": 751, + "to": 754, + "id": "0x1F" + }, + { + "from": 755, + "to": 755, + "id": "0x21" + }, + { + "from": 756, + "to": 756, + "id": "0x21" + }, + { + "from": 757, + "to": 758, + "id": "0x21" + }, + { + "from": 759, + "to": 759, + "id": "0x1E" + }, + { + "from": 760, + "to": 760, + "id": "0x20" + }, + { + "from": 761, + "to": 761, + "id": "0x1F" + }, + { + "from": 762, + "to": 763, + "id": "0x23" + }, + { + "from": 764, + "to": 764, + "id": "0x24" + }, + { + "from": 765, + "to": 765, + "id": "0x24" + }, + { + "from": 766, + "to": 766, + "id": "0x26" + }, + { + "from": 767, + "to": 767, + "id": "0x26" + }, + { + "from": 768, + "to": 769, + "id": "0x27" + }, + { + "from": 770, + "to": 770, + "id": "0x26" + }, + { + "from": 771, + "to": 772, + "id": "0x26" + }, + { + "from": 773, + "to": 774, + "id": "0x2B" + }, + { + "from": 775, + "to": 776, + "id": "0x2C" + } + ], + "play.toClient.kick_disconnect": [ + { + "from": 735, + "to": 736, + "id": "0x1A" + }, + { + "from": 751, + "to": 754, + "id": "0x19" + }, + { + "from": 755, + "to": 755, + "id": "0x1A" + }, + { + "from": 756, + "to": 756, + "id": "0x1A" + }, + { + "from": 757, + "to": 758, + "id": "0x1A" + }, + { + "from": 759, + "to": 759, + "id": "0x17" + }, + { + "from": 760, + "to": 760, + "id": "0x19" + }, + { + "from": 761, + "to": 761, + "id": "0x17" + }, + { + "from": 762, + "to": 763, + "id": "0x1A" + }, + { + "from": 764, + "to": 764, + "id": "0x1B" + }, + { + "from": 765, + "to": 765, + "id": "0x1B" + }, + { + "from": 766, + "to": 766, + "id": "0x1D" + }, + { + "from": 767, + "to": 767, + "id": "0x1D" + }, + { + "from": 768, + "to": 769, + "id": "0x1D" + }, + { + "from": 770, + "to": 770, + "id": "0x1C" + }, + { + "from": 771, + "to": 772, + "id": "0x1C" + }, + { + "from": 773, + "to": 774, + "id": "0x20" + }, + { + "from": 775, + "to": 776, + "id": "0x20" + } + ], + "play.toClient.login": [ + { + "from": 735, + "to": 736, + "id": "0x25" + }, + { + "from": 751, + "to": 754, + "id": "0x24" + }, + { + "from": 755, + "to": 755, + "id": "0x26" + }, + { + "from": 756, + "to": 756, + "id": "0x26" + }, + { + "from": 757, + "to": 758, + "id": "0x26" + }, + { + "from": 759, + "to": 759, + "id": "0x23" + }, + { + "from": 760, + "to": 760, + "id": "0x25" + }, + { + "from": 761, + "to": 761, + "id": "0x24" + }, + { + "from": 762, + "to": 763, + "id": "0x28" + }, + { + "from": 764, + "to": 764, + "id": "0x29" + }, + { + "from": 765, + "to": 765, + "id": "0x29" + }, + { + "from": 766, + "to": 766, + "id": "0x2B" + }, + { + "from": 767, + "to": 767, + "id": "0x2B" + }, + { + "from": 768, + "to": 769, + "id": "0x2C" + }, + { + "from": 770, + "to": 770, + "id": "0x2B" + }, + { + "from": 771, + "to": 772, + "id": "0x2B" + }, + { + "from": 773, + "to": 774, + "id": "0x30" + }, + { + "from": 775, + "to": 776, + "id": "0x31" + } + ], + "play.toClient.low_disk_space_warning": [ + { + "from": 775, + "to": 776, + "id": "0x32" + } + ], + "play.toClient.map": [ + { + "from": 735, + "to": 736, + "id": "0x26" + }, + { + "from": 751, + "to": 754, + "id": "0x25" + }, + { + "from": 755, + "to": 755, + "id": "0x27" + }, + { + "from": 756, + "to": 756, + "id": "0x27" + }, + { + "from": 757, + "to": 758, + "id": "0x27" + }, + { + "from": 759, + "to": 759, + "id": "0x24" + }, + { + "from": 760, + "to": 760, + "id": "0x26" + }, + { + "from": 761, + "to": 761, + "id": "0x25" + }, + { + "from": 762, + "to": 763, + "id": "0x29" + }, + { + "from": 764, + "to": 764, + "id": "0x2A" + }, + { + "from": 765, + "to": 765, + "id": "0x2A" + }, + { + "from": 766, + "to": 766, + "id": "0x2C" + }, + { + "from": 767, + "to": 767, + "id": "0x2C" + }, + { + "from": 768, + "to": 769, + "id": "0x2D" + }, + { + "from": 770, + "to": 770, + "id": "0x2C" + }, + { + "from": 771, + "to": 772, + "id": "0x2C" + }, + { + "from": 773, + "to": 774, + "id": "0x31" + }, + { + "from": 775, + "to": 776, + "id": "0x33" + } + ], + "play.toClient.map_chunk": [ + { + "from": 735, + "to": 736, + "id": "0x21" + }, + { + "from": 751, + "to": 754, + "id": "0x20" + }, + { + "from": 755, + "to": 755, + "id": "0x22" + }, + { + "from": 756, + "to": 756, + "id": "0x22" + }, + { + "from": 757, + "to": 758, + "id": "0x22" + }, + { + "from": 759, + "to": 759, + "id": "0x1F" + }, + { + "from": 760, + "to": 760, + "id": "0x21" + }, + { + "from": 761, + "to": 761, + "id": "0x20" + }, + { + "from": 762, + "to": 763, + "id": "0x24" + }, + { + "from": 764, + "to": 764, + "id": "0x25" + }, + { + "from": 765, + "to": 765, + "id": "0x25" + }, + { + "from": 766, + "to": 766, + "id": "0x27" + }, + { + "from": 767, + "to": 767, + "id": "0x27" + }, + { + "from": 768, + "to": 769, + "id": "0x28" + }, + { + "from": 770, + "to": 770, + "id": "0x27" + }, + { + "from": 771, + "to": 772, + "id": "0x27" + }, + { + "from": 773, + "to": 774, + "id": "0x2C" + }, + { + "from": 775, + "to": 776, + "id": "0x2D" + } + ], + "play.toClient.message_header": [ + { + "from": 760, + "to": 760, + "id": "0x32" + } + ], + "play.toClient.move_minecart": [ + { + "from": 768, + "to": 769, + "id": "0x31" + }, + { + "from": 770, + "to": 770, + "id": "0x30" + }, + { + "from": 771, + "to": 772, + "id": "0x30" + }, + { + "from": 773, + "to": 774, + "id": "0x35" + }, + { + "from": 775, + "to": 776, + "id": "0x37" + } + ], + "play.toClient.multi_block_change": [ + { + "from": 735, + "to": 736, + "id": "0x0F" + }, + { + "from": 751, + "to": 754, + "id": "0x3B" + }, + { + "from": 755, + "to": 755, + "id": "0x3F" + }, + { + "from": 756, + "to": 756, + "id": "0x3F" + }, + { + "from": 757, + "to": 758, + "id": "0x3F" + }, + { + "from": 759, + "to": 759, + "id": "0x3D" + }, + { + "from": 760, + "to": 760, + "id": "0x40" + }, + { + "from": 761, + "to": 761, + "id": "0x3F" + }, + { + "from": 762, + "to": 763, + "id": "0x43" + }, + { + "from": 764, + "to": 764, + "id": "0x45" + }, + { + "from": 765, + "to": 765, + "id": "0x47" + }, + { + "from": 766, + "to": 766, + "id": "0x49" + }, + { + "from": 767, + "to": 767, + "id": "0x49" + }, + { + "from": 768, + "to": 769, + "id": "0x4E" + }, + { + "from": 770, + "to": 770, + "id": "0x4D" + }, + { + "from": 771, + "to": 772, + "id": "0x4D" + }, + { + "from": 773, + "to": 774, + "id": "0x52" + }, + { + "from": 775, + "to": 776, + "id": "0x54" + } + ], + "play.toClient.named_entity_spawn": [ + { + "from": 735, + "to": 736, + "id": "0x04" + }, + { + "from": 751, + "to": 754, + "id": "0x04" + }, + { + "from": 755, + "to": 755, + "id": "0x04" + }, + { + "from": 756, + "to": 756, + "id": "0x04" + }, + { + "from": 757, + "to": 758, + "id": "0x04" + }, + { + "from": 759, + "to": 759, + "id": "0x02" + }, + { + "from": 760, + "to": 760, + "id": "0x02" + }, + { + "from": 761, + "to": 761, + "id": "0x02" + }, + { + "from": 762, + "to": 763, + "id": "0x03" + } + ], + "play.toClient.named_sound_effect": [ + { + "from": 735, + "to": 736, + "id": "0x19" + }, + { + "from": 751, + "to": 754, + "id": "0x18" + }, + { + "from": 755, + "to": 755, + "id": "0x19" + }, + { + "from": 756, + "to": 756, + "id": "0x19" + }, + { + "from": 757, + "to": 758, + "id": "0x19" + }, + { + "from": 759, + "to": 759, + "id": "0x16" + }, + { + "from": 760, + "to": 760, + "id": "0x17" + } + ], + "play.toClient.nbt_query_response": [ + { + "from": 735, + "to": 736, + "id": "0x54" + }, + { + "from": 751, + "to": 754, + "id": "0x54" + }, + { + "from": 755, + "to": 755, + "id": "0x5F" + }, + { + "from": 756, + "to": 756, + "id": "0x5F" + }, + { + "from": 757, + "to": 758, + "id": "0x60" + }, + { + "from": 759, + "to": 759, + "id": "0x61" + }, + { + "from": 760, + "to": 760, + "id": "0x64" + }, + { + "from": 761, + "to": 761, + "id": "0x62" + }, + { + "from": 762, + "to": 763, + "id": "0x66" + }, + { + "from": 764, + "to": 764, + "id": "0x69" + }, + { + "from": 765, + "to": 765, + "id": "0x6B" + }, + { + "from": 766, + "to": 766, + "id": "0x6E" + }, + { + "from": 767, + "to": 767, + "id": "0x6E" + }, + { + "from": 768, + "to": 769, + "id": "0x75" + }, + { + "from": 770, + "to": 770, + "id": "0x74" + }, + { + "from": 771, + "to": 772, + "id": "0x74" + }, + { + "from": 773, + "to": 774, + "id": "0x79" + }, + { + "from": 775, + "to": 776, + "id": "0x7B" + } + ], + "play.toClient.open_book": [ + { + "from": 735, + "to": 736, + "id": "0x2D" + }, + { + "from": 751, + "to": 754, + "id": "0x2C" + }, + { + "from": 755, + "to": 755, + "id": "0x2D" + }, + { + "from": 756, + "to": 756, + "id": "0x2D" + }, + { + "from": 757, + "to": 758, + "id": "0x2D" + }, + { + "from": 759, + "to": 759, + "id": "0x2A" + }, + { + "from": 760, + "to": 760, + "id": "0x2C" + }, + { + "from": 761, + "to": 761, + "id": "0x2B" + }, + { + "from": 762, + "to": 763, + "id": "0x2F" + }, + { + "from": 764, + "to": 764, + "id": "0x30" + }, + { + "from": 765, + "to": 765, + "id": "0x30" + }, + { + "from": 766, + "to": 766, + "id": "0x32" + }, + { + "from": 767, + "to": 767, + "id": "0x32" + }, + { + "from": 768, + "to": 769, + "id": "0x34" + }, + { + "from": 770, + "to": 770, + "id": "0x33" + }, + { + "from": 771, + "to": 772, + "id": "0x33" + }, + { + "from": 773, + "to": 774, + "id": "0x38" + }, + { + "from": 775, + "to": 776, + "id": "0x3A" + } + ], + "play.toClient.open_horse_window": [ + { + "from": 735, + "to": 736, + "id": "0x1F" + }, + { + "from": 751, + "to": 754, + "id": "0x1E" + }, + { + "from": 755, + "to": 755, + "id": "0x1F" + }, + { + "from": 756, + "to": 756, + "id": "0x1F" + }, + { + "from": 757, + "to": 758, + "id": "0x1F" + }, + { + "from": 759, + "to": 759, + "id": "0x1C" + }, + { + "from": 760, + "to": 760, + "id": "0x1E" + }, + { + "from": 761, + "to": 761, + "id": "0x1D" + }, + { + "from": 762, + "to": 763, + "id": "0x20" + }, + { + "from": 764, + "to": 764, + "id": "0x21" + }, + { + "from": 765, + "to": 765, + "id": "0x21" + }, + { + "from": 766, + "to": 766, + "id": "0x23" + }, + { + "from": 767, + "to": 767, + "id": "0x23" + }, + { + "from": 768, + "to": 769, + "id": "0x24" + }, + { + "from": 770, + "to": 770, + "id": "0x23" + }, + { + "from": 771, + "to": 772, + "id": "0x23" + }, + { + "from": 773, + "to": 774, + "id": "0x28" + }, + { + "from": 775, + "to": 776, + "id": "0x29" + } + ], + "play.toClient.open_sign_entity": [ + { + "from": 735, + "to": 736, + "id": "0x2F" + }, + { + "from": 751, + "to": 754, + "id": "0x2E" + }, + { + "from": 755, + "to": 755, + "id": "0x2F" + }, + { + "from": 756, + "to": 756, + "id": "0x2F" + }, + { + "from": 757, + "to": 758, + "id": "0x2F" + }, + { + "from": 759, + "to": 759, + "id": "0x2C" + }, + { + "from": 760, + "to": 760, + "id": "0x2E" + }, + { + "from": 761, + "to": 761, + "id": "0x2D" + }, + { + "from": 762, + "to": 763, + "id": "0x31" + }, + { + "from": 764, + "to": 764, + "id": "0x32" + }, + { + "from": 765, + "to": 765, + "id": "0x32" + }, + { + "from": 766, + "to": 766, + "id": "0x34" + }, + { + "from": 767, + "to": 767, + "id": "0x34" + }, + { + "from": 768, + "to": 769, + "id": "0x36" + }, + { + "from": 770, + "to": 770, + "id": "0x35" + }, + { + "from": 771, + "to": 772, + "id": "0x35" + }, + { + "from": 773, + "to": 774, + "id": "0x3A" + }, + { + "from": 775, + "to": 776, + "id": "0x3C" + } + ], + "play.toClient.open_window": [ + { + "from": 735, + "to": 736, + "id": "0x2E" + }, + { + "from": 751, + "to": 754, + "id": "0x2D" + }, + { + "from": 755, + "to": 755, + "id": "0x2E" + }, + { + "from": 756, + "to": 756, + "id": "0x2E" + }, + { + "from": 757, + "to": 758, + "id": "0x2E" + }, + { + "from": 759, + "to": 759, + "id": "0x2B" + }, + { + "from": 760, + "to": 760, + "id": "0x2D" + }, + { + "from": 761, + "to": 761, + "id": "0x2C" + }, + { + "from": 762, + "to": 763, + "id": "0x30" + }, + { + "from": 764, + "to": 764, + "id": "0x31" + }, + { + "from": 765, + "to": 765, + "id": "0x31" + }, + { + "from": 766, + "to": 766, + "id": "0x33" + }, + { + "from": 767, + "to": 767, + "id": "0x33" + }, + { + "from": 768, + "to": 769, + "id": "0x35" + }, + { + "from": 770, + "to": 770, + "id": "0x34" + }, + { + "from": 771, + "to": 772, + "id": "0x34" + }, + { + "from": 773, + "to": 774, + "id": "0x39" + }, + { + "from": 775, + "to": 776, + "id": "0x3B" + } + ], + "play.toClient.ping": [ + { + "from": 755, + "to": 755, + "id": "0x30" + }, + { + "from": 756, + "to": 756, + "id": "0x30" + }, + { + "from": 757, + "to": 758, + "id": "0x30" + }, + { + "from": 759, + "to": 759, + "id": "0x2D" + }, + { + "from": 760, + "to": 760, + "id": "0x2F" + }, + { + "from": 761, + "to": 761, + "id": "0x2E" + }, + { + "from": 762, + "to": 763, + "id": "0x32" + }, + { + "from": 764, + "to": 764, + "id": "0x33" + }, + { + "from": 765, + "to": 765, + "id": "0x33" + }, + { + "from": 766, + "to": 766, + "id": "0x35" + }, + { + "from": 767, + "to": 767, + "id": "0x35" + }, + { + "from": 768, + "to": 769, + "id": "0x37" + }, + { + "from": 770, + "to": 770, + "id": "0x36" + }, + { + "from": 771, + "to": 772, + "id": "0x36" + }, + { + "from": 773, + "to": 774, + "id": "0x3B" + }, + { + "from": 775, + "to": 776, + "id": "0x3D" + } + ], + "play.toClient.ping_response": [ + { + "from": 764, + "to": 764, + "id": "0x34" + }, + { + "from": 765, + "to": 765, + "id": "0x34" + }, + { + "from": 766, + "to": 766, + "id": "0x36" + }, + { + "from": 767, + "to": 767, + "id": "0x36" + }, + { + "from": 768, + "to": 769, + "id": "0x38" + }, + { + "from": 770, + "to": 770, + "id": "0x37" + }, + { + "from": 771, + "to": 772, + "id": "0x37" + }, + { + "from": 773, + "to": 774, + "id": "0x3C" + }, + { + "from": 775, + "to": 776, + "id": "0x3E" + } + ], + "play.toClient.player_chat": [ + { + "from": 759, + "to": 759, + "id": "0x30" + }, + { + "from": 760, + "to": 760, + "id": "0x33" + }, + { + "from": 761, + "to": 761, + "id": "0x31" + }, + { + "from": 762, + "to": 763, + "id": "0x35" + }, + { + "from": 764, + "to": 764, + "id": "0x37" + }, + { + "from": 765, + "to": 765, + "id": "0x37" + }, + { + "from": 766, + "to": 766, + "id": "0x39" + }, + { + "from": 767, + "to": 767, + "id": "0x39" + }, + { + "from": 768, + "to": 769, + "id": "0x3B" + }, + { + "from": 770, + "to": 770, + "id": "0x3A" + }, + { + "from": 771, + "to": 772, + "id": "0x3A" + }, + { + "from": 773, + "to": 774, + "id": "0x3F" + }, + { + "from": 775, + "to": 776, + "id": "0x41" + } + ], + "play.toClient.player_info": [ + { + "from": 735, + "to": 736, + "id": "0x33" + }, + { + "from": 751, + "to": 754, + "id": "0x32" + }, + { + "from": 755, + "to": 755, + "id": "0x36" + }, + { + "from": 756, + "to": 756, + "id": "0x36" + }, + { + "from": 757, + "to": 758, + "id": "0x36" + }, + { + "from": 759, + "to": 759, + "id": "0x34" + }, + { + "from": 760, + "to": 760, + "id": "0x37" + }, + { + "from": 761, + "to": 761, + "id": "0x36" + }, + { + "from": 762, + "to": 763, + "id": "0x3A" + }, + { + "from": 764, + "to": 764, + "id": "0x3C" + }, + { + "from": 765, + "to": 765, + "id": "0x3C" + }, + { + "from": 766, + "to": 766, + "id": "0x3E" + }, + { + "from": 767, + "to": 767, + "id": "0x3E" + }, + { + "from": 768, + "to": 769, + "id": "0x40" + }, + { + "from": 770, + "to": 770, + "id": "0x3F" + }, + { + "from": 771, + "to": 772, + "id": "0x3F" + }, + { + "from": 773, + "to": 774, + "id": "0x44" + }, + { + "from": 775, + "to": 776, + "id": "0x46" + } + ], + "play.toClient.player_remove": [ + { + "from": 761, + "to": 761, + "id": "0x35" + }, + { + "from": 762, + "to": 763, + "id": "0x39" + }, + { + "from": 764, + "to": 764, + "id": "0x3B" + }, + { + "from": 765, + "to": 765, + "id": "0x3B" + }, + { + "from": 766, + "to": 766, + "id": "0x3D" + }, + { + "from": 767, + "to": 767, + "id": "0x3D" + }, + { + "from": 768, + "to": 769, + "id": "0x3F" + }, + { + "from": 770, + "to": 770, + "id": "0x3E" + }, + { + "from": 771, + "to": 772, + "id": "0x3E" + }, + { + "from": 773, + "to": 774, + "id": "0x43" + }, + { + "from": 775, + "to": 776, + "id": "0x45" + } + ], + "play.toClient.player_rotation": [ + { + "from": 768, + "to": 769, + "id": "0x43" + }, + { + "from": 770, + "to": 770, + "id": "0x42" + }, + { + "from": 771, + "to": 772, + "id": "0x42" + }, + { + "from": 773, + "to": 774, + "id": "0x47" + }, + { + "from": 775, + "to": 776, + "id": "0x49" + } + ], + "play.toClient.playerlist_header": [ + { + "from": 735, + "to": 736, + "id": "0x53" + }, + { + "from": 751, + "to": 754, + "id": "0x53" + }, + { + "from": 755, + "to": 755, + "id": "0x5E" + }, + { + "from": 756, + "to": 756, + "id": "0x5E" + }, + { + "from": 757, + "to": 758, + "id": "0x5F" + }, + { + "from": 759, + "to": 759, + "id": "0x60" + }, + { + "from": 760, + "to": 760, + "id": "0x63" + }, + { + "from": 761, + "to": 761, + "id": "0x61" + }, + { + "from": 762, + "to": 763, + "id": "0x65" + }, + { + "from": 764, + "to": 764, + "id": "0x68" + }, + { + "from": 765, + "to": 765, + "id": "0x6A" + }, + { + "from": 766, + "to": 766, + "id": "0x6D" + }, + { + "from": 767, + "to": 767, + "id": "0x6D" + }, + { + "from": 768, + "to": 769, + "id": "0x74" + }, + { + "from": 770, + "to": 770, + "id": "0x73" + }, + { + "from": 771, + "to": 772, + "id": "0x73" + }, + { + "from": 773, + "to": 774, + "id": "0x78" + }, + { + "from": 775, + "to": 776, + "id": "0x7A" + } + ], + "play.toClient.position": [ + { + "from": 735, + "to": 736, + "id": "0x35" + }, + { + "from": 751, + "to": 754, + "id": "0x34" + }, + { + "from": 755, + "to": 755, + "id": "0x38" + }, + { + "from": 756, + "to": 756, + "id": "0x38" + }, + { + "from": 757, + "to": 758, + "id": "0x38" + }, + { + "from": 759, + "to": 759, + "id": "0x36" + }, + { + "from": 760, + "to": 760, + "id": "0x39" + }, + { + "from": 761, + "to": 761, + "id": "0x38" + }, + { + "from": 762, + "to": 763, + "id": "0x3C" + }, + { + "from": 764, + "to": 764, + "id": "0x3E" + }, + { + "from": 765, + "to": 765, + "id": "0x3E" + }, + { + "from": 766, + "to": 766, + "id": "0x40" + }, + { + "from": 767, + "to": 767, + "id": "0x40" + }, + { + "from": 768, + "to": 769, + "id": "0x42" + }, + { + "from": 770, + "to": 770, + "id": "0x41" + }, + { + "from": 771, + "to": 772, + "id": "0x41" + }, + { + "from": 773, + "to": 774, + "id": "0x46" + }, + { + "from": 775, + "to": 776, + "id": "0x48" + } + ], + "play.toClient.profileless_chat": [ + { + "from": 761, + "to": 761, + "id": "0x18" + }, + { + "from": 762, + "to": 763, + "id": "0x1B" + }, + { + "from": 764, + "to": 764, + "id": "0x1C" + }, + { + "from": 765, + "to": 765, + "id": "0x1C" + }, + { + "from": 766, + "to": 766, + "id": "0x1E" + }, + { + "from": 767, + "to": 767, + "id": "0x1E" + }, + { + "from": 768, + "to": 769, + "id": "0x1E" + }, + { + "from": 770, + "to": 770, + "id": "0x1D" + }, + { + "from": 771, + "to": 772, + "id": "0x1D" + }, + { + "from": 773, + "to": 774, + "id": "0x21" + }, + { + "from": 775, + "to": 776, + "id": "0x21" + } + ], + "play.toClient.recipe_book_add": [ + { + "from": 768, + "to": 769, + "id": "0x44" + }, + { + "from": 770, + "to": 770, + "id": "0x43" + }, + { + "from": 771, + "to": 772, + "id": "0x43" + }, + { + "from": 773, + "to": 774, + "id": "0x48" + }, + { + "from": 775, + "to": 776, + "id": "0x4A" + } + ], + "play.toClient.recipe_book_remove": [ + { + "from": 768, + "to": 769, + "id": "0x45" + }, + { + "from": 770, + "to": 770, + "id": "0x44" + }, + { + "from": 771, + "to": 772, + "id": "0x44" + }, + { + "from": 773, + "to": 774, + "id": "0x49" + }, + { + "from": 775, + "to": 776, + "id": "0x4B" + } + ], + "play.toClient.recipe_book_settings": [ + { + "from": 768, + "to": 769, + "id": "0x46" + }, + { + "from": 770, + "to": 770, + "id": "0x45" + }, + { + "from": 771, + "to": 772, + "id": "0x45" + }, + { + "from": 773, + "to": 774, + "id": "0x4A" + }, + { + "from": 775, + "to": 776, + "id": "0x4C" + } + ], + "play.toClient.rel_entity_move": [ + { + "from": 735, + "to": 736, + "id": "0x28" + }, + { + "from": 751, + "to": 754, + "id": "0x27" + }, + { + "from": 755, + "to": 755, + "id": "0x29" + }, + { + "from": 756, + "to": 756, + "id": "0x29" + }, + { + "from": 757, + "to": 758, + "id": "0x29" + }, + { + "from": 759, + "to": 759, + "id": "0x26" + }, + { + "from": 760, + "to": 760, + "id": "0x28" + }, + { + "from": 761, + "to": 761, + "id": "0x27" + }, + { + "from": 762, + "to": 763, + "id": "0x2B" + }, + { + "from": 764, + "to": 764, + "id": "0x2C" + }, + { + "from": 765, + "to": 765, + "id": "0x2C" + }, + { + "from": 766, + "to": 766, + "id": "0x2E" + }, + { + "from": 767, + "to": 767, + "id": "0x2E" + }, + { + "from": 768, + "to": 769, + "id": "0x2F" + }, + { + "from": 770, + "to": 770, + "id": "0x2E" + }, + { + "from": 771, + "to": 772, + "id": "0x2E" + }, + { + "from": 773, + "to": 774, + "id": "0x33" + }, + { + "from": 775, + "to": 776, + "id": "0x35" + } + ], + "play.toClient.remove_entity_effect": [ + { + "from": 735, + "to": 736, + "id": "0x38" + }, + { + "from": 751, + "to": 754, + "id": "0x37" + }, + { + "from": 755, + "to": 755, + "id": "0x3B" + }, + { + "from": 756, + "to": 756, + "id": "0x3B" + }, + { + "from": 757, + "to": 758, + "id": "0x3B" + }, + { + "from": 759, + "to": 759, + "id": "0x39" + }, + { + "from": 760, + "to": 760, + "id": "0x3C" + }, + { + "from": 761, + "to": 761, + "id": "0x3B" + }, + { + "from": 762, + "to": 763, + "id": "0x3F" + }, + { + "from": 764, + "to": 764, + "id": "0x41" + }, + { + "from": 765, + "to": 765, + "id": "0x41" + }, + { + "from": 766, + "to": 766, + "id": "0x43" + }, + { + "from": 767, + "to": 767, + "id": "0x43" + }, + { + "from": 768, + "to": 769, + "id": "0x48" + }, + { + "from": 770, + "to": 770, + "id": "0x47" + }, + { + "from": 771, + "to": 772, + "id": "0x47" + }, + { + "from": 773, + "to": 774, + "id": "0x4C" + }, + { + "from": 775, + "to": 776, + "id": "0x4E" + } + ], + "play.toClient.remove_resource_pack": [ + { + "from": 765, + "to": 765, + "id": "0x43" + }, + { + "from": 766, + "to": 766, + "id": "0x45" + }, + { + "from": 767, + "to": 767, + "id": "0x45" + }, + { + "from": 768, + "to": 769, + "id": "0x4A" + }, + { + "from": 770, + "to": 770, + "id": "0x49" + }, + { + "from": 771, + "to": 772, + "id": "0x49" + }, + { + "from": 773, + "to": 774, + "id": "0x4E" + }, + { + "from": 775, + "to": 776, + "id": "0x50" + } + ], + "play.toClient.reset_score": [ + { + "from": 765, + "to": 765, + "id": "0x42" + }, + { + "from": 766, + "to": 766, + "id": "0x44" + }, + { + "from": 767, + "to": 767, + "id": "0x44" + }, + { + "from": 768, + "to": 769, + "id": "0x49" + }, + { + "from": 770, + "to": 770, + "id": "0x48" + }, + { + "from": 771, + "to": 772, + "id": "0x48" + }, + { + "from": 773, + "to": 774, + "id": "0x4D" + }, + { + "from": 775, + "to": 776, + "id": "0x4F" + } + ], + "play.toClient.resource_pack_send": [ + { + "from": 735, + "to": 736, + "id": "0x39" + }, + { + "from": 751, + "to": 754, + "id": "0x38" + }, + { + "from": 755, + "to": 755, + "id": "0x3C" + }, + { + "from": 756, + "to": 756, + "id": "0x3C" + }, + { + "from": 757, + "to": 758, + "id": "0x3C" + }, + { + "from": 759, + "to": 759, + "id": "0x3A" + }, + { + "from": 760, + "to": 760, + "id": "0x3D" + }, + { + "from": 761, + "to": 761, + "id": "0x3C" + }, + { + "from": 762, + "to": 763, + "id": "0x40" + }, + { + "from": 764, + "to": 764, + "id": "0x42" + } + ], + "play.toClient.respawn": [ + { + "from": 735, + "to": 736, + "id": "0x3A" + }, + { + "from": 751, + "to": 754, + "id": "0x39" + }, + { + "from": 755, + "to": 755, + "id": "0x3D" + }, + { + "from": 756, + "to": 756, + "id": "0x3D" + }, + { + "from": 757, + "to": 758, + "id": "0x3D" + }, + { + "from": 759, + "to": 759, + "id": "0x3B" + }, + { + "from": 760, + "to": 760, + "id": "0x3E" + }, + { + "from": 761, + "to": 761, + "id": "0x3D" + }, + { + "from": 762, + "to": 763, + "id": "0x41" + }, + { + "from": 764, + "to": 764, + "id": "0x43" + }, + { + "from": 765, + "to": 765, + "id": "0x45" + }, + { + "from": 766, + "to": 766, + "id": "0x47" + }, + { + "from": 767, + "to": 767, + "id": "0x47" + }, + { + "from": 768, + "to": 769, + "id": "0x4C" + }, + { + "from": 770, + "to": 770, + "id": "0x4B" + }, + { + "from": 771, + "to": 772, + "id": "0x4B" + }, + { + "from": 773, + "to": 774, + "id": "0x50" + }, + { + "from": 775, + "to": 776, + "id": "0x52" + } + ], + "play.toClient.scoreboard_display_objective": [ + { + "from": 735, + "to": 736, + "id": "0x43" + }, + { + "from": 751, + "to": 754, + "id": "0x43" + }, + { + "from": 755, + "to": 755, + "id": "0x4C" + }, + { + "from": 756, + "to": 756, + "id": "0x4C" + }, + { + "from": 757, + "to": 758, + "id": "0x4C" + }, + { + "from": 759, + "to": 759, + "id": "0x4C" + }, + { + "from": 760, + "to": 760, + "id": "0x4F" + }, + { + "from": 761, + "to": 761, + "id": "0x4D" + }, + { + "from": 762, + "to": 763, + "id": "0x51" + }, + { + "from": 764, + "to": 764, + "id": "0x53" + }, + { + "from": 765, + "to": 765, + "id": "0x55" + }, + { + "from": 766, + "to": 766, + "id": "0x57" + }, + { + "from": 767, + "to": 767, + "id": "0x57" + }, + { + "from": 768, + "to": 769, + "id": "0x5C" + }, + { + "from": 770, + "to": 770, + "id": "0x5B" + }, + { + "from": 771, + "to": 772, + "id": "0x5B" + }, + { + "from": 773, + "to": 774, + "id": "0x60" + }, + { + "from": 775, + "to": 776, + "id": "0x62" + } + ], + "play.toClient.scoreboard_objective": [ + { + "from": 735, + "to": 736, + "id": "0x4A" + }, + { + "from": 751, + "to": 754, + "id": "0x4A" + }, + { + "from": 755, + "to": 755, + "id": "0x53" + }, + { + "from": 756, + "to": 756, + "id": "0x53" + }, + { + "from": 757, + "to": 758, + "id": "0x53" + }, + { + "from": 759, + "to": 759, + "id": "0x53" + }, + { + "from": 760, + "to": 760, + "id": "0x56" + }, + { + "from": 761, + "to": 761, + "id": "0x54" + }, + { + "from": 762, + "to": 763, + "id": "0x58" + }, + { + "from": 764, + "to": 764, + "id": "0x5A" + }, + { + "from": 765, + "to": 765, + "id": "0x5C" + }, + { + "from": 766, + "to": 766, + "id": "0x5E" + }, + { + "from": 767, + "to": 767, + "id": "0x5E" + }, + { + "from": 768, + "to": 769, + "id": "0x64" + }, + { + "from": 770, + "to": 770, + "id": "0x63" + }, + { + "from": 771, + "to": 772, + "id": "0x63" + }, + { + "from": 773, + "to": 774, + "id": "0x68" + }, + { + "from": 775, + "to": 776, + "id": "0x6A" + } + ], + "play.toClient.scoreboard_score": [ + { + "from": 735, + "to": 736, + "id": "0x4D" + }, + { + "from": 751, + "to": 754, + "id": "0x4D" + }, + { + "from": 755, + "to": 755, + "id": "0x56" + }, + { + "from": 756, + "to": 756, + "id": "0x56" + }, + { + "from": 757, + "to": 758, + "id": "0x56" + }, + { + "from": 759, + "to": 759, + "id": "0x56" + }, + { + "from": 760, + "to": 760, + "id": "0x59" + }, + { + "from": 761, + "to": 761, + "id": "0x57" + }, + { + "from": 762, + "to": 763, + "id": "0x5B" + }, + { + "from": 764, + "to": 764, + "id": "0x5D" + }, + { + "from": 765, + "to": 765, + "id": "0x5F" + }, + { + "from": 766, + "to": 766, + "id": "0x61" + }, + { + "from": 767, + "to": 767, + "id": "0x61" + }, + { + "from": 768, + "to": 769, + "id": "0x68" + }, + { + "from": 770, + "to": 770, + "id": "0x67" + }, + { + "from": 771, + "to": 772, + "id": "0x67" + }, + { + "from": 773, + "to": 774, + "id": "0x6C" + }, + { + "from": 775, + "to": 776, + "id": "0x6E" + } + ], + "play.toClient.sculk_vibration_signal": [ + { + "from": 755, + "to": 755, + "id": "0x05" + }, + { + "from": 756, + "to": 756, + "id": "0x05" + }, + { + "from": 757, + "to": 758, + "id": "0x05" + } + ], + "play.toClient.select_advancement_tab": [ + { + "from": 735, + "to": 736, + "id": "0x3C" + }, + { + "from": 751, + "to": 754, + "id": "0x3C" + }, + { + "from": 755, + "to": 755, + "id": "0x40" + }, + { + "from": 756, + "to": 756, + "id": "0x40" + }, + { + "from": 757, + "to": 758, + "id": "0x40" + }, + { + "from": 759, + "to": 759, + "id": "0x3E" + }, + { + "from": 760, + "to": 760, + "id": "0x41" + }, + { + "from": 761, + "to": 761, + "id": "0x40" + }, + { + "from": 762, + "to": 763, + "id": "0x44" + }, + { + "from": 764, + "to": 764, + "id": "0x46" + }, + { + "from": 765, + "to": 765, + "id": "0x48" + }, + { + "from": 766, + "to": 766, + "id": "0x4A" + }, + { + "from": 767, + "to": 767, + "id": "0x4A" + }, + { + "from": 768, + "to": 769, + "id": "0x4F" + }, + { + "from": 770, + "to": 770, + "id": "0x4E" + }, + { + "from": 771, + "to": 772, + "id": "0x4E" + }, + { + "from": 773, + "to": 774, + "id": "0x53" + }, + { + "from": 775, + "to": 776, + "id": "0x55" + } + ], + "play.toClient.server_data": [ + { + "from": 759, + "to": 759, + "id": "0x3F" + }, + { + "from": 760, + "to": 760, + "id": "0x42" + }, + { + "from": 761, + "to": 761, + "id": "0x41" + }, + { + "from": 762, + "to": 763, + "id": "0x45" + }, + { + "from": 764, + "to": 764, + "id": "0x47" + }, + { + "from": 765, + "to": 765, + "id": "0x49" + }, + { + "from": 766, + "to": 766, + "id": "0x4B" + }, + { + "from": 767, + "to": 767, + "id": "0x4B" + }, + { + "from": 768, + "to": 769, + "id": "0x50" + }, + { + "from": 770, + "to": 770, + "id": "0x4F" + }, + { + "from": 771, + "to": 772, + "id": "0x4F" + }, + { + "from": 773, + "to": 774, + "id": "0x54" + }, + { + "from": 775, + "to": 776, + "id": "0x56" + } + ], + "play.toClient.server_links": [ + { + "from": 767, + "to": 767, + "id": "0x7B" + }, + { + "from": 768, + "to": 769, + "id": "0x82" + }, + { + "from": 770, + "to": 770, + "id": "0x82" + }, + { + "from": 771, + "to": 772, + "id": "0x82" + }, + { + "from": 773, + "to": 774, + "id": "0x87" + }, + { + "from": 775, + "to": 776, + "id": "0x89" + } + ], + "play.toClient.set_cooldown": [ + { + "from": 735, + "to": 736, + "id": "0x17" + }, + { + "from": 751, + "to": 754, + "id": "0x16" + }, + { + "from": 755, + "to": 755, + "id": "0x17" + }, + { + "from": 756, + "to": 756, + "id": "0x17" + }, + { + "from": 757, + "to": 758, + "id": "0x17" + }, + { + "from": 759, + "to": 759, + "id": "0x14" + }, + { + "from": 760, + "to": 760, + "id": "0x14" + }, + { + "from": 761, + "to": 761, + "id": "0x13" + }, + { + "from": 762, + "to": 763, + "id": "0x15" + }, + { + "from": 764, + "to": 764, + "id": "0x16" + }, + { + "from": 765, + "to": 765, + "id": "0x16" + }, + { + "from": 766, + "to": 766, + "id": "0x17" + }, + { + "from": 767, + "to": 767, + "id": "0x17" + }, + { + "from": 768, + "to": 769, + "id": "0x17" + }, + { + "from": 770, + "to": 770, + "id": "0x16" + }, + { + "from": 771, + "to": 772, + "id": "0x16" + }, + { + "from": 773, + "to": 774, + "id": "0x16" + }, + { + "from": 775, + "to": 776, + "id": "0x16" + } + ], + "play.toClient.set_cursor_item": [ + { + "from": 768, + "to": 769, + "id": "0x5A" + }, + { + "from": 770, + "to": 770, + "id": "0x59" + }, + { + "from": 771, + "to": 772, + "id": "0x59" + }, + { + "from": 773, + "to": 774, + "id": "0x5E" + }, + { + "from": 775, + "to": 776, + "id": "0x60" + } + ], + "play.toClient.set_passengers": [ + { + "from": 735, + "to": 736, + "id": "0x4B" + }, + { + "from": 751, + "to": 754, + "id": "0x4B" + }, + { + "from": 755, + "to": 755, + "id": "0x54" + }, + { + "from": 756, + "to": 756, + "id": "0x54" + }, + { + "from": 757, + "to": 758, + "id": "0x54" + }, + { + "from": 759, + "to": 759, + "id": "0x54" + }, + { + "from": 760, + "to": 760, + "id": "0x57" + }, + { + "from": 761, + "to": 761, + "id": "0x55" + }, + { + "from": 762, + "to": 763, + "id": "0x59" + }, + { + "from": 764, + "to": 764, + "id": "0x5B" + }, + { + "from": 765, + "to": 765, + "id": "0x5D" + }, + { + "from": 766, + "to": 766, + "id": "0x5F" + }, + { + "from": 767, + "to": 767, + "id": "0x5F" + }, + { + "from": 768, + "to": 769, + "id": "0x65" + }, + { + "from": 770, + "to": 770, + "id": "0x64" + }, + { + "from": 771, + "to": 772, + "id": "0x64" + }, + { + "from": 773, + "to": 774, + "id": "0x69" + }, + { + "from": 775, + "to": 776, + "id": "0x6B" + } + ], + "play.toClient.set_player_inventory": [ + { + "from": 768, + "to": 769, + "id": "0x66" + }, + { + "from": 770, + "to": 770, + "id": "0x65" + }, + { + "from": 771, + "to": 772, + "id": "0x65" + }, + { + "from": 773, + "to": 774, + "id": "0x6A" + }, + { + "from": 775, + "to": 776, + "id": "0x6C" + } + ], + "play.toClient.set_projectile_power": [ + { + "from": 766, + "to": 766, + "id": "0x79" + }, + { + "from": 767, + "to": 767, + "id": "0x79" + }, + { + "from": 768, + "to": 769, + "id": "0x80" + }, + { + "from": 770, + "to": 770, + "id": "0x80" + }, + { + "from": 771, + "to": 772, + "id": "0x80" + }, + { + "from": 773, + "to": 774, + "id": "0x85" + }, + { + "from": 775, + "to": 776, + "id": "0x87" + } + ], + "play.toClient.set_slot": [ + { + "from": 735, + "to": 736, + "id": "0x16" + }, + { + "from": 751, + "to": 754, + "id": "0x15" + }, + { + "from": 755, + "to": 755, + "id": "0x16" + }, + { + "from": 756, + "to": 756, + "id": "0x16" + }, + { + "from": 757, + "to": 758, + "id": "0x16" + }, + { + "from": 759, + "to": 759, + "id": "0x13" + }, + { + "from": 760, + "to": 760, + "id": "0x13" + }, + { + "from": 761, + "to": 761, + "id": "0x12" + }, + { + "from": 762, + "to": 763, + "id": "0x14" + }, + { + "from": 764, + "to": 764, + "id": "0x15" + }, + { + "from": 765, + "to": 765, + "id": "0x15" + }, + { + "from": 766, + "to": 766, + "id": "0x15" + }, + { + "from": 767, + "to": 767, + "id": "0x15" + }, + { + "from": 768, + "to": 769, + "id": "0x15" + }, + { + "from": 770, + "to": 770, + "id": "0x14" + }, + { + "from": 771, + "to": 772, + "id": "0x14" + }, + { + "from": 773, + "to": 774, + "id": "0x14" + }, + { + "from": 775, + "to": 776, + "id": "0x14" + } + ], + "play.toClient.set_ticking_state": [ + { + "from": 765, + "to": 765, + "id": "0x6E" + }, + { + "from": 766, + "to": 766, + "id": "0x71" + }, + { + "from": 767, + "to": 767, + "id": "0x71" + }, + { + "from": 768, + "to": 769, + "id": "0x78" + }, + { + "from": 770, + "to": 770, + "id": "0x78" + }, + { + "from": 771, + "to": 772, + "id": "0x78" + }, + { + "from": 773, + "to": 774, + "id": "0x7D" + }, + { + "from": 775, + "to": 776, + "id": "0x7F" + } + ], + "play.toClient.set_title_subtitle": [ + { + "from": 755, + "to": 755, + "id": "0x57" + }, + { + "from": 756, + "to": 756, + "id": "0x57" + }, + { + "from": 757, + "to": 758, + "id": "0x58" + }, + { + "from": 759, + "to": 759, + "id": "0x58" + }, + { + "from": 760, + "to": 760, + "id": "0x5B" + }, + { + "from": 761, + "to": 761, + "id": "0x59" + }, + { + "from": 762, + "to": 763, + "id": "0x5D" + }, + { + "from": 764, + "to": 764, + "id": "0x5F" + }, + { + "from": 765, + "to": 765, + "id": "0x61" + }, + { + "from": 766, + "to": 766, + "id": "0x63" + }, + { + "from": 767, + "to": 767, + "id": "0x63" + }, + { + "from": 768, + "to": 769, + "id": "0x6A" + }, + { + "from": 770, + "to": 770, + "id": "0x69" + }, + { + "from": 771, + "to": 772, + "id": "0x69" + }, + { + "from": 773, + "to": 774, + "id": "0x6E" + }, + { + "from": 775, + "to": 776, + "id": "0x70" + } + ], + "play.toClient.set_title_text": [ + { + "from": 755, + "to": 755, + "id": "0x59" + }, + { + "from": 756, + "to": 756, + "id": "0x59" + }, + { + "from": 757, + "to": 758, + "id": "0x5A" + }, + { + "from": 759, + "to": 759, + "id": "0x5A" + }, + { + "from": 760, + "to": 760, + "id": "0x5D" + }, + { + "from": 761, + "to": 761, + "id": "0x5B" + }, + { + "from": 762, + "to": 763, + "id": "0x5F" + }, + { + "from": 764, + "to": 764, + "id": "0x61" + }, + { + "from": 765, + "to": 765, + "id": "0x63" + }, + { + "from": 766, + "to": 766, + "id": "0x65" + }, + { + "from": 767, + "to": 767, + "id": "0x65" + }, + { + "from": 768, + "to": 769, + "id": "0x6C" + }, + { + "from": 770, + "to": 770, + "id": "0x6B" + }, + { + "from": 771, + "to": 772, + "id": "0x6B" + }, + { + "from": 773, + "to": 774, + "id": "0x70" + }, + { + "from": 775, + "to": 776, + "id": "0x72" + } + ], + "play.toClient.set_title_time": [ + { + "from": 755, + "to": 755, + "id": "0x5A" + }, + { + "from": 756, + "to": 756, + "id": "0x5A" + }, + { + "from": 757, + "to": 758, + "id": "0x5B" + }, + { + "from": 759, + "to": 759, + "id": "0x5B" + }, + { + "from": 760, + "to": 760, + "id": "0x5E" + }, + { + "from": 761, + "to": 761, + "id": "0x5C" + }, + { + "from": 762, + "to": 763, + "id": "0x60" + }, + { + "from": 764, + "to": 764, + "id": "0x62" + }, + { + "from": 765, + "to": 765, + "id": "0x64" + }, + { + "from": 766, + "to": 766, + "id": "0x66" + }, + { + "from": 767, + "to": 767, + "id": "0x66" + }, + { + "from": 768, + "to": 769, + "id": "0x6D" + }, + { + "from": 770, + "to": 770, + "id": "0x6C" + }, + { + "from": 771, + "to": 772, + "id": "0x6C" + }, + { + "from": 773, + "to": 774, + "id": "0x71" + }, + { + "from": 775, + "to": 776, + "id": "0x73" + } + ], + "play.toClient.should_display_chat_preview": [ + { + "from": 759, + "to": 759, + "id": "0x4B" + }, + { + "from": 760, + "to": 760, + "id": "0x4E" + } + ], + "play.toClient.show_dialog": [ + { + "from": 771, + "to": 772, + "id": "0x85" + }, + { + "from": 773, + "to": 774, + "id": "0x8A" + }, + { + "from": 775, + "to": 776, + "id": "0x8C" + } + ], + "play.toClient.simulation_distance": [ + { + "from": 757, + "to": 758, + "id": "0x57" + }, + { + "from": 759, + "to": 759, + "id": "0x57" + }, + { + "from": 760, + "to": 760, + "id": "0x5A" + }, + { + "from": 761, + "to": 761, + "id": "0x58" + }, + { + "from": 762, + "to": 763, + "id": "0x5C" + }, + { + "from": 764, + "to": 764, + "id": "0x5E" + }, + { + "from": 765, + "to": 765, + "id": "0x60" + }, + { + "from": 766, + "to": 766, + "id": "0x62" + }, + { + "from": 767, + "to": 767, + "id": "0x62" + }, + { + "from": 768, + "to": 769, + "id": "0x69" + }, + { + "from": 770, + "to": 770, + "id": "0x68" + }, + { + "from": 771, + "to": 772, + "id": "0x68" + }, + { + "from": 773, + "to": 774, + "id": "0x6D" + }, + { + "from": 775, + "to": 776, + "id": "0x6F" + } + ], + "play.toClient.sound_effect": [ + { + "from": 735, + "to": 736, + "id": "0x51" + }, + { + "from": 751, + "to": 754, + "id": "0x51" + }, + { + "from": 755, + "to": 755, + "id": "0x5C" + }, + { + "from": 756, + "to": 756, + "id": "0x5C" + }, + { + "from": 757, + "to": 758, + "id": "0x5D" + }, + { + "from": 759, + "to": 759, + "id": "0x5D" + }, + { + "from": 760, + "to": 760, + "id": "0x60" + }, + { + "from": 761, + "to": 761, + "id": "0x5E" + }, + { + "from": 762, + "to": 763, + "id": "0x62" + }, + { + "from": 764, + "to": 764, + "id": "0x64" + }, + { + "from": 765, + "to": 765, + "id": "0x66" + }, + { + "from": 766, + "to": 766, + "id": "0x68" + }, + { + "from": 767, + "to": 767, + "id": "0x68" + }, + { + "from": 768, + "to": 769, + "id": "0x6F" + }, + { + "from": 770, + "to": 770, + "id": "0x6E" + }, + { + "from": 771, + "to": 772, + "id": "0x6E" + }, + { + "from": 773, + "to": 774, + "id": "0x73" + }, + { + "from": 775, + "to": 776, + "id": "0x75" + } + ], + "play.toClient.spawn_entity": [ + { + "from": 735, + "to": 736, + "id": "0x00" + }, + { + "from": 751, + "to": 754, + "id": "0x00" + }, + { + "from": 755, + "to": 755, + "id": "0x00" + }, + { + "from": 756, + "to": 756, + "id": "0x00" + }, + { + "from": 757, + "to": 758, + "id": "0x00" + }, + { + "from": 759, + "to": 759, + "id": "0x00" + }, + { + "from": 760, + "to": 760, + "id": "0x00" + }, + { + "from": 761, + "to": 761, + "id": "0x00" + }, + { + "from": 762, + "to": 763, + "id": "0x01" + }, + { + "from": 764, + "to": 764, + "id": "0x01" + }, + { + "from": 765, + "to": 765, + "id": "0x01" + }, + { + "from": 766, + "to": 766, + "id": "0x01" + }, + { + "from": 767, + "to": 767, + "id": "0x01" + }, + { + "from": 768, + "to": 769, + "id": "0x01" + }, + { + "from": 770, + "to": 770, + "id": "0x01" + }, + { + "from": 771, + "to": 772, + "id": "0x01" + }, + { + "from": 773, + "to": 774, + "id": "0x01" + }, + { + "from": 775, + "to": 776, + "id": "0x01" + } + ], + "play.toClient.spawn_entity_experience_orb": [ + { + "from": 735, + "to": 736, + "id": "0x01" + }, + { + "from": 751, + "to": 754, + "id": "0x01" + }, + { + "from": 755, + "to": 755, + "id": "0x01" + }, + { + "from": 756, + "to": 756, + "id": "0x01" + }, + { + "from": 757, + "to": 758, + "id": "0x01" + }, + { + "from": 759, + "to": 759, + "id": "0x01" + }, + { + "from": 760, + "to": 760, + "id": "0x01" + }, + { + "from": 761, + "to": 761, + "id": "0x01" + }, + { + "from": 762, + "to": 763, + "id": "0x02" + }, + { + "from": 764, + "to": 764, + "id": "0x02" + }, + { + "from": 765, + "to": 765, + "id": "0x02" + }, + { + "from": 766, + "to": 766, + "id": "0x02" + }, + { + "from": 767, + "to": 767, + "id": "0x02" + }, + { + "from": 768, + "to": 769, + "id": "0x02" + } + ], + "play.toClient.spawn_entity_living": [ + { + "from": 735, + "to": 736, + "id": "0x02" + }, + { + "from": 751, + "to": 754, + "id": "0x02" + }, + { + "from": 755, + "to": 755, + "id": "0x02" + }, + { + "from": 756, + "to": 756, + "id": "0x02" + }, + { + "from": 757, + "to": 758, + "id": "0x02" + } + ], + "play.toClient.spawn_entity_painting": [ + { + "from": 735, + "to": 736, + "id": "0x03" + }, + { + "from": 751, + "to": 754, + "id": "0x03" + }, + { + "from": 755, + "to": 755, + "id": "0x03" + }, + { + "from": 756, + "to": 756, + "id": "0x03" + }, + { + "from": 757, + "to": 758, + "id": "0x03" + } + ], + "play.toClient.spawn_position": [ + { + "from": 735, + "to": 736, + "id": "0x42" + }, + { + "from": 751, + "to": 754, + "id": "0x42" + }, + { + "from": 755, + "to": 755, + "id": "0x4B" + }, + { + "from": 756, + "to": 756, + "id": "0x4B" + }, + { + "from": 757, + "to": 758, + "id": "0x4B" + }, + { + "from": 759, + "to": 759, + "id": "0x4A" + }, + { + "from": 760, + "to": 760, + "id": "0x4D" + }, + { + "from": 761, + "to": 761, + "id": "0x4C" + }, + { + "from": 762, + "to": 763, + "id": "0x50" + }, + { + "from": 764, + "to": 764, + "id": "0x52" + }, + { + "from": 765, + "to": 765, + "id": "0x54" + }, + { + "from": 766, + "to": 766, + "id": "0x56" + }, + { + "from": 767, + "to": 767, + "id": "0x56" + }, + { + "from": 768, + "to": 769, + "id": "0x5B" + }, + { + "from": 770, + "to": 770, + "id": "0x5A" + }, + { + "from": 771, + "to": 772, + "id": "0x5A" + }, + { + "from": 773, + "to": 774, + "id": "0x5F" + }, + { + "from": 775, + "to": 776, + "id": "0x61" + } + ], + "play.toClient.start_configuration": [ + { + "from": 764, + "to": 764, + "id": "0x65" + }, + { + "from": 765, + "to": 765, + "id": "0x67" + }, + { + "from": 766, + "to": 766, + "id": "0x69" + }, + { + "from": 767, + "to": 767, + "id": "0x69" + }, + { + "from": 768, + "to": 769, + "id": "0x70" + }, + { + "from": 770, + "to": 770, + "id": "0x6F" + }, + { + "from": 771, + "to": 772, + "id": "0x6F" + }, + { + "from": 773, + "to": 774, + "id": "0x74" + }, + { + "from": 775, + "to": 776, + "id": "0x76" + } + ], + "play.toClient.statistics": [ + { + "from": 735, + "to": 736, + "id": "0x06" + }, + { + "from": 751, + "to": 754, + "id": "0x06" + }, + { + "from": 755, + "to": 755, + "id": "0x07" + }, + { + "from": 756, + "to": 756, + "id": "0x07" + }, + { + "from": 757, + "to": 758, + "id": "0x07" + }, + { + "from": 759, + "to": 759, + "id": "0x04" + }, + { + "from": 760, + "to": 760, + "id": "0x04" + }, + { + "from": 761, + "to": 761, + "id": "0x04" + }, + { + "from": 762, + "to": 763, + "id": "0x05" + }, + { + "from": 764, + "to": 764, + "id": "0x04" + }, + { + "from": 765, + "to": 765, + "id": "0x04" + }, + { + "from": 766, + "to": 766, + "id": "0x04" + }, + { + "from": 767, + "to": 767, + "id": "0x04" + }, + { + "from": 768, + "to": 769, + "id": "0x04" + }, + { + "from": 770, + "to": 770, + "id": "0x03" + }, + { + "from": 771, + "to": 772, + "id": "0x03" + }, + { + "from": 773, + "to": 774, + "id": "0x03" + }, + { + "from": 775, + "to": 776, + "id": "0x03" + } + ], + "play.toClient.step_tick": [ + { + "from": 765, + "to": 765, + "id": "0x6F" + }, + { + "from": 766, + "to": 766, + "id": "0x72" + }, + { + "from": 767, + "to": 767, + "id": "0x72" + }, + { + "from": 768, + "to": 769, + "id": "0x79" + }, + { + "from": 770, + "to": 770, + "id": "0x79" + }, + { + "from": 771, + "to": 772, + "id": "0x79" + }, + { + "from": 773, + "to": 774, + "id": "0x7E" + }, + { + "from": 775, + "to": 776, + "id": "0x80" + } + ], + "play.toClient.stop_sound": [ + { + "from": 735, + "to": 736, + "id": "0x52" + }, + { + "from": 751, + "to": 754, + "id": "0x52" + }, + { + "from": 755, + "to": 755, + "id": "0x5D" + }, + { + "from": 756, + "to": 756, + "id": "0x5D" + }, + { + "from": 757, + "to": 758, + "id": "0x5E" + }, + { + "from": 759, + "to": 759, + "id": "0x5E" + }, + { + "from": 760, + "to": 760, + "id": "0x61" + }, + { + "from": 761, + "to": 761, + "id": "0x5F" + }, + { + "from": 762, + "to": 763, + "id": "0x63" + }, + { + "from": 764, + "to": 764, + "id": "0x66" + }, + { + "from": 765, + "to": 765, + "id": "0x68" + }, + { + "from": 766, + "to": 766, + "id": "0x6A" + }, + { + "from": 767, + "to": 767, + "id": "0x6A" + }, + { + "from": 768, + "to": 769, + "id": "0x71" + }, + { + "from": 770, + "to": 770, + "id": "0x70" + }, + { + "from": 771, + "to": 772, + "id": "0x70" + }, + { + "from": 773, + "to": 774, + "id": "0x75" + }, + { + "from": 775, + "to": 776, + "id": "0x77" + } + ], + "play.toClient.store_cookie": [ + { + "from": 766, + "to": 766, + "id": "0x6B" + }, + { + "from": 767, + "to": 767, + "id": "0x6B" + }, + { + "from": 768, + "to": 769, + "id": "0x72" + }, + { + "from": 770, + "to": 770, + "id": "0x71" + }, + { + "from": 771, + "to": 772, + "id": "0x71" + }, + { + "from": 773, + "to": 774, + "id": "0x76" + }, + { + "from": 775, + "to": 776, + "id": "0x78" + } + ], + "play.toClient.sync_entity_position": [ + { + "from": 768, + "to": 769, + "id": "0x20" + }, + { + "from": 770, + "to": 770, + "id": "0x1F" + }, + { + "from": 771, + "to": 772, + "id": "0x1F" + }, + { + "from": 773, + "to": 774, + "id": "0x23" + }, + { + "from": 775, + "to": 776, + "id": "0x23" + } + ], + "play.toClient.system_chat": [ + { + "from": 759, + "to": 759, + "id": "0x5F" + }, + { + "from": 760, + "to": 760, + "id": "0x62" + }, + { + "from": 761, + "to": 761, + "id": "0x60" + }, + { + "from": 762, + "to": 763, + "id": "0x64" + }, + { + "from": 764, + "to": 764, + "id": "0x67" + }, + { + "from": 765, + "to": 765, + "id": "0x69" + }, + { + "from": 766, + "to": 766, + "id": "0x6C" + }, + { + "from": 767, + "to": 767, + "id": "0x6C" + }, + { + "from": 768, + "to": 769, + "id": "0x73" + }, + { + "from": 770, + "to": 770, + "id": "0x72" + }, + { + "from": 771, + "to": 772, + "id": "0x72" + }, + { + "from": 773, + "to": 774, + "id": "0x77" + }, + { + "from": 775, + "to": 776, + "id": "0x79" + } + ], + "play.toClient.tab_complete": [ + { + "from": 735, + "to": 736, + "id": "0x10" + }, + { + "from": 751, + "to": 754, + "id": "0x0F" + }, + { + "from": 755, + "to": 755, + "id": "0x11" + }, + { + "from": 756, + "to": 756, + "id": "0x11" + }, + { + "from": 757, + "to": 758, + "id": "0x11" + }, + { + "from": 759, + "to": 759, + "id": "0x0E" + }, + { + "from": 760, + "to": 760, + "id": "0x0E" + }, + { + "from": 761, + "to": 761, + "id": "0x0D" + }, + { + "from": 762, + "to": 763, + "id": "0x0F" + }, + { + "from": 764, + "to": 764, + "id": "0x10" + }, + { + "from": 765, + "to": 765, + "id": "0x10" + }, + { + "from": 766, + "to": 766, + "id": "0x10" + }, + { + "from": 767, + "to": 767, + "id": "0x10" + }, + { + "from": 768, + "to": 769, + "id": "0x10" + }, + { + "from": 770, + "to": 770, + "id": "0x0F" + }, + { + "from": 771, + "to": 772, + "id": "0x0F" + }, + { + "from": 773, + "to": 774, + "id": "0x0F" + }, + { + "from": 775, + "to": 776, + "id": "0x0F" + } + ], + "play.toClient.tags": [ + { + "from": 735, + "to": 736, + "id": "0x5B" + }, + { + "from": 751, + "to": 754, + "id": "0x5B" + }, + { + "from": 755, + "to": 755, + "id": "0x66" + }, + { + "from": 756, + "to": 756, + "id": "0x66" + }, + { + "from": 757, + "to": 758, + "id": "0x67" + }, + { + "from": 759, + "to": 759, + "id": "0x68" + }, + { + "from": 760, + "to": 760, + "id": "0x6B" + }, + { + "from": 761, + "to": 761, + "id": "0x6A" + }, + { + "from": 762, + "to": 763, + "id": "0x6E" + }, + { + "from": 764, + "to": 764, + "id": "0x70" + }, + { + "from": 765, + "to": 765, + "id": "0x74" + }, + { + "from": 766, + "to": 766, + "id": "0x78" + }, + { + "from": 767, + "to": 767, + "id": "0x78" + }, + { + "from": 768, + "to": 769, + "id": "0x7F" + }, + { + "from": 770, + "to": 770, + "id": "0x7F" + }, + { + "from": 771, + "to": 772, + "id": "0x7F" + }, + { + "from": 773, + "to": 774, + "id": "0x84" + }, + { + "from": 775, + "to": 776, + "id": "0x86" + } + ], + "play.toClient.teams": [ + { + "from": 735, + "to": 736, + "id": "0x4C" + }, + { + "from": 751, + "to": 754, + "id": "0x4C" + }, + { + "from": 755, + "to": 755, + "id": "0x55" + }, + { + "from": 756, + "to": 756, + "id": "0x55" + }, + { + "from": 757, + "to": 758, + "id": "0x55" + }, + { + "from": 759, + "to": 759, + "id": "0x55" + }, + { + "from": 760, + "to": 760, + "id": "0x58" + }, + { + "from": 761, + "to": 761, + "id": "0x56" + }, + { + "from": 762, + "to": 763, + "id": "0x5A" + }, + { + "from": 764, + "to": 764, + "id": "0x5C" + }, + { + "from": 765, + "to": 765, + "id": "0x5E" + }, + { + "from": 766, + "to": 766, + "id": "0x60" + }, + { + "from": 767, + "to": 767, + "id": "0x60" + }, + { + "from": 768, + "to": 769, + "id": "0x67" + }, + { + "from": 770, + "to": 770, + "id": "0x66" + }, + { + "from": 771, + "to": 772, + "id": "0x66" + }, + { + "from": 773, + "to": 774, + "id": "0x6B" + }, + { + "from": 775, + "to": 776, + "id": "0x6D" + } + ], + "play.toClient.test_instance_block_status": [ + { + "from": 770, + "to": 770, + "id": "0x77" + }, + { + "from": 771, + "to": 772, + "id": "0x77" + }, + { + "from": 773, + "to": 774, + "id": "0x7C" + }, + { + "from": 775, + "to": 776, + "id": "0x7E" + } + ], + "play.toClient.tile_entity_data": [ + { + "from": 735, + "to": 736, + "id": "0x09" + }, + { + "from": 751, + "to": 754, + "id": "0x09" + }, + { + "from": 755, + "to": 755, + "id": "0x0A" + }, + { + "from": 756, + "to": 756, + "id": "0x0A" + }, + { + "from": 757, + "to": 758, + "id": "0x0A" + }, + { + "from": 759, + "to": 759, + "id": "0x07" + }, + { + "from": 760, + "to": 760, + "id": "0x07" + }, + { + "from": 761, + "to": 761, + "id": "0x07" + }, + { + "from": 762, + "to": 763, + "id": "0x08" + }, + { + "from": 764, + "to": 764, + "id": "0x07" + }, + { + "from": 765, + "to": 765, + "id": "0x07" + }, + { + "from": 766, + "to": 766, + "id": "0x07" + }, + { + "from": 767, + "to": 767, + "id": "0x07" + }, + { + "from": 768, + "to": 769, + "id": "0x07" + }, + { + "from": 770, + "to": 770, + "id": "0x06" + }, + { + "from": 771, + "to": 772, + "id": "0x06" + }, + { + "from": 773, + "to": 774, + "id": "0x06" + }, + { + "from": 775, + "to": 776, + "id": "0x06" + } + ], + "play.toClient.title": [ + { + "from": 735, + "to": 736, + "id": "0x4F" + }, + { + "from": 751, + "to": 754, + "id": "0x4F" + } + ], + "play.toClient.tracked_waypoint": [ + { + "from": 771, + "to": 772, + "id": "0x83" + }, + { + "from": 773, + "to": 774, + "id": "0x88" + }, + { + "from": 775, + "to": 776, + "id": "0x8A" + } + ], + "play.toClient.trade_list": [ + { + "from": 735, + "to": 736, + "id": "0x27" + }, + { + "from": 751, + "to": 754, + "id": "0x26" + }, + { + "from": 755, + "to": 755, + "id": "0x28" + }, + { + "from": 756, + "to": 756, + "id": "0x28" + }, + { + "from": 757, + "to": 758, + "id": "0x28" + }, + { + "from": 759, + "to": 759, + "id": "0x25" + }, + { + "from": 760, + "to": 760, + "id": "0x27" + }, + { + "from": 761, + "to": 761, + "id": "0x26" + }, + { + "from": 762, + "to": 763, + "id": "0x2A" + }, + { + "from": 764, + "to": 764, + "id": "0x2B" + }, + { + "from": 765, + "to": 765, + "id": "0x2B" + }, + { + "from": 766, + "to": 766, + "id": "0x2D" + }, + { + "from": 767, + "to": 767, + "id": "0x2D" + }, + { + "from": 768, + "to": 769, + "id": "0x2E" + }, + { + "from": 770, + "to": 770, + "id": "0x2D" + }, + { + "from": 771, + "to": 772, + "id": "0x2D" + }, + { + "from": 773, + "to": 774, + "id": "0x32" + }, + { + "from": 775, + "to": 776, + "id": "0x34" + } + ], + "play.toClient.transaction": [ + { + "from": 735, + "to": 736, + "id": "0x12" + }, + { + "from": 751, + "to": 754, + "id": "0x11" + } + ], + "play.toClient.transfer": [ + { + "from": 766, + "to": 766, + "id": "0x73" + }, + { + "from": 767, + "to": 767, + "id": "0x73" + }, + { + "from": 768, + "to": 769, + "id": "0x7A" + }, + { + "from": 770, + "to": 770, + "id": "0x7A" + }, + { + "from": 771, + "to": 772, + "id": "0x7A" + }, + { + "from": 773, + "to": 774, + "id": "0x7F" + }, + { + "from": 775, + "to": 776, + "id": "0x81" + } + ], + "play.toClient.unload_chunk": [ + { + "from": 735, + "to": 736, + "id": "0x1D" + }, + { + "from": 751, + "to": 754, + "id": "0x1C" + }, + { + "from": 755, + "to": 755, + "id": "0x1D" + }, + { + "from": 756, + "to": 756, + "id": "0x1D" + }, + { + "from": 757, + "to": 758, + "id": "0x1D" + }, + { + "from": 759, + "to": 759, + "id": "0x1A" + }, + { + "from": 760, + "to": 760, + "id": "0x1C" + }, + { + "from": 761, + "to": 761, + "id": "0x1B" + }, + { + "from": 762, + "to": 763, + "id": "0x1E" + }, + { + "from": 764, + "to": 764, + "id": "0x1F" + }, + { + "from": 765, + "to": 765, + "id": "0x1F" + }, + { + "from": 766, + "to": 766, + "id": "0x21" + }, + { + "from": 767, + "to": 767, + "id": "0x21" + }, + { + "from": 768, + "to": 769, + "id": "0x22" + }, + { + "from": 770, + "to": 770, + "id": "0x21" + }, + { + "from": 771, + "to": 772, + "id": "0x21" + }, + { + "from": 773, + "to": 774, + "id": "0x25" + }, + { + "from": 775, + "to": 776, + "id": "0x25" + } + ], + "play.toClient.unlock_recipes": [ + { + "from": 735, + "to": 736, + "id": "0x36" + }, + { + "from": 751, + "to": 754, + "id": "0x35" + }, + { + "from": 755, + "to": 755, + "id": "0x39" + }, + { + "from": 756, + "to": 756, + "id": "0x39" + }, + { + "from": 757, + "to": 758, + "id": "0x39" + }, + { + "from": 759, + "to": 759, + "id": "0x37" + }, + { + "from": 760, + "to": 760, + "id": "0x3A" + }, + { + "from": 761, + "to": 761, + "id": "0x39" + }, + { + "from": 762, + "to": 763, + "id": "0x3D" + }, + { + "from": 764, + "to": 764, + "id": "0x3F" + }, + { + "from": 765, + "to": 765, + "id": "0x3F" + }, + { + "from": 766, + "to": 766, + "id": "0x41" + }, + { + "from": 767, + "to": 767, + "id": "0x41" + } + ], + "play.toClient.update_health": [ + { + "from": 735, + "to": 736, + "id": "0x49" + }, + { + "from": 751, + "to": 754, + "id": "0x49" + }, + { + "from": 755, + "to": 755, + "id": "0x52" + }, + { + "from": 756, + "to": 756, + "id": "0x52" + }, + { + "from": 757, + "to": 758, + "id": "0x52" + }, + { + "from": 759, + "to": 759, + "id": "0x52" + }, + { + "from": 760, + "to": 760, + "id": "0x55" + }, + { + "from": 761, + "to": 761, + "id": "0x53" + }, + { + "from": 762, + "to": 763, + "id": "0x57" + }, + { + "from": 764, + "to": 764, + "id": "0x59" + }, + { + "from": 765, + "to": 765, + "id": "0x5B" + }, + { + "from": 766, + "to": 766, + "id": "0x5D" + }, + { + "from": 767, + "to": 767, + "id": "0x5D" + }, + { + "from": 768, + "to": 769, + "id": "0x62" + }, + { + "from": 770, + "to": 770, + "id": "0x61" + }, + { + "from": 771, + "to": 772, + "id": "0x61" + }, + { + "from": 773, + "to": 774, + "id": "0x66" + }, + { + "from": 775, + "to": 776, + "id": "0x68" + } + ], + "play.toClient.update_light": [ + { + "from": 735, + "to": 736, + "id": "0x24" + }, + { + "from": 751, + "to": 754, + "id": "0x23" + }, + { + "from": 755, + "to": 755, + "id": "0x25" + }, + { + "from": 756, + "to": 756, + "id": "0x25" + }, + { + "from": 757, + "to": 758, + "id": "0x25" + }, + { + "from": 759, + "to": 759, + "id": "0x22" + }, + { + "from": 760, + "to": 760, + "id": "0x24" + }, + { + "from": 761, + "to": 761, + "id": "0x23" + }, + { + "from": 762, + "to": 763, + "id": "0x27" + }, + { + "from": 764, + "to": 764, + "id": "0x28" + }, + { + "from": 765, + "to": 765, + "id": "0x28" + }, + { + "from": 766, + "to": 766, + "id": "0x2A" + }, + { + "from": 767, + "to": 767, + "id": "0x2A" + }, + { + "from": 768, + "to": 769, + "id": "0x2B" + }, + { + "from": 770, + "to": 770, + "id": "0x2A" + }, + { + "from": 771, + "to": 772, + "id": "0x2A" + }, + { + "from": 773, + "to": 774, + "id": "0x2F" + }, + { + "from": 775, + "to": 776, + "id": "0x30" + } + ], + "play.toClient.update_time": [ + { + "from": 735, + "to": 736, + "id": "0x4E" + }, + { + "from": 751, + "to": 754, + "id": "0x4E" + }, + { + "from": 755, + "to": 755, + "id": "0x58" + }, + { + "from": 756, + "to": 756, + "id": "0x58" + }, + { + "from": 757, + "to": 758, + "id": "0x59" + }, + { + "from": 759, + "to": 759, + "id": "0x59" + }, + { + "from": 760, + "to": 760, + "id": "0x5C" + }, + { + "from": 761, + "to": 761, + "id": "0x5A" + }, + { + "from": 762, + "to": 763, + "id": "0x5E" + }, + { + "from": 764, + "to": 764, + "id": "0x60" + }, + { + "from": 765, + "to": 765, + "id": "0x62" + }, + { + "from": 766, + "to": 766, + "id": "0x64" + }, + { + "from": 767, + "to": 767, + "id": "0x64" + }, + { + "from": 768, + "to": 769, + "id": "0x6B" + }, + { + "from": 770, + "to": 770, + "id": "0x6A" + }, + { + "from": 771, + "to": 772, + "id": "0x6A" + }, + { + "from": 773, + "to": 774, + "id": "0x6F" + }, + { + "from": 775, + "to": 776, + "id": "0x71" + } + ], + "play.toClient.update_view_distance": [ + { + "from": 735, + "to": 736, + "id": "0x41" + }, + { + "from": 751, + "to": 754, + "id": "0x41" + }, + { + "from": 755, + "to": 755, + "id": "0x4A" + }, + { + "from": 756, + "to": 756, + "id": "0x4A" + }, + { + "from": 757, + "to": 758, + "id": "0x4A" + }, + { + "from": 759, + "to": 759, + "id": "0x49" + }, + { + "from": 760, + "to": 760, + "id": "0x4C" + }, + { + "from": 761, + "to": 761, + "id": "0x4B" + }, + { + "from": 762, + "to": 763, + "id": "0x4F" + }, + { + "from": 764, + "to": 764, + "id": "0x51" + }, + { + "from": 765, + "to": 765, + "id": "0x53" + }, + { + "from": 766, + "to": 766, + "id": "0x55" + }, + { + "from": 767, + "to": 767, + "id": "0x55" + }, + { + "from": 768, + "to": 769, + "id": "0x59" + }, + { + "from": 770, + "to": 770, + "id": "0x58" + }, + { + "from": 771, + "to": 772, + "id": "0x58" + }, + { + "from": 773, + "to": 774, + "id": "0x5D" + }, + { + "from": 775, + "to": 776, + "id": "0x5F" + } + ], + "play.toClient.update_view_position": [ + { + "from": 735, + "to": 736, + "id": "0x40" + }, + { + "from": 751, + "to": 754, + "id": "0x40" + }, + { + "from": 755, + "to": 755, + "id": "0x49" + }, + { + "from": 756, + "to": 756, + "id": "0x49" + }, + { + "from": 757, + "to": 758, + "id": "0x49" + }, + { + "from": 759, + "to": 759, + "id": "0x48" + }, + { + "from": 760, + "to": 760, + "id": "0x4B" + }, + { + "from": 761, + "to": 761, + "id": "0x4A" + }, + { + "from": 762, + "to": 763, + "id": "0x4E" + }, + { + "from": 764, + "to": 764, + "id": "0x50" + }, + { + "from": 765, + "to": 765, + "id": "0x52" + }, + { + "from": 766, + "to": 766, + "id": "0x54" + }, + { + "from": 767, + "to": 767, + "id": "0x54" + }, + { + "from": 768, + "to": 769, + "id": "0x58" + }, + { + "from": 770, + "to": 770, + "id": "0x57" + }, + { + "from": 771, + "to": 772, + "id": "0x57" + }, + { + "from": 773, + "to": 774, + "id": "0x5C" + }, + { + "from": 775, + "to": 776, + "id": "0x5E" + } + ], + "play.toClient.vehicle_move": [ + { + "from": 735, + "to": 736, + "id": "0x2C" + }, + { + "from": 751, + "to": 754, + "id": "0x2B" + }, + { + "from": 755, + "to": 755, + "id": "0x2C" + }, + { + "from": 756, + "to": 756, + "id": "0x2C" + }, + { + "from": 757, + "to": 758, + "id": "0x2C" + }, + { + "from": 759, + "to": 759, + "id": "0x29" + }, + { + "from": 760, + "to": 760, + "id": "0x2B" + }, + { + "from": 761, + "to": 761, + "id": "0x2A" + }, + { + "from": 762, + "to": 763, + "id": "0x2E" + }, + { + "from": 764, + "to": 764, + "id": "0x2F" + }, + { + "from": 765, + "to": 765, + "id": "0x2F" + }, + { + "from": 766, + "to": 766, + "id": "0x31" + }, + { + "from": 767, + "to": 767, + "id": "0x31" + }, + { + "from": 768, + "to": 769, + "id": "0x33" + }, + { + "from": 770, + "to": 770, + "id": "0x32" + }, + { + "from": 771, + "to": 772, + "id": "0x32" + }, + { + "from": 773, + "to": 774, + "id": "0x37" + }, + { + "from": 775, + "to": 776, + "id": "0x39" + } + ], + "play.toClient.window_items": [ + { + "from": 735, + "to": 736, + "id": "0x14" + }, + { + "from": 751, + "to": 754, + "id": "0x13" + }, + { + "from": 755, + "to": 755, + "id": "0x14" + }, + { + "from": 756, + "to": 756, + "id": "0x14" + }, + { + "from": 757, + "to": 758, + "id": "0x14" + }, + { + "from": 759, + "to": 759, + "id": "0x11" + }, + { + "from": 760, + "to": 760, + "id": "0x11" + }, + { + "from": 761, + "to": 761, + "id": "0x10" + }, + { + "from": 762, + "to": 763, + "id": "0x12" + }, + { + "from": 764, + "to": 764, + "id": "0x13" + }, + { + "from": 765, + "to": 765, + "id": "0x13" + }, + { + "from": 766, + "to": 766, + "id": "0x13" + }, + { + "from": 767, + "to": 767, + "id": "0x13" + }, + { + "from": 768, + "to": 769, + "id": "0x13" + }, + { + "from": 770, + "to": 770, + "id": "0x12" + }, + { + "from": 771, + "to": 772, + "id": "0x12" + }, + { + "from": 773, + "to": 774, + "id": "0x12" + }, + { + "from": 775, + "to": 776, + "id": "0x12" + } + ], + "play.toClient.world_border": [ + { + "from": 735, + "to": 736, + "id": "0x3D" + }, + { + "from": 751, + "to": 754, + "id": "0x3D" + } + ], + "play.toClient.world_border_center": [ + { + "from": 755, + "to": 755, + "id": "0x42" + }, + { + "from": 756, + "to": 756, + "id": "0x42" + }, + { + "from": 757, + "to": 758, + "id": "0x42" + }, + { + "from": 759, + "to": 759, + "id": "0x41" + }, + { + "from": 760, + "to": 760, + "id": "0x44" + }, + { + "from": 761, + "to": 761, + "id": "0x43" + }, + { + "from": 762, + "to": 763, + "id": "0x47" + }, + { + "from": 764, + "to": 764, + "id": "0x49" + }, + { + "from": 765, + "to": 765, + "id": "0x4B" + }, + { + "from": 766, + "to": 766, + "id": "0x4D" + }, + { + "from": 767, + "to": 767, + "id": "0x4D" + }, + { + "from": 768, + "to": 769, + "id": "0x52" + }, + { + "from": 770, + "to": 770, + "id": "0x51" + }, + { + "from": 771, + "to": 772, + "id": "0x51" + }, + { + "from": 773, + "to": 774, + "id": "0x56" + }, + { + "from": 775, + "to": 776, + "id": "0x58" + } + ], + "play.toClient.world_border_lerp_size": [ + { + "from": 755, + "to": 755, + "id": "0x43" + }, + { + "from": 756, + "to": 756, + "id": "0x43" + }, + { + "from": 757, + "to": 758, + "id": "0x43" + }, + { + "from": 759, + "to": 759, + "id": "0x42" + }, + { + "from": 760, + "to": 760, + "id": "0x45" + }, + { + "from": 761, + "to": 761, + "id": "0x44" + }, + { + "from": 762, + "to": 763, + "id": "0x48" + }, + { + "from": 764, + "to": 764, + "id": "0x4A" + }, + { + "from": 765, + "to": 765, + "id": "0x4C" + }, + { + "from": 766, + "to": 766, + "id": "0x4E" + }, + { + "from": 767, + "to": 767, + "id": "0x4E" + }, + { + "from": 768, + "to": 769, + "id": "0x53" + }, + { + "from": 770, + "to": 770, + "id": "0x52" + }, + { + "from": 771, + "to": 772, + "id": "0x52" + }, + { + "from": 773, + "to": 774, + "id": "0x57" + }, + { + "from": 775, + "to": 776, + "id": "0x59" + } + ], + "play.toClient.world_border_size": [ + { + "from": 755, + "to": 755, + "id": "0x44" + }, + { + "from": 756, + "to": 756, + "id": "0x44" + }, + { + "from": 757, + "to": 758, + "id": "0x44" + }, + { + "from": 759, + "to": 759, + "id": "0x43" + }, + { + "from": 760, + "to": 760, + "id": "0x46" + }, + { + "from": 761, + "to": 761, + "id": "0x45" + }, + { + "from": 762, + "to": 763, + "id": "0x49" + }, + { + "from": 764, + "to": 764, + "id": "0x4B" + }, + { + "from": 765, + "to": 765, + "id": "0x4D" + }, + { + "from": 766, + "to": 766, + "id": "0x4F" + }, + { + "from": 767, + "to": 767, + "id": "0x4F" + }, + { + "from": 768, + "to": 769, + "id": "0x54" + }, + { + "from": 770, + "to": 770, + "id": "0x53" + }, + { + "from": 771, + "to": 772, + "id": "0x53" + }, + { + "from": 773, + "to": 774, + "id": "0x58" + }, + { + "from": 775, + "to": 776, + "id": "0x5A" + } + ], + "play.toClient.world_border_warning_delay": [ + { + "from": 755, + "to": 755, + "id": "0x45" + }, + { + "from": 756, + "to": 756, + "id": "0x45" + }, + { + "from": 757, + "to": 758, + "id": "0x45" + }, + { + "from": 759, + "to": 759, + "id": "0x44" + }, + { + "from": 760, + "to": 760, + "id": "0x47" + }, + { + "from": 761, + "to": 761, + "id": "0x46" + }, + { + "from": 762, + "to": 763, + "id": "0x4A" + }, + { + "from": 764, + "to": 764, + "id": "0x4C" + }, + { + "from": 765, + "to": 765, + "id": "0x4E" + }, + { + "from": 766, + "to": 766, + "id": "0x50" + }, + { + "from": 767, + "to": 767, + "id": "0x50" + }, + { + "from": 768, + "to": 769, + "id": "0x55" + }, + { + "from": 770, + "to": 770, + "id": "0x54" + }, + { + "from": 771, + "to": 772, + "id": "0x54" + }, + { + "from": 773, + "to": 774, + "id": "0x59" + }, + { + "from": 775, + "to": 776, + "id": "0x5B" + } + ], + "play.toClient.world_border_warning_reach": [ + { + "from": 755, + "to": 755, + "id": "0x46" + }, + { + "from": 756, + "to": 756, + "id": "0x46" + }, + { + "from": 757, + "to": 758, + "id": "0x46" + }, + { + "from": 759, + "to": 759, + "id": "0x45" + }, + { + "from": 760, + "to": 760, + "id": "0x48" + }, + { + "from": 761, + "to": 761, + "id": "0x47" + }, + { + "from": 762, + "to": 763, + "id": "0x4B" + }, + { + "from": 764, + "to": 764, + "id": "0x4D" + }, + { + "from": 765, + "to": 765, + "id": "0x4F" + }, + { + "from": 766, + "to": 766, + "id": "0x51" + }, + { + "from": 767, + "to": 767, + "id": "0x51" + }, + { + "from": 768, + "to": 769, + "id": "0x56" + }, + { + "from": 770, + "to": 770, + "id": "0x55" + }, + { + "from": 771, + "to": 772, + "id": "0x55" + }, + { + "from": 773, + "to": 774, + "id": "0x5A" + }, + { + "from": 775, + "to": 776, + "id": "0x5C" + } + ], + "play.toClient.world_event": [ + { + "from": 735, + "to": 736, + "id": "0x22" + }, + { + "from": 751, + "to": 754, + "id": "0x21" + }, + { + "from": 755, + "to": 755, + "id": "0x23" + }, + { + "from": 756, + "to": 756, + "id": "0x23" + }, + { + "from": 757, + "to": 758, + "id": "0x23" + }, + { + "from": 759, + "to": 759, + "id": "0x20" + }, + { + "from": 760, + "to": 760, + "id": "0x22" + }, + { + "from": 761, + "to": 761, + "id": "0x21" + }, + { + "from": 762, + "to": 763, + "id": "0x25" + }, + { + "from": 764, + "to": 764, + "id": "0x26" + }, + { + "from": 765, + "to": 765, + "id": "0x26" + }, + { + "from": 766, + "to": 766, + "id": "0x28" + }, + { + "from": 767, + "to": 767, + "id": "0x28" + }, + { + "from": 768, + "to": 769, + "id": "0x29" + }, + { + "from": 770, + "to": 770, + "id": "0x28" + }, + { + "from": 771, + "to": 772, + "id": "0x28" + }, + { + "from": 773, + "to": 774, + "id": "0x2D" + }, + { + "from": 775, + "to": 776, + "id": "0x2E" + } + ], + "play.toClient.world_particles": [ + { + "from": 735, + "to": 736, + "id": "0x23" + }, + { + "from": 751, + "to": 754, + "id": "0x22" + }, + { + "from": 755, + "to": 755, + "id": "0x24" + }, + { + "from": 756, + "to": 756, + "id": "0x24" + }, + { + "from": 757, + "to": 758, + "id": "0x24" + }, + { + "from": 759, + "to": 759, + "id": "0x21" + }, + { + "from": 760, + "to": 760, + "id": "0x23" + }, + { + "from": 761, + "to": 761, + "id": "0x22" + }, + { + "from": 762, + "to": 763, + "id": "0x26" + }, + { + "from": 764, + "to": 764, + "id": "0x27" + }, + { + "from": 765, + "to": 765, + "id": "0x27" + }, + { + "from": 766, + "to": 766, + "id": "0x29" + }, + { + "from": 767, + "to": 767, + "id": "0x29" + }, + { + "from": 768, + "to": 769, + "id": "0x2A" + }, + { + "from": 770, + "to": 770, + "id": "0x29" + }, + { + "from": 771, + "to": 772, + "id": "0x29" + }, + { + "from": 773, + "to": 774, + "id": "0x2E" + }, + { + "from": 775, + "to": 776, + "id": "0x2F" + } + ], + "play.toServer.abilities": [ + { + "from": 735, + "to": 736, + "id": "0x1A" + }, + { + "from": 751, + "to": 754, + "id": "0x1A" + }, + { + "from": 755, + "to": 758, + "id": "0x19" + }, + { + "from": 759, + "to": 759, + "id": "0x1B" + }, + { + "from": 760, + "to": 760, + "id": "0x1C" + }, + { + "from": 761, + "to": 761, + "id": "0x1B" + }, + { + "from": 762, + "to": 763, + "id": "0x1C" + }, + { + "from": 764, + "to": 764, + "id": "0x1F" + }, + { + "from": 765, + "to": 765, + "id": "0x20" + }, + { + "from": 766, + "to": 767, + "id": "0x23" + }, + { + "from": 768, + "to": 768, + "id": "0x25" + }, + { + "from": 769, + "to": 769, + "id": "0x26" + }, + { + "from": 770, + "to": 770, + "id": "0x26" + }, + { + "from": 771, + "to": 772, + "id": "0x27" + }, + { + "from": 773, + "to": 774, + "id": "0x27" + }, + { + "from": 775, + "to": 776, + "id": "0x28" + } + ], + "play.toServer.advancement_tab": [ + { + "from": 735, + "to": 736, + "id": "0x21" + }, + { + "from": 751, + "to": 754, + "id": "0x22" + }, + { + "from": 755, + "to": 758, + "id": "0x22" + }, + { + "from": 759, + "to": 759, + "id": "0x24" + }, + { + "from": 760, + "to": 760, + "id": "0x25" + }, + { + "from": 761, + "to": 761, + "id": "0x25" + }, + { + "from": 762, + "to": 763, + "id": "0x25" + }, + { + "from": 764, + "to": 764, + "id": "0x28" + }, + { + "from": 765, + "to": 765, + "id": "0x29" + }, + { + "from": 766, + "to": 767, + "id": "0x2C" + }, + { + "from": 768, + "to": 768, + "id": "0x2E" + }, + { + "from": 769, + "to": 769, + "id": "0x30" + }, + { + "from": 770, + "to": 770, + "id": "0x30" + }, + { + "from": 771, + "to": 772, + "id": "0x31" + }, + { + "from": 773, + "to": 774, + "id": "0x31" + }, + { + "from": 775, + "to": 776, + "id": "0x32" + } + ], + "play.toServer.arm_animation": [ + { + "from": 735, + "to": 736, + "id": "0x2B" + }, + { + "from": 751, + "to": 754, + "id": "0x2C" + }, + { + "from": 755, + "to": 758, + "id": "0x2C" + }, + { + "from": 759, + "to": 759, + "id": "0x2E" + }, + { + "from": 760, + "to": 760, + "id": "0x2F" + }, + { + "from": 761, + "to": 761, + "id": "0x2F" + }, + { + "from": 762, + "to": 763, + "id": "0x2F" + }, + { + "from": 764, + "to": 764, + "id": "0x32" + }, + { + "from": 765, + "to": 765, + "id": "0x33" + }, + { + "from": 766, + "to": 767, + "id": "0x36" + }, + { + "from": 768, + "to": 768, + "id": "0x38" + }, + { + "from": 769, + "to": 769, + "id": "0x3A" + }, + { + "from": 770, + "to": 770, + "id": "0x3B" + }, + { + "from": 771, + "to": 772, + "id": "0x3C" + }, + { + "from": 773, + "to": 774, + "id": "0x3C" + }, + { + "from": 775, + "to": 776, + "id": "0x3F" + } + ], + "play.toServer.attack": [ + { + "from": 775, + "to": 776, + "id": "0x01" + } + ], + "play.toServer.block_dig": [ + { + "from": 735, + "to": 736, + "id": "0x1B" + }, + { + "from": 751, + "to": 754, + "id": "0x1B" + }, + { + "from": 755, + "to": 758, + "id": "0x1A" + }, + { + "from": 759, + "to": 759, + "id": "0x1C" + }, + { + "from": 760, + "to": 760, + "id": "0x1D" + }, + { + "from": 761, + "to": 761, + "id": "0x1C" + }, + { + "from": 762, + "to": 763, + "id": "0x1D" + }, + { + "from": 764, + "to": 764, + "id": "0x20" + }, + { + "from": 765, + "to": 765, + "id": "0x21" + }, + { + "from": 766, + "to": 767, + "id": "0x24" + }, + { + "from": 768, + "to": 768, + "id": "0x26" + }, + { + "from": 769, + "to": 769, + "id": "0x27" + }, + { + "from": 770, + "to": 770, + "id": "0x27" + }, + { + "from": 771, + "to": 772, + "id": "0x28" + }, + { + "from": 773, + "to": 774, + "id": "0x28" + }, + { + "from": 775, + "to": 776, + "id": "0x29" + } + ], + "play.toServer.block_place": [ + { + "from": 735, + "to": 736, + "id": "0x2D" + }, + { + "from": 751, + "to": 754, + "id": "0x2E" + }, + { + "from": 755, + "to": 758, + "id": "0x2E" + }, + { + "from": 759, + "to": 759, + "id": "0x30" + }, + { + "from": 760, + "to": 760, + "id": "0x31" + }, + { + "from": 761, + "to": 761, + "id": "0x31" + }, + { + "from": 762, + "to": 763, + "id": "0x31" + }, + { + "from": 764, + "to": 764, + "id": "0x34" + }, + { + "from": 765, + "to": 765, + "id": "0x35" + }, + { + "from": 766, + "to": 767, + "id": "0x38" + }, + { + "from": 768, + "to": 768, + "id": "0x3A" + }, + { + "from": 769, + "to": 769, + "id": "0x3C" + }, + { + "from": 770, + "to": 770, + "id": "0x3E" + }, + { + "from": 771, + "to": 772, + "id": "0x3F" + }, + { + "from": 773, + "to": 774, + "id": "0x3F" + }, + { + "from": 775, + "to": 776, + "id": "0x42" + } + ], + "play.toServer.change_gamemode": [ + { + "from": 771, + "to": 772, + "id": "0x04" + }, + { + "from": 773, + "to": 774, + "id": "0x04" + }, + { + "from": 775, + "to": 776, + "id": "0x05" + } + ], + "play.toServer.chat": [ + { + "from": 735, + "to": 736, + "id": "0x03" + }, + { + "from": 751, + "to": 754, + "id": "0x03" + }, + { + "from": 755, + "to": 758, + "id": "0x03" + } + ], + "play.toServer.chat_command": [ + { + "from": 759, + "to": 759, + "id": "0x03" + }, + { + "from": 760, + "to": 760, + "id": "0x04" + }, + { + "from": 761, + "to": 761, + "id": "0x04" + }, + { + "from": 762, + "to": 763, + "id": "0x04" + }, + { + "from": 764, + "to": 764, + "id": "0x04" + }, + { + "from": 765, + "to": 765, + "id": "0x04" + }, + { + "from": 766, + "to": 767, + "id": "0x04" + }, + { + "from": 768, + "to": 768, + "id": "0x05" + }, + { + "from": 769, + "to": 769, + "id": "0x05" + }, + { + "from": 770, + "to": 770, + "id": "0x05" + }, + { + "from": 771, + "to": 772, + "id": "0x06" + }, + { + "from": 773, + "to": 774, + "id": "0x06" + }, + { + "from": 775, + "to": 776, + "id": "0x07" + } + ], + "play.toServer.chat_command_signed": [ + { + "from": 766, + "to": 767, + "id": "0x05" + }, + { + "from": 768, + "to": 768, + "id": "0x06" + }, + { + "from": 769, + "to": 769, + "id": "0x06" + }, + { + "from": 770, + "to": 770, + "id": "0x06" + }, + { + "from": 771, + "to": 772, + "id": "0x07" + }, + { + "from": 773, + "to": 774, + "id": "0x07" + }, + { + "from": 775, + "to": 776, + "id": "0x08" + } + ], + "play.toServer.chat_message": [ + { + "from": 759, + "to": 759, + "id": "0x04" + }, + { + "from": 760, + "to": 760, + "id": "0x05" + }, + { + "from": 761, + "to": 761, + "id": "0x05" + }, + { + "from": 762, + "to": 763, + "id": "0x05" + }, + { + "from": 764, + "to": 764, + "id": "0x05" + }, + { + "from": 765, + "to": 765, + "id": "0x05" + }, + { + "from": 766, + "to": 767, + "id": "0x06" + }, + { + "from": 768, + "to": 768, + "id": "0x07" + }, + { + "from": 769, + "to": 769, + "id": "0x07" + }, + { + "from": 770, + "to": 770, + "id": "0x07" + }, + { + "from": 771, + "to": 772, + "id": "0x08" + }, + { + "from": 773, + "to": 774, + "id": "0x08" + }, + { + "from": 775, + "to": 776, + "id": "0x09" + } + ], + "play.toServer.chat_preview": [ + { + "from": 759, + "to": 759, + "id": "0x05" + }, + { + "from": 760, + "to": 760, + "id": "0x06" + } + ], + "play.toServer.chat_session_update": [ + { + "from": 761, + "to": 761, + "id": "0x20" + }, + { + "from": 762, + "to": 763, + "id": "0x06" + }, + { + "from": 764, + "to": 764, + "id": "0x06" + }, + { + "from": 765, + "to": 765, + "id": "0x06" + }, + { + "from": 766, + "to": 767, + "id": "0x07" + }, + { + "from": 768, + "to": 768, + "id": "0x08" + }, + { + "from": 769, + "to": 769, + "id": "0x08" + }, + { + "from": 770, + "to": 770, + "id": "0x08" + }, + { + "from": 771, + "to": 772, + "id": "0x09" + }, + { + "from": 773, + "to": 774, + "id": "0x09" + }, + { + "from": 775, + "to": 776, + "id": "0x0A" + } + ], + "play.toServer.chunk_batch_received": [ + { + "from": 764, + "to": 764, + "id": "0x07" + }, + { + "from": 765, + "to": 765, + "id": "0x07" + }, + { + "from": 766, + "to": 767, + "id": "0x08" + }, + { + "from": 768, + "to": 768, + "id": "0x09" + }, + { + "from": 769, + "to": 769, + "id": "0x09" + }, + { + "from": 770, + "to": 770, + "id": "0x09" + }, + { + "from": 771, + "to": 772, + "id": "0x0A" + }, + { + "from": 773, + "to": 774, + "id": "0x0A" + }, + { + "from": 775, + "to": 776, + "id": "0x0B" + } + ], + "play.toServer.client_command": [ + { + "from": 735, + "to": 736, + "id": "0x04" + }, + { + "from": 751, + "to": 754, + "id": "0x04" + }, + { + "from": 755, + "to": 758, + "id": "0x04" + }, + { + "from": 759, + "to": 759, + "id": "0x06" + }, + { + "from": 760, + "to": 760, + "id": "0x07" + }, + { + "from": 761, + "to": 761, + "id": "0x06" + }, + { + "from": 762, + "to": 763, + "id": "0x07" + }, + { + "from": 764, + "to": 764, + "id": "0x08" + }, + { + "from": 765, + "to": 765, + "id": "0x08" + }, + { + "from": 766, + "to": 767, + "id": "0x09" + }, + { + "from": 768, + "to": 768, + "id": "0x0A" + }, + { + "from": 769, + "to": 769, + "id": "0x0A" + }, + { + "from": 770, + "to": 770, + "id": "0x0A" + }, + { + "from": 771, + "to": 772, + "id": "0x0B" + }, + { + "from": 773, + "to": 774, + "id": "0x0B" + }, + { + "from": 775, + "to": 776, + "id": "0x0C" + } + ], + "play.toServer.close_window": [ + { + "from": 735, + "to": 736, + "id": "0x0A" + }, + { + "from": 751, + "to": 754, + "id": "0x0A" + }, + { + "from": 755, + "to": 758, + "id": "0x09" + }, + { + "from": 759, + "to": 759, + "id": "0x0B" + }, + { + "from": 760, + "to": 760, + "id": "0x0C" + }, + { + "from": 761, + "to": 761, + "id": "0x0B" + }, + { + "from": 762, + "to": 763, + "id": "0x0C" + }, + { + "from": 764, + "to": 764, + "id": "0x0E" + }, + { + "from": 765, + "to": 765, + "id": "0x0E" + }, + { + "from": 766, + "to": 767, + "id": "0x0F" + }, + { + "from": 768, + "to": 768, + "id": "0x11" + }, + { + "from": 769, + "to": 769, + "id": "0x11" + }, + { + "from": 770, + "to": 770, + "id": "0x11" + }, + { + "from": 771, + "to": 772, + "id": "0x12" + }, + { + "from": 773, + "to": 774, + "id": "0x12" + }, + { + "from": 775, + "to": 776, + "id": "0x13" + } + ], + "play.toServer.configuration_acknowledged": [ + { + "from": 764, + "to": 764, + "id": "0x0B" + }, + { + "from": 765, + "to": 765, + "id": "0x0B" + }, + { + "from": 766, + "to": 767, + "id": "0x0C" + }, + { + "from": 768, + "to": 768, + "id": "0x0E" + }, + { + "from": 769, + "to": 769, + "id": "0x0E" + }, + { + "from": 770, + "to": 770, + "id": "0x0E" + }, + { + "from": 771, + "to": 772, + "id": "0x0F" + }, + { + "from": 773, + "to": 774, + "id": "0x0F" + }, + { + "from": 775, + "to": 776, + "id": "0x10" + } + ], + "play.toServer.cookie_response": [ + { + "from": 766, + "to": 767, + "id": "0x11" + }, + { + "from": 768, + "to": 768, + "id": "0x13" + }, + { + "from": 769, + "to": 769, + "id": "0x13" + }, + { + "from": 770, + "to": 770, + "id": "0x13" + }, + { + "from": 771, + "to": 772, + "id": "0x14" + }, + { + "from": 773, + "to": 774, + "id": "0x14" + }, + { + "from": 775, + "to": 776, + "id": "0x15" + } + ], + "play.toServer.craft_recipe_request": [ + { + "from": 735, + "to": 736, + "id": "0x19" + }, + { + "from": 751, + "to": 754, + "id": "0x19" + }, + { + "from": 755, + "to": 758, + "id": "0x18" + }, + { + "from": 759, + "to": 759, + "id": "0x1A" + }, + { + "from": 760, + "to": 760, + "id": "0x1B" + }, + { + "from": 761, + "to": 761, + "id": "0x1A" + }, + { + "from": 762, + "to": 763, + "id": "0x1B" + }, + { + "from": 764, + "to": 764, + "id": "0x1E" + }, + { + "from": 765, + "to": 765, + "id": "0x1F" + }, + { + "from": 766, + "to": 767, + "id": "0x22" + }, + { + "from": 768, + "to": 768, + "id": "0x24" + }, + { + "from": 769, + "to": 769, + "id": "0x25" + }, + { + "from": 770, + "to": 770, + "id": "0x25" + }, + { + "from": 771, + "to": 772, + "id": "0x26" + }, + { + "from": 773, + "to": 774, + "id": "0x26" + }, + { + "from": 775, + "to": 776, + "id": "0x27" + } + ], + "play.toServer.crafting_book_data": [ + { + "from": 735, + "to": 736, + "id": "0x1E" + } + ], + "play.toServer.custom_click_action": [ + { + "from": 771, + "to": 772, + "id": "0x41" + }, + { + "from": 773, + "to": 774, + "id": "0x41" + }, + { + "from": 775, + "to": 776, + "id": "0x44" + } + ], + "play.toServer.custom_payload": [ + { + "from": 735, + "to": 736, + "id": "0x0B" + }, + { + "from": 751, + "to": 754, + "id": "0x0B" + }, + { + "from": 755, + "to": 758, + "id": "0x0A" + }, + { + "from": 759, + "to": 759, + "id": "0x0C" + }, + { + "from": 760, + "to": 760, + "id": "0x0D" + }, + { + "from": 761, + "to": 761, + "id": "0x0C" + }, + { + "from": 762, + "to": 763, + "id": "0x0D" + }, + { + "from": 764, + "to": 764, + "id": "0x0F" + }, + { + "from": 765, + "to": 765, + "id": "0x10" + }, + { + "from": 766, + "to": 767, + "id": "0x12" + }, + { + "from": 768, + "to": 768, + "id": "0x14" + }, + { + "from": 769, + "to": 769, + "id": "0x14" + }, + { + "from": 770, + "to": 770, + "id": "0x14" + }, + { + "from": 771, + "to": 772, + "id": "0x15" + }, + { + "from": 773, + "to": 774, + "id": "0x15" + }, + { + "from": 775, + "to": 776, + "id": "0x16" + } + ], + "play.toServer.debug_sample_subscription": [ + { + "from": 766, + "to": 767, + "id": "0x13" + }, + { + "from": 768, + "to": 768, + "id": "0x15" + }, + { + "from": 769, + "to": 769, + "id": "0x15" + }, + { + "from": 770, + "to": 770, + "id": "0x15" + }, + { + "from": 771, + "to": 772, + "id": "0x16" + } + ], + "play.toServer.debug_subscription_request": [ + { + "from": 773, + "to": 774, + "id": "0x16" + }, + { + "from": 775, + "to": 776, + "id": "0x17" + } + ], + "play.toServer.displayed_recipe": [ + { + "from": 751, + "to": 754, + "id": "0x1F" + }, + { + "from": 755, + "to": 758, + "id": "0x1F" + }, + { + "from": 759, + "to": 759, + "id": "0x21" + }, + { + "from": 760, + "to": 760, + "id": "0x22" + }, + { + "from": 761, + "to": 761, + "id": "0x22" + }, + { + "from": 762, + "to": 763, + "id": "0x22" + }, + { + "from": 764, + "to": 764, + "id": "0x25" + }, + { + "from": 765, + "to": 765, + "id": "0x26" + }, + { + "from": 766, + "to": 767, + "id": "0x29" + }, + { + "from": 768, + "to": 768, + "id": "0x2B" + }, + { + "from": 769, + "to": 769, + "id": "0x2D" + }, + { + "from": 770, + "to": 770, + "id": "0x2D" + }, + { + "from": 771, + "to": 772, + "id": "0x2E" + }, + { + "from": 773, + "to": 774, + "id": "0x2E" + }, + { + "from": 775, + "to": 776, + "id": "0x2F" + } + ], + "play.toServer.edit_book": [ + { + "from": 735, + "to": 736, + "id": "0x0C" + }, + { + "from": 751, + "to": 754, + "id": "0x0C" + }, + { + "from": 755, + "to": 758, + "id": "0x0B" + }, + { + "from": 759, + "to": 759, + "id": "0x0D" + }, + { + "from": 760, + "to": 760, + "id": "0x0E" + }, + { + "from": 761, + "to": 761, + "id": "0x0D" + }, + { + "from": 762, + "to": 763, + "id": "0x0E" + }, + { + "from": 764, + "to": 764, + "id": "0x10" + }, + { + "from": 765, + "to": 765, + "id": "0x11" + }, + { + "from": 766, + "to": 767, + "id": "0x14" + }, + { + "from": 768, + "to": 768, + "id": "0x16" + }, + { + "from": 769, + "to": 769, + "id": "0x16" + }, + { + "from": 770, + "to": 770, + "id": "0x16" + }, + { + "from": 771, + "to": 772, + "id": "0x17" + }, + { + "from": 773, + "to": 774, + "id": "0x17" + }, + { + "from": 775, + "to": 776, + "id": "0x18" + } + ], + "play.toServer.enchant_item": [ + { + "from": 735, + "to": 736, + "id": "0x08" + }, + { + "from": 751, + "to": 754, + "id": "0x08" + }, + { + "from": 755, + "to": 758, + "id": "0x07" + }, + { + "from": 759, + "to": 759, + "id": "0x09" + }, + { + "from": 760, + "to": 760, + "id": "0x0A" + }, + { + "from": 761, + "to": 761, + "id": "0x09" + }, + { + "from": 762, + "to": 763, + "id": "0x0A" + }, + { + "from": 764, + "to": 764, + "id": "0x0C" + }, + { + "from": 765, + "to": 765, + "id": "0x0C" + }, + { + "from": 766, + "to": 767, + "id": "0x0D" + }, + { + "from": 768, + "to": 768, + "id": "0x0F" + }, + { + "from": 769, + "to": 769, + "id": "0x0F" + }, + { + "from": 770, + "to": 770, + "id": "0x0F" + }, + { + "from": 771, + "to": 772, + "id": "0x10" + }, + { + "from": 773, + "to": 774, + "id": "0x10" + }, + { + "from": 775, + "to": 776, + "id": "0x11" + } + ], + "play.toServer.entity_action": [ + { + "from": 735, + "to": 736, + "id": "0x1C" + }, + { + "from": 751, + "to": 754, + "id": "0x1C" + }, + { + "from": 755, + "to": 758, + "id": "0x1B" + }, + { + "from": 759, + "to": 759, + "id": "0x1D" + }, + { + "from": 760, + "to": 760, + "id": "0x1E" + }, + { + "from": 761, + "to": 761, + "id": "0x1D" + }, + { + "from": 762, + "to": 763, + "id": "0x1E" + }, + { + "from": 764, + "to": 764, + "id": "0x21" + }, + { + "from": 765, + "to": 765, + "id": "0x22" + }, + { + "from": 766, + "to": 767, + "id": "0x25" + }, + { + "from": 768, + "to": 768, + "id": "0x27" + }, + { + "from": 769, + "to": 769, + "id": "0x28" + }, + { + "from": 770, + "to": 770, + "id": "0x28" + }, + { + "from": 771, + "to": 772, + "id": "0x29" + }, + { + "from": 773, + "to": 774, + "id": "0x29" + }, + { + "from": 775, + "to": 776, + "id": "0x2A" + } + ], + "play.toServer.flying": [ + { + "from": 735, + "to": 736, + "id": "0x15" + }, + { + "from": 751, + "to": 754, + "id": "0x15" + }, + { + "from": 755, + "to": 758, + "id": "0x14" + }, + { + "from": 759, + "to": 759, + "id": "0x16" + }, + { + "from": 760, + "to": 760, + "id": "0x17" + }, + { + "from": 761, + "to": 761, + "id": "0x16" + }, + { + "from": 762, + "to": 763, + "id": "0x17" + }, + { + "from": 764, + "to": 764, + "id": "0x19" + }, + { + "from": 765, + "to": 765, + "id": "0x1A" + }, + { + "from": 766, + "to": 767, + "id": "0x1D" + }, + { + "from": 768, + "to": 768, + "id": "0x1F" + }, + { + "from": 769, + "to": 769, + "id": "0x1F" + }, + { + "from": 770, + "to": 770, + "id": "0x1F" + }, + { + "from": 771, + "to": 772, + "id": "0x20" + }, + { + "from": 773, + "to": 774, + "id": "0x20" + }, + { + "from": 775, + "to": 776, + "id": "0x21" + } + ], + "play.toServer.generate_structure": [ + { + "from": 735, + "to": 736, + "id": "0x0F" + }, + { + "from": 751, + "to": 754, + "id": "0x0F" + }, + { + "from": 755, + "to": 758, + "id": "0x0E" + }, + { + "from": 759, + "to": 759, + "id": "0x10" + }, + { + "from": 760, + "to": 760, + "id": "0x11" + }, + { + "from": 761, + "to": 761, + "id": "0x10" + }, + { + "from": 762, + "to": 763, + "id": "0x11" + }, + { + "from": 764, + "to": 764, + "id": "0x13" + }, + { + "from": 765, + "to": 765, + "id": "0x14" + }, + { + "from": 766, + "to": 767, + "id": "0x17" + }, + { + "from": 768, + "to": 768, + "id": "0x19" + }, + { + "from": 769, + "to": 769, + "id": "0x19" + }, + { + "from": 770, + "to": 770, + "id": "0x19" + }, + { + "from": 771, + "to": 772, + "id": "0x1A" + }, + { + "from": 773, + "to": 774, + "id": "0x1A" + }, + { + "from": 775, + "to": 776, + "id": "0x1B" + } + ], + "play.toServer.held_item_slot": [ + { + "from": 735, + "to": 736, + "id": "0x24" + }, + { + "from": 751, + "to": 754, + "id": "0x25" + }, + { + "from": 755, + "to": 758, + "id": "0x25" + }, + { + "from": 759, + "to": 759, + "id": "0x27" + }, + { + "from": 760, + "to": 760, + "id": "0x28" + }, + { + "from": 761, + "to": 761, + "id": "0x28" + }, + { + "from": 762, + "to": 763, + "id": "0x28" + }, + { + "from": 764, + "to": 764, + "id": "0x2B" + }, + { + "from": 765, + "to": 765, + "id": "0x2C" + }, + { + "from": 766, + "to": 767, + "id": "0x2F" + }, + { + "from": 768, + "to": 768, + "id": "0x31" + }, + { + "from": 769, + "to": 769, + "id": "0x33" + }, + { + "from": 770, + "to": 770, + "id": "0x33" + }, + { + "from": 771, + "to": 772, + "id": "0x34" + }, + { + "from": 773, + "to": 774, + "id": "0x34" + }, + { + "from": 775, + "to": 776, + "id": "0x35" + } + ], + "play.toServer.keep_alive": [ + { + "from": 735, + "to": 736, + "id": "0x10" + }, + { + "from": 751, + "to": 754, + "id": "0x10" + }, + { + "from": 755, + "to": 758, + "id": "0x0F" + }, + { + "from": 759, + "to": 759, + "id": "0x11" + }, + { + "from": 760, + "to": 760, + "id": "0x12" + }, + { + "from": 761, + "to": 761, + "id": "0x11" + }, + { + "from": 762, + "to": 763, + "id": "0x12" + }, + { + "from": 764, + "to": 764, + "id": "0x14" + }, + { + "from": 765, + "to": 765, + "id": "0x15" + }, + { + "from": 766, + "to": 767, + "id": "0x18" + }, + { + "from": 768, + "to": 768, + "id": "0x1A" + }, + { + "from": 769, + "to": 769, + "id": "0x1A" + }, + { + "from": 770, + "to": 770, + "id": "0x1A" + }, + { + "from": 771, + "to": 772, + "id": "0x1B" + }, + { + "from": 773, + "to": 774, + "id": "0x1B" + }, + { + "from": 775, + "to": 776, + "id": "0x1C" + } + ], + "play.toServer.lock_difficulty": [ + { + "from": 735, + "to": 736, + "id": "0x11" + }, + { + "from": 751, + "to": 754, + "id": "0x11" + }, + { + "from": 755, + "to": 758, + "id": "0x10" + }, + { + "from": 759, + "to": 759, + "id": "0x12" + }, + { + "from": 760, + "to": 760, + "id": "0x13" + }, + { + "from": 761, + "to": 761, + "id": "0x12" + }, + { + "from": 762, + "to": 763, + "id": "0x13" + }, + { + "from": 764, + "to": 764, + "id": "0x15" + }, + { + "from": 765, + "to": 765, + "id": "0x16" + }, + { + "from": 766, + "to": 767, + "id": "0x19" + }, + { + "from": 768, + "to": 768, + "id": "0x1B" + }, + { + "from": 769, + "to": 769, + "id": "0x1B" + }, + { + "from": 770, + "to": 770, + "id": "0x1B" + }, + { + "from": 771, + "to": 772, + "id": "0x1C" + }, + { + "from": 773, + "to": 774, + "id": "0x1C" + }, + { + "from": 775, + "to": 776, + "id": "0x1D" + } + ], + "play.toServer.look": [ + { + "from": 735, + "to": 736, + "id": "0x14" + }, + { + "from": 751, + "to": 754, + "id": "0x14" + }, + { + "from": 755, + "to": 758, + "id": "0x13" + }, + { + "from": 759, + "to": 759, + "id": "0x15" + }, + { + "from": 760, + "to": 760, + "id": "0x16" + }, + { + "from": 761, + "to": 761, + "id": "0x15" + }, + { + "from": 762, + "to": 763, + "id": "0x16" + }, + { + "from": 764, + "to": 764, + "id": "0x18" + }, + { + "from": 765, + "to": 765, + "id": "0x19" + }, + { + "from": 766, + "to": 767, + "id": "0x1C" + }, + { + "from": 768, + "to": 768, + "id": "0x1E" + }, + { + "from": 769, + "to": 769, + "id": "0x1E" + }, + { + "from": 770, + "to": 770, + "id": "0x1E" + }, + { + "from": 771, + "to": 772, + "id": "0x1F" + }, + { + "from": 773, + "to": 774, + "id": "0x1F" + }, + { + "from": 775, + "to": 776, + "id": "0x20" + } + ], + "play.toServer.message_acknowledgement": [ + { + "from": 760, + "to": 760, + "id": "0x03" + }, + { + "from": 761, + "to": 761, + "id": "0x03" + }, + { + "from": 762, + "to": 763, + "id": "0x03" + }, + { + "from": 764, + "to": 764, + "id": "0x03" + }, + { + "from": 765, + "to": 765, + "id": "0x03" + }, + { + "from": 766, + "to": 767, + "id": "0x03" + }, + { + "from": 768, + "to": 768, + "id": "0x04" + }, + { + "from": 769, + "to": 769, + "id": "0x04" + }, + { + "from": 770, + "to": 770, + "id": "0x04" + }, + { + "from": 771, + "to": 772, + "id": "0x05" + }, + { + "from": 773, + "to": 774, + "id": "0x05" + }, + { + "from": 775, + "to": 776, + "id": "0x06" + } + ], + "play.toServer.name_item": [ + { + "from": 735, + "to": 736, + "id": "0x1F" + }, + { + "from": 751, + "to": 754, + "id": "0x20" + }, + { + "from": 755, + "to": 758, + "id": "0x20" + }, + { + "from": 759, + "to": 759, + "id": "0x22" + }, + { + "from": 760, + "to": 760, + "id": "0x23" + }, + { + "from": 761, + "to": 761, + "id": "0x23" + }, + { + "from": 762, + "to": 763, + "id": "0x23" + }, + { + "from": 764, + "to": 764, + "id": "0x26" + }, + { + "from": 765, + "to": 765, + "id": "0x27" + }, + { + "from": 766, + "to": 767, + "id": "0x2A" + }, + { + "from": 768, + "to": 768, + "id": "0x2C" + }, + { + "from": 769, + "to": 769, + "id": "0x2E" + }, + { + "from": 770, + "to": 770, + "id": "0x2E" + }, + { + "from": 771, + "to": 772, + "id": "0x2F" + }, + { + "from": 773, + "to": 774, + "id": "0x2F" + }, + { + "from": 775, + "to": 776, + "id": "0x30" + } + ], + "play.toServer.pick_item": [ + { + "from": 735, + "to": 736, + "id": "0x18" + }, + { + "from": 751, + "to": 754, + "id": "0x18" + }, + { + "from": 755, + "to": 758, + "id": "0x17" + }, + { + "from": 759, + "to": 759, + "id": "0x19" + }, + { + "from": 760, + "to": 760, + "id": "0x1A" + }, + { + "from": 761, + "to": 761, + "id": "0x19" + }, + { + "from": 762, + "to": 763, + "id": "0x1A" + }, + { + "from": 764, + "to": 764, + "id": "0x1C" + }, + { + "from": 765, + "to": 765, + "id": "0x1D" + }, + { + "from": 766, + "to": 767, + "id": "0x20" + }, + { + "from": 768, + "to": 768, + "id": "0x22" + } + ], + "play.toServer.pick_item_from_block": [ + { + "from": 769, + "to": 769, + "id": "0x22" + }, + { + "from": 770, + "to": 770, + "id": "0x22" + }, + { + "from": 771, + "to": 772, + "id": "0x23" + }, + { + "from": 773, + "to": 774, + "id": "0x23" + }, + { + "from": 775, + "to": 776, + "id": "0x24" + } + ], + "play.toServer.pick_item_from_entity": [ + { + "from": 769, + "to": 769, + "id": "0x23" + }, + { + "from": 770, + "to": 770, + "id": "0x23" + }, + { + "from": 771, + "to": 772, + "id": "0x24" + }, + { + "from": 773, + "to": 774, + "id": "0x24" + }, + { + "from": 775, + "to": 776, + "id": "0x25" + } + ], + "play.toServer.ping_request": [ + { + "from": 764, + "to": 764, + "id": "0x1D" + }, + { + "from": 765, + "to": 765, + "id": "0x1E" + }, + { + "from": 766, + "to": 767, + "id": "0x21" + }, + { + "from": 768, + "to": 768, + "id": "0x23" + }, + { + "from": 769, + "to": 769, + "id": "0x24" + }, + { + "from": 770, + "to": 770, + "id": "0x24" + }, + { + "from": 771, + "to": 772, + "id": "0x25" + }, + { + "from": 773, + "to": 774, + "id": "0x25" + }, + { + "from": 775, + "to": 776, + "id": "0x26" + } + ], + "play.toServer.player_input": [ + { + "from": 768, + "to": 768, + "id": "0x28" + }, + { + "from": 769, + "to": 769, + "id": "0x29" + }, + { + "from": 770, + "to": 770, + "id": "0x29" + }, + { + "from": 771, + "to": 772, + "id": "0x2A" + }, + { + "from": 773, + "to": 774, + "id": "0x2A" + }, + { + "from": 775, + "to": 776, + "id": "0x2B" + } + ], + "play.toServer.player_loaded": [ + { + "from": 769, + "to": 769, + "id": "0x2A" + }, + { + "from": 770, + "to": 770, + "id": "0x2A" + }, + { + "from": 771, + "to": 772, + "id": "0x2B" + }, + { + "from": 773, + "to": 774, + "id": "0x2B" + }, + { + "from": 775, + "to": 776, + "id": "0x2C" + } + ], + "play.toServer.pong": [ + { + "from": 755, + "to": 758, + "id": "0x1D" + }, + { + "from": 759, + "to": 759, + "id": "0x1F" + }, + { + "from": 760, + "to": 760, + "id": "0x20" + }, + { + "from": 761, + "to": 761, + "id": "0x1F" + }, + { + "from": 762, + "to": 763, + "id": "0x20" + }, + { + "from": 764, + "to": 764, + "id": "0x23" + }, + { + "from": 765, + "to": 765, + "id": "0x24" + }, + { + "from": 766, + "to": 767, + "id": "0x27" + }, + { + "from": 768, + "to": 768, + "id": "0x29" + }, + { + "from": 769, + "to": 769, + "id": "0x2B" + }, + { + "from": 770, + "to": 770, + "id": "0x2B" + }, + { + "from": 771, + "to": 772, + "id": "0x2C" + }, + { + "from": 773, + "to": 774, + "id": "0x2C" + }, + { + "from": 775, + "to": 776, + "id": "0x2D" + } + ], + "play.toServer.position": [ + { + "from": 735, + "to": 736, + "id": "0x12" + }, + { + "from": 751, + "to": 754, + "id": "0x12" + }, + { + "from": 755, + "to": 758, + "id": "0x11" + }, + { + "from": 759, + "to": 759, + "id": "0x13" + }, + { + "from": 760, + "to": 760, + "id": "0x14" + }, + { + "from": 761, + "to": 761, + "id": "0x13" + }, + { + "from": 762, + "to": 763, + "id": "0x14" + }, + { + "from": 764, + "to": 764, + "id": "0x16" + }, + { + "from": 765, + "to": 765, + "id": "0x17" + }, + { + "from": 766, + "to": 767, + "id": "0x1A" + }, + { + "from": 768, + "to": 768, + "id": "0x1C" + }, + { + "from": 769, + "to": 769, + "id": "0x1C" + }, + { + "from": 770, + "to": 770, + "id": "0x1C" + }, + { + "from": 771, + "to": 772, + "id": "0x1D" + }, + { + "from": 773, + "to": 774, + "id": "0x1D" + }, + { + "from": 775, + "to": 776, + "id": "0x1E" + } + ], + "play.toServer.position_look": [ + { + "from": 735, + "to": 736, + "id": "0x13" + }, + { + "from": 751, + "to": 754, + "id": "0x13" + }, + { + "from": 755, + "to": 758, + "id": "0x12" + }, + { + "from": 759, + "to": 759, + "id": "0x14" + }, + { + "from": 760, + "to": 760, + "id": "0x15" + }, + { + "from": 761, + "to": 761, + "id": "0x14" + }, + { + "from": 762, + "to": 763, + "id": "0x15" + }, + { + "from": 764, + "to": 764, + "id": "0x17" + }, + { + "from": 765, + "to": 765, + "id": "0x18" + }, + { + "from": 766, + "to": 767, + "id": "0x1B" + }, + { + "from": 768, + "to": 768, + "id": "0x1D" + }, + { + "from": 769, + "to": 769, + "id": "0x1D" + }, + { + "from": 770, + "to": 770, + "id": "0x1D" + }, + { + "from": 771, + "to": 772, + "id": "0x1E" + }, + { + "from": 773, + "to": 774, + "id": "0x1E" + }, + { + "from": 775, + "to": 776, + "id": "0x1F" + } + ], + "play.toServer.query_block_nbt": [ + { + "from": 735, + "to": 736, + "id": "0x01" + }, + { + "from": 751, + "to": 754, + "id": "0x01" + }, + { + "from": 755, + "to": 758, + "id": "0x01" + }, + { + "from": 759, + "to": 759, + "id": "0x01" + }, + { + "from": 760, + "to": 760, + "id": "0x01" + }, + { + "from": 761, + "to": 761, + "id": "0x01" + }, + { + "from": 762, + "to": 763, + "id": "0x01" + }, + { + "from": 764, + "to": 764, + "id": "0x01" + }, + { + "from": 765, + "to": 765, + "id": "0x01" + }, + { + "from": 766, + "to": 767, + "id": "0x01" + }, + { + "from": 768, + "to": 768, + "id": "0x01" + }, + { + "from": 769, + "to": 769, + "id": "0x01" + }, + { + "from": 770, + "to": 770, + "id": "0x01" + }, + { + "from": 771, + "to": 772, + "id": "0x01" + }, + { + "from": 773, + "to": 774, + "id": "0x01" + }, + { + "from": 775, + "to": 776, + "id": "0x02" + } + ], + "play.toServer.query_entity_nbt": [ + { + "from": 735, + "to": 736, + "id": "0x0D" + }, + { + "from": 751, + "to": 754, + "id": "0x0D" + }, + { + "from": 755, + "to": 758, + "id": "0x0C" + }, + { + "from": 759, + "to": 759, + "id": "0x0E" + }, + { + "from": 760, + "to": 760, + "id": "0x0F" + }, + { + "from": 761, + "to": 761, + "id": "0x0E" + }, + { + "from": 762, + "to": 763, + "id": "0x0F" + }, + { + "from": 764, + "to": 764, + "id": "0x11" + }, + { + "from": 765, + "to": 765, + "id": "0x12" + }, + { + "from": 766, + "to": 767, + "id": "0x15" + }, + { + "from": 768, + "to": 768, + "id": "0x17" + }, + { + "from": 769, + "to": 769, + "id": "0x17" + }, + { + "from": 770, + "to": 770, + "id": "0x17" + }, + { + "from": 771, + "to": 772, + "id": "0x18" + }, + { + "from": 773, + "to": 774, + "id": "0x18" + }, + { + "from": 775, + "to": 776, + "id": "0x19" + } + ], + "play.toServer.recipe_book": [ + { + "from": 751, + "to": 754, + "id": "0x1E" + }, + { + "from": 755, + "to": 758, + "id": "0x1E" + }, + { + "from": 759, + "to": 759, + "id": "0x20" + }, + { + "from": 760, + "to": 760, + "id": "0x21" + }, + { + "from": 761, + "to": 761, + "id": "0x21" + }, + { + "from": 762, + "to": 763, + "id": "0x21" + }, + { + "from": 764, + "to": 764, + "id": "0x24" + }, + { + "from": 765, + "to": 765, + "id": "0x25" + }, + { + "from": 766, + "to": 767, + "id": "0x28" + }, + { + "from": 768, + "to": 768, + "id": "0x2A" + }, + { + "from": 769, + "to": 769, + "id": "0x2C" + }, + { + "from": 770, + "to": 770, + "id": "0x2C" + }, + { + "from": 771, + "to": 772, + "id": "0x2D" + }, + { + "from": 773, + "to": 774, + "id": "0x2D" + }, + { + "from": 775, + "to": 776, + "id": "0x2E" + } + ], + "play.toServer.resource_pack_receive": [ + { + "from": 735, + "to": 736, + "id": "0x20" + }, + { + "from": 751, + "to": 754, + "id": "0x21" + }, + { + "from": 755, + "to": 758, + "id": "0x21" + }, + { + "from": 759, + "to": 759, + "id": "0x23" + }, + { + "from": 760, + "to": 760, + "id": "0x24" + }, + { + "from": 761, + "to": 761, + "id": "0x24" + }, + { + "from": 762, + "to": 763, + "id": "0x24" + }, + { + "from": 764, + "to": 764, + "id": "0x27" + }, + { + "from": 765, + "to": 765, + "id": "0x28" + }, + { + "from": 766, + "to": 767, + "id": "0x2B" + }, + { + "from": 768, + "to": 768, + "id": "0x2D" + }, + { + "from": 769, + "to": 769, + "id": "0x2F" + }, + { + "from": 770, + "to": 770, + "id": "0x2F" + }, + { + "from": 771, + "to": 772, + "id": "0x30" + }, + { + "from": 773, + "to": 774, + "id": "0x30" + }, + { + "from": 775, + "to": 776, + "id": "0x31" + } + ], + "play.toServer.select_bundle_item": [ + { + "from": 768, + "to": 768, + "id": "0x02" + }, + { + "from": 769, + "to": 769, + "id": "0x02" + }, + { + "from": 770, + "to": 770, + "id": "0x02" + }, + { + "from": 771, + "to": 772, + "id": "0x02" + }, + { + "from": 773, + "to": 774, + "id": "0x02" + }, + { + "from": 775, + "to": 776, + "id": "0x03" + } + ], + "play.toServer.select_trade": [ + { + "from": 735, + "to": 736, + "id": "0x22" + }, + { + "from": 751, + "to": 754, + "id": "0x23" + }, + { + "from": 755, + "to": 758, + "id": "0x23" + }, + { + "from": 759, + "to": 759, + "id": "0x25" + }, + { + "from": 760, + "to": 760, + "id": "0x26" + }, + { + "from": 761, + "to": 761, + "id": "0x26" + }, + { + "from": 762, + "to": 763, + "id": "0x26" + }, + { + "from": 764, + "to": 764, + "id": "0x29" + }, + { + "from": 765, + "to": 765, + "id": "0x2A" + }, + { + "from": 766, + "to": 767, + "id": "0x2D" + }, + { + "from": 768, + "to": 768, + "id": "0x2F" + }, + { + "from": 769, + "to": 769, + "id": "0x31" + }, + { + "from": 770, + "to": 770, + "id": "0x31" + }, + { + "from": 771, + "to": 772, + "id": "0x32" + }, + { + "from": 773, + "to": 774, + "id": "0x32" + }, + { + "from": 775, + "to": 776, + "id": "0x33" + } + ], + "play.toServer.set_beacon_effect": [ + { + "from": 735, + "to": 736, + "id": "0x23" + }, + { + "from": 751, + "to": 754, + "id": "0x24" + }, + { + "from": 755, + "to": 758, + "id": "0x24" + }, + { + "from": 759, + "to": 759, + "id": "0x26" + }, + { + "from": 760, + "to": 760, + "id": "0x27" + }, + { + "from": 761, + "to": 761, + "id": "0x27" + }, + { + "from": 762, + "to": 763, + "id": "0x27" + }, + { + "from": 764, + "to": 764, + "id": "0x2A" + }, + { + "from": 765, + "to": 765, + "id": "0x2B" + }, + { + "from": 766, + "to": 767, + "id": "0x2E" + }, + { + "from": 768, + "to": 768, + "id": "0x30" + }, + { + "from": 769, + "to": 769, + "id": "0x32" + }, + { + "from": 770, + "to": 770, + "id": "0x32" + }, + { + "from": 771, + "to": 772, + "id": "0x33" + }, + { + "from": 773, + "to": 774, + "id": "0x33" + }, + { + "from": 775, + "to": 776, + "id": "0x34" + } + ], + "play.toServer.set_creative_slot": [ + { + "from": 735, + "to": 736, + "id": "0x27" + }, + { + "from": 751, + "to": 754, + "id": "0x28" + }, + { + "from": 755, + "to": 758, + "id": "0x28" + }, + { + "from": 759, + "to": 759, + "id": "0x2A" + }, + { + "from": 760, + "to": 760, + "id": "0x2B" + }, + { + "from": 761, + "to": 761, + "id": "0x2B" + }, + { + "from": 762, + "to": 763, + "id": "0x2B" + }, + { + "from": 764, + "to": 764, + "id": "0x2E" + }, + { + "from": 765, + "to": 765, + "id": "0x2F" + }, + { + "from": 766, + "to": 767, + "id": "0x32" + }, + { + "from": 768, + "to": 768, + "id": "0x34" + }, + { + "from": 769, + "to": 769, + "id": "0x36" + }, + { + "from": 770, + "to": 770, + "id": "0x36" + }, + { + "from": 771, + "to": 772, + "id": "0x37" + }, + { + "from": 773, + "to": 774, + "id": "0x37" + }, + { + "from": 775, + "to": 776, + "id": "0x38" + } + ], + "play.toServer.set_difficulty": [ + { + "from": 735, + "to": 736, + "id": "0x02" + }, + { + "from": 751, + "to": 754, + "id": "0x02" + }, + { + "from": 755, + "to": 758, + "id": "0x02" + }, + { + "from": 759, + "to": 759, + "id": "0x02" + }, + { + "from": 760, + "to": 760, + "id": "0x02" + }, + { + "from": 761, + "to": 761, + "id": "0x02" + }, + { + "from": 762, + "to": 763, + "id": "0x02" + }, + { + "from": 764, + "to": 764, + "id": "0x02" + }, + { + "from": 765, + "to": 765, + "id": "0x02" + }, + { + "from": 766, + "to": 767, + "id": "0x02" + }, + { + "from": 768, + "to": 768, + "id": "0x03" + }, + { + "from": 769, + "to": 769, + "id": "0x03" + }, + { + "from": 770, + "to": 770, + "id": "0x03" + }, + { + "from": 771, + "to": 772, + "id": "0x03" + }, + { + "from": 773, + "to": 774, + "id": "0x03" + }, + { + "from": 775, + "to": 776, + "id": "0x04" + } + ], + "play.toServer.set_game_rule": [ + { + "from": 775, + "to": 776, + "id": "0x39" + } + ], + "play.toServer.set_slot_state": [ + { + "from": 765, + "to": 765, + "id": "0x0F" + }, + { + "from": 766, + "to": 767, + "id": "0x10" + }, + { + "from": 768, + "to": 768, + "id": "0x12" + }, + { + "from": 769, + "to": 769, + "id": "0x12" + }, + { + "from": 770, + "to": 770, + "id": "0x12" + }, + { + "from": 771, + "to": 772, + "id": "0x13" + }, + { + "from": 773, + "to": 774, + "id": "0x13" + }, + { + "from": 775, + "to": 776, + "id": "0x14" + } + ], + "play.toServer.set_test_block": [ + { + "from": 770, + "to": 770, + "id": "0x39" + }, + { + "from": 771, + "to": 772, + "id": "0x3A" + }, + { + "from": 773, + "to": 774, + "id": "0x3A" + }, + { + "from": 775, + "to": 776, + "id": "0x3C" + } + ], + "play.toServer.settings": [ + { + "from": 735, + "to": 736, + "id": "0x05" + }, + { + "from": 751, + "to": 754, + "id": "0x05" + }, + { + "from": 755, + "to": 758, + "id": "0x05" + }, + { + "from": 759, + "to": 759, + "id": "0x07" + }, + { + "from": 760, + "to": 760, + "id": "0x08" + }, + { + "from": 761, + "to": 761, + "id": "0x07" + }, + { + "from": 762, + "to": 763, + "id": "0x08" + }, + { + "from": 764, + "to": 764, + "id": "0x09" + }, + { + "from": 765, + "to": 765, + "id": "0x09" + }, + { + "from": 766, + "to": 767, + "id": "0x0A" + }, + { + "from": 768, + "to": 768, + "id": "0x0C" + }, + { + "from": 769, + "to": 769, + "id": "0x0C" + }, + { + "from": 770, + "to": 770, + "id": "0x0C" + }, + { + "from": 771, + "to": 772, + "id": "0x0D" + }, + { + "from": 773, + "to": 774, + "id": "0x0D" + }, + { + "from": 775, + "to": 776, + "id": "0x0E" + } + ], + "play.toServer.spectate": [ + { + "from": 735, + "to": 736, + "id": "0x2C" + }, + { + "from": 751, + "to": 754, + "id": "0x2D" + }, + { + "from": 755, + "to": 758, + "id": "0x2D" + }, + { + "from": 759, + "to": 759, + "id": "0x2F" + }, + { + "from": 760, + "to": 760, + "id": "0x30" + }, + { + "from": 761, + "to": 761, + "id": "0x30" + }, + { + "from": 762, + "to": 763, + "id": "0x30" + }, + { + "from": 764, + "to": 764, + "id": "0x33" + }, + { + "from": 765, + "to": 765, + "id": "0x34" + }, + { + "from": 766, + "to": 767, + "id": "0x37" + }, + { + "from": 768, + "to": 768, + "id": "0x39" + }, + { + "from": 769, + "to": 769, + "id": "0x3B" + }, + { + "from": 770, + "to": 770, + "id": "0x3D" + }, + { + "from": 771, + "to": 772, + "id": "0x3D" + }, + { + "from": 773, + "to": 774, + "id": "0x3D" + }, + { + "from": 775, + "to": 776, + "id": "0x40" + } + ], + "play.toServer.spectate_entity": [ + { + "from": 775, + "to": 776, + "id": "0x3E" + } + ], + "play.toServer.steer_boat": [ + { + "from": 735, + "to": 736, + "id": "0x17" + }, + { + "from": 751, + "to": 754, + "id": "0x17" + }, + { + "from": 755, + "to": 758, + "id": "0x16" + }, + { + "from": 759, + "to": 759, + "id": "0x18" + }, + { + "from": 760, + "to": 760, + "id": "0x19" + }, + { + "from": 761, + "to": 761, + "id": "0x18" + }, + { + "from": 762, + "to": 763, + "id": "0x19" + }, + { + "from": 764, + "to": 764, + "id": "0x1B" + }, + { + "from": 765, + "to": 765, + "id": "0x1C" + }, + { + "from": 766, + "to": 767, + "id": "0x1F" + }, + { + "from": 768, + "to": 768, + "id": "0x21" + }, + { + "from": 769, + "to": 769, + "id": "0x21" + }, + { + "from": 770, + "to": 770, + "id": "0x21" + }, + { + "from": 771, + "to": 772, + "id": "0x22" + }, + { + "from": 773, + "to": 774, + "id": "0x22" + }, + { + "from": 775, + "to": 776, + "id": "0x23" + } + ], + "play.toServer.steer_vehicle": [ + { + "from": 735, + "to": 736, + "id": "0x1D" + }, + { + "from": 751, + "to": 754, + "id": "0x1D" + }, + { + "from": 755, + "to": 758, + "id": "0x1C" + }, + { + "from": 759, + "to": 759, + "id": "0x1E" + }, + { + "from": 760, + "to": 760, + "id": "0x1F" + }, + { + "from": 761, + "to": 761, + "id": "0x1E" + }, + { + "from": 762, + "to": 763, + "id": "0x1F" + }, + { + "from": 764, + "to": 764, + "id": "0x22" + }, + { + "from": 765, + "to": 765, + "id": "0x23" + }, + { + "from": 766, + "to": 767, + "id": "0x26" + } + ], + "play.toServer.tab_complete": [ + { + "from": 735, + "to": 736, + "id": "0x06" + }, + { + "from": 751, + "to": 754, + "id": "0x06" + }, + { + "from": 755, + "to": 758, + "id": "0x06" + }, + { + "from": 759, + "to": 759, + "id": "0x08" + }, + { + "from": 760, + "to": 760, + "id": "0x09" + }, + { + "from": 761, + "to": 761, + "id": "0x08" + }, + { + "from": 762, + "to": 763, + "id": "0x09" + }, + { + "from": 764, + "to": 764, + "id": "0x0A" + }, + { + "from": 765, + "to": 765, + "id": "0x0A" + }, + { + "from": 766, + "to": 767, + "id": "0x0B" + }, + { + "from": 768, + "to": 768, + "id": "0x0D" + }, + { + "from": 769, + "to": 769, + "id": "0x0D" + }, + { + "from": 770, + "to": 770, + "id": "0x0D" + }, + { + "from": 771, + "to": 772, + "id": "0x0E" + }, + { + "from": 773, + "to": 774, + "id": "0x0E" + }, + { + "from": 775, + "to": 776, + "id": "0x0F" + } + ], + "play.toServer.teleport_confirm": [ + { + "from": 735, + "to": 736, + "id": "0x00" + }, + { + "from": 751, + "to": 754, + "id": "0x00" + }, + { + "from": 755, + "to": 758, + "id": "0x00" + }, + { + "from": 759, + "to": 759, + "id": "0x00" + }, + { + "from": 760, + "to": 760, + "id": "0x00" + }, + { + "from": 761, + "to": 761, + "id": "0x00" + }, + { + "from": 762, + "to": 763, + "id": "0x00" + }, + { + "from": 764, + "to": 764, + "id": "0x00" + }, + { + "from": 765, + "to": 765, + "id": "0x00" + }, + { + "from": 766, + "to": 767, + "id": "0x00" + }, + { + "from": 768, + "to": 768, + "id": "0x00" + }, + { + "from": 769, + "to": 769, + "id": "0x00" + }, + { + "from": 770, + "to": 770, + "id": "0x00" + }, + { + "from": 771, + "to": 772, + "id": "0x00" + }, + { + "from": 773, + "to": 774, + "id": "0x00" + }, + { + "from": 775, + "to": 776, + "id": "0x00" + } + ], + "play.toServer.test_instance_block_action": [ + { + "from": 770, + "to": 770, + "id": "0x3C" + }, + { + "from": 771, + "to": 772, + "id": "0x3E" + }, + { + "from": 773, + "to": 774, + "id": "0x3E" + }, + { + "from": 775, + "to": 776, + "id": "0x41" + } + ], + "play.toServer.tick_end": [ + { + "from": 768, + "to": 768, + "id": "0x0B" + }, + { + "from": 769, + "to": 769, + "id": "0x0B" + }, + { + "from": 770, + "to": 770, + "id": "0x0B" + }, + { + "from": 771, + "to": 772, + "id": "0x0C" + }, + { + "from": 773, + "to": 774, + "id": "0x0C" + }, + { + "from": 775, + "to": 776, + "id": "0x0D" + } + ], + "play.toServer.transaction": [ + { + "from": 735, + "to": 736, + "id": "0x07" + }, + { + "from": 751, + "to": 754, + "id": "0x07" + } + ], + "play.toServer.update_command_block": [ + { + "from": 735, + "to": 736, + "id": "0x25" + }, + { + "from": 751, + "to": 754, + "id": "0x26" + }, + { + "from": 755, + "to": 758, + "id": "0x26" + }, + { + "from": 759, + "to": 759, + "id": "0x28" + }, + { + "from": 760, + "to": 760, + "id": "0x29" + }, + { + "from": 761, + "to": 761, + "id": "0x29" + }, + { + "from": 762, + "to": 763, + "id": "0x29" + }, + { + "from": 764, + "to": 764, + "id": "0x2C" + }, + { + "from": 765, + "to": 765, + "id": "0x2D" + }, + { + "from": 766, + "to": 767, + "id": "0x30" + }, + { + "from": 768, + "to": 768, + "id": "0x32" + }, + { + "from": 769, + "to": 769, + "id": "0x34" + }, + { + "from": 770, + "to": 770, + "id": "0x34" + }, + { + "from": 771, + "to": 772, + "id": "0x35" + }, + { + "from": 773, + "to": 774, + "id": "0x35" + }, + { + "from": 775, + "to": 776, + "id": "0x36" + } + ], + "play.toServer.update_command_block_minecart": [ + { + "from": 735, + "to": 736, + "id": "0x26" + }, + { + "from": 751, + "to": 754, + "id": "0x27" + }, + { + "from": 755, + "to": 758, + "id": "0x27" + }, + { + "from": 759, + "to": 759, + "id": "0x29" + }, + { + "from": 760, + "to": 760, + "id": "0x2A" + }, + { + "from": 761, + "to": 761, + "id": "0x2A" + }, + { + "from": 762, + "to": 763, + "id": "0x2A" + }, + { + "from": 764, + "to": 764, + "id": "0x2D" + }, + { + "from": 765, + "to": 765, + "id": "0x2E" + }, + { + "from": 766, + "to": 767, + "id": "0x31" + }, + { + "from": 768, + "to": 768, + "id": "0x33" + }, + { + "from": 769, + "to": 769, + "id": "0x35" + }, + { + "from": 770, + "to": 770, + "id": "0x35" + }, + { + "from": 771, + "to": 772, + "id": "0x36" + }, + { + "from": 773, + "to": 774, + "id": "0x36" + }, + { + "from": 775, + "to": 776, + "id": "0x37" + } + ], + "play.toServer.update_jigsaw_block": [ + { + "from": 735, + "to": 736, + "id": "0x28" + }, + { + "from": 751, + "to": 754, + "id": "0x29" + }, + { + "from": 755, + "to": 758, + "id": "0x29" + }, + { + "from": 759, + "to": 759, + "id": "0x2B" + }, + { + "from": 760, + "to": 760, + "id": "0x2C" + }, + { + "from": 761, + "to": 761, + "id": "0x2C" + }, + { + "from": 762, + "to": 763, + "id": "0x2C" + }, + { + "from": 764, + "to": 764, + "id": "0x2F" + }, + { + "from": 765, + "to": 765, + "id": "0x30" + }, + { + "from": 766, + "to": 767, + "id": "0x33" + }, + { + "from": 768, + "to": 768, + "id": "0x35" + }, + { + "from": 769, + "to": 769, + "id": "0x37" + }, + { + "from": 770, + "to": 770, + "id": "0x37" + }, + { + "from": 771, + "to": 772, + "id": "0x38" + }, + { + "from": 773, + "to": 774, + "id": "0x38" + }, + { + "from": 775, + "to": 776, + "id": "0x3A" + } + ], + "play.toServer.update_sign": [ + { + "from": 735, + "to": 736, + "id": "0x2A" + }, + { + "from": 751, + "to": 754, + "id": "0x2B" + }, + { + "from": 755, + "to": 758, + "id": "0x2B" + }, + { + "from": 759, + "to": 759, + "id": "0x2D" + }, + { + "from": 760, + "to": 760, + "id": "0x2E" + }, + { + "from": 761, + "to": 761, + "id": "0x2E" + }, + { + "from": 762, + "to": 763, + "id": "0x2E" + }, + { + "from": 764, + "to": 764, + "id": "0x31" + }, + { + "from": 765, + "to": 765, + "id": "0x32" + }, + { + "from": 766, + "to": 767, + "id": "0x35" + }, + { + "from": 768, + "to": 768, + "id": "0x37" + }, + { + "from": 769, + "to": 769, + "id": "0x39" + }, + { + "from": 770, + "to": 770, + "id": "0x3A" + }, + { + "from": 771, + "to": 772, + "id": "0x3B" + }, + { + "from": 773, + "to": 774, + "id": "0x3B" + }, + { + "from": 775, + "to": 776, + "id": "0x3D" + } + ], + "play.toServer.update_structure_block": [ + { + "from": 735, + "to": 736, + "id": "0x29" + }, + { + "from": 751, + "to": 754, + "id": "0x2A" + }, + { + "from": 755, + "to": 758, + "id": "0x2A" + }, + { + "from": 759, + "to": 759, + "id": "0x2C" + }, + { + "from": 760, + "to": 760, + "id": "0x2D" + }, + { + "from": 761, + "to": 761, + "id": "0x2D" + }, + { + "from": 762, + "to": 763, + "id": "0x2D" + }, + { + "from": 764, + "to": 764, + "id": "0x30" + }, + { + "from": 765, + "to": 765, + "id": "0x31" + }, + { + "from": 766, + "to": 767, + "id": "0x34" + }, + { + "from": 768, + "to": 768, + "id": "0x36" + }, + { + "from": 769, + "to": 769, + "id": "0x38" + }, + { + "from": 770, + "to": 770, + "id": "0x38" + }, + { + "from": 771, + "to": 772, + "id": "0x39" + }, + { + "from": 773, + "to": 774, + "id": "0x39" + }, + { + "from": 775, + "to": 776, + "id": "0x3B" + } + ], + "play.toServer.use_entity": [ + { + "from": 735, + "to": 736, + "id": "0x0E" + }, + { + "from": 751, + "to": 754, + "id": "0x0E" + }, + { + "from": 755, + "to": 758, + "id": "0x0D" + }, + { + "from": 759, + "to": 759, + "id": "0x0F" + }, + { + "from": 760, + "to": 760, + "id": "0x10" + }, + { + "from": 761, + "to": 761, + "id": "0x0F" + }, + { + "from": 762, + "to": 763, + "id": "0x10" + }, + { + "from": 764, + "to": 764, + "id": "0x12" + }, + { + "from": 765, + "to": 765, + "id": "0x13" + }, + { + "from": 766, + "to": 767, + "id": "0x16" + }, + { + "from": 768, + "to": 768, + "id": "0x18" + }, + { + "from": 769, + "to": 769, + "id": "0x18" + }, + { + "from": 770, + "to": 770, + "id": "0x18" + }, + { + "from": 771, + "to": 772, + "id": "0x19" + }, + { + "from": 773, + "to": 774, + "id": "0x19" + }, + { + "from": 775, + "to": 776, + "id": "0x1A" + } + ], + "play.toServer.use_item": [ + { + "from": 735, + "to": 736, + "id": "0x2E" + }, + { + "from": 751, + "to": 754, + "id": "0x2F" + }, + { + "from": 755, + "to": 758, + "id": "0x2F" + }, + { + "from": 759, + "to": 759, + "id": "0x31" + }, + { + "from": 760, + "to": 760, + "id": "0x32" + }, + { + "from": 761, + "to": 761, + "id": "0x32" + }, + { + "from": 762, + "to": 763, + "id": "0x32" + }, + { + "from": 764, + "to": 764, + "id": "0x35" + }, + { + "from": 765, + "to": 765, + "id": "0x36" + }, + { + "from": 766, + "to": 767, + "id": "0x39" + }, + { + "from": 768, + "to": 768, + "id": "0x3B" + }, + { + "from": 769, + "to": 769, + "id": "0x3D" + }, + { + "from": 770, + "to": 770, + "id": "0x3F" + }, + { + "from": 771, + "to": 772, + "id": "0x40" + }, + { + "from": 773, + "to": 774, + "id": "0x40" + }, + { + "from": 775, + "to": 776, + "id": "0x43" + } + ], + "play.toServer.vehicle_move": [ + { + "from": 735, + "to": 736, + "id": "0x16" + }, + { + "from": 751, + "to": 754, + "id": "0x16" + }, + { + "from": 755, + "to": 758, + "id": "0x15" + }, + { + "from": 759, + "to": 759, + "id": "0x17" + }, + { + "from": 760, + "to": 760, + "id": "0x18" + }, + { + "from": 761, + "to": 761, + "id": "0x17" + }, + { + "from": 762, + "to": 763, + "id": "0x18" + }, + { + "from": 764, + "to": 764, + "id": "0x1A" + }, + { + "from": 765, + "to": 765, + "id": "0x1B" + }, + { + "from": 766, + "to": 767, + "id": "0x1E" + }, + { + "from": 768, + "to": 768, + "id": "0x20" + }, + { + "from": 769, + "to": 769, + "id": "0x20" + }, + { + "from": 770, + "to": 770, + "id": "0x20" + }, + { + "from": 771, + "to": 772, + "id": "0x21" + }, + { + "from": 773, + "to": 774, + "id": "0x21" + }, + { + "from": 775, + "to": 776, + "id": "0x22" + } + ], + "play.toServer.window_click": [ + { + "from": 735, + "to": 736, + "id": "0x09" + }, + { + "from": 751, + "to": 754, + "id": "0x09" + }, + { + "from": 755, + "to": 758, + "id": "0x08" + }, + { + "from": 759, + "to": 759, + "id": "0x0A" + }, + { + "from": 760, + "to": 760, + "id": "0x0B" + }, + { + "from": 761, + "to": 761, + "id": "0x0A" + }, + { + "from": 762, + "to": 763, + "id": "0x0B" + }, + { + "from": 764, + "to": 764, + "id": "0x0D" + }, + { + "from": 765, + "to": 765, + "id": "0x0D" + }, + { + "from": 766, + "to": 767, + "id": "0x0E" + }, + { + "from": 768, + "to": 768, + "id": "0x10" + }, + { + "from": 769, + "to": 769, + "id": "0x10" + }, + { + "from": 770, + "to": 770, + "id": "0x10" + }, + { + "from": 771, + "to": 772, + "id": "0x11" + }, + { + "from": 773, + "to": 774, + "id": "0x11" + }, + { + "from": 775, + "to": 776, + "id": "0x12" + } + ] + } } From 7bc782dcc3c28e942090ab4f2caaff4ea70d7621 Mon Sep 17 00:00:00 2001 From: Titlehhhh Date: Thu, 20 Aug 2026 15:18:44 +0500 Subject: [PATCH 4/9] spec: wire layers for 773-776 on the packets that already had specs Fifteen packets change shape above protocol 772; each got a new wire layer, with the previous newest layer closed at the right boundary. Notable ones: - explosion (773): x/y/z collapse into center vec3f64, radius f32 and an i32 block count are inserted after it, and a weighted particle list is appended. Two named types carry the tail: ExplosionParticleEntry (data, weight) and ExplosionParticleInfo (particle, scaling, speed). - spawn_position (773): the body becomes RespawnData (GlobalPos, yaw, pitch), so a dimension identifier now precedes the block position and a pitch follows the old angle. RespawnData and GlobalPos are new type specs. - update_time (775): time and tickDayTime give way to a varint-counted list of clock updates (id, totalTicks as varlong, partialTick, rate) - new type ClockUpdate. - spawn_entity and entity_velocity (773): the i16 velocity triple becomes the quantized LpVec3, and in spawn_entity it also moves ahead of pitch/yaw. - login.toClient.success (776): trailing sessionId UUID - one of the two packets that change on 26.2 itself. - cookie_response in all three states (773): the value goes back to optional. Facts show it required on 772 only, so that single version keeps its own layer. - player_rotation (773): relativeYaw and relativePitch booleans after each angle. debug_sample_subscription: support now ends at 772, the packet is gone from 773. Two specs deliberately differ from the data. minecraft-data types the chat command checksum as i8 and the enchant_item button id as i8 on 774 only, with u8 and varint on both sides of it. External sources agree those are upstream defects, not protocol changes: MCProtocolLib pinned at 774 reads a plain byte and a varint respectively, the wiki revision bracketing 774 says Byte and VarInt, ViaVersion's 773->774 protocol declares the serverbound packet set identical, and PrismarineJS themselves call the i8 checksum a bug in minecraft-data#1188 and the i8 button id a bug in #1201. So the specs keep u8 from 770 on and varint from 767 on, with no 774 layer. Coverage.knownVersions display names follow the confirmed mapping: 773 covers 1.21.9 and 1.21.10, 775 covers 26.1 through 26.1.2. Checked: dotnet build clean; `dotnet run -- gen` emits no new TODO markers, only the six allowlisted stubs; `dotnet run -- coverage` reports 210/257 on pv 776. F# formatted with Fantomas. Co-Authored-By: Claude Opus 5 (1M context) --- minecraft-protocol-fs/Codegen/Coverage.fs | 35 ++-- .../Serverbound/CookieResponse.fs | 14 +- .../Packets/Login/Clientbound/LoginSuccess.fs | 74 ++++--- .../Login/Serverbound/LoginCookieResponse.fs | 14 +- .../Play/Clientbound/Entity/EntityVelocity.fs | 35 ++-- .../Entity/Player/PlayerRotation.fs | 25 ++- .../Play/Clientbound/Entity/SpawnEntity.fs | 110 ++++++---- .../Play/Clientbound/Level/Explosion.fs | 192 +++++++++++------- .../Play/Clientbound/Level/SpawnPosition.fs | 21 +- .../Play/Clientbound/Level/UpdateTime.fs | 36 ++-- .../Serverbound/Chat/ChatCommandSigned.fs | 57 +++--- .../Play/Serverbound/CookieResponse.fs | 14 +- .../Serverbound/DebugSampleSubscription.fs | 10 +- .../Play/Serverbound/Inventory/EnchantItem.fs | 20 +- .../Spec/Types/Level/ClockUpdate.fs | 17 ++ .../Types/Level/ExplosionParticleEntry.fs | 9 + .../Spec/Types/Level/ExplosionParticleInfo.fs | 12 ++ .../Spec/Types/Level/GlobalPos.fs | 9 + .../Spec/Types/Level/RespawnData.fs | 9 + 19 files changed, 426 insertions(+), 287 deletions(-) create mode 100644 minecraft-protocol-fs/Spec/Types/Level/ClockUpdate.fs create mode 100644 minecraft-protocol-fs/Spec/Types/Level/ExplosionParticleEntry.fs create mode 100644 minecraft-protocol-fs/Spec/Types/Level/ExplosionParticleInfo.fs create mode 100644 minecraft-protocol-fs/Spec/Types/Level/GlobalPos.fs create mode 100644 minecraft-protocol-fs/Spec/Types/Level/RespawnData.fs diff --git a/minecraft-protocol-fs/Codegen/Coverage.fs b/minecraft-protocol-fs/Codegen/Coverage.fs index e785490..b810115 100644 --- a/minecraft-protocol-fs/Codegen/Coverage.fs +++ b/minecraft-protocol-fs/Codegen/Coverage.fs @@ -39,15 +39,17 @@ module Coverage = 770, "1.21.5" 771, "1.21.6" 772, "1.21.7–1.21.8" - 773, "1.21.9" + 773, "1.21.9–1.21.10" 774, "1.21.11" - 775, "26.1" + 775, "26.1–26.1.2" 776, "26.2" ] let private contains pv range = let lo, hi = VersionRangeX.bounds range - (lo |> Option.forall (fun l -> pv >= l)) && (hi |> Option.forall (fun h -> pv <= h)) + + (lo |> Option.forall (fun l -> pv >= l)) + && (hi |> Option.forall (fun h -> pv <= h)) /// Compress a set of pvs into "a, b–c" chunks. Adjacency follows the known-version /// ordering, not integer succession (753 and 754 are neighbours; so are 736 and 751). @@ -94,8 +96,7 @@ module Coverage = [ for p in doc.RootElement.GetProperty("Packets").EnumerateArray() -> - p.GetProperty("Id").GetString(), - (p.GetProperty("Score").GetInt32(), p.GetProperty("Tier").GetString()) + p.GetProperty("Id").GetString(), (p.GetProperty("Score").GetInt32(), p.GetProperty("Tier").GetString()) ] |> Map.ofList @@ -116,7 +117,8 @@ module Coverage = (allowlistPath: string) (statsPath: string option) (packets: PacketSpec list) - : string * string = + : string * string + = let manifest = readManifest manifestPath let stats = statsPath |> Option.map readStats let stubs = readStubs allowlistPath @@ -146,8 +148,7 @@ module Coverage = ] let orphanSpecs = - packets - |> List.filter (fun p -> not (manifestKeys.Contains(PacketIds.key p))) + packets |> List.filter (fun p -> not (manifestKeys.Contains(PacketIds.key p))) let sb = StringBuilder() let line (s: string) = sb.AppendLine s |> ignore @@ -157,17 +158,13 @@ module Coverage = line "Автогенерат: `dotnet run -- coverage` — не править руками." line "" - line - "Вселенная пакетов — `Spec/protocol-ids.json` (манифест из McProtoFacts), спеки — то," + line "Вселенная пакетов — `Spec/protocol-ids.json` (манифест из McProtoFacts), спеки — то," - line - "что реально лежит в `Spec/Packets/**`. «Покрыто» на версии значит: спек есть, версия" + line "что реально лежит в `Spec/Packets/**`. «Покрыто» на версии значит: спек есть, версия" - line - "внутри его диапазона поддержки и есть wire-layout на неё. «Стаб» — спек есть, но" + line "внутри его диапазона поддержки и есть wire-layout на неё. «Стаб» — спек есть, но" - line - "генерат в `Spec/todo-allowlist.txt`: компилируется, работать не будет. Снапшоты" + line "генерат в `Spec/todo-allowlist.txt`: компилируется, работать не будет. Снапшоты" line "(pv 737–750, 752) не считаются." line "" @@ -219,8 +216,7 @@ module Coverage = // ---- stubs ------------------------------------------------------------------ let stubRows = rows - |> List.choose (fun (_, spec, _, _) -> - spec |> Option.filter (fun p -> stubs.Contains p.ClassName)) + |> List.choose (fun (_, spec, _, _) -> spec |> Option.filter (fun p -> stubs.Contains p.ClassName)) if not (List.isEmpty stubRows) then line "## Стабы (todo-allowlist)" @@ -305,7 +301,8 @@ module Coverage = let latestPv = pvs |> List.max let latestCovered = - rows |> List.sumBy (fun (_, _, _, cov) -> if cov.Contains latestPv then 1 else 0) + rows + |> List.sumBy (fun (_, _, _, cov) -> if cov.Contains latestPv then 1 else 0) let latestTotal = rows |> List.sumBy (fun (_, _, ex, _) -> if ex.Contains latestPv then 1 else 0) diff --git a/minecraft-protocol-fs/Spec/Packets/Configuration/Serverbound/CookieResponse.fs b/minecraft-protocol-fs/Spec/Packets/Configuration/Serverbound/CookieResponse.fs index 0075ace..ed28688 100644 --- a/minecraft-protocol-fs/Spec/Packets/Configuration/Serverbound/CookieResponse.fs +++ b/minecraft-protocol-fs/Spec/Packets/Configuration/Serverbound/CookieResponse.fs @@ -7,13 +7,11 @@ module CookieResponseConfiguration = let cookieResponseConfiguration = packet "CookieResponsePacket" Configuration Serverbound (Since 766) { - api [ - field "Key" TString All - field "Value" (TOption TBytes) All - ] + api [ field "Key" TString All; field "Value" (TOption TBytes) All ] - wire (Since 766) [ - read "key" Str "Key" - read "value" (Option ByteArray) "Value" - ] + wire (Between(766, 771)) [ read "key" Str "Key"; read "value" (Option ByteArray) "Value" ] + + wire (Between(772, 772)) [ read "key" Str "Key"; read "value" ByteArray "Value" ] + + wire (Since 773) [ read "key" Str "Key"; read "value" (Option ByteArray) "Value" ] } diff --git a/minecraft-protocol-fs/Spec/Packets/Login/Clientbound/LoginSuccess.fs b/minecraft-protocol-fs/Spec/Packets/Login/Clientbound/LoginSuccess.fs index 581058e..6b4fee3 100644 --- a/minecraft-protocol-fs/Spec/Packets/Login/Clientbound/LoginSuccess.fs +++ b/minecraft-protocol-fs/Spec/Packets/Login/Clientbound/LoginSuccess.fs @@ -9,34 +9,48 @@ module LoginSuccess = packet "LoginSuccessPacket" Login Clientbound All { protoId "success" - api [ - field "Uuid" TUuid All - field "Username" TString All - field "Properties" (TArray(TNamed "ProfileProperty")) (Since 759) - field "StrictErrorHandling" TBool (Between(766, 767)) - ] - - wire (Until 758) [ - read "uuid" Uuid "Uuid" - read "username" Str "Username" - ] - - wire (Between(759, 765)) [ - read "uuid" Uuid "Uuid" - read "username" Str "Username" - read "properties" (Array(Named "ProfileProperty", VarIntCount)) "Properties" - ] - - wire (Between(766, 767)) [ - read "uuid" Uuid "Uuid" - read "username" Str "Username" - read "properties" (Array(Named "ProfileProperty", VarIntCount)) "Properties" - read "strictErrorHandling" Bool "StrictErrorHandling" - ] - - wire (Since 768) [ - read "uuid" Uuid "Uuid" - read "username" Str "Username" - read "properties" (Array(Named "ProfileProperty", VarIntCount)) "Properties" - ] + api + [ + field "Uuid" TUuid All + field "Username" TString All + field "Properties" (TArray(TNamed "ProfileProperty")) (Since 759) + field "StrictErrorHandling" TBool (Between(766, 767)) + field "SessionId" TUuid (Since 776) + ] + + wire (Until 758) [ read "uuid" Uuid "Uuid"; read "username" Str "Username" ] + + wire + (Between(759, 765)) + [ + read "uuid" Uuid "Uuid" + read "username" Str "Username" + read "properties" (Array(Named "ProfileProperty", VarIntCount)) "Properties" + ] + + wire + (Between(766, 767)) + [ + read "uuid" Uuid "Uuid" + read "username" Str "Username" + read "properties" (Array(Named "ProfileProperty", VarIntCount)) "Properties" + read "strictErrorHandling" Bool "StrictErrorHandling" + ] + + wire + (Between(768, 775)) + [ + read "uuid" Uuid "Uuid" + read "username" Str "Username" + read "properties" (Array(Named "ProfileProperty", VarIntCount)) "Properties" + ] + + wire + (Since 776) + [ + read "uuid" Uuid "Uuid" + read "username" Str "Username" + read "properties" (Array(Named "ProfileProperty", VarIntCount)) "Properties" + read "sessionId" Uuid "SessionId" + ] } diff --git a/minecraft-protocol-fs/Spec/Packets/Login/Serverbound/LoginCookieResponse.fs b/minecraft-protocol-fs/Spec/Packets/Login/Serverbound/LoginCookieResponse.fs index be7295b..bf30efc 100644 --- a/minecraft-protocol-fs/Spec/Packets/Login/Serverbound/LoginCookieResponse.fs +++ b/minecraft-protocol-fs/Spec/Packets/Login/Serverbound/LoginCookieResponse.fs @@ -9,13 +9,11 @@ module LoginCookieResponse = packet "LoginCookieResponsePacket" Login Serverbound (Since 766) { protoId "cookie_response" - api [ - field "Key" TString All - field "Value" (TOption TBytes) All - ] + api [ field "Key" TString All; field "Value" (TOption TBytes) All ] - wire (Since 766) [ - read "key" Str "Key" - read "value" (Option ByteArray) "Value" - ] + wire (Between(766, 771)) [ read "key" Str "Key"; read "value" (Option ByteArray) "Value" ] + + wire (Between(772, 772)) [ read "key" Str "Key"; read "value" ByteArray "Value" ] + + wire (Since 773) [ read "key" Str "Key"; read "value" (Option ByteArray) "Value" ] } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Entity/EntityVelocity.fs b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Entity/EntityVelocity.fs index e0a9063..0e264db 100644 --- a/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Entity/EntityVelocity.fs +++ b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Entity/EntityVelocity.fs @@ -7,17 +7,28 @@ module EntityVelocity = let entityVelocity = packet "EntityVelocityPacket" Play Clientbound All { - api [ - field "EntityId" TInt All - field "VelocityX" TInt All - field "VelocityY" TInt All - field "VelocityZ" TInt All - ] + api + [ + field "EntityId" TInt All + field "VelocityX" TInt (Until 772) + field "VelocityY" TInt (Until 772) + field "VelocityZ" TInt (Until 772) + field "Velocity" (TNamed "LpVec3") (Since 773) + ] - wire All [ - read "entityId" VarInt "EntityId" - read "velocityX" I16 "VelocityX" - read "velocityY" I16 "VelocityY" - read "velocityZ" I16 "VelocityZ" - ] + wire + (Until 772) + [ + read "entityId" VarInt "EntityId" + read "velocityX" I16 "VelocityX" + read "velocityY" I16 "VelocityY" + read "velocityZ" I16 "VelocityZ" + ] + + wire + (Since 773) + [ + read "entityId" VarInt "EntityId" + read "velocity" (Named "LpVec3") "Velocity" + ] } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Entity/Player/PlayerRotation.fs b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Entity/Player/PlayerRotation.fs index 3f9883f..1c1d429 100644 --- a/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Entity/Player/PlayerRotation.fs +++ b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Entity/Player/PlayerRotation.fs @@ -7,13 +7,22 @@ module PlayerRotation = let playerRotation = packet "PlayerRotationPacket" Play Clientbound (Since 768) { - api [ - field "Yaw" TFloat All - field "Pitch" TFloat All - ] + api + [ + field "Yaw" TFloat All + field "Pitch" TFloat All + field "RelativeYaw" TBool (Since 773) + field "RelativePitch" TBool (Since 773) + ] - wire (Since 768) [ - read "yaw" F32 "Yaw" - read "pitch" F32 "Pitch" - ] + wire (Between(768, 772)) [ read "yaw" F32 "Yaw"; read "pitch" F32 "Pitch" ] + + wire + (Since 773) + [ + read "yaw" F32 "Yaw" + read "relativeYaw" Bool "RelativeYaw" + read "pitch" F32 "Pitch" + read "relativePitch" Bool "RelativePitch" + ] } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Entity/SpawnEntity.fs b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Entity/SpawnEntity.fs index 68fa7df..812cb5b 100644 --- a/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Entity/SpawnEntity.fs +++ b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Entity/SpawnEntity.fs @@ -7,50 +7,72 @@ module SpawnEntity = let spawnEntity = packet "SpawnEntityPacket" Play Clientbound All { - api [ - field "EntityId" TInt All - field "ObjectUuid" TUuid All - field "Type" TInt All - field "X" TDouble All - field "Y" TDouble All - field "Z" TDouble All - field "Pitch" TInt All - field "Yaw" TInt All - field "HeadPitch" TInt (Since 759) - field "ObjectData" TInt All - field "VelocityX" TInt All - field "VelocityY" TInt All - field "VelocityZ" TInt All - ] + api + [ + field "EntityId" TInt All + field "ObjectUuid" TUuid All + field "Type" TInt All + field "X" TDouble All + field "Y" TDouble All + field "Z" TDouble All + field "Pitch" TInt All + field "Yaw" TInt All + field "HeadPitch" TInt (Since 759) + field "ObjectData" TInt All + field "VelocityX" TInt (Until 772) + field "VelocityY" TInt (Until 772) + field "VelocityZ" TInt (Until 772) + field "Velocity" (TNamed "LpVec3") (Since 773) + ] - wire (Until 758) [ - read "entityId" VarInt "EntityId" - read "objectUUID" Uuid "ObjectUuid" - read "type" VarInt "Type" - read "x" F64 "X" - read "y" F64 "Y" - read "z" F64 "Z" - read "pitch" I8 "Pitch" - read "yaw" I8 "Yaw" - read "objectData" I32 "ObjectData" - read "velocityX" I16 "VelocityX" - read "velocityY" I16 "VelocityY" - read "velocityZ" I16 "VelocityZ" - ] + wire + (Until 758) + [ + read "entityId" VarInt "EntityId" + read "objectUUID" Uuid "ObjectUuid" + read "type" VarInt "Type" + read "x" F64 "X" + read "y" F64 "Y" + read "z" F64 "Z" + read "pitch" I8 "Pitch" + read "yaw" I8 "Yaw" + read "objectData" I32 "ObjectData" + read "velocityX" I16 "VelocityX" + read "velocityY" I16 "VelocityY" + read "velocityZ" I16 "VelocityZ" + ] - wire (Since 759) [ - read "entityId" VarInt "EntityId" - read "objectUUID" Uuid "ObjectUuid" - read "type" VarInt "Type" - read "x" F64 "X" - read "y" F64 "Y" - read "z" F64 "Z" - read "pitch" I8 "Pitch" - read "yaw" I8 "Yaw" - read "headPitch" I8 "HeadPitch" - read "objectData" VarInt "ObjectData" - read "velocityX" I16 "VelocityX" - read "velocityY" I16 "VelocityY" - read "velocityZ" I16 "VelocityZ" - ] + wire + (Between(759, 772)) + [ + read "entityId" VarInt "EntityId" + read "objectUUID" Uuid "ObjectUuid" + read "type" VarInt "Type" + read "x" F64 "X" + read "y" F64 "Y" + read "z" F64 "Z" + read "pitch" I8 "Pitch" + read "yaw" I8 "Yaw" + read "headPitch" I8 "HeadPitch" + read "objectData" VarInt "ObjectData" + read "velocityX" I16 "VelocityX" + read "velocityY" I16 "VelocityY" + read "velocityZ" I16 "VelocityZ" + ] + + wire + (Since 773) + [ + read "entityId" VarInt "EntityId" + read "objectUUID" Uuid "ObjectUuid" + read "type" VarInt "Type" + read "x" F64 "X" + read "y" F64 "Y" + read "z" F64 "Z" + read "velocity" (Named "LpVec3") "Velocity" + read "pitch" I8 "Pitch" + read "yaw" I8 "Yaw" + read "headPitch" I8 "HeadPitch" + read "objectData" VarInt "ObjectData" + ] } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/Explosion.fs b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/Explosion.fs index db86cad..4a85348 100644 --- a/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/Explosion.fs +++ b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/Explosion.fs @@ -7,86 +7,126 @@ module Explosion = let explosion = packet "ExplosionPacket" Play Clientbound All { - api [ - field "X" TDouble All - field "Y" TDouble All - field "Z" TDouble All - field "Radius" TFloat (Until 767) - field "AffectedBlockOffsets" (TArray(TNamed "ExplosionBlockOffset")) (Until 767) - field "PlayerMotionX" TFloat (Until 767) - field "PlayerMotionY" TFloat (Until 767) - field "PlayerMotionZ" TFloat (Until 767) - field "BlockInteractionType" TInt (Between(765, 767)) - field "SmallExplosionParticle" (TNamed "Particle") (Between(765, 767)) - field "LargeExplosionParticle" (TNamed "Particle") (Between(765, 767)) - field "Sound" (TNamed "ItemSoundHolder") (Since 765) - field "PlayerKnockback" (TOption(TNamed "Vec3f64")) (Since 768) - field "ExplosionParticle" (TNamed "Particle") (Since 768) - ] + api + [ + field "X" TDouble (Until 772) + field "Y" TDouble (Until 772) + field "Z" TDouble (Until 772) + field "Radius" TFloat (Until 767) + field "AffectedBlockOffsets" (TArray(TNamed "ExplosionBlockOffset")) (Until 767) + field "PlayerMotionX" TFloat (Until 767) + field "PlayerMotionY" TFloat (Until 767) + field "PlayerMotionZ" TFloat (Until 767) + field "BlockInteractionType" TInt (Between(765, 767)) + field "SmallExplosionParticle" (TNamed "Particle") (Between(765, 767)) + field "LargeExplosionParticle" (TNamed "Particle") (Between(765, 767)) + field "Sound" (TNamed "ItemSoundHolder") (Since 765) + field "PlayerKnockback" (TOption(TNamed "Vec3f64")) (Since 768) + field "ExplosionParticle" (TNamed "Particle") (Since 768) + field "Center" (TNamed "Vec3f64") (Since 773) + field "BlockCount" TInt (Since 773) + field "BlockParticles" (TArray(TNamed "ExplosionParticleEntry")) (Since 773) + ] - wire (Until 754) [ - read "x" F32 "X" - read "y" F32 "Y" - read "z" F32 "Z" - read "radius" F32 "Radius" - read "affectedBlockOffsets" (Array(Named "ExplosionBlockOffset", TypedCount I32)) "AffectedBlockOffsets" - read "playerMotionX" F32 "PlayerMotionX" - read "playerMotionY" F32 "PlayerMotionY" - read "playerMotionZ" F32 "PlayerMotionZ" - ] + wire + (Until 754) + [ + read "x" F32 "X" + read "y" F32 "Y" + read "z" F32 "Z" + read "radius" F32 "Radius" + read + "affectedBlockOffsets" + (Array(Named "ExplosionBlockOffset", TypedCount I32)) + "AffectedBlockOffsets" + read "playerMotionX" F32 "PlayerMotionX" + read "playerMotionY" F32 "PlayerMotionY" + read "playerMotionZ" F32 "PlayerMotionZ" + ] - wire (Between(755, 760)) [ - read "x" F32 "X" - read "y" F32 "Y" - read "z" F32 "Z" - read "radius" F32 "Radius" - read "affectedBlockOffsets" (Array(Named "ExplosionBlockOffset", VarIntCount)) "AffectedBlockOffsets" - read "playerMotionX" F32 "PlayerMotionX" - read "playerMotionY" F32 "PlayerMotionY" - read "playerMotionZ" F32 "PlayerMotionZ" - ] + wire + (Between(755, 760)) + [ + read "x" F32 "X" + read "y" F32 "Y" + read "z" F32 "Z" + read "radius" F32 "Radius" + read + "affectedBlockOffsets" + (Array(Named "ExplosionBlockOffset", VarIntCount)) + "AffectedBlockOffsets" + read "playerMotionX" F32 "PlayerMotionX" + read "playerMotionY" F32 "PlayerMotionY" + read "playerMotionZ" F32 "PlayerMotionZ" + ] - wire (Between(761, 764)) [ - read "x" F64 "X" - read "y" F64 "Y" - read "z" F64 "Z" - read "radius" F32 "Radius" - read "affectedBlockOffsets" (Array(Named "ExplosionBlockOffset", VarIntCount)) "AffectedBlockOffsets" - read "playerMotionX" F32 "PlayerMotionX" - read "playerMotionY" F32 "PlayerMotionY" - read "playerMotionZ" F32 "PlayerMotionZ" - ] + wire + (Between(761, 764)) + [ + read "x" F64 "X" + read "y" F64 "Y" + read "z" F64 "Z" + read "radius" F32 "Radius" + read + "affectedBlockOffsets" + (Array(Named "ExplosionBlockOffset", VarIntCount)) + "AffectedBlockOffsets" + read "playerMotionX" F32 "PlayerMotionX" + read "playerMotionY" F32 "PlayerMotionY" + read "playerMotionZ" F32 "PlayerMotionZ" + ] - wire (Between(765, 767)) [ - read "x" F64 "X" - read "y" F64 "Y" - read "z" F64 "Z" - read "radius" F32 "Radius" - read "affectedBlockOffsets" (Array(Named "ExplosionBlockOffset", VarIntCount)) "AffectedBlockOffsets" - read "playerMotionX" F32 "PlayerMotionX" - read "playerMotionY" F32 "PlayerMotionY" - read "playerMotionZ" F32 "PlayerMotionZ" - read "block_interaction_type" VarInt "BlockInteractionType" - read "small_explosion_particle" (Named "Particle") "SmallExplosionParticle" - read "large_explosion_particle" (Named "Particle") "LargeExplosionParticle" - read "sound" (Named "ItemSoundHolder") "Sound" - ] + wire + (Between(765, 767)) + [ + read "x" F64 "X" + read "y" F64 "Y" + read "z" F64 "Z" + read "radius" F32 "Radius" + read + "affectedBlockOffsets" + (Array(Named "ExplosionBlockOffset", VarIntCount)) + "AffectedBlockOffsets" + read "playerMotionX" F32 "PlayerMotionX" + read "playerMotionY" F32 "PlayerMotionY" + read "playerMotionZ" F32 "PlayerMotionZ" + read "block_interaction_type" VarInt "BlockInteractionType" + read "small_explosion_particle" (Named "Particle") "SmallExplosionParticle" + read "large_explosion_particle" (Named "Particle") "LargeExplosionParticle" + read "sound" (Named "ItemSoundHolder") "Sound" + ] - wire (Between(768, 768)) [ - read "x" F64 "X" - read "y" F64 "Y" - read "z" F64 "Z" - read "playerKnockback" (Option(Named "Vec3f")) "PlayerKnockback" - read "explosionParticle" (Named "Particle") "ExplosionParticle" - read "sound" (Named "ItemSoundHolder") "Sound" - ] + wire + (Between(768, 768)) + [ + read "x" F64 "X" + read "y" F64 "Y" + read "z" F64 "Z" + read "playerKnockback" (Option(Named "Vec3f")) "PlayerKnockback" + read "explosionParticle" (Named "Particle") "ExplosionParticle" + read "sound" (Named "ItemSoundHolder") "Sound" + ] - wire (Since 769) [ - read "x" F64 "X" - read "y" F64 "Y" - read "z" F64 "Z" - read "playerKnockback" (Option(Named "Vec3f64")) "PlayerKnockback" - read "explosionParticle" (Named "Particle") "ExplosionParticle" - read "sound" (Named "ItemSoundHolder") "Sound" - ] + wire + (Between(769, 772)) + [ + read "x" F64 "X" + read "y" F64 "Y" + read "z" F64 "Z" + read "playerKnockback" (Option(Named "Vec3f64")) "PlayerKnockback" + read "explosionParticle" (Named "Particle") "ExplosionParticle" + read "sound" (Named "ItemSoundHolder") "Sound" + ] + + wire + (Since 773) + [ + read "center" (Named "Vec3f64") "Center" + read "radius" F32 "Radius" + read "blockCount" I32 "BlockCount" + read "playerKnockback" (Option(Named "Vec3f64")) "PlayerKnockback" + read "explosionParticle" (Named "Particle") "ExplosionParticle" + read "sound" (Named "ItemSoundHolder") "Sound" + read "blockParticles" (Array(Named "ExplosionParticleEntry", VarIntCount)) "BlockParticles" + ] } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/SpawnPosition.fs b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/SpawnPosition.fs index dffa157..aa54d80 100644 --- a/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/SpawnPosition.fs +++ b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/SpawnPosition.fs @@ -7,17 +7,16 @@ module SpawnPosition = let spawnPosition = packet "SpawnPositionPacket" Play Clientbound All { - api [ - field "Location" (TNamed "Position") All - field "Angle" TFloat (Since 755) - ] + api + [ + field "Location" (TNamed "Position") (Until 772) + field "Angle" TFloat (Between(755, 772)) + field "RespawnData" (TNamed "RespawnData") (Since 773) + ] - wire (Until 754) [ - read "location" (Named "Position") "Location" - ] + wire (Until 754) [ read "location" (Named "Position") "Location" ] - wire (Since 755) [ - read "location" (Named "Position") "Location" - read "angle" F32 "Angle" - ] + wire (Between(755, 772)) [ read "location" (Named "Position") "Location"; read "angle" F32 "Angle" ] + + wire (Since 773) [ read "respawnData" (Named "RespawnData") "RespawnData" ] } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/UpdateTime.fs b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/UpdateTime.fs index 3009573..b5d70d7 100644 --- a/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/UpdateTime.fs +++ b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/UpdateTime.fs @@ -7,20 +7,28 @@ module UpdateTime = let updateTime = packet "UpdateTimePacket" Play Clientbound All { - api [ - field "Age" TLong All - field "Time" TLong All - field "TickDayTime" TBool (Since 768) - ] + api + [ + field "Age" TLong All + field "Time" TLong (Until 774) + field "TickDayTime" TBool (Between(768, 774)) + field "ClockUpdates" (TArray(TNamed "ClockUpdate")) (Since 775) + ] - wire (Until 767) [ - read "age" I64 "Age" - read "time" I64 "Time" - ] + wire (Until 767) [ read "age" I64 "Age"; read "time" I64 "Time" ] - wire (Since 768) [ - read "age" I64 "Age" - read "time" I64 "Time" - read "tickDayTime" Bool "TickDayTime" - ] + wire + (Between(768, 774)) + [ + read "age" I64 "Age" + read "time" I64 "Time" + read "tickDayTime" Bool "TickDayTime" + ] + + wire + (Since 775) + [ + read "age" I64 "Age" + read "clockUpdates" (Array(Named "ClockUpdate", VarIntCount)) "ClockUpdates" + ] } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Chat/ChatCommandSigned.fs b/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Chat/ChatCommandSigned.fs index 2a1f74b..f9ccb8e 100644 --- a/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Chat/ChatCommandSigned.fs +++ b/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Chat/ChatCommandSigned.fs @@ -7,32 +7,37 @@ module ChatCommandSigned = let chatCommandSigned = packet "ChatCommandSignedPacket" Play Serverbound (Since 766) { - api [ - field "Command" TString All - field "Timestamp" TLong All - field "Salt" TLong All - field "ArgumentSignatures" (TArray(TNamed "ArgumentSignature")) All - field "MessageCount" TInt All - field "Acknowledged" TBytes All - field "Checksum" TInt (Since 770) - ] + api + [ + field "Command" TString All + field "Timestamp" TLong All + field "Salt" TLong All + field "ArgumentSignatures" (TArray(TNamed "ArgumentSignature")) All + field "MessageCount" TInt All + field "Acknowledged" TBytes All + field "Checksum" TInt (Since 770) + ] - wire (Between(766, 769)) [ - read "command" Str "Command" - read "timestamp" I64 "Timestamp" - read "salt" I64 "Salt" - read "argumentSignatures" (Array(Named "ArgumentSignature", VarIntCount)) "ArgumentSignatures" - read "messageCount" VarInt "MessageCount" - read "acknowledged" (FixedBytes 3) "Acknowledged" - ] + wire + (Between(766, 769)) + [ + read "command" Str "Command" + read "timestamp" I64 "Timestamp" + read "salt" I64 "Salt" + read "argumentSignatures" (Array(Named "ArgumentSignature", VarIntCount)) "ArgumentSignatures" + read "messageCount" VarInt "MessageCount" + read "acknowledged" (FixedBytes 3) "Acknowledged" + ] - wire (Since 770) [ - read "command" Str "Command" - read "timestamp" I64 "Timestamp" - read "salt" I64 "Salt" - read "argumentSignatures" (Array(Named "ArgumentSignature", VarIntCount)) "ArgumentSignatures" - read "messageCount" VarInt "MessageCount" - read "acknowledged" (FixedBytes 3) "Acknowledged" - read "checksum" I8 "Checksum" - ] + wire + (Since 770) + [ + read "command" Str "Command" + read "timestamp" I64 "Timestamp" + read "salt" I64 "Salt" + read "argumentSignatures" (Array(Named "ArgumentSignature", VarIntCount)) "ArgumentSignatures" + read "messageCount" VarInt "MessageCount" + read "acknowledged" (FixedBytes 3) "Acknowledged" + read "checksum" U8 "Checksum" + ] } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/CookieResponse.fs b/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/CookieResponse.fs index e1da130..60f6b4e 100644 --- a/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/CookieResponse.fs +++ b/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/CookieResponse.fs @@ -7,13 +7,11 @@ module CookieResponsePlay = let cookieResponsePlay = packet "CookieResponsePacket" Play Serverbound (Since 766) { - api [ - field "Key" TString All - field "Value" (TOption TBytes) All - ] + api [ field "Key" TString All; field "Value" (TOption TBytes) All ] - wire (Since 766) [ - read "key" Str "Key" - read "value" (Option ByteArray) "Value" - ] + wire (Between(766, 771)) [ read "key" Str "Key"; read "value" (Option ByteArray) "Value" ] + + wire (Between(772, 772)) [ read "key" Str "Key"; read "value" ByteArray "Value" ] + + wire (Since 773) [ read "key" Str "Key"; read "value" (Option ByteArray) "Value" ] } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/DebugSampleSubscription.fs b/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/DebugSampleSubscription.fs index 83498db..2fb3eec 100644 --- a/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/DebugSampleSubscription.fs +++ b/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/DebugSampleSubscription.fs @@ -6,12 +6,8 @@ open McProtocol.Dsl module DebugSampleSubscription = let debugSampleSubscription = - packet "DebugSampleSubscriptionPacket" Play Serverbound (Since 766) { - api [ - field "Type" TInt All - ] + packet "DebugSampleSubscriptionPacket" Play Serverbound (Between(766, 772)) { + api [ field "Type" TInt All ] - wire (Since 766) [ - read "type" VarInt "Type" - ] + wire (Between(766, 772)) [ read "type" VarInt "Type" ] } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Inventory/EnchantItem.fs b/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Inventory/EnchantItem.fs index db28fa8..85bf4d2 100644 --- a/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Inventory/EnchantItem.fs +++ b/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Inventory/EnchantItem.fs @@ -7,23 +7,11 @@ module EnchantItem = let enchantItem = packet "EnchantItemPacket" Play Serverbound All { - api [ - field "WindowId" TInt All - field "Enchantment" TInt All - ] + api [ field "WindowId" TInt All; field "Enchantment" TInt All ] - wire (Until 766) [ - read "windowId" I8 "WindowId" - read "enchantment" I8 "Enchantment" - ] + wire (Until 766) [ read "windowId" I8 "WindowId"; read "enchantment" I8 "Enchantment" ] - wire (Between(767, 767)) [ - read "windowId" U8 "WindowId" - read "enchantment" I8 "Enchantment" - ] + wire (Between(767, 767)) [ read "windowId" U8 "WindowId"; read "enchantment" VarInt "Enchantment" ] - wire (Since 768) [ - read "windowId" VarInt "WindowId" - read "enchantment" I8 "Enchantment" - ] + wire (Since 768) [ read "windowId" VarInt "WindowId"; read "enchantment" VarInt "Enchantment" ] } diff --git a/minecraft-protocol-fs/Spec/Types/Level/ClockUpdate.fs b/minecraft-protocol-fs/Spec/Types/Level/ClockUpdate.fs new file mode 100644 index 0000000..025724f --- /dev/null +++ b/minecraft-protocol-fs/Spec/Types/Level/ClockUpdate.fs @@ -0,0 +1,17 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module ClockUpdate = + + let clockUpdate = + record + "ClockUpdate" + (Since 775) + [ + col "id" VarInt + col "totalTicks" VarLong + col "partialTick" F32 + col "rate" F32 + ] diff --git a/minecraft-protocol-fs/Spec/Types/Level/ExplosionParticleEntry.fs b/minecraft-protocol-fs/Spec/Types/Level/ExplosionParticleEntry.fs new file mode 100644 index 0000000..1390bf9 --- /dev/null +++ b/minecraft-protocol-fs/Spec/Types/Level/ExplosionParticleEntry.fs @@ -0,0 +1,9 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module ExplosionParticleEntry = + + let explosionParticleEntry = + record "ExplosionParticleEntry" (Since 773) [ col "data" (Named "ExplosionParticleInfo"); col "weight" VarInt ] diff --git a/minecraft-protocol-fs/Spec/Types/Level/ExplosionParticleInfo.fs b/minecraft-protocol-fs/Spec/Types/Level/ExplosionParticleInfo.fs new file mode 100644 index 0000000..6ebed39 --- /dev/null +++ b/minecraft-protocol-fs/Spec/Types/Level/ExplosionParticleInfo.fs @@ -0,0 +1,12 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module ExplosionParticleInfo = + + let explosionParticleInfo = + record + "ExplosionParticleInfo" + (Since 773) + [ col "particle" (Named "Particle"); col "scaling" F32; col "speed" F32 ] diff --git a/minecraft-protocol-fs/Spec/Types/Level/GlobalPos.fs b/minecraft-protocol-fs/Spec/Types/Level/GlobalPos.fs new file mode 100644 index 0000000..53afc0f --- /dev/null +++ b/minecraft-protocol-fs/Spec/Types/Level/GlobalPos.fs @@ -0,0 +1,9 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module GlobalPos = + + let globalPos = + record "GlobalPos" (Since 773) [ col "dimensionName" Str; col "location" (Named "Position") ] diff --git a/minecraft-protocol-fs/Spec/Types/Level/RespawnData.fs b/minecraft-protocol-fs/Spec/Types/Level/RespawnData.fs new file mode 100644 index 0000000..ac2c47f --- /dev/null +++ b/minecraft-protocol-fs/Spec/Types/Level/RespawnData.fs @@ -0,0 +1,9 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module RespawnData = + + let respawnData = + record "RespawnData" (Since 773) [ col "globalPos" (Named "GlobalPos"); col "yaw" F32; col "pitch" F32 ] From 1bc3778cb1e5149c0c75303734eb31c05fbc6095 Mon Sep 17 00:00:00 2001 From: Titlehhhh Date: Thu, 20 Aug 2026 15:19:01 +0500 Subject: [PATCH 5/9] sandbox: LpVec3 runtime primitive, checks up to 26.2 Protocol 773 replaced the i16 velocity triple with lpVec3, which protodef declares as a native - McProtoFacts has no structure for it, so the shape came from external sources (MCProtocolLib's readLpVec3, the protocol wiki's data type page, node-minecraft-protocol's codec, Botcraft, decompiled vanilla). It is not spec-able: the encoding is 1 byte for zero, otherwise 48 bits holding a 2-bit scale, a continuation flag and three 15-bit components, with the rest of the scale trailing as a varint. So it joins position and the other hand-written runtime primitives. Runtime.cs: LpVec3 as a record struct of three doubles. Read assembles the 48 bits from an unsigned byte pair plus a big-endian uint32; write picks scale = ceil(chebyshev norm), packs each component with round-half-up (C# banker's rounding would shift bytes), and sets the continuation flag when the scale needs more than two bits. MinecraftVersion.LatestProtocol moves 772 -> 776. Console: LpVec3 is checked against the two sample vectors from the protocol documentation byte for byte (F1FF0000FFFF and F6FF4001051F02), the zero vector must be a single 0x00, and 2000 random vectors across nine magnitude decades must round-trip within one quantization step. UpdateTimePacket and SpawnPositionPacket cases now cover their new layers as well (776 alongside the older versions), since both packets lost their common fields to per-layer groups. The csproj excludes two more generated files that need the unmodelled Particle type, and LoginPacket, which needs NBT. Checked: sandbox console runs clean, every assertion passes. Co-Authored-By: Claude Opus 5 (1M context) --- sandbox/McProtoNet.Sandbox.Console/Program.cs | 88 +++++++++++++++++-- .../McProtoNet.Sandbox.csproj | 3 + sandbox/McProtoNet.Sandbox/Runtime.cs | 69 ++++++++++++++- 3 files changed, 150 insertions(+), 10 deletions(-) diff --git a/sandbox/McProtoNet.Sandbox.Console/Program.cs b/sandbox/McProtoNet.Sandbox.Console/Program.cs index ab8ee91..b92ee08 100644 --- a/sandbox/McProtoNet.Sandbox.Console/Program.cs +++ b/sandbox/McProtoNet.Sandbox.Console/Program.cs @@ -31,6 +31,61 @@ static void Assert(bool condition, [System.Runtime.CompilerServices.CallerArgume Console.WriteLine($" read {back} round-trips: {v == back}\n"); } +// --- LpVec3: hand-written runtime primitive, quantized with a transmitted scale (773+) --- +{ + var zero = new LpVec3(0d, 0d, 0d); + var wz = new MinecraftPrimitiveWriter(); + zero.Write(wz, version); + var zeroBytes = wz.ToArray(); + Assert(Hex(zeroBytes) == "00"); + + // Both vectors and their wire bytes come from the protocol documentation's own samples. + foreach (var (v, expected) in new[] + { + (new LpVec3(1.0d, 0.0d, -1.0d), "F1FF0000FFFF"), + (new LpVec3(10.0d, 0.2d, -5.0d), "F6FF4001051F02"), + }) + { + var w = new MinecraftPrimitiveWriter(); + v.Write(w, version); + var bytes = w.ToArray(); + Assert(Hex(bytes) == expected); + + var r = new MinecraftPrimitiveReader(bytes); + var back = LpVec3.Read(ref r, version); + double step = Math.Ceiling(Math.Max(Math.Abs(v.X), Math.Max(Math.Abs(v.Y), Math.Abs(v.Z)))) * 2d / 32766d; + Assert(Math.Abs(back.X - v.X) <= step && Math.Abs(back.Y - v.Y) <= step && Math.Abs(back.Z - v.Z) <= step); + + Console.WriteLine($"LpVec3 {v}"); + Console.WriteLine($" wire {Hex(bytes)} ({bytes.Length} bytes)"); + Console.WriteLine($" read {back}"); + Console.WriteLine(); + } + + var rng = new Random(776); + for (int i = 0; i < 2000; i++) + { + var v = new LpVec3( + (rng.NextDouble() - 0.5d) * Math.Pow(10d, rng.Next(-4, 6)), + (rng.NextDouble() - 0.5d) * Math.Pow(10d, rng.Next(-4, 6)), + (rng.NextDouble() - 0.5d) * Math.Pow(10d, rng.Next(-4, 6))); + + var w = new MinecraftPrimitiveWriter(); + v.Write(w, version); + var bytes = w.ToArray(); + Assert(bytes.Length == 1 || bytes.Length >= 6); + + var r = new MinecraftPrimitiveReader(bytes); + var back = LpVec3.Read(ref r, version); + double scale = Math.Ceiling(Math.Max(Math.Abs(v.X), Math.Max(Math.Abs(v.Y), Math.Abs(v.Z)))); + double step = Math.Max(scale, 1d) * 2d / 32766d; + Assert(Math.Abs(back.X - v.X) <= step && Math.Abs(back.Y - v.Y) <= step && Math.Abs(back.Z - v.Z) <= step); + } + + Console.WriteLine("LpVec3 2000 random vectors round-trip within one quantization step"); + Console.WriteLine(); +} + // --- Vec3i: varint-encoded --- { var v = new Vec3i(300, -1, 42); @@ -115,17 +170,24 @@ static void Assert(bool condition, [System.Runtime.CompilerServices.CallerArgume Console.WriteLine($" wire {Hex(bytes)} ({bytes.Length} bytes) round-trips: {same}\n"); } -// --- UpdateTimePacket: MULTIVERSION — 2 fields @763, 3 fields @772 --- +// --- UpdateTimePacket: MULTIVERSION - time+tickDayTime through 774, clock list from 775 --- { - var pkt = new UpdateTimePacket(6000, 13000, V768_Last: new(true)); - foreach (var v in new[] { 763, 772 }) + var cases = new (int Version, UpdateTimePacket Packet)[] + { + (763, new UpdateTimePacket(6000, VUntil767: new(13000))), + (772, new UpdateTimePacket(6000, V768_774: new(13000, true))), + (776, new UpdateTimePacket(6000, V775_Last: new(new[] { new ClockUpdate(0, 13000, 0.25f, 1f) }))), + }; + + foreach (var (v, pkt) in cases) { var w = new MinecraftPrimitiveWriter(); pkt.Write(w, v); var bytes = w.ToArray(); var r = new MinecraftPrimitiveReader(bytes); var back = UpdateTimePacket.Read(ref r, v); - Console.WriteLine($"UpdateTimePacket @{v}: {bytes.Length} bytes, age/time ok: {back.Age == 6000 && back.Time == 13000}, tickDayTime={back.V768_Last?.TickDayTime}"); + Assert(back.Age == 6000); + Console.WriteLine($"UpdateTimePacket @{v}: {bytes.Length} bytes, clocks={back.V775_Last?.ClockUpdates.Length.ToString() ?? "-"}, tickDayTime={back.V768_774?.TickDayTime.ToString() ?? "-"}"); } Console.WriteLine(); } @@ -253,18 +315,26 @@ static void Assert(bool condition, [System.Runtime.CompilerServices.CallerArgume Console.WriteLine(); } -// --- SpawnPositionPacket: MULTIVERSION — position only @754, +angle f32 @755 --- +// --- SpawnPositionPacket: MULTIVERSION - position @754, +angle @755, RespawnData @773 --- { - var pkt = new SpawnPositionPacket(new Position(10, 64, -20), V755_Last: new(90f)); - foreach (var v in new[] { 754, 772 }) + var loc = new Position(10, 64, -20); + var cases = new (int Version, SpawnPositionPacket Packet)[] + { + (754, new SpawnPositionPacket(VUntil754: new(loc))), + (772, new SpawnPositionPacket(V755_772: new(loc, 90f))), + (776, new SpawnPositionPacket(V773_Last: new(new RespawnData(new GlobalPos("minecraft:overworld", loc), 90f, -12.5f)))), + }; + + foreach (var (v, pkt) in cases) { var w = new MinecraftPrimitiveWriter(); pkt.Write(w, v); var bytes = w.ToArray(); var r = new MinecraftPrimitiveReader(bytes); var back = SpawnPositionPacket.Read(ref r, v); - var ok = back.Location == pkt.Location && (back.V755_Last?.Angle ?? 0f) == (v >= 755 ? 90f : 0f); - Console.WriteLine($"SpawnPositionPacket @{v}: {bytes.Length} bytes, roundtrip: {ok}, loc={back.Location}"); + var readLoc = back.VUntil754?.Location ?? back.V755_772?.Location ?? back.V773_Last!.Value.RespawnData.GlobalPos.Location; + Assert(readLoc == loc); + Console.WriteLine($"SpawnPositionPacket @{v}: {bytes.Length} bytes, loc={readLoc}"); } Assert(SpawnPositionPacket.GetPacketId(735) == 0x42); Assert(SpawnPositionPacket.GetPacketId(772) == 0x5A); diff --git a/sandbox/McProtoNet.Sandbox/McProtoNet.Sandbox.csproj b/sandbox/McProtoNet.Sandbox/McProtoNet.Sandbox.csproj index 9d31d20..90e24ed 100644 --- a/sandbox/McProtoNet.Sandbox/McProtoNet.Sandbox.csproj +++ b/sandbox/McProtoNet.Sandbox/McProtoNet.Sandbox.csproj @@ -17,11 +17,14 @@ + { + private const double MaxQuantized = 32766.0; + private const double AbsMax = 1.7179869183E10; + private const double AbsMin = 3.051944088384301E-5; + + public static LpVec3 Read(ref MinecraftPrimitiveReader reader, int protocolVersion) + { + uint first = reader.ReadUnsignedByte(); + if (first == 0) return new LpVec3(0d, 0d, 0d); + + uint second = reader.ReadUnsignedByte(); + ulong packed = ((ulong)reader.ReadUnsignedInt() << 16) | ((ulong)second << 8) | first; + + long scale = (long)(first & 3); + if ((first & 4) != 0) scale |= (long)(uint)reader.ReadVarInt() << 2; + + return new LpVec3( + Unpack(packed >> 3) * scale, + Unpack(packed >> 18) * scale, + Unpack(packed >> 33) * scale); + } + + public readonly void Write(MinecraftPrimitiveWriter writer, int protocolVersion) + { + double x = Clamp(X), y = Clamp(Y), z = Clamp(Z); + double max = Math.Max(Math.Abs(x), Math.Max(Math.Abs(y), Math.Abs(z))); + + if (max < AbsMin) + { + writer.WriteUnsignedByte(0); + return; + } + + long scale = (long)Math.Ceiling(max); + double inv = 1d / scale; + bool continued = (scale & 3) != scale; + + ulong packed = + (ulong)(scale & 3) + | (continued ? 4UL : 0UL) + | (Pack(x * inv) << 3) + | (Pack(y * inv) << 18) + | (Pack(z * inv) << 33); + + writer.WriteUnsignedByte((byte)(packed & 0xFF)); + writer.WriteUnsignedByte((byte)((packed >> 8) & 0xFF)); + writer.WriteUnsignedInt((uint)(packed >> 16)); + + if (continued) writer.WriteVarInt((int)(scale >> 2)); + } + + private static double Unpack(ulong packed) => + Math.Min(packed & 0x7FFF, MaxQuantized) * 2d / MaxQuantized - 1d; + + // Java's Math.round is floor(v + 0.5); C# Math.Round would bank on .5 and shift bytes. + private static ulong Pack(double value) => + (ulong)(long)Math.Floor((value * 0.5d + 0.5d) * MaxQuantized + 0.5d); + + private static double Clamp(double value) => + double.IsNaN(value) ? 0d : Math.Clamp(value, -AbsMax, AbsMax); + } } namespace McProtoNet.Serialization From ad5bc5575146b8746801ad4b1f96a60b3fb85a73 Mon Sep 17 00:00:00 2001 From: Titlehhhh Date: Thu, 20 Aug 2026 15:28:07 +0500 Subject: [PATCH 6/9] spec: the packets added at 773 and 775, plus play.toClient.login Nine packets that arrived above protocol 772 had no spec at all; they need nothing the codegen is missing, so they are modelled now: - configuration.toClient.code_of_conduct (contents string) and configuration.toServer.accept_code_of_conduct (empty), both 773+. - play.toClient.game_test_highlight_pos (two positions, 773+) and play.toClient.low_disk_space_warning (empty, 775+). - play.toServer.attack and play.toServer.spectate_entity (entity id varint, 775+) - two of the three packets the old use_entity union split into on 26.1. - play.toClient.game_rule_values and play.toServer.set_game_rule (775+), with the new named type GameRule (name, value). - play.toClient.login, which had no spec despite being the join packet. All nine wire layers from 736 to 776 are modelled; on 776 onlineMode is inserted before enforcesSecureChat, which three independent sources confirm against the bot-generated data. The module in Login.fs is named LoginPlay so it does not shadow the DSL's ProtocolState.Login case, which every spec has in scope. SpawnInfo is deliberately left alone. Facts rename its death field's type from DeathLocation to GlobalPos at 773, but the two types are byte-identical (dimension identifier plus position), so the rename has no wire effect - and a layer for it would not compile, because an api field cannot change its named type between versions. Checked: dotnet build clean; `gen` emits no new TODO markers; the sandbox console runs every assertion clean; `coverage` now reports 210/257 on pv 776 against 201 before this batch. F# formatted with Fantomas. Co-Authored-By: Claude Opus 5 (1M context) --- .../Clientbound/CodeOfConduct.fs | 12 + .../Serverbound/AcceptCodeOfConduct.fs | 12 + .../Play/Clientbound/Level/GameRuleValues.fs | 12 + .../Clientbound/Level/GameTestHighlightPos.fs | 22 ++ .../Spec/Packets/Play/Clientbound/Login.fs | 218 ++++++++++++++++++ .../Play/Clientbound/LowDiskSpaceWarning.fs | 12 + .../Play/Serverbound/Level/SetGameRule.fs | 12 + .../Packets/Play/Serverbound/Player/Attack.fs | 13 ++ .../Play/Serverbound/Player/SpectateEntity.fs | 13 ++ .../Spec/Types/Level/GameRule.fs | 8 + 10 files changed, 334 insertions(+) create mode 100644 minecraft-protocol-fs/Spec/Packets/Configuration/Clientbound/CodeOfConduct.fs create mode 100644 minecraft-protocol-fs/Spec/Packets/Configuration/Serverbound/AcceptCodeOfConduct.fs create mode 100644 minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/GameRuleValues.fs create mode 100644 minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/GameTestHighlightPos.fs create mode 100644 minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Login.fs create mode 100644 minecraft-protocol-fs/Spec/Packets/Play/Clientbound/LowDiskSpaceWarning.fs create mode 100644 minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Level/SetGameRule.fs create mode 100644 minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Player/Attack.fs create mode 100644 minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Player/SpectateEntity.fs create mode 100644 minecraft-protocol-fs/Spec/Types/Level/GameRule.fs diff --git a/minecraft-protocol-fs/Spec/Packets/Configuration/Clientbound/CodeOfConduct.fs b/minecraft-protocol-fs/Spec/Packets/Configuration/Clientbound/CodeOfConduct.fs new file mode 100644 index 0000000..5f1ce36 --- /dev/null +++ b/minecraft-protocol-fs/Spec/Packets/Configuration/Clientbound/CodeOfConduct.fs @@ -0,0 +1,12 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module CodeOfConductConfiguration = + + let codeOfConductConfiguration = + packet "CodeOfConductPacket" Configuration Clientbound (Since 773) { + api [ field "Contents" TString All ] + wire (Since 773) [ read "contents" Str "Contents" ] + } diff --git a/minecraft-protocol-fs/Spec/Packets/Configuration/Serverbound/AcceptCodeOfConduct.fs b/minecraft-protocol-fs/Spec/Packets/Configuration/Serverbound/AcceptCodeOfConduct.fs new file mode 100644 index 0000000..6fe4f8b --- /dev/null +++ b/minecraft-protocol-fs/Spec/Packets/Configuration/Serverbound/AcceptCodeOfConduct.fs @@ -0,0 +1,12 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module AcceptCodeOfConductConfiguration = + + let acceptCodeOfConductConfiguration = + packet "AcceptCodeOfConductPacket" Configuration Serverbound (Since 773) { + api [] + wire (Since 773) [] + } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/GameRuleValues.fs b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/GameRuleValues.fs new file mode 100644 index 0000000..a1fab33 --- /dev/null +++ b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/GameRuleValues.fs @@ -0,0 +1,12 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module GameRuleValues = + + let gameRuleValues = + packet "GameRuleValuesPacket" Play Clientbound (Since 775) { + api [ field "Values" (TArray(TNamed "GameRule")) All ] + wire (Since 775) [ read "values" (Array(Named "GameRule", VarIntCount)) "Values" ] + } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/GameTestHighlightPos.fs b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/GameTestHighlightPos.fs new file mode 100644 index 0000000..620fd2d --- /dev/null +++ b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Level/GameTestHighlightPos.fs @@ -0,0 +1,22 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module GameTestHighlightPos = + + let gameTestHighlightPos = + packet "GameTestHighlightPosPacket" Play Clientbound (Since 773) { + api + [ + field "AbsolutePos" (TNamed "Position") All + field "RelativePos" (TNamed "Position") All + ] + + wire + (Since 773) + [ + read "absolutePos" (Named "Position") "AbsolutePos" + read "relativePos" (Named "Position") "RelativePos" + ] + } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Login.fs b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Login.fs new file mode 100644 index 0000000..0337bdc --- /dev/null +++ b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/Login.fs @@ -0,0 +1,218 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module LoginPlay = + + let loginPlay = + packet "LoginPacket" Play Clientbound All { + api + [ + field "EntityId" TInt All + field "IsHardcore" TBool (Since 751) + field "Gamemode" TInt (Until 765) + field "PreviousGamemode" TInt (Until 765) + field "WorldNames" (TArray TString) All + field "DimensionCodec" TNbt (Until 763) + field "Dimension" TString (Until 736) + field "DimensionNbt" TNbt (Between(751, 758)) + field "WorldType" TString (Between(759, 765)) + field "WorldName" TString (Until 765) + field "HashedSeed" TLong (Until 765) + field "MaxPlayers" TInt All + field "ViewDistance" TInt All + field "SimulationDistance" TInt (Since 757) + field "ReducedDebugInfo" TBool All + field "EnableRespawnScreen" TBool All + field "IsDebug" TBool (Until 765) + field "IsFlat" TBool (Until 765) + field "Death" (TOption(TNamed "DeathLocation")) (Between(759, 765)) + field "PortalCooldown" TInt (Between(763, 765)) + field "DoLimitedCrafting" TBool (Since 764) + field "WorldState" (TNamed "SpawnInfo") (Since 766) + field "OnlineMode" TBool (Since 776) + field "EnforcesSecureChat" TBool (Since 766) + ] + + wire + (Until 736) + [ + read "entityId" I32 "EntityId" + read "gameMode" U8 "Gamemode" + read "previousGameMode" U8 "PreviousGamemode" + read "worldNames" (Array(Str, VarIntCount)) "WorldNames" + read "dimensionCodec" Nbt "DimensionCodec" + read "dimension" Str "Dimension" + read "worldName" Str "WorldName" + read "hashedSeed" I64 "HashedSeed" + read "maxPlayers" U8 "MaxPlayers" + read "viewDistance" VarInt "ViewDistance" + read "reducedDebugInfo" Bool "ReducedDebugInfo" + read "enableRespawnScreen" Bool "EnableRespawnScreen" + read "isDebug" Bool "IsDebug" + read "isFlat" Bool "IsFlat" + ] + + wire + (Between(751, 754)) + [ + read "entityId" I32 "EntityId" + read "isHardcore" Bool "IsHardcore" + read "gameMode" U8 "Gamemode" + read "previousGameMode" U8 "PreviousGamemode" + read "worldNames" (Array(Str, VarIntCount)) "WorldNames" + read "dimensionCodec" Nbt "DimensionCodec" + read "dimension" Nbt "DimensionNbt" + read "worldName" Str "WorldName" + read "hashedSeed" I64 "HashedSeed" + read "maxPlayers" VarInt "MaxPlayers" + read "viewDistance" VarInt "ViewDistance" + read "reducedDebugInfo" Bool "ReducedDebugInfo" + read "enableRespawnScreen" Bool "EnableRespawnScreen" + read "isDebug" Bool "IsDebug" + read "isFlat" Bool "IsFlat" + ] + + wire + (Between(755, 756)) + [ + read "entityId" I32 "EntityId" + read "isHardcore" Bool "IsHardcore" + read "gameMode" U8 "Gamemode" + read "previousGameMode" I8 "PreviousGamemode" + read "worldNames" (Array(Str, VarIntCount)) "WorldNames" + read "dimensionCodec" Nbt "DimensionCodec" + read "dimension" Nbt "DimensionNbt" + read "worldName" Str "WorldName" + read "hashedSeed" I64 "HashedSeed" + read "maxPlayers" VarInt "MaxPlayers" + read "viewDistance" VarInt "ViewDistance" + read "reducedDebugInfo" Bool "ReducedDebugInfo" + read "enableRespawnScreen" Bool "EnableRespawnScreen" + read "isDebug" Bool "IsDebug" + read "isFlat" Bool "IsFlat" + ] + + wire + (Between(757, 758)) + [ + read "entityId" I32 "EntityId" + read "isHardcore" Bool "IsHardcore" + read "gameMode" U8 "Gamemode" + read "previousGameMode" I8 "PreviousGamemode" + read "worldNames" (Array(Str, VarIntCount)) "WorldNames" + read "dimensionCodec" Nbt "DimensionCodec" + read "dimension" Nbt "DimensionNbt" + read "worldName" Str "WorldName" + read "hashedSeed" I64 "HashedSeed" + read "maxPlayers" VarInt "MaxPlayers" + read "viewDistance" VarInt "ViewDistance" + read "simulationDistance" VarInt "SimulationDistance" + read "reducedDebugInfo" Bool "ReducedDebugInfo" + read "enableRespawnScreen" Bool "EnableRespawnScreen" + read "isDebug" Bool "IsDebug" + read "isFlat" Bool "IsFlat" + ] + + wire + (Between(759, 762)) + [ + read "entityId" I32 "EntityId" + read "isHardcore" Bool "IsHardcore" + read "gameMode" U8 "Gamemode" + read "previousGameMode" I8 "PreviousGamemode" + read "worldNames" (Array(Str, VarIntCount)) "WorldNames" + read "dimensionCodec" Nbt "DimensionCodec" + read "worldType" Str "WorldType" + read "worldName" Str "WorldName" + read "hashedSeed" I64 "HashedSeed" + read "maxPlayers" VarInt "MaxPlayers" + read "viewDistance" VarInt "ViewDistance" + read "simulationDistance" VarInt "SimulationDistance" + read "reducedDebugInfo" Bool "ReducedDebugInfo" + read "enableRespawnScreen" Bool "EnableRespawnScreen" + read "isDebug" Bool "IsDebug" + read "isFlat" Bool "IsFlat" + read "death" (Option(Named "DeathLocation")) "Death" + ] + + wire + (Between(763, 763)) + [ + read "entityId" I32 "EntityId" + read "isHardcore" Bool "IsHardcore" + read "gameMode" U8 "Gamemode" + read "previousGameMode" I8 "PreviousGamemode" + read "worldNames" (Array(Str, VarIntCount)) "WorldNames" + read "dimensionCodec" Nbt "DimensionCodec" + read "worldType" Str "WorldType" + read "worldName" Str "WorldName" + read "hashedSeed" I64 "HashedSeed" + read "maxPlayers" VarInt "MaxPlayers" + read "viewDistance" VarInt "ViewDistance" + read "simulationDistance" VarInt "SimulationDistance" + read "reducedDebugInfo" Bool "ReducedDebugInfo" + read "enableRespawnScreen" Bool "EnableRespawnScreen" + read "isDebug" Bool "IsDebug" + read "isFlat" Bool "IsFlat" + read "death" (Option(Named "DeathLocation")) "Death" + read "portalCooldown" VarInt "PortalCooldown" + ] + + wire + (Between(764, 765)) + [ + read "entityId" I32 "EntityId" + read "isHardcore" Bool "IsHardcore" + read "worldNames" (Array(Str, VarIntCount)) "WorldNames" + read "maxPlayers" VarInt "MaxPlayers" + read "viewDistance" VarInt "ViewDistance" + read "simulationDistance" VarInt "SimulationDistance" + read "reducedDebugInfo" Bool "ReducedDebugInfo" + read "enableRespawnScreen" Bool "EnableRespawnScreen" + read "doLimitedCrafting" Bool "DoLimitedCrafting" + read "worldType" Str "WorldType" + read "worldName" Str "WorldName" + read "hashedSeed" I64 "HashedSeed" + read "gameMode" U8 "Gamemode" + read "previousGameMode" I8 "PreviousGamemode" + read "isDebug" Bool "IsDebug" + read "isFlat" Bool "IsFlat" + read "death" (Option(Named "DeathLocation")) "Death" + read "portalCooldown" VarInt "PortalCooldown" + ] + + wire + (Between(766, 775)) + [ + read "entityId" I32 "EntityId" + read "isHardcore" Bool "IsHardcore" + read "worldNames" (Array(Str, VarIntCount)) "WorldNames" + read "maxPlayers" VarInt "MaxPlayers" + read "viewDistance" VarInt "ViewDistance" + read "simulationDistance" VarInt "SimulationDistance" + read "reducedDebugInfo" Bool "ReducedDebugInfo" + read "enableRespawnScreen" Bool "EnableRespawnScreen" + read "doLimitedCrafting" Bool "DoLimitedCrafting" + read "worldState" (Named "SpawnInfo") "WorldState" + read "enforcesSecureChat" Bool "EnforcesSecureChat" + ] + + wire + (Since 776) + [ + read "entityId" I32 "EntityId" + read "isHardcore" Bool "IsHardcore" + read "worldNames" (Array(Str, VarIntCount)) "WorldNames" + read "maxPlayers" VarInt "MaxPlayers" + read "viewDistance" VarInt "ViewDistance" + read "simulationDistance" VarInt "SimulationDistance" + read "reducedDebugInfo" Bool "ReducedDebugInfo" + read "enableRespawnScreen" Bool "EnableRespawnScreen" + read "doLimitedCrafting" Bool "DoLimitedCrafting" + read "worldState" (Named "SpawnInfo") "WorldState" + read "onlineMode" Bool "OnlineMode" + read "enforcesSecureChat" Bool "EnforcesSecureChat" + ] + } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/LowDiskSpaceWarning.fs b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/LowDiskSpaceWarning.fs new file mode 100644 index 0000000..41b58fa --- /dev/null +++ b/minecraft-protocol-fs/Spec/Packets/Play/Clientbound/LowDiskSpaceWarning.fs @@ -0,0 +1,12 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module LowDiskSpaceWarning = + + let lowDiskSpaceWarning = + packet "LowDiskSpaceWarningPacket" Play Clientbound (Since 775) { + api [] + wire (Since 775) [] + } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Level/SetGameRule.fs b/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Level/SetGameRule.fs new file mode 100644 index 0000000..a22c6b2 --- /dev/null +++ b/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Level/SetGameRule.fs @@ -0,0 +1,12 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module SetGameRule = + + let setGameRule = + packet "SetGameRulePacket" Play Serverbound (Since 775) { + api [ field "Entries" (TArray(TNamed "GameRule")) All ] + wire (Since 775) [ read "entries" (Array(Named "GameRule", VarIntCount)) "Entries" ] + } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Player/Attack.fs b/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Player/Attack.fs new file mode 100644 index 0000000..97d8a15 --- /dev/null +++ b/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Player/Attack.fs @@ -0,0 +1,13 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module Attack = + + let attack = + packet "AttackPacket" Play Serverbound (Since 775) { + api [ field "EntityId" TInt All ] + + wire (Since 775) [ read "entityId" VarInt "EntityId" ] + } diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Player/SpectateEntity.fs b/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Player/SpectateEntity.fs new file mode 100644 index 0000000..9d62b84 --- /dev/null +++ b/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Player/SpectateEntity.fs @@ -0,0 +1,13 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module SpectateEntity = + + let spectateEntity = + packet "SpectateEntityPacket" Play Serverbound (Since 775) { + api [ field "EntityId" TInt All ] + + wire (Since 775) [ read "entityId" VarInt "EntityId" ] + } diff --git a/minecraft-protocol-fs/Spec/Types/Level/GameRule.fs b/minecraft-protocol-fs/Spec/Types/Level/GameRule.fs new file mode 100644 index 0000000..f27096c --- /dev/null +++ b/minecraft-protocol-fs/Spec/Types/Level/GameRule.fs @@ -0,0 +1,8 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module GameRule = + + let gameRule = record "GameRule" (Since 775) [ col "name" Str; col "value" Str ] From 5938bf31840bf89700a85749e007301944ac8bca Mon Sep 17 00:00:00 2001 From: Titlehhhh Date: Thu, 20 Aug 2026 16:39:24 +0500 Subject: [PATCH 7/9] codegen: unions render as dunet discriminated unions The union gap is closed on both sides. A union spec now renders to Unions/.cs as a [Union] partial record whose cases are nested partial records, and the two container paths that consume one are generated instead of stubbed: a layout's readUnion becomes Union.Read(ref reader, protocolVersion, disc), and on the write side the wire-only discriminator it pairs with is derived from the model through Union.Discriminator(protocolVersion), followed by Union.Write. Read branches on protocol version first, then switches on the discriminator; Write switches on the case; a case written at a version whose layer does not carry it throws. Case naming keeps the spec's name while the parameter list is identical in every layer that carries it, and suffixes the layer label otherwise, reusing the packet layer-label helper. TeamAction therefore has CreatedVUntil764 and CreatedV771_Last side by side, with Removed shared. Case records shadowed the same-named types they carry - partial record Rotations(Rotations Value) bound the parameter to the case, not the type - so arm type references are namespace-qualified before rendering. TeamsPacket and EntityMetadataEntry generate completely now and left the allowlist; six stubs remain, none of them union-shaped: inlineUnion (EncryptionResponse), SentinelArray, map columns, FixedBytes and array-of-array. Around the codegen: - TeamAction's 771+ arms read the team flags byte into the new TeamFlags bitflags spec instead of discarding it. With a real write path, a discarded byte meant every team this library sends carried friendly fire and see-friendly-invisible as off. - The sandbox runtime gained a minimal NBT model, because without NbtTag no union compiles there at all. It unblocked more than unions: the csproj exclusion list drops from 30 files to 10. - Spec/Unions/Codegen/UnionShapeProbe.fs is a codegen fixture, not protocol: it reproduces the three shapes EntityMetadataValue is built from (cases named after C# keywords, a case carrying a same-named type, a case carrying an array of a named type) so the sandbox actually binds them. It is never delivered. - deliver-to-mcprotonet.ps1 refuses to deliver a set whose files reference an excluded type, listing every offender, before it touches the target directory. It refuses today: the Flow aggregates reference TeamsPacket while the unions are held back, and they stay held back until McProtoNet takes a plain Dunet reference. Checked: dotnet build clean; gen emits the six allowlisted stubs and nothing else; the sandbox console runs every assertion clean, including Teams round-tripping at 764 and 772 with a byte-identical re-write, the flags byte travelling as one u8, and the probe union round-tripping all five cases. Fantomas reformatted parts of CSharp.fs that were not formatted at HEAD, so the diff there is larger than the union work alone. Co-Authored-By: Claude Opus 5 (1M context) --- minecraft-protocol-fs/Codegen/CSharp.fs | 779 +++++++++++++++--- .../Codegen/CSharpSurface.fs | 12 + minecraft-protocol-fs/Codegen/Generator.fs | 14 +- minecraft-protocol-fs/Codegen/Target.fs | 2 + .../Spec/Bitflags/Scoreboard/TeamFlags.fs | 11 + .../Spec/Unions/Codegen/UnionShapeProbe.fs | 17 + .../Spec/Unions/Scoreboard/TeamAction.fs | 112 +-- minecraft-protocol-fs/Spec/todo-allowlist.txt | 10 +- sandbox/McProtoNet.Sandbox.Console/Program.cs | 133 +++ .../McProtoNet.Sandbox.csproj | 39 +- sandbox/McProtoNet.Sandbox/Runtime.cs | 142 ++++ scripts/deliver-to-mcprotonet.ps1 | 70 +- 12 files changed, 1121 insertions(+), 220 deletions(-) create mode 100644 minecraft-protocol-fs/Spec/Bitflags/Scoreboard/TeamFlags.fs create mode 100644 minecraft-protocol-fs/Spec/Unions/Codegen/UnionShapeProbe.fs diff --git a/minecraft-protocol-fs/Codegen/CSharp.fs b/minecraft-protocol-fs/Codegen/CSharp.fs index a11d482..a17a814 100644 --- a/minecraft-protocol-fs/Codegen/CSharp.fs +++ b/minecraft-protocol-fs/Codegen/CSharp.fs @@ -30,17 +30,86 @@ module CSharp = /// C# reserved keywords; a camel-cased identifier that collides with one must be verbatim /// (`@namespace`), else Roslyn emits the bare keyword and the file fails to parse. let private csharpKeywords = - set [ - "abstract"; "as"; "base"; "bool"; "break"; "byte"; "case"; "catch"; "char"; "checked" - "class"; "const"; "continue"; "decimal"; "default"; "delegate"; "do"; "double"; "else" - "enum"; "event"; "explicit"; "extern"; "false"; "finally"; "fixed"; "float"; "for" - "foreach"; "goto"; "if"; "implicit"; "in"; "int"; "interface"; "internal"; "is"; "lock" - "long"; "namespace"; "new"; "null"; "object"; "operator"; "out"; "override"; "params" - "private"; "protected"; "public"; "readonly"; "ref"; "return"; "sbyte"; "sealed" - "short"; "sizeof"; "stackalloc"; "static"; "string"; "struct"; "switch"; "this"; "throw" - "true"; "try"; "typeof"; "uint"; "ulong"; "unchecked"; "unsafe"; "ushort"; "using" - "virtual"; "void"; "volatile"; "while" - ] + set + [ + "abstract" + "as" + "base" + "bool" + "break" + "byte" + "case" + "catch" + "char" + "checked" + "class" + "const" + "continue" + "decimal" + "default" + "delegate" + "do" + "double" + "else" + "enum" + "event" + "explicit" + "extern" + "false" + "finally" + "fixed" + "float" + "for" + "foreach" + "goto" + "if" + "implicit" + "in" + "int" + "interface" + "internal" + "is" + "lock" + "long" + "namespace" + "new" + "null" + "object" + "operator" + "out" + "override" + "params" + "private" + "protected" + "public" + "readonly" + "ref" + "return" + "sbyte" + "sealed" + "short" + "sizeof" + "stackalloc" + "static" + "string" + "struct" + "switch" + "this" + "throw" + "true" + "try" + "typeof" + "uint" + "ulong" + "unchecked" + "unsafe" + "ushort" + "using" + "virtual" + "void" + "volatile" + "while" + ] let private camel (s: string) = let n = @@ -98,6 +167,22 @@ module CSharp = typeName s.VersionParam + /// A discriminator the layer has no arm for: a stream condition, not a codegen gap. + let private throwNoCaseLine (s: RuntimeSurface) (typeName: string) = + sprintf + "throw new System.NotSupportedException($\"%s has no case for discriminator {%s} at protocol version {%s}.\");" + typeName + s.DiscriminatorParam + s.VersionParam + + /// A case whose layer does not cover the version being written: the model holds a shape this + /// version cannot carry, so the write must fail rather than invent one. + let private throwNoCaseLayerLine (s: RuntimeSurface) (typeName: string) = + sprintf + "throw new System.NotSupportedException($\"%s case {GetType().Name} has no wire layout for protocol version {%s}.\");" + typeName + s.VersionParam + /// Local variable name for an api field; dodges the generated method's own parameter names. let private localName (s: RuntimeSurface) (api: string) = let n = camel api @@ -263,6 +348,14 @@ module CSharp = | Named n -> Some n | _ -> s.Primitives.TryFind w |> Option.map (fun p -> p.CsType) + /// C# type of a whole wire field, wrappers included — what a union case declares as a + /// positional parameter. `None` means the shape has no renderer yet. + let rec private wireCsType (s: RuntimeSurface) (w: WireType) : string option = + match w with + | Option inner -> wireCsType s inner |> Option.map (fun t -> t + "?") + | Array(item, _) -> wireCsType s item |> Option.map (fun t -> t + "[]") + | _ -> itemCsType s w + /// Count-prefix read: setup lines + the count expression. let private countRead (s: RuntimeSurface) (cnt: ArrayCount) (ln: string) : (string list * string) option = match cnt with @@ -282,8 +375,14 @@ module CSharp = s.Primitives.TryFind w |> Option.map (fun p -> [ sprintf "%s.%s((%s)%s.Length);" s.WriterParam p.WriteMethod p.CsType value ]) - /// One wire entry -> read statement lines. - let private readEntryLines (s: RuntimeSurface) (entry: WireEntry) : Result = + /// One wire entry -> read statement lines. `bound` are the api names the entries before this + /// one in the same layout already read into locals — the only names an entry may address. + let private readEntryLines + (s: RuntimeSurface) + (bound: Set) + (entry: WireEntry) + : Result + = match entry with | Read(_, Option inner, api) -> let ln = localName s api @@ -327,20 +426,90 @@ module CSharp = match readExpr s wt with | Ok call -> Ok [ sprintf "%s;" call ] | Error e -> Error(sprintf "discard '%s' (%s)" wire e) + | ReadUnion(disc, _, api) when not (bound.Contains disc) -> + // Nothing read '%s' yet, so the emitted call would name a local that does not exist: + // valid-looking C# that cannot compile. A stub is the honest answer. + Error(sprintf "read union '%s' (discriminator '%s' is not read by an earlier entry)" api disc) + | ReadUnion(disc, unionName, api) -> + // the discriminator is a plain wire field an earlier entry already read into a local; + // the cast normalizes whatever integer it was to the union's `int discriminator` + Ok + [ + sprintf + "var %s = %s.%s(ref %s, %s, (int)%s);" + (localName s api) + unionName + s.ReadMethodName + s.ReaderParam + s.VersionParam + (localName s disc) + ] | other -> Error(sprintf "%A" other) - /// One wire entry -> write statement lines. `apiTypes` drives narrowing casts. + /// Read entries in layout order, pairing each with its rendered lines. The fold is what makes + /// "an earlier entry bound this" checkable: an entry only ever sees the api names before it. + let private readEntriesLines + (s: RuntimeSurface) + (entries: WireEntry list) + : (WireEntry * Result) list + = + entries + |> List.mapFold + (fun bound e -> + let rendered = readEntryLines s bound e + + let bound = + match e with + | Read(_, _, api) -> Set.add api bound + | _ -> bound + + (e, rendered), bound) + Set.empty + |> fst + + let private hasReadError (results: (WireEntry * Result) list) = + results + |> List.exists (function + | _, Error _ -> true + | _ -> false) + + /// Wire-only discriminator -> the api field of the union that consumes it. The write side has + /// no such wire field in the model, so the union's own `Discriminator(pv)` is its only source. + let private discriminatorUnions (entries: WireEntry list) : Map = + entries + |> List.choose (function + | ReadUnion(disc, _, api) -> Some(disc, api) + | _ -> None) + |> Map.ofList + + /// One wire entry -> write statement lines. `apiTypes` drives narrowing casts; `discUnions` + /// pairs a wire-only discriminator with the union field that derives its value. let private writeEntryLines (s: RuntimeSurface) (apiTypes: Map) + (discUnions: Map) (entry: WireEntry) : Result = match entry with - | Read(_, _, api) when api.StartsWith "_" -> - // wire-only discriminator: its value must be derived from the model, which needs the - // union/conditional entry that consumes it to be generated first - Error(sprintf "write wire-only '%s' (derive from model)" api) + | Read(_, wt, api) when api.StartsWith "_" -> + // wire-only field: the model carries no such field, so the value must be derived. Only + // a union consumer knows how — anything else stays a gap. + match discUnions.TryFind api with + | None -> Error(sprintf "write wire-only '%s' (derive from model)" api) + | Some unionApi -> + let disc = sprintf "%s.%s(%s)" unionApi s.DiscriminatorMethodName s.VersionParam + + // `Discriminator` hands back the api-level integer; a narrower wire primitive must + // report a key it cannot carry instead of wrapping it (same rule as `countRead`). + let value = + match s.Primitives.TryFind wt with + | Some p when p.CsType <> csType s TInt -> sprintf "checked((%s)%s)" p.CsType disc + | _ -> disc + + match writeExpr s wt None value with + | Ok call -> Ok [ sprintf "%s;" call ] + | Error e -> Error(sprintf "write discriminator '%s' (%s)" api e) | Read(_, Option inner, api) -> let v = camel api + "Value" @@ -402,6 +571,7 @@ module CSharp = match writeExpr s wt None value with | Ok call -> Ok [ sprintf "%s;" call ] | Error e -> Error(sprintf "discard '%s' (%s)" wire e) + | ReadUnion(_, _, api) -> Ok [ sprintf "%s.%s(%s, %s);" api s.WriteMethodName s.WriterParam s.VersionParam ] | other -> Error(sprintf "%A" other) // ----- per-layout bodies + version branching ----- @@ -413,9 +583,13 @@ module CSharp = (l: WireLayout) : string list = - let results = l.Entries |> List.map (fun e -> e, readEntryLines s e) + let results = readEntriesLines s l.Entries - let errors = results |> List.choose (function _, Error e -> Some e | _ -> None) + let errors = + results + |> List.choose (function + | _, Error e -> Some e + | _ -> None) if not (List.isEmpty errors) then (errors |> List.map todoLine) @ [ throwTodoLine name ] @@ -423,11 +597,16 @@ module CSharp = let bound = results |> List.choose (function - | Read(_, _, api), Ok _ -> Some(localName s api) + | Read(_, _, api), Ok _ + | ReadUnion(_, _, api), Ok _ -> Some(localName s api) | _ -> None) |> Set.ofList - let lines = results |> List.collect (function _, Ok ls -> ls | _, Error _ -> []) + let lines = + results + |> List.collect (function + | _, Ok ls -> ls + | _, Error _ -> []) let ctorArgs = apiFields @@ -447,14 +626,23 @@ module CSharp = (l: WireLayout) : string list = - let results = l.Entries |> List.map (writeEntryLines s apiTypes) + let results = + l.Entries + |> List.map (writeEntryLines s apiTypes (discriminatorUnions l.Entries)) - let errors = results |> List.choose (function Error e -> Some e | _ -> None) + let errors = + results + |> List.choose (function + | Error e -> Some e + | _ -> None) if not (List.isEmpty errors) then (errors |> List.map todoLine) @ [ throwTodoLine name ] else - results |> List.collect (function Ok ls -> ls | Error _ -> []) + results + |> List.collect (function + | Ok ls -> ls + | Error _ -> []) /// One guarded branch per layout. A single unconditional layout stays flat (the support /// attribute already gates its span); with several layouts, a version that matches none throws. @@ -476,7 +664,11 @@ module CSharp = let endsWithThrow = body |> List.tryLast |> Option.exists (fun (l: string) -> l.StartsWith "throw") - let body = if isWrite && not endsWithThrow then body @ [ "return;" ] else body + let body = + if isWrite && not endsWithThrow then + body @ [ "return;" ] + else + body match guardCondition s r with | Some c -> yield! [ sprintf "if (%s)" c; "{" ] @ body @ [ "}" ] @@ -527,9 +719,7 @@ module CSharp = s spec.Name true - [ - for l in spec.Layouts -> l.Range, layoutWriteLines s spec.Name apiTypes l - ] + [ for l in spec.Layouts -> l.Range, layoutWriteLines s spec.Name apiTypes l ] let shell = if value then @@ -589,18 +779,14 @@ module CSharp = .AddModifiers(Token SyntaxKind.PublicKeyword, Token SyntaxKind.StaticKeyword) .AddParameterListParameters( Parameter(Identifier s.VersionParam).WithType(ParseTypeName "int"), - Parameter(Identifier "id") - .WithType(ParseTypeName "int") - .AddModifiers(Token SyntaxKind.OutKeyword) + Parameter(Identifier "id").WithType(ParseTypeName "int").AddModifiers(Token SyntaxKind.OutKeyword) ) .WithBody(parseBody tryBody) let getBody = [ sprintf "if (TryGetPacketId(%s, out var id)) return id;" s.VersionParam - sprintf - "throw new System.NotSupportedException($\"No packet id for protocol {%s}.\");" - s.VersionParam + sprintf "throw new System.NotSupportedException($\"No packet id for protocol {%s}.\");" s.VersionParam ] let getDecl = @@ -624,14 +810,15 @@ module CSharp = Fields: (string * string) list } - /// Mechanical group name from a layout range: `V759`, `V761_763`, `V764_Last`. - let private layerName (allLayouts: WireLayout list) (r: VersionRange) : string = + /// Mechanical group name from a layout range: `V759`, `V761_763`, `V764_Last`. Shared with the + /// union backend, which labels its per-layer cases the same way — one naming scheme, not two. + let private layerName (allRanges: VersionRange list) (r: VersionRange) : string = match VersionRangeX.bounds r with | Some a, Some b when a = b -> sprintf "V%d" a | Some a, Some b -> sprintf "V%d_%d" a b | Some a, None -> sprintf "V%d_Last" a | None, Some b -> - match VersionRangeX.span (allLayouts |> List.map (fun l -> l.Range)) |> fst with + match VersionRangeX.span allRanges |> fst with | Some lo -> sprintf "V%d_%d" lo b | None -> sprintf "VUntil%d" b | None, None -> "VAll" @@ -686,7 +873,11 @@ module CSharp = { Layout = l - GroupName = (if fields.IsEmpty then None else Some(layerName p.Layouts l.Range)) + GroupName = + (if fields.IsEmpty then + None + else + Some(layerName (p.Layouts |> List.map (fun l -> l.Range)) l.Range)) Fields = fields } ] @@ -728,9 +919,7 @@ module CSharp = sprintf "public readonly record struct %sLayer(%s);" g - (l.Fields - |> List.map (fun (t, n) -> sprintf "%s %s" t n) - |> String.concat ", ") + (l.Fields |> List.map (fun (t, n) -> sprintf "%s %s" t n) |> String.concat ", ") ) | None -> () ] @@ -762,9 +951,13 @@ module CSharp = (layer: PacketLayer) : string list = - let results = layer.Layout.Entries |> List.map (fun e -> e, readEntryLines s e) + let results = readEntriesLines s layer.Layout.Entries - let errors = results |> List.choose (function _, Error e -> Some e | _ -> None) + let errors = + results + |> List.choose (function + | _, Error e -> Some e + | _ -> None) if not (List.isEmpty errors) then (errors |> List.map todoLine) @ [ throwTodoLine name ] @@ -772,11 +965,16 @@ module CSharp = let bound = results |> List.choose (function - | Read(_, _, api), Ok _ -> Some(localName s api) + | Read(_, _, api), Ok _ + | ReadUnion(_, _, api), Ok _ -> Some(localName s api) | _ -> None) |> Set.ofList - let lines = results |> List.collect (function _, Ok ls -> ls | _, Error _ -> []) + let lines = + results + |> List.collect (function + | _, Ok ls -> ls + | _, Error _ -> []) let commonArgs = common @@ -793,7 +991,10 @@ module CSharp = [ sprintf "%s: new %sLayer(%s)" g g (String.concat ", " args) ] | None -> [] - lines @ [ sprintf "return new %s(%s);" name (String.concat ", " (commonArgs @ groupArg)) ] + lines + @ [ + sprintf "return new %s(%s);" name (String.concat ", " (commonArgs @ groupArg)) + ] /// Write body of one layer. A layer with a group first demands it (`WrongLayerException`), /// then aliases each group field as a local with the *api-level* type (keeps the `?? throw` @@ -805,9 +1006,15 @@ module CSharp = (layer: PacketLayer) : string list = - let results = layer.Layout.Entries |> List.map (writeEntryLines s apiTypes) + let results = + layer.Layout.Entries + |> List.map (writeEntryLines s apiTypes (discriminatorUnions layer.Layout.Entries)) - let errors = results |> List.choose (function Error e -> Some e | _ -> None) + let errors = + results + |> List.choose (function + | Error e -> Some e + | _ -> None) if not (List.isEmpty errors) then (errors |> List.map todoLine) @ [ throwTodoLine name ] @@ -824,14 +1031,17 @@ module CSharp = g :: [ for _, n in layer.Fields -> - let apiT = - apiTypes.TryFind n |> Option.map (csType s) |> Option.defaultValue "var" + let apiT = apiTypes.TryFind n |> Option.map (csType s) |> Option.defaultValue "var" sprintf "%s %s = layer.%s;" apiT n n ] | None -> [] - unpack @ (results |> List.collect (function Ok ls -> ls | Error _ -> [])) + unpack + @ (results + |> List.collect (function + | Ok ls -> ls + | Error _ -> [])) /// `public static PacketIdentity Identity => new(...)` — identity as a value, from the catalog. let private identityMember (s: RuntimeSurface) (e: Registry.CatalogEntry) : MemberDeclarationSyntax = @@ -907,8 +1117,7 @@ module CSharp = | None -> () ] - let args = - String.concat ", " (sprintf "\"%s\", \"%s\"" name typeName :: named) + let args = String.concat ", " (sprintf "\"%s\", \"%s\"" name typeName :: named) AttributeList( SingletonSeparatedList( @@ -937,7 +1146,10 @@ module CSharp = let multi = List.length p.Layouts > 1 let commonFields = - if multi then p.ApiFields |> List.filter isCommon else p.ApiFields + if multi then + p.ApiFields |> List.filter isCommon + else + p.ApiFields let layers = if multi then @@ -971,9 +1183,7 @@ module CSharp = s p.ClassName true - [ - for l in layers -> l.Layout.Range, formAWriteLines s p.ClassName apiTypes l - ] + [ for l in layers -> l.Layout.Range, formAWriteLines s p.ClassName apiTypes l ] let identityMembers = identityMember s e @@ -981,10 +1191,7 @@ module CSharp = let shell = (packetRecordShell s.PacketInterface s.PacketBaseInterface p.ClassName commonPos layers) - .AddMembers( - readMethod s p.ClassName (parseBody readBody), - writeMethod s false (parseBody writeBody) - ) + .AddMembers(readMethod s p.ClassName (parseBody readBody), writeMethod s false (parseBody writeBody)) .AddMembers(identityMembers @ packetIdMethods s p.Ids |> List.toArray) .AddAttributeLists(supportAttr s (p.Layouts |> List.map (fun l -> l.Range))) .AddAttributeLists( @@ -1042,6 +1249,290 @@ module CSharp = renderUnit s s.Namespace name [ s.UsingAttributes; s.UsingSerialization ] shell + // ----- unions ----- + + /// One case of a rendered union: the nested record's name and its positional parameters. + type private UnionCase = + { + CaseName: string + Params: (string * string) list + } + + /// Positional parameters of an arm, in wire order. The parameter is named by the api name + /// verbatim, because `writeEntryLines` addresses a value by that same string: any second + /// spelling here (Pascal-casing, say) generates a write body that references a local nobody + /// declared. The packet path aliases layer fields under the api name for the same reason. + /// An entry whose shape has no renderer drops out here — the same entry also fails + /// `readEntryLines`, so that arm's bodies become stubs while the case still declares and the + /// file still compiles. + let private armParams (s: RuntimeSurface) (arm: UnionArm) : (string * string) list = + arm.Entries + |> List.choose (function + | Read(_, w, api) when not (api.StartsWith "_") -> wireCsType s w |> Option.map (fun t -> t, api) + | _ -> None) + + /// Case name of an arm inside one layer: the DSL name while the arm's parameter list is the + /// same in every layer that carries it, else the name plus the layer label. TeamAction's + /// `Created` is string-typed until 764 and NBT-typed from 771 — one record cannot be both, + /// so both shapes exist as separate cases. + let private unionCaseName (s: RuntimeSurface) (spec: UnionTypeSpec) (l: UnionLayout) (arm: UnionArm) : string = + let shapes = + spec.Layouts + |> List.choose (fun other -> other.Arms |> List.tryFind (fun a -> a.Name = arm.Name)) + |> List.map (armParams s) + |> List.distinct + + if List.length shapes <= 1 then + arm.Name + else + arm.Name + layerName (spec.Layouts |> List.map (fun x -> x.Range)) l.Range + + /// Every case the union declares, across all layers, deduplicated by name. + let private unionCases (s: RuntimeSurface) (spec: UnionTypeSpec) : UnionCase list = + [ + for l in spec.Layouts do + for a in l.Arms -> + { + CaseName = unionCaseName s spec l a + Params = armParams s a + } + ] + |> List.distinctBy (fun c -> c.CaseName) + + /// Read body of one layer: switch on the discriminator the container already took off the + /// wire, read that arm's entries into locals, construct its case. Each arm gets its own block + /// so two arms may bind the same local name. + let private unionReadLines (s: RuntimeSurface) (spec: UnionTypeSpec) (l: UnionLayout) : string list = + [ + yield sprintf "switch (%s)" s.DiscriminatorParam + yield "{" + + for arm in l.Arms do + for k in arm.Keys do + yield sprintf "case %d:" k + + yield "{" + + let results = readEntriesLines s arm.Entries + + let errors = + results + |> List.choose (function + | _, Error e -> Some e + | _ -> None) + + if not (List.isEmpty errors) then + yield! errors |> List.map todoLine + yield throwTodoLine spec.Name + else + yield! + results + |> List.collect (function + | _, Ok ls -> ls + | _, Error _ -> []) + + let args = + arm.Entries + |> List.choose (function + | Read(_, _, api) when not (api.StartsWith "_") -> Some(localName s api) + | _ -> None) + + yield sprintf "return new %s(%s);" (unionCaseName s spec l arm) (String.concat ", " args) + + yield "}" + + yield "}" + yield throwNoCaseLine s spec.Name + ] + + /// Write body of one layer: switch on the concrete case, then write that arm's entries. The + /// entry renderer addresses values by their api name, so each case property is aliased to a + /// local of exactly that name (the same trick form-A layers use). + let private unionWriteLines (s: RuntimeSurface) (spec: UnionTypeSpec) (l: UnionLayout) : string list = + [ + yield "switch (this)" + yield "{" + + for arm in l.Arms do + let ps = armParams s arm + + yield sprintf "case %s %s:" (unionCaseName s spec l arm) (if ps.IsEmpty then "_" else "arm") + yield "{" + + let results = arm.Entries |> List.map (writeEntryLines s Map.empty Map.empty) + + let errors = + results + |> List.choose (function + | Error e -> Some e + | _ -> None) + + if not (List.isEmpty errors) then + yield! errors |> List.map todoLine + yield throwTodoLine spec.Name + else + for t, n in ps do + yield sprintf "%s %s = arm.%s;" t n n + + yield! + results + |> List.collect (function + | Ok ls -> ls + | Error _ -> []) + + yield "return;" + + yield "}" + + yield "}" + yield throwNoCaseLayerLine s spec.Name + ] + + /// `Discriminator` body of one layer: the case picks the key. An arm that reads under several + /// keys (`case [3; 4] "PlayersChanged"`) writes the first one. + let private unionDiscriminatorLines (s: RuntimeSurface) (spec: UnionTypeSpec) (l: UnionLayout) : string list = + [ + yield "switch (this)" + yield "{" + + for arm in l.Arms do + match arm.Keys with + | key :: _ -> yield sprintf "case %s _: return %d;" (unionCaseName s spec l arm) key + | [] -> () + + yield "}" + yield throwNoCaseLayerLine s spec.Name + ] + + /// `[Union] public partial record Name { ... }`. Not sealed and not an `IProtocolType`: the + /// source generator derives the case records from the nested partials, and the read needs the + /// discriminator the containing layout already consumed, which that interface has no room for. + let private unionShell (name: string) : TypeDeclarationSyntax = + RecordDeclaration(SyntaxKind.RecordDeclaration, Token SyntaxKind.RecordKeyword, Identifier name) + .AddModifiers(Token SyntaxKind.PublicKeyword, Token SyntaxKind.PartialKeyword) + .WithOpenBraceToken(Token SyntaxKind.OpenBraceToken) + .WithCloseBraceToken(Token SyntaxKind.CloseBraceToken) + :> TypeDeclarationSyntax + + let private unionAttr (s: RuntimeSurface) : AttributeListSyntax = + AttributeList(SingletonSeparatedList(Attribute(ParseName s.UnionAttribute))) + + /// `public static T Read(ref Reader reader, int protocolVersion, int discriminator)`. + let private unionReadMethod (s: RuntimeSurface) (typeName: string) (body: BlockSyntax) : MemberDeclarationSyntax = + MethodDeclaration(ParseTypeName typeName, s.ReadMethodName) + .AddModifiers(Token SyntaxKind.PublicKeyword, Token SyntaxKind.StaticKeyword) + .AddParameterListParameters( + Parameter(Identifier s.ReaderParam) + .WithType(ParseTypeName s.ReaderType) + .AddModifiers(Token SyntaxKind.RefKeyword), + Parameter(Identifier s.VersionParam).WithType(ParseTypeName "int"), + Parameter(Identifier s.DiscriminatorParam).WithType(ParseTypeName "int") + ) + .WithBody(body) + + /// `public int Discriminator(int protocolVersion)` — the key the containing layout writes + /// ahead of the union body, derived from the case the model holds. + let private discriminatorMethod (s: RuntimeSurface) (body: BlockSyntax) : MemberDeclarationSyntax = + MethodDeclaration(PredefinedType(Token SyntaxKind.IntKeyword), s.DiscriminatorMethodName) + .AddModifiers(Token SyntaxKind.PublicKeyword) + .AddParameterListParameters(Parameter(Identifier s.VersionParam).WithType(ParseTypeName "int")) + .WithBody(body) + + let private unionUsings (s: RuntimeSurface) (cases: UnionCase list) = + let text = + cases |> List.collect (fun c -> c.Params |> List.map fst) |> String.concat " " + + [ + yield s.UsingUnion + yield s.UsingAttributes + yield s.UsingSerialization + if text.Contains s.NbtType then + yield s.UsingNbt + if text.Contains s.UuidType then + yield s.UsingSystem + ] + + /// A case record shadows a same-named type for the whole union body: read as written, + /// `Rotations(Rotations Value)` binds the parameter to the case, not to the type. Rewriting + /// the wire's named references to namespace-qualified ones fixes every use at once — the case + /// declarations, the `ReadType` calls and the write-side locals all come from these entries. + /// The shadow set is every arm name, whether or not the layer label ends up suffixed to it: an + /// unnecessary qualification is only longer, a missing one is wrong code. + let private qualifyShadowed (s: RuntimeSurface) (spec: UnionTypeSpec) : UnionTypeSpec = + let shadowed = + spec.Layouts + |> List.collect (fun l -> l.Arms |> List.map (fun a -> a.Name)) + |> Set.ofList + + let rec wire w = + match w with + | Named n when shadowed.Contains n -> Named(sprintf "%s.%s" s.Namespace n) + | Array(item, cnt) -> Array(wire item, cnt) + | Option inner -> Option(wire inner) + | SentinelArray(item, e) -> SentinelArray(wire item, e) + | other -> other + + let entry e = + match e with + | Read(w, t, api) -> Read(w, wire t, api) + | Discard(w, t) -> Discard(w, wire t) + | other -> other + + { spec with + Layouts = + [ + for l in spec.Layouts -> + { l with + Arms = + [ + for a in l.Arms -> + { a with + Entries = a.Entries |> List.map entry + } + ] + } + ] + } + + let private renderUnion (s: RuntimeSurface) (spec: UnionTypeSpec) : string = + let spec = qualifyShadowed s spec + let cases = unionCases s spec + + let caseDecls: MemberDeclarationSyntax list = + [ + for c in cases -> + ParseMemberDeclaration( + sprintf + "partial record %s(%s);" + c.CaseName + (c.Params |> List.map (fun (t, n) -> sprintf "%s %s" t n) |> String.concat ", ") + ) + ] + + let readBody = + gateLine s spec.Name + :: versionedBody s spec.Name false [ for l in spec.Layouts -> l.Range, unionReadLines s spec l ] + + let writeBody = + gateLine s spec.Name + :: versionedBody s spec.Name true [ for l in spec.Layouts -> l.Range, unionWriteLines s spec l ] + + let discBody = + versionedBody s spec.Name false [ for l in spec.Layouts -> l.Range, unionDiscriminatorLines s spec l ] + + let shell = + (unionShell spec.Name) + .AddMembers(List.toArray caseDecls) + .AddMembers( + unionReadMethod s spec.Name (parseBody readBody), + writeMethod s false (parseBody writeBody), + discriminatorMethod s (parseBody discBody) + ) + .AddAttributeLists(supportAttr s (spec.Layouts |> List.map (fun l -> l.Range))) + .AddAttributeLists(unionAttr s) + + renderUnit s s.Namespace spec.Name (unionUsings s cases) shell + // ----- whole-protocol aggregates: registry tables, dispatcher, handler base ----- /// Validate + format a hand-assembled aggregate source file (several top-level types per @@ -1071,13 +1562,7 @@ module CSharp = /// dispatch and the handler base: its ordinal falls through to `Unknown`, so a stub `Read` /// throw can never take down the receive loop. let private hasReadStub (s: RuntimeSurface) (p: PacketSpec) = - p.Layouts - |> List.exists (fun l -> - l.Entries - |> List.exists (fun e -> - match readEntryLines s e with - | Error _ -> true - | Ok _ -> false)) + p.Layouts |> List.exists (fun l -> readEntriesLines s l.Entries |> hasReadError) let rec private wireNamedRefs (w: WireType) : string list = match w with @@ -1111,19 +1596,14 @@ module CSharp = | _ -> [] /// Named types the delivered output can resolve: runtime-provided primitives plus generated - /// named/bitflags types that are themselves stub-free and reference only resolvable types - /// (fixpoint). Unions are not generated yet, so a union reference is unresolvable. + /// named/bitflags/union types that are themselves stub-free and reference only resolvable + /// types (fixpoint). A union is a candidate like any other type — it is generated now, so a + /// union reference resolves as soon as every type its arms read does. let private resolvableTypes (s: RuntimeSurface) (protocol: ProtocolSpec) : Set = let runtimeProvided = Set.ofList [ "Position" ] - let stubFree (t: NamedTypeSpec) = - t.Layouts - |> List.forall (fun l -> - l.Entries - |> List.forall (fun e -> - match readEntryLines s e with - | Ok _ -> true - | Error _ -> false)) + let stubFreeEntries (entries: WireEntry list) = + readEntriesLines s entries |> hasReadError |> not let candidates = [ @@ -1132,7 +1612,13 @@ module CSharp = (t.ApiFields |> List.collect (fun f -> apiNamedRefs f.Type)) @ (t.Layouts |> List.collect (fun l -> l.Entries |> List.collect entryNamedRefs)) - t.Name, refs, stubFree t + t.Name, refs, t.Layouts |> List.forall (fun l -> stubFreeEntries l.Entries) + for u in protocol.Unions -> + let arms = u.Layouts |> List.collect (fun l -> l.Arms) + + let refs = arms |> List.collect (fun a -> a.Entries |> List.collect entryNamedRefs) + + u.Name, refs, arms |> List.forall (fun a -> stubFreeEntries a.Entries) ] let mutable known = @@ -1180,7 +1666,9 @@ module CSharp = for st in allStates do for dir in allDirs do let slice = Registry.slice st dir entries - if not slice.IsEmpty then yield st, dir, slice + + if not slice.IsEmpty then + yield st, dir, slice ] // pv runs with an identical id -> ordinal layout, per slice @@ -1272,7 +1760,10 @@ module CSharp = line (sprintf " [%s];" (table |> Seq.map string |> String.concat ", ")) line "" - line (sprintf " private static ReadOnlySpan Table(%s phase, %s dir, int pv)" s.PhaseEnum s.DirectionEnum) + line ( + sprintf " private static ReadOnlySpan Table(%s phase, %s dir, int pv)" s.PhaseEnum s.DirectionEnum + ) + line " {" line " switch (phase, dir)" line " {" @@ -1284,7 +1775,9 @@ module CSharp = line (sprintf " case (%s.%A, %s.%A):" s.PhaseEnum st s.DirectionEnum dir) for lo, hi, _ in runs do - line (sprintf " if (pv >= %d && pv <= %d) return Table%A%A_%d_%d;" lo hi st dir lo hi) + line ( + sprintf " if (pv >= %d && pv <= %d) return Table%A%A_%d_%d;" lo hi st dir lo hi + ) line " return default;" @@ -1293,6 +1786,7 @@ module CSharp = line " return default;" line " }" line "" + line ( sprintf " public static bool TryGetOrdinal(int id, int %s, %s phase, %s dir, out ushort ordinal)" @@ -1300,6 +1794,7 @@ module CSharp = s.PhaseEnum s.DirectionEnum ) + line " {" line (sprintf " var table = Table(phase, dir, %s);" s.VersionParam) line " if ((uint)id < (uint)table.Length && table[id] >= 0)" @@ -1312,6 +1807,7 @@ module CSharp = line " return false;" line " }" line "" + line ( sprintf " public static bool TryResolve(int id, int %s, %s phase, %s dir, [NotNullWhen(true)] out PacketDescriptor? descriptor)" @@ -1319,6 +1815,7 @@ module CSharp = s.PhaseEnum s.DirectionEnum ) + line " {" line (sprintf " if (TryGetOrdinal(id, %s, phase, dir, out var ordinal))" s.VersionParam) line " {" @@ -1330,13 +1827,22 @@ module CSharp = line " return false;" line " }" line "" - line (sprintf " public static ReadOnlySpan Catalog(%s phase, %s dir)" s.PhaseEnum s.DirectionEnum) + + line ( + sprintf + " public static ReadOnlySpan Catalog(%s phase, %s dir)" + s.PhaseEnum + s.DirectionEnum + ) + line " {" line " switch (phase, dir)" line " {" for st, dir, _ in slices do - line (sprintf " case (%s.%A, %s.%A): return Catalog%A%A;" s.PhaseEnum st s.DirectionEnum dir st dir) + line ( + sprintf " case (%s.%A, %s.%A): return Catalog%A%A;" s.PhaseEnum st s.DirectionEnum dir st dir + ) line " }" line "" @@ -1362,10 +1868,10 @@ module CSharp = for st in allStates do for dir in allDirs do let slice = - Registry.slice st dir entries - |> List.filter (fun e -> dispatchable e.Spec) + Registry.slice st dir entries |> List.filter (fun e -> dispatchable e.Spec) - if not slice.IsEmpty then yield st, dir, slice + if not slice.IsEmpty then + yield st, dir, slice ] // A `.g.cs` file is auto-generated as far as the compiler is concerned, so the project's @@ -1381,7 +1887,11 @@ module CSharp = line "" line (sprintf "namespace %s;" s.Namespace) line "" - line (sprintf "public delegate void TrailingBytesHook(int packetId, int %s, long remainingBytes);" s.VersionParam) + + line ( + sprintf "public delegate void TrailingBytesHook(int packetId, int %s, long remainingBytes);" s.VersionParam + ) + line "" line "/// Generated dispatcher. Packets whose codegen is still stubbed are not" line "/// dispatched — they fall through to Unknown instead of throwing inside the" @@ -1394,6 +1904,7 @@ module CSharp = line "{" line " public static event TrailingBytesHook? OnTrailingBytes;" line "" + line ( sprintf " public static void Dispatch(in InputPacket raw, int %s, %s phase, %s dir, ref TVisitor visitor)" @@ -1401,9 +1912,14 @@ module CSharp = s.PhaseEnum s.DirectionEnum ) + line " where TVisitor : IPacketVisitor" line " {" - line (sprintf " if (!PacketRegistry.TryGetOrdinal(raw.Id, %s, phase, dir, out var ordinal))" s.VersionParam) + + line ( + sprintf " if (!PacketRegistry.TryGetOrdinal(raw.Id, %s, phase, dir, out var ordinal))" s.VersionParam + ) + line " {" line " visitor.Unknown(in raw);" line " return;" @@ -1421,6 +1937,7 @@ module CSharp = for st, dir, _ in slices do line (sprintf " case (%s.%A, %s.%A):" s.PhaseEnum st s.DirectionEnum dir) + line ( sprintf " handled = Dispatch%A%A(ordinal, ref %s, %s, ref visitor, ref reading);" @@ -1429,6 +1946,7 @@ module CSharp = s.ReaderParam s.VersionParam ) + line " break;" line " default:" @@ -1443,7 +1961,11 @@ module CSharp = line " }" line "" line (sprintf " if (%s.RemainingCount != 0)" s.ReaderParam) - line (sprintf " OnTrailingBytes?.Invoke(raw.Id, %s, %s.RemainingCount);" s.VersionParam s.ReaderParam) + + line ( + sprintf " OnTrailingBytes?.Invoke(raw.Id, %s, %s.RemainingCount);" s.VersionParam s.ReaderParam + ) + line " }" // ----- TryDispatch: the same table, a reason instead of a throw ----- @@ -1458,6 +1980,7 @@ module CSharp = line " /// decoder and out-of-memory still propagate. An exception thrown by the visitor" line " /// itself is never converted — the table lowers reading before it calls the" line " /// visitor, so the consumer's own bugs come out as themselves." + line ( sprintf " public static bool TryDispatch(in InputPacket raw, int %s, %s phase, %s direction, ref TVisitor visitor, out DecodeError error)" @@ -1465,15 +1988,18 @@ module CSharp = s.PhaseEnum s.DirectionEnum ) + line " where TVisitor : IPacketVisitor" line " {" line " error = DecodeError.None;" line "" + line ( sprintf " if (!PacketRegistry.TryGetOrdinal(raw.Id, %s, phase, direction, out var ordinal))" s.VersionParam ) + line " {" line " visitor.Unknown(in raw);" line " return true;" @@ -1492,6 +2018,7 @@ module CSharp = for st, dir, _ in slices do line (sprintf " case (%s.%A, %s.%A):" s.PhaseEnum st s.DirectionEnum dir) + line ( sprintf " handled = Dispatch%A%A(ordinal, ref %s, %s, ref visitor, ref reading);" @@ -1500,6 +2027,7 @@ module CSharp = s.ReaderParam s.VersionParam ) + line " break;" line " default:" @@ -1520,7 +2048,11 @@ module CSharp = line " }" line "" line (sprintf " if (%s.RemainingCount != 0)" s.ReaderParam) - line (sprintf " OnTrailingBytes?.Invoke(raw.Id, %s, %s.RemainingCount);" s.VersionParam s.ReaderParam) + + line ( + sprintf " OnTrailingBytes?.Invoke(raw.Id, %s, %s.RemainingCount);" s.VersionParam s.ReaderParam + ) + line "" line " return true;" line " }" @@ -1530,15 +2062,13 @@ module CSharp = | Some baseIface -> line "" line " /// One raw packet in, one decoded packet out — no visitor to write." - line ( - sprintf - " /// An id this (phase, direction) cannot map yields an " - ) + line (sprintf " /// An id this (phase, direction) cannot map yields an ") line " /// and still returns true: an unmapped id is a normal stream condition, not an error." line " /// A malformed body returns false with filled and" line " /// null. The allocation-free hot path is" line " /// / ; this door costs nothing" line " /// extra either — packets are classes, so the capture is a reference, not a box." + line ( sprintf " public static bool TryDecode(in InputPacket raw, int %s, %s phase, %s direction, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out %s? packet, out DecodeError error)" @@ -1547,14 +2077,15 @@ module CSharp = s.DirectionEnum baseIface ) + line " {" line " var capture = new Capture(phase, direction);" line "" + line ( - sprintf - " if (!TryDispatch(in raw, %s, phase, direction, ref capture, out error))" - s.VersionParam + sprintf " if (!TryDispatch(in raw, %s, phase, direction, ref capture, out error))" s.VersionParam ) + line " {" line " packet = null;" line " return false;" @@ -1564,11 +2095,13 @@ module CSharp = line " return true;" line " }" line "" + line ( sprintf " /// Keeps the decoded packet as . The assignment is a" baseIface ) + line " /// reference conversion (every packet is a class that implements it), so there is no" line " /// boxing and no adapter object — the same jump table, one field write." line " private struct Capture : IPacketVisitor" @@ -1585,14 +2118,19 @@ module CSharp = line " Result = null;" line " }" line "" + line ( sprintf " public void Visit(T packet) where T : class, %s => Result = (%s)packet;" (s.PacketInterface |> Option.defaultValue baseIface) baseIface ) + line "" - line " public void Unknown(in InputPacket raw) => Result = new UnknownPacket(raw.Id, _phase, _direction);" + + line + " public void Unknown(in InputPacket raw) => Result = new UnknownPacket(raw.Id, _phase, _direction);" + line " }" | None -> () @@ -1630,12 +2168,10 @@ module CSharp = for st, dir, slice in slices do line "" - line ( - sprintf - " /// One ordinal, one read, one constrained call. " - ) + line (sprintf " /// One ordinal, one read, one constrained call. ") line " /// goes false between the two: above it the exception is the packet's fault, below it" line " /// the visitor's. Only the Try door reads it." + line ( sprintf " private static bool Dispatch%A%A(ushort ordinal, ref %s %s, int %s, ref TVisitor visitor, ref bool reading)" @@ -1645,6 +2181,7 @@ module CSharp = s.ReaderParam s.VersionParam ) + line " where TVisitor : IPacketVisitor" line " {" line " switch (ordinal)" @@ -1653,6 +2190,7 @@ module CSharp = for e in slice do line (sprintf " case %d:" e.Ordinal) line " {" + line ( sprintf " var packet = %s.Read(ref %s, %s);" @@ -1660,6 +2198,7 @@ module CSharp = s.ReaderParam s.VersionParam ) + line " reading = false;" line " visitor.Visit(packet);" line " return true;" @@ -1678,10 +2217,7 @@ module CSharp = /// Play keeps the bare name and other phases get a phase prefix. let private handlerNames (entries: Registry.CatalogEntry list) : Map = let counts = - entries - |> List.map (fun e -> shortName e.Spec) - |> List.countBy id - |> Map.ofList + entries |> List.map (fun e -> shortName e.Spec) |> List.countBy id |> Map.ofList entries |> List.map (fun e -> @@ -1714,7 +2250,8 @@ module CSharp = Registry.slice st Clientbound entries |> List.filter (fun e -> dispatchable e.Spec) - if not slice.IsEmpty then yield st, slice + if not slice.IsEmpty then + yield st, slice ] let names = handlerNames (clientbound |> List.collect snd) @@ -1741,7 +2278,14 @@ module CSharp = line " {" line " _pending = default;" line " var self = this;" - line (sprintf " PacketFlow.Dispatch(in raw, %s, Phase, %s.Clientbound, ref self);" s.VersionParam s.DirectionEnum) + + line ( + sprintf + " PacketFlow.Dispatch(in raw, %s, Phase, %s.Clientbound, ref self);" + s.VersionParam + s.DirectionEnum + ) + line " return _pending;" line " }" line "" @@ -1760,12 +2304,7 @@ module CSharp = let handler = names.[(sprintf "%A" st, e.Spec.ClassName)] line (sprintf " case %d:" e.Ordinal) - line ( - sprintf - " _pending = %s((%s)(object)packet);" - handler - (relTypeName e.Spec) - ) + line (sprintf " _pending = %s((%s)(object)packet);" handler (relTypeName e.Spec)) line " return;" line " }" @@ -1787,12 +2326,7 @@ module CSharp = let handler = names.[(sprintf "%A" st, e.Spec.ClassName)] line "" - line ( - sprintf - " protected virtual ValueTask %s(%s packet) => default;" - handler - (relTypeName e.Spec) - ) + line (sprintf " protected virtual ValueTask %s(%s packet) => default;" handler (relTypeName e.Spec)) line "}" sb.ToString() @@ -1833,6 +2367,7 @@ module CSharp = renderType surface surface.Namespace surface.ProtocolInterface spec [] [] member _.RenderBitflags spec = renderBitflags surface spec + member _.RenderUnion spec = renderUnion surface spec member _.RenderPacket entry = renderPacket surface entry member _.RenderProtocol entries = renderProtocolExtras surface entries } diff --git a/minecraft-protocol-fs/Codegen/CSharpSurface.fs b/minecraft-protocol-fs/Codegen/CSharpSurface.fs index 8a719f2..c5800b5 100644 --- a/minecraft-protocol-fs/Codegen/CSharpSurface.fs +++ b/minecraft-protocol-fs/Codegen/CSharpSurface.fs @@ -34,12 +34,20 @@ module CSharpSurface = UsingSerialization: string UsingNbt: string UsingSystem: string + /// Namespace of the discriminated-union source generator the union backend leans on. + UsingUnion: string /// Reader / writer types and the parameter names used in generated signatures. ReaderType: string WriterType: string ReaderParam: string WriterParam: string VersionParam: string + /// Union surface: the marker attribute the generator reads, the extra read parameter + /// carrying the discriminator the container already consumed, and the method that + /// gives that value back on the write side. + UnionAttribute: string + DiscriminatorParam: string + DiscriminatorMethodName: string /// Version gate: attribute name, throw helper, open-range bound constants. SupportAttribute: string ThrowIfNotSupported: string @@ -99,11 +107,15 @@ module CSharpSurface = UsingSerialization = "McProtoNet.Serialization" UsingNbt = "McProtoNet.NBT" UsingSystem = "System" + UsingUnion = "Dunet" ReaderType = "MinecraftPrimitiveReader" WriterType = "MinecraftPrimitiveWriter" ReaderParam = "reader" WriterParam = "writer" VersionParam = "protocolVersion" + UnionAttribute = "Union" + DiscriminatorParam = "discriminator" + DiscriminatorMethodName = "Discriminator" SupportAttribute = "ProtocolSupport" ThrowIfNotSupported = "ThrowHelper.ThrowIfProtocolNotSupported" StartProtocolConst = "MinecraftVersion.StartProtocol" diff --git a/minecraft-protocol-fs/Codegen/Generator.fs b/minecraft-protocol-fs/Codegen/Generator.fs index 5ca6f1a..b32e0ed 100644 --- a/minecraft-protocol-fs/Codegen/Generator.fs +++ b/minecraft-protocol-fs/Codegen/Generator.fs @@ -20,6 +20,13 @@ module Generator = Contents = t.RenderBitflags spec } + /// Generate one union type as a source file for the target language. + let generateUnion (t: ILanguageTarget) (spec: UnionTypeSpec) : GeneratedFile = + { + RelativePath = sprintf "Unions/%s%s" spec.Name t.Extension + Contents = t.RenderUnion spec + } + /// Generate one packet as a source file for the target language. let generatePacket (t: ILanguageTarget) (e: Registry.CatalogEntry) : GeneratedFile = { @@ -27,13 +34,14 @@ module Generator = Contents = t.RenderPacket e } - /// Generate every named type, bitflags and packet in a protocol, plus the target's - /// whole-protocol aggregates. Unions are future work. Packets go through the ordinal - /// catalog: identity and ordinals come from there. + /// Generate every named type, bitflags, union and packet in a protocol, plus the target's + /// whole-protocol aggregates. Packets go through the ordinal catalog: identity and ordinals + /// come from there. let generateProtocol (t: ILanguageTarget) (p: ProtocolSpec) : GeneratedFile list = let catalog = Registry.catalog p.Packets (p.Types |> List.map (generateType t)) @ (p.Bitflags |> List.map (generateBitflags t)) + @ (p.Unions |> List.map (generateUnion t)) @ (catalog |> List.map (generatePacket t)) @ t.RenderProtocol p diff --git a/minecraft-protocol-fs/Codegen/Target.fs b/minecraft-protocol-fs/Codegen/Target.fs index 857309f..be4b16d 100644 --- a/minecraft-protocol-fs/Codegen/Target.fs +++ b/minecraft-protocol-fs/Codegen/Target.fs @@ -25,6 +25,8 @@ type ILanguageTarget = abstract RenderType: NamedTypeSpec -> string /// Render one bitflags type into a complete source file body. abstract RenderBitflags: BitflagsSpec -> string + /// Render one union type into a complete source file body. + abstract RenderUnion: UnionTypeSpec -> string /// Render one packet (with its ordinal-catalog entry) into a complete source file body. abstract RenderPacket: Registry.CatalogEntry -> string /// Render whole-protocol aggregate outputs (registry tables, dispatcher, handler bases). diff --git a/minecraft-protocol-fs/Spec/Bitflags/Scoreboard/TeamFlags.fs b/minecraft-protocol-fs/Spec/Bitflags/Scoreboard/TeamFlags.fs new file mode 100644 index 0000000..b2e54ce --- /dev/null +++ b/minecraft-protocol-fs/Spec/Bitflags/Scoreboard/TeamFlags.fs @@ -0,0 +1,11 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module TeamFlags = + + let teamFlags = + bitflags "TeamFlags" { + layout (Since 771) U8 [ "friendlyFire"; "seeFriendlyInvisible" ] + } diff --git a/minecraft-protocol-fs/Spec/Unions/Codegen/UnionShapeProbe.fs b/minecraft-protocol-fs/Spec/Unions/Codegen/UnionShapeProbe.fs new file mode 100644 index 0000000..79d61f2 --- /dev/null +++ b/minecraft-protocol-fs/Spec/Unions/Codegen/UnionShapeProbe.fs @@ -0,0 +1,17 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module UnionShapeProbe = + + let unionShapeProbe = + unionType "UnionShapeProbe" { + cases All [ + case1 0 "Byte" [ read "value" I8 "Value" ] + case1 1 "Int" [ read "value" VarInt "Value" ] + case1 2 "String" [ read "value" Str "Value" ] + case1 3 "Rotations" [ read "value" (Named "Rotations") "Value" ] + case1 4 "Vec3f" [ read "value" (Array(Named "Vec3f", VarIntCount)) "Value" ] + ] + } diff --git a/minecraft-protocol-fs/Spec/Unions/Scoreboard/TeamAction.fs b/minecraft-protocol-fs/Spec/Unions/Scoreboard/TeamAction.fs index 243a340..ebca851 100644 --- a/minecraft-protocol-fs/Spec/Unions/Scoreboard/TeamAction.fs +++ b/minecraft-protocol-fs/Spec/Unions/Scoreboard/TeamAction.fs @@ -7,65 +7,75 @@ module TeamAction = let teamAction = unionType "TeamAction" { - cases (Until 764) [ - case1 0 "Created" [ - read "name" Str "Name" - read "friendlyFire" I8 "FriendlyFire" - read "nameTagVis" Str "NameTagVisibility" - read "collisionRule" Str "CollisionRule" - read "formatting" VarInt "Formatting" - read "prefix" Str "Prefix" - read "suffix" Str "Suffix" - read "players" (Array(Str, VarIntCount)) "Players" - ] + cases + (Until 764) + [ + case1 + 0 + "Created" + [ + read "name" Str "Name" + read "friendlyFire" I8 "FriendlyFire" + read "nameTagVis" Str "NameTagVisibility" + read "collisionRule" Str "CollisionRule" + read "formatting" VarInt "Formatting" + read "prefix" Str "Prefix" + read "suffix" Str "Suffix" + read "players" (Array(Str, VarIntCount)) "Players" + ] - case1 1 "Removed" [] + case1 1 "Removed" [] - case1 2 "Updated" [ - read "name" Str "Name" - read "friendlyFire" I8 "FriendlyFire" - read "nameTagVis" Str "NameTagVisibility" - read "collisionRule" Str "CollisionRule" - read "formatting" VarInt "Formatting" - read "prefix" Str "Prefix" - read "suffix" Str "Suffix" - ] + case1 + 2 + "Updated" + [ + read "name" Str "Name" + read "friendlyFire" I8 "FriendlyFire" + read "nameTagVis" Str "NameTagVisibility" + read "collisionRule" Str "CollisionRule" + read "formatting" VarInt "Formatting" + read "prefix" Str "Prefix" + read "suffix" Str "Suffix" + ] - case1 3 "PlayersAdded" [ - read "players" (Array(Str, VarIntCount)) "Players" - ] + case1 3 "PlayersAdded" [ read "players" (Array(Str, VarIntCount)) "Players" ] - case1 4 "PlayersRemoved" [ - read "players" (Array(Str, VarIntCount)) "Players" + case1 4 "PlayersRemoved" [ read "players" (Array(Str, VarIntCount)) "Players" ] ] - ] - cases (Since 771) [ - case1 0 "Created" [ - read "name" AnonNbt "Name" - discard "flags" U8 - read "nameTagVis" VarInt "NameTagVisibility" - read "collisionRule" VarInt "CollisionRule" - read "formatting" VarInt "Formatting" - read "prefix" AnonNbt "Prefix" - read "suffix" AnonNbt "Suffix" - read "players" (Array(Str, VarIntCount)) "Players" - ] + cases + (Since 771) + [ + case1 + 0 + "Created" + [ + read "name" AnonNbt "Name" + read "flags" (Named "TeamFlags") "Flags" + read "nameTagVis" VarInt "NameTagVisibility" + read "collisionRule" VarInt "CollisionRule" + read "formatting" VarInt "Formatting" + read "prefix" AnonNbt "Prefix" + read "suffix" AnonNbt "Suffix" + read "players" (Array(Str, VarIntCount)) "Players" + ] - case1 1 "Removed" [] + case1 1 "Removed" [] - case1 2 "Updated" [ - read "name" AnonNbt "Name" - discard "flags" U8 - read "nameTagVis" VarInt "NameTagVisibility" - read "collisionRule" VarInt "CollisionRule" - read "formatting" VarInt "Formatting" - read "prefix" AnonNbt "Prefix" - read "suffix" AnonNbt "Suffix" - ] + case1 + 2 + "Updated" + [ + read "name" AnonNbt "Name" + read "flags" (Named "TeamFlags") "Flags" + read "nameTagVis" VarInt "NameTagVisibility" + read "collisionRule" VarInt "CollisionRule" + read "formatting" VarInt "Formatting" + read "prefix" AnonNbt "Prefix" + read "suffix" AnonNbt "Suffix" + ] - case [3; 4] "PlayersChanged" [ - read "players" (Array(Str, VarIntCount)) "Players" + case [ 3; 4 ] "PlayersChanged" [ read "players" (Array(Str, VarIntCount)) "Players" ] ] - ] } diff --git a/minecraft-protocol-fs/Spec/todo-allowlist.txt b/minecraft-protocol-fs/Spec/todo-allowlist.txt index 3a6e598..5a158c4 100644 --- a/minecraft-protocol-fs/Spec/todo-allowlist.txt +++ b/minecraft-protocol-fs/Spec/todo-allowlist.txt @@ -1,13 +1,11 @@ # Generated files allowed to contain TODO(codegen) stub branches (known codegen -# gaps: unions, entity metadata, map columns, FixedBytes, nested arrays). `gen` -# fails when any file outside this list gains a stub; remove entries as the gaps -# close. Paths are relative to the generation root, as printed by -# `dotnet run -- gen`. +# gaps: entity metadata sentinel arrays, map columns, conditional groups, +# FixedBytes, nested arrays). `gen` fails when any file outside this list gains a +# stub, so remove entries as the gaps close. Paths are relative to the generation +# root, as printed by `dotnet run -- gen`. Packets/Login/Serverbound/EncryptionResponsePacket.cs Packets/Play/Clientbound/EntityMetadataPacket.cs Packets/Play/Clientbound/MapPacket.cs -Packets/Play/Clientbound/TeamsPacket.cs -Types/EntityMetadataEntry.cs # FixedBytes n is in the AST but has no renderer yet Packets/Play/Serverbound/ChatCommandSignedPacket.cs Types/ArgumentSignature.cs diff --git a/sandbox/McProtoNet.Sandbox.Console/Program.cs b/sandbox/McProtoNet.Sandbox.Console/Program.cs index b92ee08..19d893f 100644 --- a/sandbox/McProtoNet.Sandbox.Console/Program.cs +++ b/sandbox/McProtoNet.Sandbox.Console/Program.cs @@ -6,6 +6,7 @@ using McProtoNet.Protocol.Packets.Status.Clientbound; using McProtoNet.Protocol.Packets.Status.Serverbound; using McProtoNet.Serialization; +using McProtoNet.NBT; int version = MinecraftVersion.LatestProtocol; @@ -341,6 +342,138 @@ static void Assert(bool condition, [System.Runtime.CompilerServices.CallerArgume Console.WriteLine(); } +// --- TeamAction: a dunet union behind TeamsPacket — string era @764, nbt era @772 --- +{ + // the mode field is wire-only: the model carries the case, the packet derives the byte + var created = new TeamAction.CreatedVUntil764( + "Reds", 1, "always", "never", 4, "[", "]", new[] { "Steve", "Alex" }); + Assert(created.Discriminator(764) == 0); + + var w = new MinecraftPrimitiveWriter(); + new TeamsPacket("reds", created).Write(w, 764); + var bytes = w.ToArray(); + // "reds" is one length byte plus four chars, so the mode byte sits at index 5 + Assert(bytes[5] == 0x00); + + var r = new MinecraftPrimitiveReader(bytes); + var back = TeamsPacket.Read(ref r, 764); + Assert(back.TeamName == "reds"); + var backCreated = back.Action as TeamAction.CreatedVUntil764; + Assert(backCreated is not null); + Assert(backCreated!.Name == "Reds" && backCreated.FriendlyFire == 1 && backCreated.Prefix == "[" + && backCreated.Players.Length == 2 && backCreated.Players[1] == "Alex"); + Console.WriteLine($"TeamsPacket @764: {bytes.Length} bytes, mode={bytes[5]}, case={back.Action.GetType().Name}"); + + // one arm, two keys: the read accepts 3 and 4, the write picks the first + var changed = new TeamAction.PlayersChanged(new[] { "Steve" }); + Assert(changed.Discriminator(772) == 3); + var w2 = new MinecraftPrimitiveWriter(); + new TeamsPacket("reds", changed).Write(w2, 772); + var changedBytes = w2.ToArray(); + Assert(changedBytes[5] == 0x03); + changedBytes[5] = 0x04; + var r2 = new MinecraftPrimitiveReader(changedBytes); + var back2 = TeamsPacket.Read(ref r2, 772); + Assert(back2.Action is TeamAction.PlayersChanged { Players.Length: 1 }); + Console.WriteLine($"TeamsPacket @772: modes 3 and 4 both read as {back2.Action.GetType().Name}"); + + // the 771 layer swaps the text fields to nbt, so Created is a second case, not the same one + var teamFlags = new TeamFlags(FriendlyFire: true, SeeFriendlyInvisible: false); + var created772 = new TeamAction.CreatedV771_Last( + new NbtCompound().With("text", new NbtString("Reds")), teamFlags, 0, 1, 4, + new NbtCompound().With("text", new NbtString("[")), + new NbtCompound().With("text", new NbtString("]")), new[] { "Steve" }); + var w3 = new MinecraftPrimitiveWriter(); + new TeamsPacket("reds", created772).Write(w3, 772); + var nbtBytes = w3.ToArray(); + var r3 = new MinecraftPrimitiveReader(nbtBytes); + var back3 = TeamsPacket.Read(ref r3, 772); + var backNbt = back3.Action as TeamAction.CreatedV771_Last; + Assert(backNbt is not null); + Assert(((NbtCompound)backNbt!.Name).Items["text"] is NbtString { Value: "Reds" }); + Assert(backNbt.Flags == teamFlags); + var w4 = new MinecraftPrimitiveWriter(); + back3.Write(w4, 772); + Assert(Hex(w4.ToArray()) == Hex(nbtBytes)); + Console.WriteLine($"TeamsPacket @772: {nbtBytes.Length} bytes, re-write byte-identical, case={back3.Action.GetType().Name}"); + + // the flags bits are one u8 either way, so modelling them moved no wire byte: clearing both + // keeps the length and changes exactly the byte the old spec used to write as zero + var w5 = new MinecraftPrimitiveWriter(); + new TeamsPacket("reds", created772 with { Flags = new TeamFlags(false, false) }).Write(w5, 772); + var clearedBytes = w5.ToArray(); + Assert(clearedBytes.Length == nbtBytes.Length); + Assert(clearedBytes.Zip(nbtBytes).Count(p => p.First != p.Second) == 1); + Console.WriteLine($"TeamAction @772: flags travel as one u8 (friendly_fire, see_friendly_invisible)"); + + // a case whose layer does not cover the version must fail, not invent a shape + try + { + new TeamsPacket("reds", created).Write(new MinecraftPrimitiveWriter(), 772); + Assert(false); + } + catch (NotSupportedException) + { + } + + var kind = back3.Action.Match( + createdVUntil764: _ => "created", removed: _ => "removed", updatedVUntil764: _ => "updated", + playersAdded: _ => "playersAdded", playersRemoved: _ => "playersRemoved", + createdV771_Last: _ => "created", updatedV771_Last: _ => "updated", + playersChanged: _ => "playersChanged"); + Assert(kind == "created"); + Console.WriteLine($"TeamAction.Match -> {kind}\n"); +} + +// --- UnionShapeProbe: the union shapes EntityMetadataValue is built from --- +// EntityMetadataValue itself cannot compile here yet (its arms read Slot, Particle and the +// registry variants, none of them modelled), so its three risky shapes are compiled and +// round-tripped through a probe union instead: keyword-named cases (Byte/Int/String), a case +// carrying a same-named type (Rotations), and a case carrying an array of one (Vec3f). +{ + var probes = new UnionShapeProbe[] + { + new UnionShapeProbe.Byte(-3), + new UnionShapeProbe.Int(300), + new UnionShapeProbe.String("hello"), + new UnionShapeProbe.Rotations(new Rotations(1f, 2f, 3f)), + new UnionShapeProbe.Vec3f(new[] { new Vec3f(1f, 2f, 3f), new Vec3f(-1f, 0f, 0.5f) }), + }; + + foreach (var probe in probes) + { + var w = new MinecraftPrimitiveWriter(); + probe.Write(w, version); + var bytes = w.ToArray(); + var r = new MinecraftPrimitiveReader(bytes); + var back = UnionShapeProbe.Read(ref r, version, probe.Discriminator(version)); + Assert(back.GetType() == probe.GetType()); + + // record equality compares array references, so the wire is the equality check + var w2 = new MinecraftPrimitiveWriter(); + back.Write(w2, version); + Assert(Hex(w2.ToArray()) == Hex(bytes)); + } + + var arrayWire = WireOf(probes[4]); + var arrayReader = new MinecraftPrimitiveReader(arrayWire); + var arrayBack = (UnionShapeProbe.Vec3f)UnionShapeProbe.Read(ref arrayReader, version, 4); + Assert(arrayBack.Value.Length == 2 && arrayBack.Value[1] == new Vec3f(-1f, 0f, 0.5f)); + + var kinds = probes.Select(p => p.Match( + @byte: _ => "byte", @int: _ => "int", @string: _ => "string", + @rotations: _ => "rotations", @vec3f: _ => "vec3f")); + Assert(string.Join(",", kinds) == "byte,int,string,rotations,vec3f"); + Console.WriteLine($"UnionShapeProbe: {probes.Length} cases round-trip byte-identical, Match binds every case\n"); + + static byte[] WireOf(UnionShapeProbe probe) + { + var w = new MinecraftPrimitiveWriter(); + probe.Write(w, MinecraftVersion.LatestProtocol); + return w.ToArray(); + } +} + // --- GetPacketId: numeric ids from the McProtoFacts manifest --- { Assert(SetProtocolPacket.GetPacketId(772) == 0x00); diff --git a/sandbox/McProtoNet.Sandbox/McProtoNet.Sandbox.csproj b/sandbox/McProtoNet.Sandbox/McProtoNet.Sandbox.csproj index 90e24ed..c527e2c 100644 --- a/sandbox/McProtoNet.Sandbox/McProtoNet.Sandbox.csproj +++ b/sandbox/McProtoNet.Sandbox/McProtoNet.Sandbox.csproj @@ -9,44 +9,29 @@ + What stays excluded references a C# type the sandbox has no model for (Slot, Particle, + the registry variants) or a still-stubbed wire shape. Unions compile here now, so + TeamAction and its packet are in; EntityMetadataValue is not, because its arms read + Slot and Particle. Its three risky shapes — keyword-named cases, a case carrying a + same-named type, a case carrying an array of one — are compiled and round-tripped + through Unions/UnionShapeProbe.cs until those types exist. --> + ..\..\generated-csharp\Packets\Play\Serverbound\WindowClickPacket.cs" + Link="Generated\%(RecursiveDir)%(Filename)%(Extension)" /> + + + diff --git a/sandbox/McProtoNet.Sandbox/Runtime.cs b/sandbox/McProtoNet.Sandbox/Runtime.cs index 3102145..b7eddda 100644 --- a/sandbox/McProtoNet.Sandbox/Runtime.cs +++ b/sandbox/McProtoNet.Sandbox/Runtime.cs @@ -200,8 +200,47 @@ private static double Clamp(double value) => } } +namespace McProtoNet.NBT +{ + // Sandbox model of McProtoNet's NBT surface. It exists so generated types that carry + // nbt/anonymousNbt (TeamAction from 771 is the first union that does) can compile and + // round-trip here at all. Only the scalar tags and compounds are modelled; a tag id outside + // that set throws, because a half-read tag would shift every following field on the wire. + public abstract record NbtTag + { + public string? Name { get; init; } + } + + public sealed record NbtByte(sbyte Value) : NbtTag; + + public sealed record NbtShort(short Value) : NbtTag; + + public sealed record NbtInt(int Value) : NbtTag; + + public sealed record NbtLong(long Value) : NbtTag; + + public sealed record NbtFloat(float Value) : NbtTag; + + public sealed record NbtDouble(double Value) : NbtTag; + + public sealed record NbtString(string Value) : NbtTag; + + public sealed record NbtCompound(Dictionary Items) : NbtTag + { + public NbtCompound() : this(new Dictionary()) { } + + public NbtCompound With(string name, NbtTag tag) + { + Items[name] = tag; + return this; + } + } +} + namespace McProtoNet.Serialization { + using McProtoNet.NBT; + // Contract every generated protocol type implements. Static abstract members give // ReadType/WriteType zero-reflection dispatch: `T.Read(...)` compiles to a direct // (devirtualized for structs) call. @@ -316,6 +355,51 @@ public byte[] ReadRestBytes() return b; } + // NBT. `readRootTag` says the root tag carries a name (classic root) — false is the + // nameless network root. A TAG_End id means "no tag at all", which is how an absent root + // travels. Signature copied from the real MinecraftPrimitiveReader. + public NbtTag? ReadNbtTag(bool readRootTag) + { + byte id = Next(); + if (id == 0) return null; + string? name = readRootTag ? ReadNbtName() : null; + return ReadNbtPayload(id) with { Name = name }; + } + + // Tag names are length-prefixed by a big-endian ushort, unlike protocol strings. + private string ReadNbtName() + { + int len = ReadUnsignedShort(); + var s = Encoding.UTF8.GetString(_data, _pos, len); + _pos += len; + return s; + } + + private NbtTag ReadNbtPayload(byte id) => id switch + { + 1 => new NbtByte(ReadSignedByte()), + 2 => new NbtShort(ReadSignedShort()), + 3 => new NbtInt(ReadSignedInt()), + 4 => new NbtLong(ReadSignedLong()), + 5 => new NbtFloat(ReadFloat()), + 6 => new NbtDouble(ReadDouble()), + 8 => new NbtString(ReadNbtName()), + 10 => ReadNbtCompound(), + _ => throw new NotSupportedException($"sandbox NBT: tag id {id} is not modelled.") + }; + + private NbtTag ReadNbtCompound() + { + var items = new Dictionary(); + while (true) + { + byte id = Next(); + if (id == 0) return new NbtCompound(items); + string name = ReadNbtName(); + items[name] = ReadNbtPayload(id) with { Name = name }; + } + } + // Nested named-type dispatch without reflection: static abstract interface member. public T ReadType(int protocolVersion) where T : IProtocolType => T.Read(ref this, protocolVersion); @@ -397,6 +481,64 @@ public void WriteByteArray(byte[] v) public void WriteRestBytes(byte[] v) => _buf.AddRange(v); + // Signature copied from the real MinecraftPrimitiveWriter, null rejection included: the + // sandbox only answers "does the generated code compile and round-trip against the real + // surface" while it accepts exactly what the real surface accepts. The default keeps both + // generated call shapes working: `WriteNbt(tag)` for the nameless network root, + // `WriteNbt(tag, true)` for the named one. + public void WriteNbt(NbtTag value, bool writeRootTag = false) + { + ArgumentNullException.ThrowIfNull(value); + _buf.Add(NbtId(value)); + if (writeRootTag) WriteNbtName(value.Name ?? ""); + WriteNbtPayload(value); + } + + private static byte NbtId(NbtTag tag) => tag switch + { + NbtByte => 1, + NbtShort => 2, + NbtInt => 3, + NbtLong => 4, + NbtFloat => 5, + NbtDouble => 6, + NbtString => 8, + NbtCompound => 10, + _ => throw new NotSupportedException($"sandbox NBT: {tag.GetType().Name} is not modelled.") + }; + + private void WriteNbtName(string s) + { + var bytes = Encoding.UTF8.GetBytes(s); + WriteUnsignedShort((ushort)bytes.Length); + _buf.AddRange(bytes); + } + + private void WriteNbtPayload(NbtTag tag) + { + switch (tag) + { + case NbtByte v: WriteSignedByte(v.Value); break; + case NbtShort v: WriteSignedShort(v.Value); break; + case NbtInt v: WriteSignedInt(v.Value); break; + case NbtLong v: WriteSignedLong(v.Value); break; + case NbtFloat v: WriteFloat(v.Value); break; + case NbtDouble v: WriteDouble(v.Value); break; + case NbtString v: WriteNbtName(v.Value); break; + case NbtCompound c: + foreach (var (name, child) in c.Items) + { + _buf.Add(NbtId(child)); + WriteNbtName(name); + WriteNbtPayload(child); + } + + _buf.Add(0); + break; + default: throw new NotSupportedException($"sandbox NBT: {tag.GetType().Name} is not modelled."); + } + } + // Mirror of MinecraftPrimitiveReader.ReadType: direct interface dispatch, no reflection. public void WriteType(T value, int protocolVersion) where T : IProtocolType => value.Write(this, protocolVersion); diff --git a/scripts/deliver-to-mcprotonet.ps1 b/scripts/deliver-to-mcprotonet.ps1 index d89c514..8176c0e 100644 --- a/scripts/deliver-to-mcprotonet.ps1 +++ b/scripts/deliver-to-mcprotonet.ps1 @@ -11,34 +11,82 @@ if (-not $McProtoNetRoot -or -not (Test-Path $McProtoNetRoot)) { $repoRoot = Split-Path -Parent $PSScriptRoot $staging = Join-Path ([IO.Path]::GetTempPath()) "mcproto-gen-$([guid]::NewGuid().ToString('N'))" -# Packets whose generated code doesn't compile yet (union/metadata codegen gaps). +# Packets whose generated code doesn't compile yet (metadata codegen gaps, missing types). # Keep in sync with the Exclude list in sandbox/McProtoNet.Sandbox/McProtoNet.Sandbox.csproj; # the sandbox's NBT-only excludes (RespawnPacket, Configuration DisconnectPacket) are NOT # carried over here — real McProtoNet has NBT support, so those are deliverable. +# +# Unions/*.cs are held back until McProtoNet references Dunet: the generated union carries +# [Union], which that package's generator turns into the case hierarchy. The reference must be +# plain — since Dunet 1.11 the package ships a real runtime assembly holding the attribute, so +# PrivateAssets="all" starves it and anything reflecting over the type fails at run time. Once it is referenced, drop TeamAction.cs, +# TeamsPacket.cs and EntityMetadataEntry.cs from this list — they compile in the sandbox today. +# EntityMetadataValue.cs stays until Slot, Particle and the registry variants are modelled. +# UnionShapeProbe.cs is a codegen fixture, not protocol: it exists so the sandbox compiles the +# union shapes EntityMetadataValue is built from. It is never delivered. $exclude = @( 'TeamsPacket.cs', 'EntityMetadataPacket.cs', 'ExplosionPacket.cs', - 'MapPacket.cs', 'WindowClickPacket.cs', 'EntityMetadataEntry.cs' + 'MapPacket.cs', 'WindowClickPacket.cs', 'EntityMetadataEntry.cs', + 'TeamAction.cs', 'EntityMetadataValue.cs', 'UnionShapeProbe.cs' ) +# One generated file declares one type, named after the file, so an excluded file name is the +# name of a type the delivered set must never mention. Returns file -> type pairs to report. +function Find-DanglingReferences { + param([IO.FileInfo[]]$Delivered, [IO.FileInfo[]]$Held, [string]$Root) + + $heldTypes = $Held | + ForEach-Object { [IO.Path]::GetFileNameWithoutExtension($_.Name) } | + Sort-Object -Unique + + if (-not $heldTypes) { return @() } + + $pattern = '\b(' + (($heldTypes | ForEach-Object { [regex]::Escape($_) }) -join '|') + ')\b' + + foreach ($file in $Delivered) { + $hits = ([regex]::Matches((Get-Content -Raw $file.FullName), $pattern) | + ForEach-Object { $_.Value } | Sort-Object -Unique) + foreach ($hit in $hits) { + [pscustomobject]@{ + File = $file.FullName.Substring($Root.Length + 1) + Type = $hit + } + } + } +} + # Finding 1: wrap body in try/finally to ensure staging dir is cleaned up on any failure try { dotnet run --project (Join-Path $repoRoot 'minecraft-protocol-fs') -- gen --out $staging if ($LASTEXITCODE -ne 0) { throw "generation failed" } + $generated = @(Get-ChildItem -Recurse -File $staging -Filter *.cs) + $held = @($generated | Where-Object { $exclude -contains $_.Name }) + $shipped = @($generated | Where-Object { $exclude -notcontains $_.Name }) + + # A partial delivery that does not compile is worse than no delivery: refuse before the + # target directory is touched, so a broken set leaves McProtoNet exactly as it was. + $dangling = @(Find-DanglingReferences -Delivered $shipped -Held $held -Root $staging) + if ($dangling.Count -gt 0) { + $lines = $dangling | ForEach-Object { " {0} references {1}" -f $_.File, $_.Type } + throw ( + "delivery refused: $($dangling.Count) reference(s) in the delivered set point at " + + "excluded file(s), so McProtoNet would not compile:`n" + ($lines -join "`n") + + "`nEither stop excluding those files or stop generating the references.") + } + $target = Join-Path $McProtoNetRoot 'src\McProtoNet.Protocol\Generated' if (Test-Path $target) { Remove-Item -Recurse -Force $target } New-Item -ItemType Directory -Force $target | Out-Null $delivered = 0 - Get-ChildItem -Recurse -File $staging -Filter *.cs | - Where-Object { $exclude -notcontains $_.Name } | - ForEach-Object { - $rel = $_.FullName.Substring($staging.Length + 1) - $dst = Join-Path $target $rel - New-Item -ItemType Directory -Force (Split-Path $dst) | Out-Null - Copy-Item $_.FullName $dst - $delivered++ - } + foreach ($file in $shipped) { + $rel = $file.FullName.Substring($staging.Length + 1) + $dst = Join-Path $target $rel + New-Item -ItemType Directory -Force (Split-Path $dst) | Out-Null + Copy-Item $file.FullName $dst + $delivered++ + } Write-Host "Delivered $delivered generated source file(s) to $target" } finally { From 077e0cbc958271f8a2ce0e4d16ff30f1a264bbe5 Mon Sep 17 00:00:00 2001 From: Titlehhhh Date: Thu, 20 Aug 2026 16:46:56 +0500 Subject: [PATCH 8/9] spec: use_entity across both eras, its interact union and LpVec3 play.toServer.use_entity had no spec. Up to 774 the payload is a union behind the mouse discriminator - interact carries a hand, attack carries nothing, interact_at carries a hit position and a hand - with the sneaking flag after it. From 775 (26.1) the union is gone: the server takes target, hand, an LpVec3 target offset and sneaking, and the three modes became separate packets (attack and spectate_entity already have specs). New union spec InteractAction covers the pre-775 arms; the packet spec carries both layers. It generates completely - no stub - so the union backend now has a second, independent user besides Teams. Sandbox: both eras round-trip. At 774 an interact_at goes out with discriminator 2, reads back as InteractAt with its three floats and hand, and re-writes byte-identical. At 776 the flat form round-trips with the quantized offset landing inside one quantization step. Coverage on pv 776: 211/257. Co-Authored-By: Claude Opus 5 (1M context) --- .../Play/Serverbound/Player/UseEntity.fs | 36 +++++++++++++++++++ .../Spec/Unions/Entity/InteractAction.fs | 27 ++++++++++++++ sandbox/McProtoNet.Sandbox.Console/Program.cs | 32 +++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Player/UseEntity.fs create mode 100644 minecraft-protocol-fs/Spec/Unions/Entity/InteractAction.fs diff --git a/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Player/UseEntity.fs b/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Player/UseEntity.fs new file mode 100644 index 0000000..9e8061d --- /dev/null +++ b/minecraft-protocol-fs/Spec/Packets/Play/Serverbound/Player/UseEntity.fs @@ -0,0 +1,36 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module UseEntity = + + let useEntity = + packet "UseEntityPacket" Play Serverbound All { + api + [ + field "Target" TInt All + field "Action" (TUnion "InteractAction") (Until 774) + field "Hand" TInt (Since 775) + field "Location" (TNamed "LpVec3") (Since 775) + field "Sneaking" TBool All + ] + + wire + (Until 774) + [ + read "target" VarInt "Target" + read "mouse" VarInt "_mouse" + readUnion "_mouse" "InteractAction" "Action" + read "sneaking" Bool "Sneaking" + ] + + wire + (Since 775) + [ + read "target" VarInt "Target" + read "hand" VarInt "Hand" + read "location" (Named "LpVec3") "Location" + read "sneaking" Bool "Sneaking" + ] + } diff --git a/minecraft-protocol-fs/Spec/Unions/Entity/InteractAction.fs b/minecraft-protocol-fs/Spec/Unions/Entity/InteractAction.fs new file mode 100644 index 0000000..645d821 --- /dev/null +++ b/minecraft-protocol-fs/Spec/Unions/Entity/InteractAction.fs @@ -0,0 +1,27 @@ +namespace McProtocol.Spec + +open McProtocol.Dsl + +[] +module InteractAction = + + let interactAction = + unionType "InteractAction" { + cases + (Until 774) + [ + case1 0 "Interact" [ read "hand" VarInt "Hand" ] + + case1 1 "Attack" [] + + case1 + 2 + "InteractAt" + [ + read "x" F32 "X" + read "y" F32 "Y" + read "z" F32 "Z" + read "hand" VarInt "Hand" + ] + ] + } diff --git a/sandbox/McProtoNet.Sandbox.Console/Program.cs b/sandbox/McProtoNet.Sandbox.Console/Program.cs index 19d893f..8fb67f6 100644 --- a/sandbox/McProtoNet.Sandbox.Console/Program.cs +++ b/sandbox/McProtoNet.Sandbox.Console/Program.cs @@ -6,6 +6,7 @@ using McProtoNet.Protocol.Packets.Status.Clientbound; using McProtoNet.Protocol.Packets.Status.Serverbound; using McProtoNet.Serialization; +using UseEntityPacket = McProtoNet.Protocol.Packets.Play.Serverbound.UseEntityPacket; using McProtoNet.NBT; int version = MinecraftVersion.LatestProtocol; @@ -342,6 +343,37 @@ static void Assert(bool condition, [System.Runtime.CompilerServices.CallerArgume Console.WriteLine(); } +// --- UseEntityPacket: union era @774 (interact_at arm), flat era @776 (LpVec3) --- +{ + var w764 = new MinecraftPrimitiveWriter(); + var atPacket = new UseEntityPacket(42, true, VUntil774: new(new InteractAction.InteractAt(0.5f, 1.25f, -0.75f, 1))); + atPacket.Write(w764, 774); + var bytes764 = w764.ToArray(); + var r764 = new MinecraftPrimitiveReader(bytes764); + var back764 = UseEntityPacket.Read(ref r764, 774); + var at = back764.VUntil774!.Value.Action as InteractAction.InteractAt; + Assert(back764.Target == 42 && back764.Sneaking); + Assert(at is not null && at.X == 0.5f && at.Y == 1.25f && at.Z == -0.75f && at.Hand == 1); + Assert(bytes764[1] == 2); + + var again = new MinecraftPrimitiveWriter(); + back764.Write(again, 774); + Assert(Hex(again.ToArray()) == Hex(bytes764)); + + var w776 = new MinecraftPrimitiveWriter(); + var flat = new UseEntityPacket(42, false, V775_Last: new(0, new LpVec3(0.25d, -0.5d, 1.0d))); + flat.Write(w776, 776); + var bytes776 = w776.ToArray(); + var r776 = new MinecraftPrimitiveReader(bytes776); + var back776 = UseEntityPacket.Read(ref r776, 776); + var loc = back776.V775_Last!.Value.Location; + Assert(back776.VUntil774 is null && Math.Abs(loc.Z - 1.0d) <= 2d / 32766d); + + Console.WriteLine($"UseEntityPacket @774: {bytes764.Length} bytes, discriminator={bytes764[1]}, case={at!.GetType().Name}"); + Console.WriteLine($"UseEntityPacket @776: {bytes776.Length} bytes, location={loc}"); + Console.WriteLine(); +} + // --- TeamAction: a dunet union behind TeamsPacket — string era @764, nbt era @772 --- { // the mode field is wire-only: the model carries the case, the packet derives the byte From b5946717fb7e2fb801f3133fcf14291472f228a1 Mon Sep 17 00:00:00 2001 From: Titlehhhh Date: Thu, 20 Aug 2026 16:54:40 +0500 Subject: [PATCH 9/9] delivery: ship the unions, hold back what needs Slot and Particle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TeamsPacket and TeamAction leave the exclusion list: McProtoNet references Dunet and gates versions through its own source generator, so the union compiles there. ExplosionParticleEntry and ExplosionParticleInfo join the list instead — they carry Particle, which McProtoNet does not model, the same reason ExplosionPacket has always been held back. Checked: a real delivery run into McProtoNet copied 267 files, the dangling- reference guard stayed quiet, and McProtoNet.Protocol builds clean on net10.0. Co-Authored-By: Claude Opus 5 (1M context) --- scripts/deliver-to-mcprotonet.ps1 | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/scripts/deliver-to-mcprotonet.ps1 b/scripts/deliver-to-mcprotonet.ps1 index 8176c0e..b1532ab 100644 --- a/scripts/deliver-to-mcprotonet.ps1 +++ b/scripts/deliver-to-mcprotonet.ps1 @@ -16,18 +16,21 @@ $staging = Join-Path ([IO.Path]::GetTempPath()) "mcproto-gen-$([guid]::NewGuid() # the sandbox's NBT-only excludes (RespawnPacket, Configuration DisconnectPacket) are NOT # carried over here — real McProtoNet has NBT support, so those are deliverable. # -# Unions/*.cs are held back until McProtoNet references Dunet: the generated union carries -# [Union], which that package's generator turns into the case hierarchy. The reference must be -# plain — since Dunet 1.11 the package ships a real runtime assembly holding the attribute, so -# PrivateAssets="all" starves it and anything reflecting over the type fails at run time. Once it is referenced, drop TeamAction.cs, +# Unions ship now: McProtoNet.Protocol references Dunet, and its version gate is source-generated +# (McProtoNet.SourceGenerator emits IsSupportedVersion per type), so nothing reflects over the +# union marker at run time and PrivateAssets="all" there is safe. The sandbox is the opposite case: +# its ThrowHelper reflects, so its Dunet reference must stay plain. +# EntityMetadataValue.cs and its entry stay held back until Slot, Particle and the registry +# variants are modelled; ExplosionParticleEntry/Info join them because they carry Particle. +# UnionShapeProbe.cs is a codegen fixture, not protocol, and is never delivered. Once it is referenced, drop TeamAction.cs, # TeamsPacket.cs and EntityMetadataEntry.cs from this list — they compile in the sandbox today. # EntityMetadataValue.cs stays until Slot, Particle and the registry variants are modelled. # UnionShapeProbe.cs is a codegen fixture, not protocol: it exists so the sandbox compiles the # union shapes EntityMetadataValue is built from. It is never delivered. $exclude = @( - 'TeamsPacket.cs', 'EntityMetadataPacket.cs', 'ExplosionPacket.cs', - 'MapPacket.cs', 'WindowClickPacket.cs', 'EntityMetadataEntry.cs', - 'TeamAction.cs', 'EntityMetadataValue.cs', 'UnionShapeProbe.cs' + 'EntityMetadataPacket.cs', 'ExplosionPacket.cs', 'ExplosionParticleEntry.cs', + 'ExplosionParticleInfo.cs', 'MapPacket.cs', 'WindowClickPacket.cs', + 'EntityMetadataEntry.cs', 'EntityMetadataValue.cs', 'UnionShapeProbe.cs' ) # One generated file declares one type, named after the file, so an excluded file name is the