Minecraft-Console-Client/MinecraftClient/Protocol/Handlers/StructuredComponents/StructuredComponentsHandler.cs

46 lines
2.3 KiB
C#
Raw Normal View History

2024-09-01 20:42:39 +02:00
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)
2024-09-01 20:42:39 +02:00
{
// Get the appropriate subcomponent registry type based on the protocol version and then instantiate it
var subcomponentRegistryType = protocolVersion switch
{
2024-09-11 19:12:31 +02:00
Protocol18Handler.MC_1_20_6_Version => typeof(SubComponentRegistry1206),
2024-12-06 16:45:48 +01:00
Protocol18Handler.MC_1_21_Version => typeof(SubComponentRegistry121),
2024-09-01 20:42:39 +02:00
_ => 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),
2024-12-06 16:45:48 +01:00
Protocol18Handler.MC_1_21_Version => typeof(StructuredComponentsRegistry121),
2024-09-01 20:42:39 +02:00
_ => throw new NotSupportedException($"Protocol version {protocolVersion} is not supported for structured component registries!")
};
ComponentRegistry = Activator.CreateInstance(registryType, dataTypes, itemPalette, subcomponentRegistry) as StructuredComponentRegistry
2024-09-01 20:42:39 +02:00
?? 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);
}
}