Added more structured components

This commit is contained in:
Anon 2024-09-11 20:58:24 +02:00
parent 49319fe781
commit 4dea688ca2
7 changed files with 192 additions and 3 deletions

View file

@ -0,0 +1,3 @@
namespace MinecraftClient.Inventory;
public record BookPage(string RawContent, bool HasFilteredContent, string? FilteredContent);

View file

@ -0,0 +1,3 @@
namespace MinecraftClient.Inventory;
public record SuspiciousStewEffect(int TypeId, int Duration);

View file

@ -7,7 +7,7 @@ using MinecraftClient.Protocol.Handlers.StructuredComponents.Core;
namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6;
public class PotionContentsComponentComponent1206(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry)
public class PotionContentsComponent1206(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry)
: StructuredComponent(dataTypes, itemPalette, subComponentRegistry)
{
public int PotiononId { get; set; }

View file

@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Linq;
using MinecraftClient.Inventory;
using MinecraftClient.Inventory.ItemPalettes;
using MinecraftClient.Protocol.Handlers.StructuredComponents.Core;
namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6;
public class SuspiciousStewEffectsComponent1206(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry)
: StructuredComponent(dataTypes, itemPalette, subComponentRegistry)
{
public int NumberOfEffects { get; set; }
public List<SuspiciousStewEffect> Effects { get; set; } = new();
public override void Parse(Queue<byte> data)
{
NumberOfEffects = dataTypes.ReadNextVarInt(data);
for (var i = 0; i < NumberOfEffects; i++)
Effects.Add(new SuspiciousStewEffect(dataTypes.ReadNextVarInt(data), dataTypes.ReadNextVarInt(data)));
}
public override Queue<byte> Serialize()
{
var data = new List<byte>();
data.AddRange(DataTypes.GetVarInt(NumberOfEffects));
if (NumberOfEffects != Effects.Count)
throw new InvalidOperationException("Can not serialize SuspiciousStewEffectsComponent1206 because umberOfEffects != Effects.Count!");
foreach (var effect in Effects)
{
data.AddRange(DataTypes.GetVarInt(effect.TypeId));
data.AddRange(DataTypes.GetVarInt(effect.Duration));
}
return new Queue<byte>(data);
}
}

View file

@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using MinecraftClient.Inventory;
using MinecraftClient.Inventory.ItemPalettes;
using MinecraftClient.Protocol.Handlers.StructuredComponents.Core;
namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6;
public class WritableBlookContentComponent1206(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) : StructuredComponent(dataTypes, itemPalette, subComponentRegistry)
{
public int NumberOfPages { get; set; }
public List<BookPage> Pages { get; set; } = [];
public override void Parse(Queue<byte> data)
{
NumberOfPages = dataTypes.ReadNextVarInt(data);
for (var i = 0; i < NumberOfPages; i++)
{
var rawContent = dataTypes.ReadNextString(data);
var hasFilteredContent = dataTypes.ReadNextBool(data);
var filteredContent = null as string;
if(hasFilteredContent)
filteredContent = dataTypes.ReadNextString(data);
Pages.Add(new BookPage(rawContent, hasFilteredContent, filteredContent));
}
}
public override Queue<byte> Serialize()
{
var data = new List<byte>();
data.AddRange(DataTypes.GetVarInt(NumberOfPages));
if (NumberOfPages != Pages.Count)
throw new InvalidOperationException("Can not setialize WritableBlookContentComponent1206 because NumberOfPages != Pages.Count!");
foreach (var page in Pages)
{
data.AddRange(DataTypes.GetString(page.RawContent));
data.AddRange(DataTypes.GetBool(page.HasFilteredContent));
if (page.HasFilteredContent)
{
if(page.FilteredContent is null)
throw new InvalidOperationException("Can not setialize WritableBlookContentComponent1206 because page.HasFilteredContent = true, but FilteredContent is null!");
data.AddRange(DataTypes.GetString(page.FilteredContent));
}
}
return new Queue<byte>(data);
}
}

View file

@ -0,0 +1,86 @@
using System;
using System.Collections.Generic;
using MinecraftClient.Inventory;
using MinecraftClient.Inventory.ItemPalettes;
using MinecraftClient.Protocol.Handlers.StructuredComponents.Core;
using MinecraftClient.Protocol.Message;
namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6;
public class WrittenBlookContentComponent1206(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) : StructuredComponent(dataTypes, itemPalette, subComponentRegistry)
{
public string RawTitle { get; set; } = null!;
public bool HasFilteredTitle { get; set; }
public string? FilteredTitle { get; set; }
public string Author { get; set; } = null!;
public int Generation { get; set; }
public int NumberOfPages { get; set; }
public List<BookPage> Pages { get; set; } = [];
public bool Resolved { get; set; }
public override void Parse(Queue<byte> data)
{
RawTitle = ChatParser.ParseText(dataTypes.ReadNextString(data));
HasFilteredTitle = dataTypes.ReadNextBool(data);
if (HasFilteredTitle)
FilteredTitle = dataTypes.ReadNextString(data);
Author = dataTypes.ReadNextString(data);
Generation = dataTypes.ReadNextVarInt(data);
NumberOfPages = dataTypes.ReadNextVarInt(data);
for (var i = 0; i < NumberOfPages; i++)
{
var rawContent = ChatParser.ParseText(dataTypes.ReadNextString(data));
var hasFilteredContent = dataTypes.ReadNextBool(data);
var filteredContent = null as string;
if(hasFilteredContent)
filteredContent = dataTypes.ReadNextString(data);
Pages.Add(new BookPage(rawContent, hasFilteredContent, filteredContent));
}
Resolved = dataTypes.ReadNextBool(data);
}
public override Queue<byte> Serialize()
{
var data = new List<byte>();
data.AddRange(DataTypes.GetString(RawTitle));
data.AddRange(DataTypes.GetBool(HasFilteredTitle));
if (HasFilteredTitle)
{
if(FilteredTitle is null)
throw new InvalidOperationException("Can not setialize WrittenBlookContentComponent1206 because HasFilteredTitle is true but FilteredTitle is null!");
data.AddRange(DataTypes.GetString(FilteredTitle));
}
data.AddRange(DataTypes.GetString(Author));
data.AddRange(DataTypes.GetVarInt(Generation));
data.AddRange(DataTypes.GetVarInt(NumberOfPages));
if (NumberOfPages != Pages.Count)
throw new InvalidOperationException("Can not setialize WrittenBlookContentComponent1206 because NumberOfPages != Pages.Count!");
foreach (var page in Pages)
{
data.AddRange(DataTypes.GetString(page.RawContent));
data.AddRange(DataTypes.GetBool(page.HasFilteredContent));
if (page.HasFilteredContent)
{
if(page.FilteredContent is null)
throw new InvalidOperationException("Can not setialize WrittenBlookContentComponent1206 because page.HasFilteredContent = true, but FilteredContent is null!");
data.AddRange(DataTypes.GetString(page.FilteredContent));
}
}
data.AddRange(DataTypes.GetBool(Resolved));
return new Queue<byte>(data);
}
}

View file

@ -40,7 +40,9 @@ public class StructuredComponentsRegistry1206 : StructuredComponentRegistry
RegisterComponent<MapPostProcessingComponent1206>(28, "minecraft:map_post_processing");
RegisterComponent<ChargedProjectilesComponent1206>(29, "minecraft:charged_projectiles");
RegisterComponent<BundleContentsComponent1206>(30, "minecraft:bundle_contents");
RegisterComponent<PotionContentsComponentComponent1206>(31, "minecraft:potion_contents");
RegisterComponent<PotionContentsComponent1206>(31, "minecraft:potion_contents");
RegisterComponent<SuspiciousStewEffectsComponent1206>(32, "minecraft:suspicious_stew_effects");
RegisterComponent<WritableBlookContentComponent1206>(33, "minecraft:writable_book_content");
RegisterComponent<WrittenBlookContentComponent1206>(34, "minecraft:written_book_content");
}
}