hypixel book fixes

This commit is contained in:
Anon 2026-06-10 17:16:30 +02:00
parent 61c2cbf7c3
commit e744ff206b
7 changed files with 302 additions and 38 deletions

View file

@ -32,17 +32,13 @@ public class WrittenBlookContentComponent(DataTypes dataTypes, ItemPalette itemP
for (var i = 0; i < NumberOfPages; i++)
{
var rawContentNbt = DataTypes.ReadNextNbt(data);
var rawContent = ChatParser.ParseText(rawContentNbt);
var (rawContent, rawContentNbt) = ReadPageComponent(data);
var hasFilteredContent = DataTypes.ReadNextBool(data);
Dictionary<string, object>? filteredContentNbt = null;
string? filteredContent = null;
if (hasFilteredContent)
{
filteredContentNbt = DataTypes.ReadNextNbt(data);
filteredContent = ChatParser.ParseText(filteredContentNbt);
}
(filteredContent, filteredContentNbt) = ReadPageComponent(data);
Pages.Add(new BookPage(rawContent, hasFilteredContent, filteredContent, rawContentNbt, filteredContentNbt));
}
@ -50,6 +46,28 @@ public class WrittenBlookContentComponent(DataTypes dataTypes, ItemPalette itemP
Resolved = DataTypes.ReadNextBool(data);
}
private (string Content, Dictionary<string, object> Nbt) ReadPageComponent(Queue<byte> data)
{
// Hypixel sent page payloads in the string-shaped form on this structured-book path,
// so keep the parser tolerant while still preserving the raw data for serialization.
Queue<byte> fallbackData = new(data);
try
{
var nbt = DataTypes.ReadNextNbt(data);
return (ChatParser.ParseText(nbt), nbt);
}
catch (System.IO.InvalidDataException)
{
data.Clear();
foreach (var b in fallbackData)
data.Enqueue(b);
var json = DataTypes.ReadNextString(data);
return (ChatParser.ParseText(json), new Dictionary<string, object> { [""] = json });
}
}
public override Queue<byte> Serialize()
{
var data = new List<byte>();
@ -80,4 +98,4 @@ public class WrittenBlookContentComponent(DataTypes dataTypes, ItemPalette itemP
data.AddRange(DataTypes.GetBool(Resolved));
return new Queue<byte>(data);
}
}
}