package Ġcom . github . v ini 2 0 0 3 . blade . common . widget . base Ċ Ċ import Ġcom . github . v ini 2 0 0 3 . blade . common . mis cellaneous .* Ċ import Ġcom . github . v ini 2 0 0 3 . blade . common . handler . Base Screen Handler Ċ 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 . utilities . Styles Ċ 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 . fabric mc . api . Env Type Ċ import Ġnet . fabric mc . api . Environment Ċ import Ġnet . minecraft . client . render . Vertex Consumer Provider Ċ import Ġnet . minecraft . client . util . math . Matrix Stack Ċ import Ġnet . minecraft . text . Text Ċ import Ġnet . minecraft . util . Identifier Ċ import Ġjava . util .* Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ abstract Ġclass ĠAbstract Widget Ġ: ĠPosition ed , ĠSized Ġ{ Ċ ĉ override Ġvar Ġposition : ĠPosition Ġby ĠDeleg ates . observable ( Position . of ( 0 , Ġ 0 )) Ġ{ Ġ_, Ġ_, Ġ_ Ġ-> Ċĉ ĉ on Layout Changed () Ċ ĉ } Ċ ĉ override Ġvar Ġsize : ĠSize Ġby ĠDeleg ates . observable ( Size . of ( 0 , Ġ 0 )) Ġ{ Ġ_, Ġ_, Ġ_ Ġ-> Ċĉ ĉ on Layout Changed () Ċ ĉ } ĊĊ ĉ var Ġhandled : ĠHand led Widget Collection ? Ġ= Ġnull Ċ ĉ var Ġimmediate : ĠWidget Collection ? Ġ= Ġnull ĊĊ ĉ var Ġstyle Ġ= Ġ" default " ĊĊ ĉ val Ġhash : ĠInt Ċĉ ĉ get () Ġ= ĠObjects . hash ( java Class . name Ġ+ Ġ"_" Ġ+ Ġposition . x Ġ+ Ġ"_" Ġ+ Ġposition . y Ġ+ Ġ"_" Ġ+ Ġsize . width Ġ+ Ġ"_" Ġ+ Ġsize . height Ġ+ Ġ"_" Ġ+ Ġhidden Ġ+ Ġ( if Ġ( parent Ġ!= Ġnull ) Ġ"_" Ġ+ Ġparent !!. hash Ġelse Ġ"") Ġ+ Ġ( if Ġ( salt Ġ!= Ġnull ) Ġ"_" Ġ+ Ġsalt !! Ġelse Ġ"")) ĊĊ ĉ var Ġsalt : ĠString ? Ġ= Ġnull ĊĊ ĉ var Ġhandler : ĠBase Screen Handler ? Ġ= Ġnull ĊĊ ĉ val Ġsynchronize : ĠMutable Set < Identifier > Ġ= Ġmutable Set Of () ĊĊ ĉ open Ġvar Ġhidden : ĠBoolean Ġ= Ġfalse Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ return Ġ( if Ġ( parent Ġ== Ġnull ) Ġfield Ġelse Ġfield Ġ|| Ġparent !!. hidden ) Ċĉ ĉ } ĊĊ ĉ open Ġvar Ġfocused : ĠBoolean Ġ= Ġfalse Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ return Ġ( if Ġ( parent Ġ== Ġnull ) Ġfield Ġ&& Ġ! hidden Ġelse Ġfield Ġ&& Ġ! parent !!. hidden ) Ċĉ ĉ } ĊĊ ĉ open Ġvar Ġheld : ĠBoolean Ġ= Ġfalse Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ return Ġ( if Ġ( parent Ġ== Ġnull ) Ġfield Ġelse Ġfield Ġ&& Ġ! parent !!. hidden ) Ċĉ ĉ } ĊĊ ĉ open Ġvar Ġparent : ĠAbstract Widget ? Ġ= Ġnull ĊĊ ĉ fun Ġstyle (): ĠStyle Ġ{ Ċĉ ĉ return ĠStyles . get ( style ). also Ġ{ Ċĉĉ ĉ if Ġ( it Ġ== ĠStyle . EMPTY ) Ġif Ġ( parent Ġ== Ġnull ) ĠStyle . EMPTY Ġelse Ġparent !!. style () Ġelse Ġit Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġcolor ( property : ĠString ): ĠColor Ġ{ Ċĉ ĉ return Ġstyle (). as Color ( property ) Ċ ĉ } ĊĊ ĉ open Ġfun Ġon Added ( handled : ĠHand led Widget Collection , Ġimmediate : ĠWidget Collection ) Ġ{ Ċĉ ĉ this . handled Ġ= Ġhandled Ċĉ ĉ this . immediate Ġ= Ġimmediate Ċĉ ĉ this . handler Ġ= Ġhandled . handler Ċ ĉ } ĊĊ ĉ open Ġfun Ġon Removed ( handled : ĠHand led Widget Collection , Ġimmediate : ĠWidget Collection ) Ġ{ Ċĉ ĉ this . handled Ġ= Ġnull Ċĉ ĉ this . immediate Ġ= Ġnull Ċĉ ĉ this . handler Ġ= Ġnull Ċ ĉ } ĊĊ ĉ open Ġfun ĠonMouse Moved ( x : ĠFloat , Ġy : ĠFloat ) Ġ{ Ċĉ ĉ focus ( x , Ġy ) ĊĊĉ ĉ if Ġ( this Ġis ĠWidget Collection Ġ&& Ġ!( handler Ġ!= Ġnull Ġ&& Ġ! handler !!. client )) Ġ{ Ċĉĉ ĉ this . widgets . forEach Ġ{ Ċĉĉĉ ĉ it . on Mouse Moved ( x , Ġy ) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ if Ġ( focused Ġ&& Ġhandler Ġ!= Ġnull Ġ&& Ġhandler !!. client Ġ&& Ġsynchronize . contains ( Networks . MOUSE _ MOVE )) Ġ{ Ċĉĉ ĉ Networks . to Server ( Networks . WIDGET _ UPDATE , ĠNetworks . of MouseMove ( handler !!. sync Id , Ġhash , Ġx , Ġy )) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ open Ġfun ĠonMouse Clicked ( x : ĠFloat , Ġy : ĠFloat , Ġbutton : ĠInt ) Ġ{ Ċĉ ĉ if Ġ( focused ) Ġheld Ġ= Ġtrue ĊĊĉ ĉ if Ġ( this Ġis ĠWidget Collection Ġ&& Ġ!( handler Ġ!= Ġnull Ġ&& Ġ! handler !!. client )) Ġ{ Ċĉĉ ĉ this . widgets . forEach Ġ{ Ċĉĉĉ ĉ it . on Mouse Clicked ( x , Ġy , Ġbutton ) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ if Ġ( focused Ġ&& Ġhandler Ġ!= Ġnull Ġ&& Ġhandler !!. client Ġ&& Ġsynchronize . contains ( Networks . MOUSE _ CLICK )) Ġ{ Ċĉĉ ĉ Networks . to Server ( Networks . WIDGET _ UPDATE , ĠNetworks . of Mouse Click ( handler !!. sync Id , Ġhash , Ġx , Ġy , Ġbutton )) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ open Ġfun ĠonMouse Released ( x : ĠFloat , Ġy : ĠFloat , Ġbutton : ĠInt ) Ġ{ Ċĉ ĉ held Ġ= Ġfalse ĊĊĉ ĉ if Ġ( this Ġis ĠWidget Collection Ġ&& Ġ!( handler Ġ!= Ġnull Ġ&& Ġ! handler !!. client )) Ġ{ Ċĉĉ ĉ this . widgets . forEach Ġ{ Ċĉĉĉ ĉ it . on Mouse Released ( x , Ġy , Ġbutton ) Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ if Ġ( focused Ġ&& Ġhandler Ġ!= Ġnull Ġ&& Ġhandler !!. client Ġ&& Ġsynchronize . contains ( Networks . MOUSE _ RELEASE )) Ġ{ Ċĉĉ ĉ Networks . to Server ( Networks . WIDGET _ UPDATE , ĠNetworks . of Mouse Release ( handler !!. sync Id , Ġhash , Ġx , Ġy , Ġbutton )) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ open Ġfun ĠonMouse Drag ged ( x : ĠFloat , Ġy : ĠFloat , Ġbutton : ĠInt , Ġdelta X : ĠDouble , Ġdelta Y : ĠDouble ) Ġ{ Ċĉ ĉ if Ġ( this Ġis ĠWidget Collection Ġ&& Ġ!( handler Ġ!= Ġnull Ġ&& Ġ! handler !!. client )) Ġ{ Ċĉĉ ĉ this . widgets . forEach Ġ{ Ċĉĉĉ ĉ it . on Mouse Drag ged ( x , Ġy , Ġbutton , Ġdelta X , Ġdelta Y ) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ if Ġ( focused Ġ&& Ġhandler Ġ!= Ġnull Ġ&& Ġhandler !!. client Ġ&& Ġsynchronize . contains ( Networks . MOUSE _ DR AG )) Ġ{ Ċĉĉ ĉ Networks . to Server ( Networks . WIDGET _ UPDATE , ĠNetworks . of Mouse Drag ( handler !!. sync Id , Ġhash , Ġx , Ġy , Ġbutton , Ġdelta X , Ġdelta Y )) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ open Ġfun ĠonMouse Sc rolled ( x : ĠFloat , Ġy : ĠFloat , Ġdelta Y : ĠDouble ) Ġ{ Ċĉ ĉ if Ġ( this Ġis ĠWidget Collection Ġ&& Ġ!( handler Ġ!= Ġnull Ġ&& Ġ! handler !!. client )) Ġ{ Ċĉĉ ĉ this . widgets . forEach Ġ{ Ċĉĉĉ ĉ it . on Mouse Sc rolled ( x , Ġy , Ġdelta Y ) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ if Ġ( focused Ġ&& Ġhandler Ġ!= Ġnull Ġ&& Ġhandler !!. client Ġ&& Ġsynchronize . contains ( Networks . MOUSE _ SCROLL )) Ġ{ Ċĉĉ ĉ Networks . to Server ( Networks . WIDGET _ UPDATE , ĠNetworks . of Mouse Scroll ( handler !!. sync Id , Ġhash , Ġx , Ġy , Ġdelta Y )) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ open Ġfun Ġon Key Pressed ( keyCode : ĠInt , Ġscan Code : ĠInt , Ġkey Modifiers : ĠInt ) Ġ{ Ċĉ ĉ if Ġ( this Ġis ĠWidget Collection Ġ&& Ġ!( handler Ġ!= Ġnull Ġ&& Ġ! handler !!. client )) Ġ{ Ċĉĉ ĉ this . widgets . forEach Ġ{ Ċĉĉĉ ĉ it . on Key Pressed ( keyCode , Ġscan Code , Ġkey Modifiers ) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ if Ġ( focused Ġ&& Ġhandler Ġ!= Ġnull Ġ&& Ġhandler !!. client Ġ&& Ġsynchronize . contains ( Networks . KEY _ PRESS )) Ġ{ Ċĉĉ ĉ Networks . to Server ( Networks . WIDGET _ UPDATE , ĠNetworks . of KeyPress ( handler !!. sync Id , Ġhash , ĠkeyCode , Ġscan Code , Ġkey Modifiers )) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ open Ġfun Ġon Key Released ( keyCode : ĠInt , Ġcharacter : ĠInt , Ġkey Modifiers : ĠInt ) Ġ{ Ċĉ ĉ if Ġ( this Ġis ĠWidget Collection Ġ&& Ġ!( handler Ġ!= Ġnull Ġ&& Ġ! handler !!. client )) Ġ{ Ċĉĉ ĉ this . widgets . forEach Ġ{ Ċĉĉĉ ĉ it . on Key Released ( keyCode , Ġcharacter , Ġkey Modifiers ) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ if Ġ( focused Ġ&& Ġhandler Ġ!= Ġnull Ġ&& Ġhandler !!. client Ġ&& Ġsynchronize . contains ( Networks . KEY _ RELEASE )) Ġ{ Ċĉĉ ĉ Networks . to Server ( Networks . WIDGET _ UPDATE , ĠNetworks . of Key Release ( handler !!. sync Id , Ġhash , ĠkeyCode , Ġcharacter , Ġkey Modifiers )) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ open Ġfun Ġon Char Typed ( character : ĠChar , ĠkeyCode : ĠInt ) Ġ{ Ċĉ ĉ if Ġ( this Ġis ĠWidget Collection Ġ&& Ġ!( handler Ġ!= Ġnull Ġ&& Ġ! handler !!. client )) Ġ{ Ċĉĉ ĉ this . widgets . forEach Ġ{ Ċĉĉĉ ĉ it . on Char Typed ( character , ĠkeyCode ) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ if Ġ( focused Ġ&& Ġhandler Ġ!= Ġnull Ġ&& Ġhandler !!. client Ġ&& Ġsynchronize . contains ( Networks . CHAR _ TYPE )) Ġ{ Ċĉĉ ĉ Networks . to Server ( Networks . WIDGET _ UPDATE , ĠNetworks . of Char Type ( handler !!. sync Id , Ġhash , Ġcharacter , ĠkeyCode )) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ open Ġfun Ġon Focus G ained () Ġ{ Ċĉ ĉ if Ġ( this Ġis ĠWidget Collection Ġ&& Ġ!( handler Ġ!= Ġnull Ġ&& Ġ! handler !!. client )) Ġ{ Ċĉĉ ĉ this . widgets . forEach Ġ{ Ċĉĉĉ ĉ it . on Focus G ained () Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ if Ġ( focused Ġ&& Ġhandler Ġ!= Ġnull Ġ&& Ġhandler !!. client Ġ&& Ġsynchronize . contains ( Networks . FOCUS _ GAIN )) Ġ{ Ċĉĉ ĉ Networks . to Server ( Networks . WIDGET _ UPDATE , ĠNetworks . of Focus Gain ( handler !!. sync Id , Ġhash )) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ open Ġfun Ġon Focus Released () Ġ{ Ċĉ ĉ if Ġ( this Ġis ĠWidget Collection Ġ&& Ġ!( handler Ġ!= Ġnull Ġ&& Ġ! handler !!. client )) Ġ{ Ċĉĉ ĉ this . widgets . forEach Ġ{ Ċĉĉĉ ĉ it . on Focus Released () Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ if Ġ( focused Ġ&& Ġhandler Ġ!= Ġnull Ġ&& Ġhandler !!. client Ġ&& Ġsynchronize . contains ( Networks . FOCUS _ RELEASE )) Ġ{ Ċĉĉ ĉ Networks . to Server ( Networks . WIDGET _ UPDATE , ĠNetworks . of Focus Release ( handler !!. sync Id , Ġhash )) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ @ Environment ( Env Type . CLIENT ) Ċ ĉ open Ġfun Ġget Tooltip (): ĠList < Text > Ġ{ Ċĉ ĉ return Ġempty List () Ċ ĉ } ĊĊ ĉ @ Environment ( Env Type . CLIENT ) Ċ ĉ open Ġfun Ġdraw Widget ( matrices : ĠMatrix Stack , Ġprovider : ĠVertex Consumer Provider ) Ġ{ Ċĉ ĉ if Ġ( hidden ) Ġreturn Ċ ĉ } ĊĊ ĉ open Ġfun Ġon Layout Changed () Ġ{ Ċĉ ĉ focus ( Positions . mouse X , ĠPosition s . mouse Y ) ĊĊĉ ĉ parent ?. on Layout Changed () Ċĉ ĉ handled ?. on Layout Changed () Ċ ĉ } ĊĊ ĉ fun Ġfocus ( x : ĠFloat , Ġy : ĠFloat ) Ġ{ Ċĉ ĉ val Ġwas Focused Ġ= Ġfocused Ċĉ ĉ focused Ġ= Ġis Within ( x , Ġy ) ĊĊĉ ĉ if Ġ( was Focused Ġ&& Ġ! focused ) Ġon Focus Released () Ċĉ ĉ if Ġ(! was Focused Ġ&& Ġfocused ) Ġon Focus G ained () Ċ ĉ } ĊĊ ĉ fun Ġis Within ( x : ĠFloat , Ġy : ĠFloat ): ĠBoolean Ġ{ Ċĉ ĉ return Ġx Ġ> Ġposition . x Ġ&& Ġx Ġ< Ġposition . x Ġ+ Ġsize . width Ġ&& Ġy Ġ> Ġposition . y Ġ&& Ġy Ġ< Ġposition . y Ġ+ Ġsize . height Ċ ĉ } ĊĊ ĉ fun Ġir rit ater () Ġ{ ĊĊ ĉ } Ċ }