package Ġfab rick tx . api Ċ Ċ import Ġdrawer . write Ċ import Ġfab rick tx . impl .* Ċ import Ġkotlinx . serialization . K Serializer Ċ import Ġkotlinx . serialization . modules . Empty Module Ċ import Ġkotlinx . serialization . modules . Serial Module Ċ import Ġnet . fabric mc . fabric . api . network . Packet Context Ċ import Ġnet . minecraft . entity . player . Player Entity Ċ import Ġnet . minecraft . util . Identifier Ċ import Ġnet . minecraft . world . World Ċ import Ġjava . util . stream . Stream ĊĊ Ċ interface ĠKotlin Packet < T Ġ: ĠKotlin Packet < T >> Ġ{ ĊĠĠĠ Ġval Ġserializer : ĠK Serializer < T > ĊĠĠĠ Ġfun Ġuse ( context : ĠPacket Context ) ĊĠĠĠ Ġval Ġserialization Context : ĠSerial Module Ġget () Ġ= ĠEmpty Module Ċ } Ċ Ċ interface ĠC 2 SP acket < T Ġ: ĠKotlin Packet < T >> Ġ: ĠKotlin Packet < T > Ċ Ċ interface ĠS 2 CP acket < T Ġ: ĠKotlin Packet < T >> Ġ: ĠKotlin Packet < T > Ċ Ċ interface ĠTwo Side d Packet < T Ġ: ĠKotlin Packet < T >> Ġ: ĠS 2 CP acket < T >, ĠC 2 SP acket < T > ĊĊ Ċ / ************************ ****** Ċ Ġ* ĠAutomatic ĠSerializer ĠWrapper s Ċ Ġ************************* *****/ Ċ Ċ fun ĠCommon Mod Initialization Context . register S 2 CP ackets ( var arg Ġserializers : ĠK Serializer < out ĠS 2 CP acket <* >>, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠSerial Module Ġ= ĠEmpty Module ) Ġ{ ĊĠĠĠ Ġfor Ġ( serializer Ġin Ġserializers ) Ġregister S 2 C ( serializer , Ġmod Id , Ġcontext ) Ċ } Ċ Ċ fun ĠCommon Mod Initialization Context . register C 2 SP ackets ( var arg Ġserializers : ĠK Serializer < out ĠC 2 SP acket <* >>, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠSerial Module Ġ= ĠEmpty Module ) Ġ{ ĊĠĠĠ Ġfor Ġ( serializer Ġin Ġserializers ) Ġregister C 2 S ( serializer , Ġmod Id , Ġcontext ) Ċ } ĊĊ Ċ /** Ċ Ġ* ĠSends Ġa Ġpacket Ġfrom Ġthe Ġserver Ġto Ġthe Ġclient Ġfor Ġall Ġthe Ġplayers Ġin Ġthe Ġstream . Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠS 2 CP acket < T >> ĠStream < Player Entity >. send Packet ( packet : ĠT ) Ġ{ ĊĠĠĠ Ġfor Ġ( player Ġin Ġthis ) Ġplayer . send Packet ( packet ) Ċ } Ċ Ċ /** Ċ Ġ* ĠSends Ġa Ġpacket Ġfrom Ġthe Ġserver Ġto Ġthe Ġclient Ġfor Ġall Ġthe Ġplayers Ġin Ġthe Ġstream . Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠS 2 CP acket < T >> ĠPlayer Entity . send Packet ( packet : ĠT ) Ġ{ ĊĠĠĠ Ġval Ġserializer Ġ= Ġpacket . serializer ĊĠĠĠ Ġval Ġmod Id Ġ= ĠNetwork ing Impl . packet Mod Ids [ serializer ] ĊĠĠĠ Ġrequire ( mod Id Ġ!= Ġnull ) Ġ{ Ġ" Packet Ġwith Ġserializer Ġ$ serializer Ġwas Ġnot Ġregistered !" Ġ} ĊĊĠĠĠ Ġsend Packet ( packet Id Ġ= ĠIdentifier ( mod Id , Ġserializer . packet Id )) Ġ{ ĊĠĠĠĠĠĠĠ Ġpacket . serializer . write ( packet , Ġthis , Ġcontext Ġ= Ġpacket . serialization Context ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠSends Ġa Ġpacket Ġfrom Ġthe Ġserver Ġto Ġthe Ġclient Ġfor Ġall Ġthe Ġplayers Ġin Ġthe Ġstream . Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠC 2 SP acket < T >> Ġsend Packet ToServer ( packet : ĠT ) Ġ{ ĊĠĠĠ Ġval Ġserializer Ġ= Ġpacket . serializer ĊĠĠĠ Ġval Ġmod Id Ġ= ĠNetwork ing Impl . packet Mod Ids [ serializer ] ĊĠĠĠ Ġrequire ( mod Id Ġ!= Ġnull ) Ġ{ Ġ" Packet Ġwith Ġserializer Ġ$ serializer Ġwas Ġnot Ġregistered !" Ġ} ĊĊĠĠĠ Ġsend Packet ToServer ( Identifier ( mod Id , Ġserializer . packet Id )) Ġ{ ĊĠĠĠĠĠĠĠ Ġpacket . serializer . write ( packet , Ġthis , Ġcontext Ġ= Ġpacket . serialization Context ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠPacket Context . world : ĠWorld Ġget () Ġ= Ġplayer . world ĊĊĊĊĊ