package Ġju ux el . ad orn . client . gui . screen Ċ Ċ import Ġcom . moj ang . bl aze 3 d . systems . Render System Ċ import Ġju ux el . ad orn . Ad orn Common Ċ import Ġju ux el . ad orn . client . book . Book Ċ import Ġju ux el . ad orn . client . book . Page Ċ import Ġju ux el . ad orn . client . gui . widget . Flip Book Ċ import Ġju ux el . ad orn . client . gui . widget . Tick ing Element Ċ import Ġju ux el . ad orn . util . Colors Ċ import Ġnet . minecraft . client . gui . Drawable Ċ import Ġnet . minecraft . client . gui . Element Ċ import Ġnet . minecraft . client . gui . screen . Screen Ċ import Ġnet . minecraft . client . gui . screen . ing ame . Book Screen Ċ import Ġnet . minecraft . client . gui . widget . Button Widget Ċ import Ġnet . minecraft . client . gui . widget . Page Turn Widget Ċ import Ġnet . minecraft . client . render . Game Renderer Ċ import Ġnet . minecraft . client . sound . Position ed Sound Instance Ċ import Ġnet . minecraft . client . util . N arr ator Manager Ċ import Ġnet . minecraft . client . util . math . Matrix Stack Ċ import Ġnet . minecraft . sound . Sound Events Ċ import Ġnet . minecraft . text . Click Event Ċ import Ġnet . minecraft . text . Literal Text Ċ import Ġnet . minecraft . text . Style Ċ import Ġnet . minecraft . text . Trans latable Text Ċ Ċ class ĠGuide Book Screen ( private Ġval Ġbook : ĠBook ) Ġ: ĠScreen ( N arr ator Manager . EMPTY ) Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġflip Book : ĠFlip Book ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprevious Page Button : ĠPage Turn Widget ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnext Page Button : ĠPage Turn Widget ĊĊĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġ( width Ġ- ĠBO OK _ SIZE ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġ( height Ġ- ĠBO OK _ SIZE ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġpage X Ġ= Ġx Ġ+ Ġ 3 5 ĊĠĠĠĠĠĠĠ Ġval Ġpage Y Ġ= Ġy Ġ+ Ġ 1 4 ĊĊĠĠĠĠĠĠĠ Ġflip Book Ġ= Ġadd Drawable Child ( Flip Book ( this :: update Page Turn Buttons )) ĊĠĠĠĠĠĠĠ Ġflip Book . add ( Title Page ( page X , Ġpage Y , Ġbook )) ĊĠĠĠĠĠĠĠ Ġfor Ġ( page Ġin Ġbook . pages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflip Book . add ( Book Page ( page X , Ġpage Y , Ġpage )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd Drawable Child ( Close Button ( x Ġ+ Ġ 1 4 2 , Ġy Ġ+ Ġ 1 4 ) Ġ{ Ġclose () Ġ}) ĊĠĠĠĠĠĠĠ Ġprevious Page Button Ġ= Ġadd Drawable Child ( Page Turn Widget ( x Ġ+ Ġ 4 9 , Ġy Ġ+ Ġ 1 5 9 , Ġfalse , Ġ{ Ġflip Book . show Previous Page () Ġ}, Ġtrue )) ĊĠĠĠĠĠĠĠ Ġnext Page Button Ġ= Ġadd Drawable Child ( Page Turn Widget ( x Ġ+ Ġ 1 1 6 , Ġy Ġ+ Ġ 1 5 9 , Ġtrue , Ġ{ Ġflip Book . show Next Page () Ġ}, Ġtrue )) ĊĠĠĠĠĠĠĠ Ġupdate Page Turn Buttons () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Page Turn Buttons () Ġ{ ĊĠĠĠĠĠĠĠ Ġprevious Page Button . visible Ġ= Ġflip Book . has Previous Page () ĊĠĠĠĠĠĠĠ Ġnext Page Button . visible Ġ= Ġflip Book . hasNext Page () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrender ( matrices : ĠMatrix Stack , Ġmouse X : ĠInt , ĠmouseY : ĠInt , Ġdelta : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrender Background ( matrices ) ĊĠĠĠĠĠĠĠ ĠRender System . set Shader ( Game Renderer :: getPosition Tex Shader ) ĊĠĠĠĠĠĠĠ ĠRender System . set Shader Color ( 1 . 0 f , Ġ 1 . 0 f , Ġ 1 . 0 f , Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠ ĠRender System . set Shader Texture ( 0 , ĠBook Screen . BOOK _ TEXTURE ) ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġ( width Ġ- ĠBO OK _ SIZE ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġ( height Ġ- ĠBO OK _ SIZE ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġdraw Texture ( matrices , Ġx , Ġy , Ġ 0 , Ġ 0 , ĠBO OK _ SIZE , ĠBO OK _ SIZE ) ĊĠĠĠĠĠĠĠ Ġsuper . render ( matrices , Ġmouse X , ĠmouseY , Ġdelta ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Text Click ( style : ĠStyle ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( style Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclick Event Ġ= Ġstyle . click Event ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( click Event Ġ!= Ġnull Ġ&& Ġclick Event . action Ġ== ĠClick Event . Action . CHANGE _ PAGE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġclick Event . value . toInt OrNull () Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Index Ġ= Ġpage Ġ- Ġ 1 Ġ// Ġ 1 - indexed Ġ=> Ġ 0 - indexed ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( page Index Ġin Ġ 0 Ġuntil Ġflip Book . page Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflip Book . currentPage Ġ= Ġpage Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient !!. sound Manager . play ( Position ed Sound Instance . master ( Sound Events . ITEM _ BOOK _ PAGE _ T URN , Ġ 1 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . handle Text Click ( style ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtick () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġchildren ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠTick ing Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . tick () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBO OK _ SIZE Ġ= Ġ 1 9 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPAGE _ TITLE _ X Ġ= Ġ 2 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPAGE _ WIDTH Ġ= Ġ 1 1 6 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPAGE _ TITLE _ WIDTH Ġ= ĠPAGE _ WIDTH Ġ- Ġ 2 Ġ* ĠPAGE _ TITLE _ X ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPAGE _ TEXT _ X Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPAGE _ TEXT _ Y Ġ= Ġ 2 4 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠICON _ DURATION Ġ= Ġ 2 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCLOSE _ BOOK _ ACTIVE _ TEXTURE Ġ= ĠAd orn Common . id (" textures / gui / close _ book _ active . png ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCLOSE _ BOOK _ IN ACTIVE _ TEXTURE Ġ= ĠAd orn Common . id (" textures / gui / close _ book _ inactive . png ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠTitle Page ( private Ġval Ġx : ĠInt , Ġprivate Ġval Ġy : ĠInt , Ġprivate Ġval Ġbook : ĠBook ) Ġ: ĠElement , ĠDrawable Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġby Author Ġ= ĠTrans latable Text (" book . by Author ", Ġbook . author ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrender ( matrices : ĠMatrix Stack , Ġmouse X : ĠInt , ĠmouseY : ĠInt , Ġdelta : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcx Ġ= Ġx Ġ+ ĠPAGE _ WIDTH Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrices . push () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrices . translate ( cx . toDouble (), Ġ( y Ġ+ Ġ 7 ). toDouble () Ġ+ Ġ 2 5 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrices . scale ( book . title Scale , Ġbook . title Scale , Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Renderer . draw ( matrices , Ġbook . title , Ġ-( text Renderer . getWidth ( book . title ) Ġ/ Ġ 2 ). toFloat (), Ġ 0 f , ĠColors . SCREEN _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrices . pop () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Renderer . draw ( matrices , Ġbook . subtitle , Ġ( cx Ġ- Ġtext Renderer . getWidth ( book . subtitle ) Ġ/ Ġ 2 ). toFloat (), Ġy Ġ+ Ġ 4 5 f , ĠColors . SCREEN _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Renderer . draw ( matrices , Ġby Author , Ġ( cx Ġ- Ġtext Renderer . getWidth ( by Author ) Ġ/ Ġ 2 ). toFloat (), Ġy Ġ+ Ġ 6 0 f , ĠColors . SCREEN _ TEXT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠBook Page ( private Ġval Ġx : ĠInt , Ġprivate Ġval Ġy : ĠInt , Ġprivate Ġval Ġpage : ĠPage ) Ġ: ĠElement , ĠDrawable , ĠTick ing Element Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġwrapped Title Lines Ġ= Ġtext Renderer . wrap Lines ( page . title . copy (). styled Ġ{ Ġit . with Bold ( true ) Ġ}, ĠPAGE _ TITLE _ WIDTH ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġwrapped Body Lines Ġ= Ġtext Renderer . wrap Lines ( page . text , ĠPAGE _ WIDTH Ġ- ĠPAGE _ TEXT _ X ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġicon Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġicon Ticks Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget TextStyle At ( x : ĠInt , Ġy : ĠInt ): ĠStyle ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcoordinates Ġin Ġwidget - space ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwx Ġ= Ġx Ġ- Ġ( this . x Ġ+ ĠPAGE _ TEXT _ X ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwy Ġ= Ġy Ġ- Ġ( this . y Ġ+ ĠPAGE _ TEXT _ Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Index Ġ= Ġwy Ġ/ Ġtext Renderer . font Height ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Index Ġin Ġwrapped Body Lines . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġwrapped Body Lines [ line Index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtext Renderer . text Handler . getStyle At ( line , Ġwx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrender ( matrices : ĠMatrix Stack , Ġmouse X : ĠInt , ĠmouseY : ĠInt , Ġdelta : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Renderer . render Gui Item Icon ( page . icons [ icon ]. default Stack , Ġx , Ġy ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Y Ġ= Ġ( y Ġ+ Ġ 1 0 Ġ- Ġtext Renderer . font Height Ġ* Ġwrapped Title Lines . size Ġ/ Ġ 2 ). toFloat () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġline ) Ġin Ġwrapped Title Lines . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Renderer . draw ( matrices , Ġline , Ġ( x Ġ+ ĠPAGE _ TITLE _ X ). toFloat (), Ġtitle Y Ġ+ Ġi Ġ* Ġtext Renderer . font Height , ĠColors . SCREEN _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġline ) Ġin Ġwrapped Body Lines . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Renderer . draw ( matrices , Ġline , Ġ( x Ġ+ ĠPAGE _ TEXT _ X ). toFloat (), Ġ( y Ġ+ ĠPAGE _ TEXT _ Y Ġ+ Ġi Ġ* Ġtext Renderer . font Height ). toFloat (), ĠColors . SCREEN _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhover ed Style Ġ= Ġget TextStyle At ( mouse X , ĠmouseY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Text Hover Effect ( matrices , Ġhover ed Style , Ġmouse X , ĠmouseY ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmouse Clicked ( mouse X : ĠDouble , ĠmouseY : ĠDouble , Ġbutton : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( button Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstyle Ġ= Ġget TextStyle At ( mouse X . toInt (), ĠmouseY . toInt ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style Ġ!= Ġnull Ġ&& Ġhandle Text Click ( style )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . mouse Clicked ( mouse X , ĠmouseY , Ġbutton ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtick () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( icon Ticks ++ Ġ>= ĠICON _ DURATION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ticks Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= Ġ( icon Ġ+ Ġ 1 ) Ġ% Ġpage . icons . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠClose Button ( x : ĠInt , Ġy : ĠInt , Ġpress Action : ĠPress Action ) Ġ: ĠButton Widget ( x , Ġy , Ġ 8 , Ġ 8 , ĠLiteral Text . EMPTY , Ġpress Action ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrender Button ( matrices : ĠMatrix Stack , Ġmouse X : ĠInt , ĠmouseY : ĠInt , Ġdelta : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRender System . set Shader ( Game Renderer :: getPosition Tex Shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRender System . set Shader Color ( 1 . 0 f , Ġ 1 . 0 f , Ġ 1 . 0 f , Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRender System . set Shader Texture ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Mouse Over ( mouse X . toDouble (), ĠmouseY . toDouble ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCLOSE _ BOOK _ ACTIVE _ TEXTURE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCLOSE _ BOOK _ IN ACTIVE _ TEXTURE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Texture ( matrices , Ġx , Ġy , Ġ 0 f , Ġ 0 f , Ġ 8 , Ġ 8 , Ġ 8 , Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ