mirror of
https://github.com/MCCTeam/Minecraft-Console-Client
synced 2026-08-15 13:04:36 +00:00
- Add MC_26_2_Version = 776 and bump all upper-bound feature gates - Route 26.2 to the new item/block/entity palettes and StructuredComponentsRegistry262 - Reuse PacketPalette261 (play/config packet IDs are unchanged in 26.2; the only registry change is spectate_entity renamed to spectator_action at the same ID, which MCC does not send) and EntityMetadataPalette261 (serializer list is identical) - Add a 26.2 branch for Set Player Team parsing: field order changed to displayName, prefix, suffix, visibility, collision rule, then color as Optional<TeamColor> (absent maps to -1) and options byte last - Register protocol 776 in both supported-protocol lists and the version string mappings; bump MCHighestVersion to 26.2 JoinGame gained a trailing onlineMode bool and LoginFinished a trailing session UUID in 26.2; both sit after every field MCC reads, so parsing is unaffected. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
64 lines
3.1 KiB
C#
64 lines
3.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using MinecraftClient.Inventory.ItemPalettes;
|
|
using MinecraftClient.Protocol.Handlers.StructuredComponents.Core;
|
|
using MinecraftClient.Protocol.Handlers.StructuredComponents.Registries;
|
|
using MinecraftClient.Protocol.Handlers.StructuredComponents.Registries.Subcomponents;
|
|
|
|
namespace MinecraftClient.Protocol.Handlers.StructuredComponents;
|
|
|
|
public class StructuredComponentsHandler
|
|
{
|
|
private StructuredComponentRegistry ComponentRegistry { get; }
|
|
|
|
public StructuredComponentsHandler(
|
|
int protocolVersion,
|
|
DataTypes dataTypes,
|
|
ItemPalette itemPalette)
|
|
{
|
|
// Get the appropriate subcomponent registry type based on the protocol version and then instantiate it
|
|
var subcomponentRegistryType = protocolVersion switch
|
|
{
|
|
Protocol18Handler.MC_1_20_6_Version => typeof(SubComponentRegistry1206),
|
|
Protocol18Handler.MC_1_21_Version => typeof(SubComponentRegistry121),
|
|
>= Protocol18Handler.MC_1_21_2_Version => typeof(SubComponentRegistry1212),
|
|
_ => throw new NotSupportedException($"Protocol version {protocolVersion} is not supported for subcomponent registries!")
|
|
};
|
|
|
|
var subcomponentRegistry = Activator.CreateInstance(subcomponentRegistryType, dataTypes) as SubComponentRegistry
|
|
?? throw new InvalidOperationException($"Failed to instantiate a component registry for type {nameof(subcomponentRegistryType)}");
|
|
|
|
// Get the appropriate component registry type based on the protocol version and then instantiate it
|
|
var registryType = protocolVersion switch
|
|
{
|
|
Protocol18Handler.MC_1_20_6_Version => typeof(StructuredComponentsRegistry1206),
|
|
Protocol18Handler.MC_1_21_Version => typeof(StructuredComponentsRegistry121),
|
|
>= Protocol18Handler.MC_26_2_Version => typeof(StructuredComponentsRegistry262),
|
|
>= Protocol18Handler.MC_26_1_Version => typeof(StructuredComponentsRegistry261),
|
|
>= Protocol18Handler.MC_1_21_11_Version => typeof(StructuredComponentsRegistry12111),
|
|
>= Protocol18Handler.MC_1_21_5_Version => typeof(StructuredComponentsRegistry1215),
|
|
>= Protocol18Handler.MC_1_21_2_Version => typeof(StructuredComponentsRegistry1212),
|
|
_ => throw new NotSupportedException($"Protocol version {protocolVersion} is not supported for structured component registries!")
|
|
};
|
|
|
|
ComponentRegistry = Activator.CreateInstance(registryType, dataTypes, itemPalette, subcomponentRegistry) as StructuredComponentRegistry
|
|
?? throw new InvalidOperationException($"Failed to instantiate a component registry for type {nameof(registryType)}");
|
|
}
|
|
|
|
public StructuredComponent Parse(int componentId, Queue<byte> data)
|
|
{
|
|
return ComponentRegistry.ParseComponent(componentId, data);
|
|
}
|
|
|
|
public string GetComponentName(int componentId)
|
|
{
|
|
try
|
|
{
|
|
return ComponentRegistry.GetComponentNameById(componentId);
|
|
}
|
|
catch
|
|
{
|
|
return "<unknown>";
|
|
}
|
|
}
|
|
}
|