2024-09-11 20:35:23 +02:00
using System ;
using System.Collections.Generic ;
using MinecraftClient.Inventory.ItemPalettes ;
using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents ;
using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6 ;
using MinecraftClient.Protocol.Handlers.StructuredComponents.Core ;
namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6 ;
2024-10-05 13:37:52 +02:00
public class PotionContentsComponent ( DataTypes dataTypes , ItemPalette itemPalette , SubComponentRegistry subComponentRegistry )
2024-09-11 20:35:23 +02:00
: StructuredComponent ( dataTypes , itemPalette , subComponentRegistry )
{
2024-12-04 21:25:22 +01:00
public bool HasPotionId { get ; set ; }
2024-09-11 20:35:23 +02:00
public int PotiononId { get ; set ; }
public bool HasCustomColor { get ; set ; }
public int CustomColor { get ; set ; }
public int NumberOfCustomEffects { get ; set ; }
2024-10-05 13:37:52 +02:00
public List < PotionEffectSubComponent > Effects { get ; set ; } = new ( ) ;
2024-09-11 20:35:23 +02:00
public override void Parse ( Queue < byte > data )
{
2024-12-04 21:25:22 +01:00
HasPotionId = dataTypes . ReadNextBool ( data ) ;
PotiononId = HasPotionId ? dataTypes . ReadNextVarInt ( data ) : 0 ; // TODO: Find from the registry
2024-09-11 20:35:23 +02:00
HasCustomColor = dataTypes . ReadNextBool ( data ) ;
2024-12-04 21:25:22 +01:00
CustomColor = HasCustomColor ? dataTypes . ReadNextInt ( data ) : 0 ; // TODO: Find from the registry
2024-09-11 20:35:23 +02:00
NumberOfCustomEffects = dataTypes . ReadNextVarInt ( data ) ;
for ( var i = 0 ; i < NumberOfCustomEffects ; i + + )
2024-10-05 13:37:52 +02:00
Effects . Add ( ( PotionEffectSubComponent ) subComponentRegistry . ParseSubComponent ( SubComponents . PotionEffect , data ) ) ;
2024-09-11 20:35:23 +02:00
}
public override Queue < byte > Serialize ( )
{
var data = new List < byte > ( ) ;
2024-12-04 21:25:22 +01:00
data . AddRange ( DataTypes . GetBool ( HasPotionId ) ) ;
2024-09-11 20:35:23 +02:00
data . AddRange ( DataTypes . GetVarInt ( PotiononId ) ) ;
data . AddRange ( DataTypes . GetBool ( HasCustomColor ) ) ;
data . AddRange ( DataTypes . GetInt ( CustomColor ) ) ;
if ( NumberOfCustomEffects > 0 )
{
if ( Effects . Count ! = NumberOfCustomEffects )
throw new ArgumentNullException ( $"Can not serialize PotionContentsComponentComponent1206 due to NumberOfCustomEffects being different from the count of elements in the Effects list!" ) ;
foreach ( var effect in Effects )
data . AddRange ( effect . Serialize ( ) ) ;
}
return new Queue < byte > ( data ) ;
}
}