package Ġorg . k rypt on mc . k rypt on . packet . transformers Ċ Ċ import Ġio . netty . buffer . Byte Buf Ċ import Ġio . netty . channel . Channel HandlerContext Ċ import Ġio . netty . handler . codec . Byte To Message Decoder Ċ import Ġorg . k rypt on mc . k rypt on . channel . Channel Handler Ċ import Ġorg . k rypt on mc . k rypt on . extension . logger Ċ import Ġorg . k rypt on mc . k rypt on . extension . read Var Int Ċ Ċ class ĠPacket Decoder Ġ: ĠByte To Message Decoder () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġdecode ( ctx : ĠChannel HandlerContext , Ġbuf : ĠByte Buf , Ġout : ĠMutable List < Any >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( buf . readable Bytes () Ġ== Ġ 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġbuf . read Var Int () ĊĠĠĠĠĠĠĠ Ġval Ġsession Ġ= Ġctx . pipeline (). get ( Channel Handler :: class . java ). session ĊĊĠĠĠĠĠĠĠ Ġval Ġpacket Ġ= Ġsession . currentState . create Packet ( id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( packet Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . debug (" Skipping Ġpacket Ġwith Ġstate Ġ${ session . currentState } Ġand ĠID Ġ$ id Ġbecause Ġa Ġpacket Ġobject Ġwas Ġnot Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . skip Bytes ( buf . readable Bytes ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLOGGER . debug (" Incoming Ġpacket Ġof Ġtype Ġ${ packet . java Class }") ĊĊĠĠĠĠĠĠĠ Ġpacket . read ( buf ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( buf . readable Bytes () Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . debug (" More Ġbytes Ġfrom Ġpacket Ġ$ packet Ġ(${ buf . readable Bytes () }) ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġout . add ( packet ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNET TY _ NAME Ġ= Ġ" decoder " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= Ġlogger < Packet Decoder >() ĊĠĠĠ Ġ} Ċ }