2024-09-11 20:58:24 +02:00
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 ;
2026-06-11 21:33:48 +02:00
public class WritableBookContentComponent ( DataTypes dataTypes , ItemPalette itemPalette , SubComponentRegistry subComponentRegistry ) : StructuredComponent ( dataTypes , itemPalette , subComponentRegistry )
2024-09-11 20:58:24 +02:00
{
public List < BookPage > Pages { get ; set ; } = [ ] ;
2026-06-04 11:42:41 +02:00
2024-09-11 20:58:24 +02:00
public override void Parse ( Queue < byte > data )
{
2026-03-24 01:16:05 +00:00
var count = DataTypes . ReadNextVarInt ( data ) ;
2024-09-11 20:58:24 +02:00
2026-03-20 00:45:50 +08:00
for ( var i = 0 ; i < count ; i + + )
2024-09-11 20:58:24 +02:00
{
2026-03-24 01:16:05 +00:00
var rawContent = DataTypes . ReadNextString ( data ) ;
var hasFilteredContent = DataTypes . ReadNextBool ( data ) ;
2024-09-11 20:58:24 +02:00
var filteredContent = null as string ;
2026-06-04 11:42:41 +02:00
if ( hasFilteredContent )
2026-03-24 01:16:05 +00:00
filteredContent = DataTypes . ReadNextString ( data ) ;
2026-06-04 11:42:41 +02:00
2024-09-11 20:58:24 +02:00
Pages . Add ( new BookPage ( rawContent , hasFilteredContent , filteredContent ) ) ;
}
}
public override Queue < byte > Serialize ( )
{
var data = new List < byte > ( ) ;
2026-06-04 11:42:41 +02:00
2026-03-20 00:45:50 +08:00
data . AddRange ( DataTypes . GetVarInt ( Pages . Count ) ) ;
2024-09-11 20:58:24 +02:00
foreach ( var page in Pages )
{
data . AddRange ( DataTypes . GetString ( page . RawContent ) ) ;
data . AddRange ( DataTypes . GetBool ( page . HasFilteredContent ) ) ;
if ( page . HasFilteredContent )
{
2026-06-04 11:42:41 +02:00
if ( page . FilteredContent is null )
2026-06-11 21:33:48 +02:00
throw new InvalidOperationException ( "Can not serialize WritableBookContentComponent because page.HasFilteredContent = true, but FilteredContent is null!" ) ;
2026-06-04 11:42:41 +02:00
2024-09-11 20:58:24 +02:00
data . AddRange ( DataTypes . GetString ( page . FilteredContent ) ) ;
}
}
return new Queue < byte > ( data ) ;
}
}