First Version of Structured Components

This commit is contained in:
Anon 2024-09-01 20:42:39 +02:00
parent 5a6fd577e5
commit 63b027d84a
11 changed files with 314 additions and 26 deletions

View file

@ -0,0 +1,43 @@
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)
{
// 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(TestSubComponentRegistry),
_ => 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),
_ => throw new NotSupportedException($"Protocol version {protocolVersion} is not supported for structured component registries!")
};
ComponentRegistry = Activator.CreateInstance(registryType, subcomponentRegistry, dataTypes) 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);
}
}