/* Ċ Ġ* ĠĠĠĠĠ ĠSand stone API Ġ- ĠMinecraft ĠServer ĠMod ding ĠAPI Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠ ĠThe ĠMIT ĠLicense Ġ( MIT ) Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠCopyright Ġ( c ) ĠSand stone Ġ< https :// github . com / Project Sand stone /> Ċ Ġ* ĠĠĠĠĠ ĠCopyright Ġ( c ) Ġcontributors Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* ĠĠĠĠĠ Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* ĠĠĠĠĠ Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* ĠĠĠĠĠ Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* ĠĠĠĠĠ Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* ĠĠĠĠĠ Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* ĠĠĠĠĠ Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠĠĠĠĠ ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠĠĠĠĠ ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠĠĠĠĠ ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠĠĠĠĠ ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠĠĠĠĠ ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠĠĠĠĠ ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġcom . github . projects and stone . api . world . extent Ċ Ċ import Ġorg . spongepowered . math . vector . Vector 2 i Ċ import Ġorg . spongepowered . math . vector . Vector 3 d Ċ import Ġorg . spongepowered . math . vector . Vector 3 i Ċ import Ġcom . github . projects and stone . api . block . BlockState Ċ import Ġcom . github . projects and stone . api . util . Source Ċ import Ġcom . github . projects and stone . api . text . channel . Message Receiver Ċ import Ġcom . github . projects and stone . api . util . extension . sponge . math . range To Ċ import Ġcom . github . projects and stone . api . world . Chunk Ċ import Ġcom . github . projects and stone . api . world . Location Ċ import Ġcom . github . projects and stone . api . world . Selection Ċ import Ġcom . github . projects and stone . api . world . World Ċ Ċ /** Ċ Ġ* ĠAn Ġ[ Extent ] Ġis Ġa Ġcontainer Ġof Ġgame Ġobjects Ġ( ex : ĠBlock , ĠEntities , ĠTile ĠEntities ). Ċ Ġ* Ċ Ġ* ĠExample Ġof Ġ[ Extent ] s : Ġ[ World ], Ġ[ Chunk ] Ċ Ġ*/ Ċ interface ĠExt ent Ġ: ĠEntity Un iverse , ĠMessage Receiver Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLoaded Ġ[ Chunk ] s Ġin Ġthis Ġ[ Extent ] Ġregion . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExample : ĊĠĠĠĠ Ġ* ĠIf Ġthis Ġ[ Extent ] Ġis Ġa Ġchunk , Ġthe Ġreturned Ġlist Ġwill Ġcontains ĊĠĠĠĠ Ġ* Ġonly Ġcurrent Ġ[ Chunk ]. ĠIf Ġthis Ġ[ Extent ] Ġis Ġa Ġ[ World ], Ġthe Ġreturned Ġlist Ġwill ĊĠĠĠĠ Ġ* Ġcontains Ġall Ġloaded Ġchunks Ġof Ġthis Ġ[ World ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġloaded Chunks : ĠCollection < Chunk > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWorld Ġof Ġthis Ġ[ Extent ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġworld : ĠWorld ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġa Ġchunk Ġin Ġthe Ġ[ location ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlocation ĠLocation ĊĠĠĠĠ Ġ* Ġ@ return ĠChunk Ġin Ġthe Ġ[ location ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Chunk ( location : ĠVector 2 i ): ĠChunk Ġ= ĠChunk ( this , Ġlocation ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġall Ġ[ Chunk ] s Ġinside Ġthe Ġregion . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfrom ĠFrom Ġlocation ĊĠĠĠĠ Ġ* Ġ@ param Ġto ĠTo ĠLocation . ĊĠĠĠĠ Ġ* Ġ@ return Ġall Ġ[ Chunk ] s Ġinside Ġthe Ġregion . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Chunks ( from : ĠVector 2 i , Ġto : ĠVector 2 i ): ĠCollection < Chunk > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġchunks Ġ= Ġmutable ListOf < Chunk >() ĊĊĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġfrom . min ( to ) ĊĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġfrom . max ( to ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( vector Ġin Ġmin .. max ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchunks Ġ+= Ġthis . get Chunk ( vector ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġchunks ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġa Ġ[ Location ] Ġin Ġthis Ġ[ Extent ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠCoordinate Ġin Ġthis ĠExt ent ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġ[ Location ] Ġin Ġthis Ġ[ Extent ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Location ( position : ĠVector 3 d ): ĠLocation < Extent > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġa Ġ[ Location ] Ġin Ġthis Ġ[ Extent ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠCoordinate Ġin Ġthis ĠExt ent ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġ[ Location ] Ġin Ġthis Ġ[ Extent ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Location ( position : ĠVector 3 i ): ĠLocation < Extent > Ġ= Ġthis . getLocation ( position . toDouble ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġa Ġ[ Location ] Ġin Ġthis Ġ[ Extent ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġx ĠCoord ĠX Ġin Ġthis Ġ[ Extent ] ĊĠĠĠĠ Ġ* Ġ@ param Ġy ĠCoord ĠY Ġin Ġthis Ġ[ Extent ] ĊĠĠĠĠ Ġ* Ġ@ param Ġz ĠCoord ĠZ Ġin Ġthis Ġ[ Extent ] ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġ[ Location ] Ġin Ġthis Ġ[ Extent ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Location ( x : ĠDouble , Ġy : ĠDouble , Ġz : ĠDouble ): ĠLocation < Extent > Ġ= Ġthis . getLocation ( Vector 3 d ( x , Ġy , Ġz )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġa Ġ[ Location ] Ġin Ġthis Ġ[ Extent ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġx ĠCoord ĠX Ġin Ġthis Ġ[ Extent ] ĊĠĠĠĠ Ġ* Ġ@ param Ġy ĠCoord ĠY Ġin Ġthis Ġ[ Extent ] ĊĠĠĠĠ Ġ* Ġ@ param Ġz ĠCoord ĠZ Ġin Ġthis Ġ[ Extent ] ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġ[ Location ] Ġin Ġthis Ġ[ Extent ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Location ( x : ĠInt , Ġy : ĠInt , Ġz : ĠInt ): ĠLocation < Extent > Ġ= Ġthis . getLocation ( Vector 3 i ( x , Ġy , Ġz )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġ[ BlockState ] Ġin Ġ[ location ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlocation ĠLocation ĊĠĠĠĠ Ġ* Ġ@ return ĠBlock State Ġin Ġlocation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Block ( location : ĠVector 3 i ): ĠBlock State ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġall Ġ[ BlockState ] s Ġinside Ġthe Ġregion . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfrom ĠFrom Ġlocation . ĊĠĠĠĠ Ġ* Ġ@ param Ġto ĠTo Ġlocation . ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ BlockState ] s Ġinside Ġthe Ġregion . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Blocks ( from : ĠVector 3 i , Ġto : ĠVector 3 i ): ĠCollection < BlockState > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġblocks Ġ= Ġmutable ListOf < BlockState >() ĊĊĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġfrom . min ( to ) ĊĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġfrom . max ( to ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( vector Ġin Ġmin .. max ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblocks Ġ+= Ġthis . getBlock ( vector ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġblocks ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġ[ BlockState ] Ġin Ġ[ location ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlocation ĠLocation ĊĠĠĠĠ Ġ* Ġ@ param Ġblock State ĠBlock ĠState ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Block ( location : ĠVector 3 i , Ġblock State : ĠBlock State ) Ġ= Ġthis . set Block ( location , Ġblock State , Ġnull ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġ[ BlockState ] Ġin Ġ[ location ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlocation ĠLocation ĊĠĠĠĠ Ġ* Ġ@ param Ġblock State ĠBlock ĠState ĊĠĠĠĠ Ġ* Ġ@ param Ġsource ĠSource Ġof Ġthe Ġblock Ġchange . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Block ( location : ĠVector 3 i , Ġblock State : ĠBlock State , Ġsource : ĠSource ?) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġall Ġblocks Ġin Ġselected Ġlocation Ġto Ġ[ block State ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfrom ĠFrom Ġlocation ĊĠĠĠĠ Ġ* Ġ@ param Ġto ĠTo Ġlocation . ĊĠĠĠĠ Ġ* Ġ@ param Ġblock State ĠBlock ĠState ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Blocks ( from : ĠVector 3 i , Ġto : ĠVector 3 i , Ġblock State : ĠBlock State ) Ġ= Ġthis . set Blocks ( from , Ġto , Ġblock State , Ġnull ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġall Ġblocks Ġin Ġselected Ġlocation Ġto Ġ[ block State ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfrom ĠFrom Ġlocation ĊĠĠĠĠ Ġ* Ġ@ param Ġto ĠTo Ġlocation . ĊĠĠĠĠ Ġ* Ġ@ param Ġblock State ĠBlock ĠState ĊĠĠĠĠ Ġ* Ġ@ param Ġsource ĠSource Ġof Ġthe Ġblock Ġchange . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Blocks ( from : ĠVector 3 i , Ġto : ĠVector 3 i , Ġblock State : ĠBlock State , Ġsource : ĠSource ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġfrom . min ( to ) ĊĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġfrom . max ( to ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( vector Ġin Ġmin .. max ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set Block ( vector , Ġblock State , Ġsource ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġall Ġblocks Ġin Ġselected Ġlocation Ġto Ġ[ BlockState ] Ġsupplied Ġby Ġ[ state Supplier ] ĊĠĠĠĠ Ġ* Ġfor Ġeach Ġ[ Vector 3 i ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfrom ĠFrom Ġlocation ĊĠĠĠĠ Ġ* Ġ@ param Ġto ĠTo Ġlocation . ĊĠĠĠĠ Ġ* Ġ@ param Ġstate Supplier Ġ[ BlockState ] Ġsupplier . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Blocks ( from : ĠVector 3 i , Ġto : ĠVector 3 i , Ġstate Supplier : Ġ( BlockState , ĠVector 3 i ) Ġ-> ĠBlock State ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set Blocks ( from , Ġto , Ġnull , Ġstate Supplier ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġall Ġblocks Ġin Ġselected Ġlocation Ġto Ġ[ BlockState ] Ġsupplied Ġby Ġ[ state Supplier ] ĊĠĠĠĠ Ġ* Ġfor Ġeach Ġ[ Vector 3 i ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfrom ĠFrom Ġlocation ĊĠĠĠĠ Ġ* Ġ@ param Ġto ĠTo Ġlocation . ĊĠĠĠĠ Ġ* Ġ@ param Ġstate Supplier Ġ[ BlockState ] Ġsupplier . ĊĠĠĠĠ Ġ* Ġ@ param Ġsource ĠSource Ġof Ġthe Ġblock Ġchange . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Blocks ( from : ĠVector 3 i , Ġto : ĠVector 3 i , Ġsource : ĠSource ?, Ġstate Supplier : Ġ( BlockState , ĠVector 3 i ) Ġ-> ĠBlock State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġfrom . min ( to ) ĊĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġfrom . max ( to ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( vector Ġin Ġmin .. max ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set Block ( vector , Ġstate Supplier ( this . getBlock ( vector ), Ġvector ), Ġsource ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSelect s Ġa Ġregion Ġfrom Ġlocation Ġ[ from ] Ġto Ġlocation Ġ[ to ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfrom ĠFrom Ġlocation ĊĠĠĠĠ Ġ* Ġ@ param Ġto ĠTo Ġlocation ĊĠĠĠĠ Ġ* Ġ@ return ĠSelection Ġ[ from ] Ġto Ġ[ to ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġselect ( from : ĠVector 3 d , Ġto : ĠVector 3 d ): ĠSelection Ġ= ĠSelection ( this , Ġfrom , Ġto ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġ[ World ] Ġlocation Ġof Ġprovided Ġ[ location ] ĊĠĠĠĠ Ġ* Ġ( this Ġmethod Ġonly Ġapplies Ġthe Ġoffsets Ġto Ġthe Ġ[ location ]). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ World ] Ġlocation Ġof Ġprovided Ġ[ location ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget World Location ( location : ĠLocation < Extent >): ĠLocation < World > Ċ }