package Ġcom . mat tw or z ala . canvas Ċ Ċ import Ġnet . min est om . server . Minecraft Server Ċ import Ġnet . min est om . server . entity . Player Ċ import Ġnet . min est om . server . event . inventory . Inventory Close Event Ċ import Ġnet . min est om . server . event . inventory . Inventory Open Event Ċ import Ġnet . min est om . server . event . inventory . Inventory Pre Click Event Ċ import Ġnet . min est om . server . event . player . Player Disconnect Event Ċ import Ġnet . min est om . server . utils . time . TimeUnit Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ /** Ċ Ġ* ĠAn Ġobject Ġfor Ġproviding Ġall Ġcanvas Ġinstances . Ċ Ġ* ĠStores Ġan Ġinternal ĠConcurrent HashMap Ġfor Ġthread Ġsafety . Ċ Ġ*/ Ċ object ĠCanvas Provider Ġ{ ĊĠĠĠ Ġ/** ĠInternal Ġmap Ġof Ġall Ġcan v ases . Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġcan v ases : ĠMutable Map < UUID , ĠCanvas > Ġ= ĠConcurrent HashMap () ĊĊĠĠĠ Ġinternal Ġvar Ġuse Fixed Update : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset Ġ// todo Ġnot Ġimplemented ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġcanvas ( player : ĠPlayer ): ĠCanvas Ġ= Ġcan v ases [ player . uuid ] Ġ?: Ġcreate Canvas ( player ) ĊĊĠĠĠ Ġ/* ĠOptions Ġ*/ ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġuse Fixed Update () Ġ{ ĊĠĠĠĠĠĠĠ Ġuse Fixed Update Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Canvas ( player : ĠPlayer ) Ġ= ĠCanvas ( player ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġcan v ases [ player . uuid ] Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠEvent Ġhand ing Ġ*/ ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Inventory Open ( event : ĠInventory Open Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġunused Ġas Ġof Ġnow ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Inventory Click ( event : ĠInventory Pre Click Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcan v ases . values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . container Ġ== Ġevent . inventory Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġit . handle Inventory Click ( event ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Inventory Close ( event : ĠInventory Close Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcan v ases . values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . container Ġ== Ġevent . inventory Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġit . handle Inventory Close ( event ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Player Disconnect ( event : ĠPlayer Disconnect Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuuid Ġ= Ġevent . player . uuid ĊĠĠĠĠĠĠĠ Ġcan v ases [ uuid ]?. cleanup () ĊĠĠĠĠĠĠĠ Ġcan v ases . remove ( uuid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠMinecraft Server . getGlobal EventHandler (). add Event Callback ( Inventory Open Event :: class . java , Ġ:: handle Inventory Open ) ĊĠĠĠĠĠĠĠ ĠMinecraft Server . getGlobal EventHandler (). addListener ( Inventory Pre Click Event :: class . java , Ġ:: handle Inventory Click ) ĊĠĠĠĠĠĠĠ ĠMinecraft Server . getGlobal EventHandler (). addListener ( Inventory Close Event :: class . java , Ġ:: handle Inventory Close ) ĊĊĠĠĠĠĠĠĠ ĠMinecraft Server . getGlobal EventHandler (). addListener ( Player Disconnect Event :: class . java , Ġ:: handle Player Disconnect ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠFixed Ġupdate Ġtask ĊĠĠĠĠĠĠĠ ĠMinecraft Server . get Scheduler Manager (). build Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcan v ases . values . forEach ( Canvas :: update ) ĊĠĠĠĠĠĠĠ Ġ}. repeat ( 1 , ĠTimeUnit . SERVER _ TICK ). schedule () ĊĠĠĠ Ġ} Ċ } ĊĊ