package Ġcom . github . k is ar ag ie ffect ive . dyn map 2 image Ċ Ċ import Ġjava . awt . image . Buffered Image Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . net . Connect Exception Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . URL Ċ import Ġjava . net . Unknown Host Exception Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ import Ġjavax . image io . Image IO Ċ import Ġkotlin . concurrent . timer Ċ import Ġkotlin . math . ceil Ċ import Ġkotlin . math . floor Ċ Ċ object ĠMain Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval Ġtile Pixels Ġ= Ġ 1 2 8 ĊĠĠĠ Ġprivate Ġconst Ġval ĠD UMMY _ USER _ AGENT Ġ= Ġ" Mozilla / 5 . 0 Ġ( X 1 1 ; ĠUbuntu ; ĠLinux Ġx 8 6 _ 6 4 ; Ġrv : 7 6 . 0 ) ĠGecko / 2 0 1 0 0 1 0 1 ĠFirefox / 7 6 . 0 " ĊĠĠĠ Ġconst Ġval Ġurl Ġ= Ġ" https :// example . com / your _ map _ path " ĊĠĠĠ Ġconst Ġval Ġworld Ġ= Ġ" your _ world " ĊĊĠĠĠ Ġconst Ġval Ġmin X : ĠInt Ġ= Ġ- 1 0 7 0 0 ĊĠĠĠ Ġconst Ġval Ġmin Z : ĠInt Ġ= Ġ- 9 0 0 0 ĊĠĠĠ Ġconst Ġval Ġmax X : ĠInt Ġ= Ġ 7 7 0 0 ĊĠĠĠ Ġconst Ġval Ġmax Z : ĠInt Ġ= Ġ 9 3 0 0 ĊĠĠĠ Ġprivate Ġval Ġmode : ĠView Mode Ġ= ĠView Mode . FLAT ĊĠĠĠ Ġval Ġscale : ĠScale Ġ= ĠScale . NORMAL ĊĠĠĠ Ġval Ġimage Save Location Ġ= ĠFile ("./ image ") ĊĠĠĠ Ġval Ġsave Finally Ġ= ĠFile ( image Save Location , Ġ" target . png ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġreal Ġ: Ġtile Ġ= Ġn Ġ: Ġ 1 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġreal Scale Ġ= Ġ 3 2 Ġshl Ġscale . ordinal ĊĠĠĠ Ġprivate Ġval Ġgrouped Tile Step Ġ= Ġ 1 Ġshl Ġscale . ordinal ĊĊĠĠĠ Ġ// Ġ( 5 , Ġ 1 2 ) Ġ-> Ġ 1 2 ĊĠĠĠ Ġfun ĠInt . as Of ( may not : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( round vp ( this Ġ* Ġ 1 . 0 Ġ/ Ġmay not ) Ġ* Ġmay not ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ- Ġ-> Ġfloor ĊĠĠĠ Ġ// Ġ+ Ġ-> Ġceil ĊĠĠĠ Ġfun Ġround vp ( s : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( s Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfloor ( s ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġceil ( s ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġmain ( s : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠ ĠTest . run () ĊĠĠĠĠĠĠĠ Ġcheck ( url ) ĊĠĠĠĠĠĠĠ Ġrequire ( min X Ġ<= Ġmax X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Bad ĠX Ġparam " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrequire ( min Z Ġ<= Ġmax Z ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Bad ĠZ Ġparam " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġimage Save Location . mkdir s () ĊĊĠĠĠĠĠĠĠ Ġdebug (" param ", Ġ" scale : Ġ$ scale ") ĊĠĠĠĠĠĠĠ Ġdebug (" param ", Ġ" real Scale : Ġ$ real Scale ") ĊĠĠĠĠĠĠĠ Ġdebug (" param ", Ġ" x : Ġ$ min X Ġ.. Ġ$ max X , Ġz : Ġ$ min Z Ġ.. Ġ$ max Z ") ĊĠĠĠĠĠĠĠ Ġ// ĠãĤ ª ãĥ¼ãĥĲ ãĥ¼ãĥ ķ ãĥŃ ãĥ¼ ãģĮ æĢ ĸ ãģĦ ãģĹ ãĢģ éģ© å½ĵ ãģ« BigInteger ãģ« æĬķ ãģ Ĵ ãģ¨ ãģĳ ãģ° ãģĦ ãģĦ ãģĭ ï¼ģ ï½ Ĺ ĊĠĠĠĠĠĠĠ Ġdebug (" task ", Ġ" Expected Ġtiles : Ġ${ 1 . to BigInteger () Ġ* Ġ( max X Ġ- Ġmin X ). to BigInteger () Ġ* Ġ( max Z Ġ- Ġmin Z ). to BigInteger () Ġ/ Ġreal Scale . to BigInteger () Ġ/ Ġreal Scale . to BigInteger () Ġ} ") ĊĠĠĠĠĠĠĠ Ġ// Ġnormalize ãģĹãģªãģĦ ãģ¨ ãģĬ ãģĭ ãģĹãģª ãģ¨ ãģĵ ãĤ į ãģĭãĤī åıĸ ãĤĬ å§ĭ ãĤģ ãģ¦ åĭķ ä½ľ ãģĮ ãģĬ ãģĭ ãģĹãģ ı ãģªãĤĭ ãģĵãģ¨ ãģĮãģĤãĤĭ ĊĠĠĠĠĠĠĠ Ġval Ġtile Max X Ġ= Ġconvert Raw To Tile ( max X ). as Of ( grouped Tile Step ) ĊĠĠĠĠĠĠĠ Ġval Ġtile Min X Ġ= Ġconvert Raw To Tile ( min X ). as Of ( grouped Tile Step ) ĊĠĠĠĠĠĠĠ Ġval Ġtile Max Z Ġ= Ġconvert Raw To Tile ( max Z ). as Of ( grouped Tile Step ) ĊĠĠĠĠĠĠĠ Ġval Ġtile Min Z Ġ= Ġconvert Raw To Tile ( min Z ). as Of ( grouped Tile Step ) ĊĠĠĠĠĠĠĠ Ġval Ġx Tile Range Ġ= Ġtile Min X .. tile Max X Ġstep Ġgrouped Tile Step ĊĠĠĠĠĠĠĠ Ġval Ġz Tile Range Ġ= Ġtile Min Z .. tile Max Z Ġstep Ġgrouped Tile Step ĊĠĠĠĠĠĠĠ Ġdebug (" param ", Ġ" normalized Ġx : Ġ$ x Tile Range , Ġz : Ġ$ z Tile Range ") ĊĠĠĠĠĠĠĠ Ġdebug (" task ", Ġ" Actual Ġtiles : Ġ${ x Tile Range . count () Ġ* Ġz Tile Range . count () }") ĊĠĠĠĠĠĠĠ Ġdebug (" param . tile ", Ġ" x : Ġ$ tile Min X Ġ.. Ġ$ tile Max X , Ġz : Ġ$ tile Min Z Ġ.. Ġ$ tile Max Z ") ĊĠĠĠĠĠĠĠ Ġimage Save Location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. walk () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ!= Ġimage Save Location Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġit . delete () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmode Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Mode . FLAT Ġto Ġ" flat ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Mode . SURFACE Ġto Ġ" t ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Mode . XR AY Ġto Ġ" ct " ĊĠĠĠĠĠĠĠ Ġ) [ mode ] Ġ?: Ġerror ("") ĊĊĠĠĠĠĠĠĠ Ġval Ġpool Ġ= ĠExec utors . new Fixed ThreadPool ( 6 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġai Ġ= ĠAtomicInteger ( 0 ) ĊĠĠĠĠĠĠĠ Ġprint (" wait ... ĠĠĠĠĠĠĠĠĠ Ġ") ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Progress Task Ġ= Ġtimer ( period Ġ= Ġ 1 0 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ("\ b ". repeat ( 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ("${ ai . get ()} ". pad Start ( 8 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġx Tile Range ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( z Ġin Ġz Tile Range ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpool . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdebug (" request ", Ġ" tile : Ġ{ x : Ġ$ x , Ġz : Ġ$ z }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetFile ( mode , Ġx , Ġz ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġai . increment AndGet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 2 0 0 0 L ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdebug (" request ", Ġ" main Ġthread : Ġall Ġreq s Ġare Ġsent ; Ġwaiting Ġjoin ") ĊĠĠĠĠĠĠĠ Ġdisplay Progress Task . cancel () ĊĠĠĠĠĠĠĠ Ġpool . shutdown () ĊĠĠĠĠĠĠĠ Ġpool . await Termination ( 5 L , ĠTimeUnit . MIN UTES ) ĊĠĠĠĠĠĠĠ Ġdebug (" request ", Ġ" main Ġthread : Ġjoined Ġall !") ĊĊĠĠĠĠĠĠĠ Ġval Ġimage Width Ġ= Ġtile Pixels Ġ* Ġx Tile Range . count () ĊĠĠĠĠĠĠĠ Ġval Ġimage Height Ġ= Ġtile Pixels Ġ* Ġz Tile Range . count () ĊĠĠĠĠĠĠĠ Ġdebug (" image " Ġ," created Ġ{ w : Ġ$ image Width , Ġh : Ġ$ image Height }") ĊĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= ĠBufferedImage ( image Width , Ġimage Height , ĠBufferedImage . TYPE _ INT _ ARGB ) ĊĠĠĠĠĠĠĠ Ġimage Save Location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. walk () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isFile Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ!= Ġsave Finally Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug (" image Ġiterate ", Ġ" writing Ġ${ file . path }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffered Image Ġ= ĠImage IO . read ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( tile X , Ġtile Z ) Ġ= ĠRegex (" (- ? \\ d + )_ (- ? \\ d + )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find ( file . name Without Extension ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. group Values ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. drop ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . toInt () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug (" image Ġiterate ", Ġ" tile ?: Ġx : Ġ$ tile X , Ġz : Ġ$ tile Z ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset X Ġ= Ġ( tile X Ġ- Ġtile Min X ) Ġ/ Ġgrouped Tile Step Ġ* Ġtile Pixels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĢ Ĩ ãģ§ãģ¯ ãģªãģĦ ãĢĤ ãģĵ ãģĨ ãģĹãģªãģĦ ãģ¨ ãĤ¿ ãĤ¤ãĥ« ãģĮ ä¸Ĭä¸ĭ å¯¾è±¡ ãģ® ãĤ¹ ãĥŃ ãĥĥãĥĪ ãģ« åħ¥ ãĤĭ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Z Ġ= Ġ( tile Max Z Ġ- Ġtile Z ) Ġ/ Ġgrouped Tile Step Ġ* Ġtile Pixels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug (" image Ġiterate ", Ġ" fx : Ġ$ offset X , Ġf z : Ġ$ offset Z ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġregion Ġcopy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub View Ġ= Ġtarget . getSub image ( offset X , Ġoffset Z , Ġtile Pixels , Ġtile Pixels ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub View . data Ġ= Ġbuffered Image . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprint (" saving ... Ġ Ġ") ĊĊĊĠĠĠĠĠĠĠ Ġval Ġsave Animation Task Ġ= Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtemp Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimer (" ...", Ġperiod Ġ= Ġ 1 0 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ("\ b ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ("\\ - /" [ temp Ġ% Ġ 3 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ// */ ĊĊĠĠĠĠĠĠĠ Ġrequire ( Image IO . write ( target , Ġ" PNG ", Ġsave Finally )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SAVE ĠFAILED Ġ: P " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsave Animation Task . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdebug ( cat : ĠString , Ġmes : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" [$ cat ] Ġ$ mes ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠView Mode Ġ{ ĊĠĠĠĠĠĠĠ ĠFL AT , ĊĠĠĠĠĠĠĠ ĠS UR FACE , ĊĠĠĠĠĠĠĠ ĠX R AY ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠScale ( val Ġstr : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBIG GEST (""), ĊĠĠĠĠĠĠĠ ĠBIG GER (" z _ "), ĊĠĠĠĠĠĠĠ ĠBIG (" zz _ "), ĊĠĠĠĠĠĠĠ ĠNORMAL (" zz z _ "), ĊĠĠĠĠĠĠĠ ĠSMALL ER (" zzzz _ "), ĊĠĠĠĠĠĠĠ ĠSM ALLE ST (" zzzz z _ "), ; ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠHttp URLConnection . ensure Get ( mode : ĠString , Ġchunk X : ĠInt , Ġchunk Z : ĠInt ): ĠInputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Request Property (" User - Agent ", ĠD UMMY _ USER _ AGENT ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Method Ġ= Ġ" GET " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . inputStream ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠConnect Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebug (" request ", Ġ"$ url Ġ-> Ġcouldn 't Ġconnect . Ġretry .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisconnect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( url . open Connection () Ġas ĠHttp URLConnection ). ensure Get ( mode , Ġchunk X , Ġchunk Z ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebug (" request ", Ġ"$ url Ġ-> ĠIOException : Ġ${ e . message } Ġretry .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisconnect () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . yield () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 3 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( url . open Connection () Ġas ĠHttp URLConnection ). ensure Get ( mode , Ġchunk X , Ġchunk Z ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetFile ( mode : ĠString , Ġchunk X : ĠInt , Ġchunk Z : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġmake Connection For ( mode , Ġchunk X , Ġchunk Z , Ġscale . str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ensure Get ( mode , Ġchunk X , Ġchunk Z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Bytes () ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( image Save Location , Ġ"${ chunk X }_${ chunk Z }. png "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate New File () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfile . output Stream (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . write ( image ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġdebug (" request ", Ġ" done Ġfor Ġ${ where Is The Tile ( mode , Ġchunk X , Ġchunk Z , Ġscale . str )} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmake Connection For ( mode : ĠString , Ġchunk X : ĠInt , Ġchunk Z : ĠInt , Ġscale : ĠString ): ĠHttp URLConnection Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġwhere Is The Tile ( mode , Ġchunk X , Ġchunk Z , Ġscale ) ĊĠĠĠĠĠĠĠ Ġ// debug (" request ", Ġ"$ url ") ĊĠĠĠĠĠĠĠ Ġreturn Ġurl . open Connection () Ġas ĠHttp URLConnection ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwhere Is The Tile ( mode : ĠString , Ġchunk X : ĠInt , Ġchunk Z : ĠInt , Ġscale : ĠString ): ĠURL Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ éł ĺ åŁŁ ãĥĸ ãĥŃ ãĥĥãĤ¯ ãģ¯ 0 _ 0 åĽºå®ļ ãģ§ ãĤĤ åĭķ ä½ľ ãģĻãĤĭ ?? Ġ-> Ġ ãģĹãģªãģĦ ãĢĤ é ¯ ĸ ãģ«ãĤĪ ãģ£ãģ¦ åİ ³ æł¼ ãģł ãģ£ãģŁ ãĤĬ ãģĻãĤĭ ãĢĤ ĊĊĠĠĠĠĠĠĠ Ġval Ġregion X Ġ= Ġconvert Tile To Region ( chunk X ) ĊĠĠĠĠĠĠĠ Ġval Ġregion Z Ġ= Ġconvert Tile To Region ( chunk Z ) ĊĠĠĠĠĠĠĠ Ġreturn ĠURL ("$ url / tiles /$ world /$ mode /${ region X }_${ region Z }/${ scale }${ chunk X }_ $ chunk Z . png ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconvert Tile To Region ( v : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfloor ( v Ġ/ Ġ 3 2 . 0 ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconvert Raw To Tile ( location : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlocation Ġ/ Ġ 3 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( URL ( url ). open Connection () Ġas ĠHttp URLConnection ). connect () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUnknown Host Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebug (" check ", Ġ" unknown Ġhost ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠInt Range . count (): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠ 0 ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . last Ġ- Ġthis . first ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠTest Ġ{ ĊĠĠĠ Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠ Ġ- 1 Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ- 1 6 Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ- 3 1 Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ- 3 2 Ġ-> Ġ- 2 ĊĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠ 1 5 Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠ 1 6 Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠ 3 1 Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠ 3 2 Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġrequire ( Main . convert Tile To Region ( 0 ) Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġrequire ( Main . convert Tile To Region ( 1 ) Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġrequire ( Main . convert Tile To Region ( 3 1 ) Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġrequire ( Main . convert Tile To Region ( 3 2 ) Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġrequire ( Main . convert Tile To Region (- 1 ) Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġrequire ( Main . convert Tile To Region (- 3 2 ) Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġrequire ( Main . convert Tile To Region (- 3 3 ) Ġ== Ġ- 2 ) ĊĠĠĠ Ġ} Ċ } Ċ