package Ġme . ar asp le . mc . tr menu . modules . repo Ċ Ċ import Ġio . izz el . tab ool ib . module . config . T Config Ċ import Ġio . izz el . tab ool ib . module . inject . T Function Ċ import Ġio . izz el . tab ool ib . module . inject . TS chedule Ċ import Ġme . ar asp le . mc . tr menu . Tr Menu Ċ import Ġme . ar asp le . mc . tr menu . utils . Tasks Ċ import Ġorg . bukkit . inventory . ItemStack Ċ Ċ /** Ċ Ġ* Ġ@ author ĠAr asp le Ċ Ġ* Ġ@ date Ġ 2 0 2 0 / 7 / 2 6 Ġ 8 : 5 3 Ċ Ġ*/ Ċ object ĠItem Repository Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdata Ġ= ĠT Config . create ( Tr Menu . plugin , Ġ" items . yml "). listener Ġ{ Ġload () Ġ} ĊĠĠĠ Ġprivate Ġvar Ġwriting Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġitem Stack s Ġ= Ġmutable Map Of < String , ĠItemStack >() ĊĊĠĠĠ Ġ@ TS chedule ( delay Ġ= Ġ 2 0 Ġ* Ġ 6 0 , Ġperiod Ġ= Ġ 2 0 Ġ* Ġ 6 0 , Ġasync Ġ= Ġtrue ) ĊĠĠĠ Ġfun Ġsave Task () Ġ= Ġsave ( false ) ĊĊĠĠĠ Ġ@ T Function . Cancel ĊĠĠĠ Ġfun Ġcancel () Ġ= Ġsave ( true ) ĊĊĠĠĠ Ġfun Ġsave ( is Cancel ing : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwriting Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġdata . get Keys ( true ). filter Ġ{ Ġ! item Stack s . keys . contains ( it ) Ġ}. forEach Ġ{ Ġdata . set ( it , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠ Ġitem Stack s . forEach Ġ{ Ġ( id , Ġitem ) Ġ-> Ġdata . set ( id , Ġitem ) Ġ} ĊĠĠĠĠĠĠĠ Ġdata . save ToFile () ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Cancel ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTasks . delay ( 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriting Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ TS chedule ( delay Ġ= Ġ 2 0 ) ĊĠĠĠ Ġprivate Ġfun Ġload () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( writing ) Ġreturn ĊĠĠĠĠĠĠĠ ĠTasks . task ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= Ġdata . get Keys ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Stack s . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeys . remove If Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . getItem Stack ( it )?. let Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Stack s [ it ] Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ remove If Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeys . forEach Ġ{ Ġdata . set ( it , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ItemStack s () Ġ= Ġitem Stack s ĊĊĠĠĠ Ġfun ĠgetItem ( id : ĠString ): ĠItemStack ? Ġ= Ġitem Stack s [ id ] ĊĊĠĠĠ Ġfun Ġhas Item ( id : ĠString ) Ġ= Ġitem Stack s . containsKey ( id ) ĊĊĠĠĠ Ġfun Ġadd Item ( id : ĠString , Ġitem Stack : ĠItemStack ) Ġ= Ġitem Stack s . put ( id , Ġitem Stack . clone ()) ĊĊĠĠĠ Ġfun Ġremove Item ( id : ĠString ) Ġ= Ġitem Stack s . remove ( id ) Ċ Ċ }