package Ġcom . li am co al studio . ket tle . servers . main Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . li am co al studio . ket tle . helpers . Dimension Ċ import Ġcom . li am co al studio . ket tle . helpers . K et tle Properties Ċ import Ġcom . li am co al studio . ket tle . helpers . Lambda Timer Task Ċ import Ġcom . li am co al studio . ket tle . helpers . Recipe Unlock Action Ċ import Ġcom . li am co al studio . ket tle . logging . Console Logger Ċ import Ġcom . li am co al studio . ket tle . networking . java . play .* Ċ import Ġcom . li am co al studio . ket tle . networking . main . Client Ċ import Ġcom . li am co al studio . ket tle . servers . java . Java Server Ċ import Ġcom . li am co al studio . ket tle . world .* Ċ import Ġnet . quer z . nbt . io . NBT Util Ċ import Ġnet . quer z . nbt . io . Named Tag Ċ import Ġnet . quer z . nbt . tag . Compound Tag Ċ import Ġnet . quer z . nbt . tag . IntArray Tag Ċ import Ġnet . quer z . nbt . tag . List Tag Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . atomic . Atomic Reference Ċ import Ġkotlin . collections . HashMap Ċ import Ġkotlin . math . max Ċ import Ġkotlin . random . Random Ċ Ċ class ĠK et tle Server Ġ{ ĊĠĠĠ Ġvar Ġis Fully Initialized : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġexecutor Ġ= ĠQueue Executor () ĊĠĠĠ Ġval Ġlogger Ġ= ĠConsole Logger ( K et tle Server :: class ) ĊĠĠĠ Ġval Ġtimer Ġ= ĠTimer () ĊĠĠĠ Ġval Ġworld s Ġ= ĠEnum Map < Dimension , ĠWorld >( Dimension :: class . java ) ĊĊĠĠĠ Ġfun Ġexecute ( run nable : ĠRunnable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecutor . execute ( run nable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtick () Ġ{ ĊĠĠĠĠĠĠĠ Ġexecutor . run () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshould Tick (): ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġ@ Experimental Std lib Api ĊĠĠĠ Ġprivate Ġfun Ġinit World s () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġworld Ġ= Ġif ( K et tle Properties . flat ) ĠWorld . flat () Ġelse ĠWorld . noise ( Random . next Long ()) ĊĠĠĠĠĠĠĠ Ġworld s [ Dimension . OVER WORLD ] Ġ= Ġworld ĊĊĠĠĠĠĠĠĠ Ġtimer . schedule At Fixed Rate ( Lambda Timer Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLOBAL !!. get (). save World s () ĊĠĠĠĠĠĠĠ Ġ}, Ġ 0 , Ġ 6 0 0 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Std lib Api ĊĠĠĠ Ġfun Ġthread () Ġ{ ĊĠĠĠĠĠĠĠ ĠK et tle Properties . load () ĊĠĠĠĠĠĠĠ Ġinit Objects () ĊĠĠĠĠĠĠĠ Ġinit World s () ĊĠĠĠĠĠĠĠ Ġis Fully Initialized Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠConsole Logger ( K et tle Server :: class ). info (" Initialized ") ĊĠĠĠĠĠĠĠ Ġwhile ( should Tick ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtick () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmil Ġ= Ġ( end [ Calendar . MILLI SECOND ] Ġ- Ġstart [ Calendar . MILLI SECOND ]) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( max ( 5 0 Ġ- Ġmil . to Long (), Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Objects () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Std lib Api ĊĠĠĠ Ġfun Ġon Player Join ( client : ĠClient ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġworld Ġ= ĠGLOBAL !!. get (). world s [ Dimension . OVER WORLD ] !! ĊĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= ĠPlayer ( client , Ġworld . new EntityId ()) ĊĠĠĠĠĠĠĠ Ġworld . entities . add ( player ) ĊĠĠĠĠĠĠĠ Ġworld . players . add ( player ) ĊĠĠĠĠĠĠĠ ĠJava Server . GLOBAL _ CONTROLLER !!. get (). execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . send ( S 2 C Update View Position ( 0 , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . send ( S 2 C Declare Recipes ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . send ( S 2 C Declare Tags ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . send ( S 2 CH eld Item Change ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . send ( S 2 C Declare Commands ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . send ( S 2 C Unlock Recipes ( Recipe Unlock Action . EMPTY _ INIT )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . send ( S 2 C World Border Init ( 1 0 2 4 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . send ( S 2 C Spawn Position ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . send ( S 2 C Entity Status ( player . eid , Ġ 2 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . send ( S 2 C Entity Status ( player . eid , Ġ 2 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . send ( S 2 C Window Items ( 0 , Ġplayer . inventory )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . send ( S 2 CP layer Pos And Look ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK et tle Properties . spawn . x , Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK et tle Properties . spawn . y , Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK et tle Properties . spawn . z , Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK et tle Properties . spawn . yaw . toFloat (), Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK et tle Properties . spawn . pitch . toFloat (), Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Std lib Api ĊĠĠĠ Ġfun Ġsave World s () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchunks List Ġ= ĠList Tag ( IntArray Tag :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġif (! File (" world s "). exists ()) ĠFile (" world s "). mkdir () ĊĊĠĠĠĠĠĠĠ Ġworld s . forEach Ġ{ Ġ( dimension , Ġworld ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Saving Ġworld Ġ$ dimension ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn bt Ġ= ĠWorld NBT Encoder . encode ( world , Ġchunks List ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠN BT Util . write ( Named Tag (" World ", Ġn bt ), ĠFile (" world s /${ dimension . name . toLowerCase ()}. nbt "), Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlogger . info (" Saving Ġchunks ") ĊĠĠĠĠĠĠĠ Ġval Ġchunk Compound Ġ= ĠCompound Tag () ĊĠĠĠĠĠĠĠ Ġchunk Compound . put (" Chunk Data ", Ġchunks List ) ĊĠĠĠĠĠĠĠ ĠN BT Util . write ( Named Tag (" Chunk Info ", Ġchunk Compound ), ĠFile (" world s / chunks . nbt "), Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġlogger . info (" All Ġdone !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġplayer ( client : ĠClient ) Ġ= Ġworld s [ Dimension . OVER WORLD ] !!. players . find Ġ{ Ġit . client Ġ== Ġclient Ġ} !! ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠGLOBAL : ĠAtomic Reference < K et tle Server >? Ġ= ĠAtomic Reference ( K et tle Server ()) ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠTHREAD : ĠAtomic Reference < Thread > ĊĊĠĠĠĠĠĠĠ Ġfun Ġplayer ( client : ĠClient ) Ġ= ĠGLOBAL !!. get (). player ( client ) ĊĠĠĠ Ġ} Ċ }