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,29 @@
using System;
using System.Collections.Generic;
namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Core;
public abstract class SubComponentRegistry(DataTypes dataTypes)
{
private readonly Dictionary<string, Type> _subComponentParsers = new();
protected void RegisterSubComponent<T>(string name) where T : SubComponent
{
if(_subComponentParsers.TryGetValue(name, out _))
throw new Exception($"Sub component {name} already registered!");
_subComponentParsers.Add(name, typeof(T));
}
public SubComponent ParseSubComponent(string name, Queue<byte> data)
{
if(!_subComponentParsers.TryGetValue(name, out var subComponentParserType))
throw new Exception($"Sub component {name} not registered!");
var instance= Activator.CreateInstance(subComponentParserType, dataTypes) as SubComponent ??
throw new InvalidOperationException($"Could not create instance of a sub component parser type: {subComponentParserType.Name}");
instance.Parse(data);
return instance;
}
}