package Ġnet . ax ay . k sp ig ot . chat . input . implement ations Ċ Ċ import Ġnet . ax ay . k sp ig ot . chat . input . Player Input Ċ import Ġnet . ax ay . k sp ig ot . chat . input . Player Input Result Ċ import Ġnet . ax ay . k sp ig ot . event . listen Ċ import Ġnet . ax ay . k sp ig ot . extensions . bukkit . content Ċ import Ġnet . ax ay . k sp ig ot . items . item Stack Ċ import Ġnet . ax ay . k sp ig ot . items . meta Ċ import Ġnet . ax ay . k sp ig ot . main . K Sp ig ot Main Instance Ċ import Ġorg . bukkit . Material Ċ import Ġorg . bukkit . Name spaced Key Ċ import Ġorg . bukkit . entity . Player Ċ import Ġorg . bukkit . event . player . Player Edit Book Event Ċ import Ġorg . bukkit . inventory . meta . Book Meta Ċ import Ġorg . bukkit . persistence . Persistent DataType Ċ Ċ internal Ġclass ĠPlayer Input Book Comp reh ensive ( ĊĠĠĠ Ġplayer : ĠPlayer , ĊĠĠĠ Ġcallback : Ġ( Player Input Result < String >) Ġ-> ĠUnit , ĊĠĠĠ Ġtimeout Seconds : ĠInt Ċ ) Ġ: ĠPlayer Input Book < String >( player , Ġcallback , Ġtimeout Seconds ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġload Book Content ( book Meta : ĠBook Meta ) Ġ= Ġbook Meta . content Ċ } Ċ Ċ internal Ġclass ĠPlayer Input Book Paged ( ĊĠĠĠ Ġplayer : ĠPlayer , ĊĠĠĠ Ġcallback : Ġ( Player Input Result < List < String >>) Ġ-> ĠUnit , ĊĠĠĠ Ġtimeout Seconds : ĠInt Ċ ) Ġ: ĠPlayer Input Book < List < String >>( player , Ġcallback , Ġtimeout Seconds ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġload Book Content ( book Meta : ĠBook Meta ): ĠList < String > Ġ= Ġbook Meta . pages Ċ } Ċ Ċ internal Ġabstract Ġclass ĠPlayer Input Book < T >( ĊĠĠĠ Ġplayer : ĠPlayer , ĊĠĠĠ Ġcallback : Ġ( Player Input Result < T >) Ġ-> ĠUnit , ĊĠĠĠ Ġtimeout Seconds : ĠInt Ċ ) Ġ: ĠPlayer Input < T >( player , Ġcallback , Ġtimeout Seconds ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġid Ġ= Ġget ID () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer . open Book ( item Stack ( Material . WR IT ABLE _ BOOK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersistent Data Container [ id Key , ĠPersistent DataType . INTEGER ] Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġload Book Content ( book Meta : ĠBook Meta ): ĠT ĊĊĠĠĠ Ġoverride Ġval Ġinput Listeners Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġlisten < Player Edit Book Event > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeta Ġ= Ġit . new Book Meta ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( meta . persistent Data Container [ id Key , ĠPersistent DataType . INTEGER ] Ġ== Ġid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Receive ( load Book Content ( meta )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġused IDs Ġ-= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Timeout () Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer . close Inventory () ĊĠĠĠĠĠĠĠ Ġused IDs Ġ-= Ġid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġid Key Ġ= ĠName spaced Key ( K Sp ig ot Main Instance , Ġ" k sp ig ot _ book input _ id ") ĊĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġused IDs Ġ= ĠArrayList < Int >() ĊĠĠĠĠĠĠĠ Ġfun Ġget ID (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreturn ID Ġ= Ġ( 0 .. Int . MAX _ VALUE ). random () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( used IDs . contains ( return ID )) Ġreturn ID Ġ= Ġ( 0 .. Int . MAX _ VALUE ). random () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreturn ID ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }