package Ġcom . github . v ini 2 0 0 3 . blade . common . widget . base Ċ Ċ import Ġcom . github . v ini 2 0 0 3 . blade . Blade Ċ import Ġcom . github . v ini 2 0 0 3 . blade . client . data . Partition ed Texture Ċ import Ġcom . github . v ini 2 0 0 3 . blade . common . mis cellaneous . Position Ċ import Ġcom . github . v ini 2 0 0 3 . blade . common . mis cellaneous . Size Ċ import Ġcom . github . v ini 2 0 0 3 . blade . common . mis cellaneous . Rectangle Ċ import Ġcom . github . v ini 2 0 0 3 . blade . common . utilities . Networks Ċ import Ġcom . github . v ini 2 0 0 3 . blade . common . utilities . Positions Ċ import Ġcom . github . v ini 2 0 0 3 . blade . common . collection . base . Handled Widget Collection Ċ import Ġcom . github . v ini 2 0 0 3 . blade . common . collection . base . Widget Collection Ċ import Ġnet . minecraft . client . render . Vertex Consumer Provider Ċ import Ġnet . minecraft . client . util . math . Matrix Stack Ċ import Ġnet . minecraft . inventory . Inventory Ċ import Ġnet . minecraft . inventory . Simple Inventory Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ Ċ open Ġclass ĠSlot List Widget ( Ċ ĉ var Ġinventory : ĠInventory Ġ= ĠSimple Inventory ( 0 ), Ċ ĉ var Ġwidth In Slots : ĠInt Ġ= Ġ 0 , Ċ ĉ var Ġheight In Slots : ĠInt Ġ= Ġ 0 , Ċ ĉ var Ġmaximum Slots : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠAbstract Widget (), ĠWidget Collection Ġ{ Ċ ĉ var Ġscrollbar Texture Ġ= ĠPartition ed Texture ( Blade . identifier (" textures / widget / scrollbar . png "), Ġ 1 8 F , Ġ 1 8 F , Ġ 0 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 F , Ġ 0 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 F , Ġ 0 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 F , Ġ 0 . 1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 F ) Ċ ĉ var Ġsc roller Texture Ġ= ĠPartition ed Texture ( Blade . identifier (" textures / widget / sc roller . png "), Ġ 1 8 F , Ġ 1 8 F , Ġ 0 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 F , Ġ 0 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 F , Ġ 0 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 F , Ġ 0 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 F ) Ċ ĉ var Ġsc roller Focus Texture Ġ= ĠPartition ed Texture ( Blade . identifier (" textures / widget / sc roller _ focus . png "), Ġ 1 8 F , Ġ 1 8 F , Ġ 0 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 F , Ġ 0 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 F , Ġ 0 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 F , Ġ 0 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 F ) ĊĊ ĉ override Ġval Ġwidgets : ĠArrayList < Abstract Widget > Ġ= ĠArrayList () ĊĊ ĉ private Ġvar Ġrow Ġ= Ġ 0 ĊĊ ĉ private Ġvar Ġsc roller Hel d Ġ= Ġfalse ĊĊ ĉ private Ġvar Ġupdate Scroller Rectangle : ĠBoolean Ġ= Ġfalse Ċ ĉ private Ġvar Ġupdate Scrollbar Rectangle : ĠBoolean Ġ= Ġfalse ĊĊ ĉ private Ġvar Ġsc roller Rectangle Cached : ĠRectangle Ġ= ĠRectangle . empty () Ċ ĉ private Ġvar Ġscrollbar Rectangle Cached : ĠRectangle Ġ= ĠRectangle . empty () ĊĊ ĉ private Ġval Ġbottom Row : ĠInt Ċĉ ĉ get () Ġ= Ġmaximum Slots Ġ- Ġheight In Slots ĊĊ ĉ private Ġval Ġtotal Rows : ĠInt Ċĉ ĉ get () Ġ= Ġinventory . size () Ġ/ Ġwidth In Slots ĊĊ ĉ private Ġval Ġsc roller Height : ĠFloat Ċĉ ĉ get () Ġ= Ġmin ( size . height Ġ- Ġ 2 , Ġheight In Slots . toFloat () Ġ/ Ġtotal Rows . toFloat () Ġ* Ġ( size . height Ġ- Ġ 2 )) ĊĊ ĉ private Ġval Ġsc roller Y : ĠFloat Ċĉ ĉ get () Ġ= Ġmax ( y Ġ+ Ġ 2 , Ġmin ( y Ġ+ Ġsize . height Ġ- Ġsc roller Height , Ġrow . toFloat () Ġ/ Ġtotal Rows . toFloat () Ġ* Ġsize . height Ġ+ Ġy Ġ+ Ġ 1 )) ĊĊ ĉ private Ġval Ġsc roller Rectangle : ĠRectangle Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ return Ġif Ġ( update Scroller Rectangle ) Ġ{ Ċĉĉĉ ĉ sc roller Rectangle Cached Ġ= ĠRectangle ( Position . of ( position . x Ġ+ Ġsize . width Ġ- Ġ 1 Ġ- Ġ 1 6 F , Ġsc roller Y Ġ- Ġ 1 ), ĠSize . of ( 1 6 F , Ġsc roller Height )) Ċĉĉĉ ĉ update Scroller Rectangle Ġ= Ġfalse Ċĉĉĉ ĉ return Ġsc roller Rectangle Cached Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ sc roller Rectangle Cached Ċĉĉ ĉ } Ċĉ ĉ } ĊĊ ĉ private Ġval Ġscrollbar Rectangle : ĠRectangle Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ return Ġif Ġ( update Scrollbar Rectangle ) Ġ{ Ċĉĉĉ ĉ scrollbar Rectangle Cached Ġ= ĠRectangle ( Position . of ( position . x Ġ+ Ġsize . width Ġ- Ġ 1 Ġ- Ġ 1 6 F , Ġposition . y Ġ+ Ġ 1 ), ĠSize . of ( 1 6 F , Ġsize . height Ġ- Ġ 2 )) Ċĉĉĉ ĉ update Scrollbar Rectangle Ġ= Ġfalse Ċĉĉĉ ĉ return Ġscrollbar Rectangle Cached Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ scrollbar Rectangle Cached Ċĉĉ ĉ } Ċĉ ĉ } ĊĊ ĉ override Ġfun Ġadd Widget ( widget : ĠAbstract Widget ) Ġ{ Ċĉ ĉ widgets . add ( widget ) Ċĉ ĉ handled ?. also Ġ{ Ġwidget . on Added ( it , Ġthis ) Ġ} ĊĊĉ ĉ widgets . forEach Ġ{ Ġ_ Ġ-> Ċĉĉ ĉ widget . on Layout Changed () Ċĉ ĉ } ĊĊĉ ĉ super . addWidget ( widget ) Ċ ĉ } ĊĊ ĉ override Ġfun Ġremove Widget ( widget : ĠAbstract Widget ) Ġ{ Ċĉ ĉ widgets . remove ( widget ) Ċĉ ĉ handled ?. also Ġ{ Ġwidget . on Removed ( it , Ġthis ) Ġ} ĊĊĉ ĉ widgets . forEach Ġ{ Ġ_ Ġ-> Ċĉĉ ĉ widget . on Layout Changed () Ċĉ ĉ } ĊĊĉ ĉ super . remove Widget ( widget ) Ċ ĉ } ĊĊ ĉ override Ġfun Ġon Layout Changed () Ġ{ Ċĉ ĉ super . on Layout Changed () ĊĊĉ ĉ update Scroller Rectangle Ġ= Ġtrue Ċĉ ĉ update Scrollbar Rectangle Ġ= Ġtrue Ċ ĉ } ĊĊ ĉ override Ġfun Ġon Added ( handled : ĠHand led Widget Collection , Ġimmediate : ĠWidget Collection ) Ġ{ Ċĉ ĉ super . on Added ( handled , Ġimmediate ) ĊĊĉ ĉ synchron ize . add ( Networks . MOUSE _ SCROLL ) Ċĉ ĉ synchron ize . add ( Networks . MOUSE _ CLICK ) ĊĊĉ ĉ width In Slots Ġ= Ġ( size . width Ġ/ Ġ 1 8 Ġ- Ġ 1 ). toInt () Ċĉ ĉ height In Slots Ġ= Ġ( size . height Ġ/ Ġ 1 8 ). toInt () Ċĉ ĉ maximum Slots Ġ= Ġinventory . size () Ġ/ Ġwidth In Slots ĊĊĉ ĉ for Ġ( h Ġin Ġ 0 Ġuntil Ġheight In Slots ) Ġ{ Ċĉĉ ĉ for Ġ( w Ġin Ġ 0 Ġuntil Ġwidth In Slots ) Ġ{ Ċĉĉĉ ĉ if Ġ(( inventory . size () Ġ>= Ġh Ġ+ Ġw )) Ġ{ Ċĉĉĉĉ ĉ val Ġslot Ġ= ĠSlot Widget ( 0 Ġ+ Ġh Ġ* Ġwidth In Slots Ġ+ Ġw , Ġinventory ) Ċĉĉĉĉ ĉ slot . position Ġ= Ġposition . offset ( w Ġ* Ġ 1 8 , Ġh Ġ* Ġ 1 8 ) Ċĉĉĉĉ ĉ slot . size Ġ= ĠSize . of ( 1 8 F , Ġ 1 8 F ) Ċĉĉĉĉ ĉ widgets . add ( slot ) Ċĉĉĉĉ ĉ immediate . addWidget ( slot ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ override Ġfun ĠonMouse Clicked ( x : ĠFloat , Ġy : ĠFloat , Ġbutton : ĠInt ) Ġ{ Ċĉ ĉ if Ġ( handler !!. client ) Ġ{ Ċĉĉ ĉ super . on Mouse Clicked ( x , Ġy , Ġbutton ) Ċĉ ĉ } ĊĊĉ ĉ if Ġ( sc roller Rectangle . is Within ( x , Ġy )) Ġ{ Ċĉĉ ĉ sc roller Hel d Ġ= Ġtrue Ċĉ ĉ } Ġelse Ġif Ġ( scrollbar Rectangle . is Within ( x , Ġy )) Ġ{ Ċĉĉ ĉ if Ġ( y Ġ> Ġsc roller Y ) Ġ{ Ċĉĉĉ ĉ on Mouse Sc rolled ( x , Ġy , Ġ- 1 . 0 ) Ċĉĉ ĉ } Ġelse Ġif Ġ( y Ġ< Ġsc roller Y ) Ġ{ Ċĉĉĉ ĉ on Mouse Sc rolled ( x , Ġy , Ġ 1 . 0 ) Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ override Ġfun ĠonMouse Released ( x : ĠFloat , Ġy : ĠFloat , Ġbutton : ĠInt ) Ġ{ Ċĉ ĉ if Ġ( handler !!. client ) Ġ{ Ċĉĉ ĉ super . on Mouse Released ( x , Ġy , Ġbutton ) Ċĉ ĉ } ĊĊĉ ĉ sc roller Hel d Ġ= Ġfalse Ċ ĉ } ĊĊ ĉ override Ġfun ĠonMouse Drag ged ( x : ĠFloat , Ġy : ĠFloat , Ġbutton : ĠInt , Ġdelta X : ĠDouble , Ġdelta Y : ĠDouble ) Ġ{ Ċĉ ĉ if Ġ( handler !!. client ) Ġ{ Ċĉĉ ĉ super . on Mouse Drag ged ( x , Ġy , Ġbutton , Ġdelta X , Ġdelta Y ) Ċĉ ĉ } ĊĊĉ ĉ if Ġ( sc roller Hel d ) Ġ{ Ċĉĉ ĉ if Ġ( delta Y Ġ> Ġ 0 ) Ġ{ Ċĉĉĉ ĉ while Ġ( sc roller Y Ġ< Ġy Ġ- Ġsc roller Height Ġ/ Ġ 2 Ġ&& Ġrow Ġ< Ġbottom Row ) Ġ{ Ċĉĉĉĉ ĉ on Mouse Sc rolled ( x , Ġy , Ġ- delta Y ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ġelse Ġif Ġ( delta Y Ġ< Ġ 0 ) Ġ{ Ċĉĉĉ ĉ while Ġ( sc roller Y Ġ> Ġy Ġ- Ġsc roller Height Ġ/ Ġ 2 Ġ&& Ġrow Ġ> Ġ 0 ) Ġ{ Ċĉĉĉĉ ĉ on Mouse Sc rolled ( x , Ġy , Ġ- delta Y ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ override Ġfun ĠonMouse Sc rolled ( x : ĠFloat , Ġy : ĠFloat , Ġdelta Y : ĠDouble ) Ġ{ Ċĉ ĉ if Ġ( handler !!. client ) Ġ{ Ċĉĉ ĉ if Ġ( focused Ġ|| Ġsc roller Hel d ) Ġ{ Ċĉĉĉ ĉ super . on Mouse Sc rolled ( x , Ġy , Ġdelta Y ) Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ return Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ if Ġ( delta Y Ġ> Ġ 0 Ġ&& Ġrow Ġ> Ġ 0 ) Ġ{ Ċĉĉ ĉ -- row ĊĉĉĉĊĉĉ ĉ widgets . forEach Ġ{ Ċĉĉĉ ĉ it Ġas ĠSlot Widget ĊĊĉĉĉ ĉ val Ġslot Ġ= Ġit . backend Slot !! ĊĊĉĉĉ ĉ if Ġ( slot . index Ġ- Ġwidth In Slots Ġ>= Ġ 0 ) Ġ{ Ċĉĉĉĉ ĉ slot . index Ġ= Ġslot . index Ġ- Ġwidth In Slots Ċĉĉĉ ĉ } ĊĊĉĉĉ ĉ handler !!. send Content Updates () Ċĉĉ ĉ } Ċĉ ĉ } Ġelse Ġif Ġ( delta Y Ġ< Ġ 0 Ġ&& Ġrow Ġ< Ġbottom Row ) Ġ{ Ċĉĉ ĉ ++ row ĊĉĉĉĊĉĉ ĉ widgets . forEach Ġ{ Ċĉĉĉ ĉ it Ġas ĠSlot Widget ĊĊĉĉĉ ĉ val Ġslot Ġ= Ġit . backend Slot !! ĊĊĉĉĉ ĉ if Ġ( slot . index Ġ+ Ġwidth In Slots Ġ<= Ġinventory . size ()) Ġ{ Ċĉĉĉĉ ĉ slot . index Ġ= Ġslot . index Ġ+ Ġwidth In Slots Ċĉĉĉ ĉ } ĊĊĉĉĉ ĉ handler !!. send Content Updates () Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ update Scroller Rectangle Ġ= Ġtrue Ċĉ ĉ update Scrollbar Rectangle Ġ= Ġtrue Ċ ĉ } ĊĊ ĉ override Ġfun Ġdraw Widget ( matrices : ĠMatrix Stack , Ġprovider : ĠVertex Consumer Provider ) Ġ{ Ċĉ ĉ if Ġ( hidden ) Ġreturn ĊĊĉ ĉ scrollbar Texture . draw ( matrices , Ġprovider , Ġposition . x Ġ+ Ġsize . width Ġ- Ġ 1 8 F , Ġposition . y , Ġ 1 8 F , Ġsize . height ) ĊĊĉ ĉ val Ġsc roller Focus Ġ= Ġsc roller Rectangle . is Within ( Positions . mouse X , ĠPosition s . mouse Y ) ĊĊĉ ĉ if Ġ( sc roller Focus Ġ|| Ġsc roller Hel d ) Ġ{ Ċĉĉ ĉ sc roller Focus Texture . draw ( matrices , Ġprovider , Ġposition . x Ġ+ Ġsize . width Ġ- Ġ 1 8 F Ġ+ Ġ 1 F , Ġsc roller Y Ġ- Ġ 1 , Ġ 1 6 F , Ġsc roller Height ) Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ sc roller Texture . draw ( matrices , Ġprovider , Ġposition . x Ġ+ Ġsize . width Ġ- Ġ 1 8 F Ġ+ Ġ 1 F , Ġsc roller Y Ġ- Ġ 1 , Ġ 1 6 F , Ġsc roller Height ) Ċĉ ĉ } Ċ ĉ } Ċ }