package Ġtab ool ib . module . nms Ċ Ċ import Ġio . netty . channel . Channel Ċ import Ġorg . bukkit . entity . Player Ċ import Ġorg . bukkit . event . player . Player Join Event Ċ import Ġorg . bukkit . event . player . Player Quit Event Ċ import Ġtab ool ib . common . platform . Platform Ċ import Ġtab ool ib . common . platform . Platform Side Ċ import Ġtab ool ib . common . platform . event . Subscribe Event Ċ import Ġtab ool ib . common . platform . function . plugin Id Ċ import Ġtab ool ib . common . reflect . Ref lex . Companion . getProperty Ċ import Ġjava . util . concurrent . Executors Ċ Ċ /** Ċ Ġ* Ġ@ author Ġ åĿ ı é»ĳ Ċ Ġ* Ġ@ since Ġ 2 0 1 8 - 1 0 - 2 8 Ġ 1 4 : 3 4 Ċ Ġ*/ Ċ @ Platform Side ([ Platform . BU KK IT ]) Ċ object ĠChannel Executor Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġid Ġ= Ġ" tab ool ib _${ plugin Id }_ packet _ handler " ĊĠĠĠ Ġprivate Ġval Ġadd Channel Service Ġ= ĠExec utors . new Single Thread Executor () ĊĠĠĠ Ġprivate Ġval Ġremove Channel Service Ġ= ĠExec utors . new Single Thread Executor () ĊĊĠĠĠ Ġfun Ġget Player Channel ( player : ĠPlayer ): ĠChannel Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplayer Connection Ġ= Ġif Ġ( Minecraft Version . is Universal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . getProperty < Any >(" entity / connection ") !! ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . getProperty < Any >(" entity / player Connection ") !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġplayer Connection Ġ è¢« å¼Ĥå¸¸ æ³¨ åħ¥ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Minecraft Version . is Universal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Connection . getProperty < Channel >(" connection / channel ") !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Connection . getProperty < Channel >(" network Manager / channel ") !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Unable Ġto Ġget Ġplayer ĠChannel Ġfrom Ġ${ player Connection . java Class }", Ġex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Player Channel ( player : ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Channel Service . submit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Player Channel ( player ). pipeline (). add Before (" packet _ handler ", Ġid , ĠChannel Handler ( player )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Player Channel ( player : ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Channel Service . submit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Channel Ġ= Ġget Player Channel ( player ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player Channel . pipeline ()[ id ] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Channel . pipeline (). remove ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Event ĊĠĠĠ Ġinternal Ġfun Ġe ( e : ĠPlayer Join Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Player Channel ( e . player ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Event ĊĠĠĠ Ġinternal Ġfun Ġe ( e : ĠPlayer Quit Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Player Channel ( e . player ) ĊĠĠĠ Ġ} Ċ }