package Ġca . all an wang . minecraft . toolbox . node Ċ Ċ import Ġca . all an wang . minecraft . toolbox . base . Command Context Ċ import Ġca . all an wang . minecraft . toolbox . base . M ct Node Ċ import Ġca . all an wang . minecraft . toolbox . base . Plugin Scope Ċ import Ġca . all an wang . minecraft . toolbox . base . Tab Complete Context Ċ import Ġca . all an wang . minecraft . toolbox . base . block Below Ċ import Ġca . all an wang . minecraft . toolbox . core . Bounding Prism Ċ import Ġca . all an wang . minecraft . toolbox . core . max Ċ import Ġca . all an wang . minecraft . toolbox . core . until First Null Ċ import Ġca . all an wang . minecraft . toolbox . helper . T erraform Helper Ċ import Ġorg . bukkit . Material Ċ import Ġorg . bukkit . block . Block Ċ import Ġjava . awt . Point Ċ import Ġjavax . inject . Inject Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . min Ċ Ċ @ Plugin Scope Ċ class ĠTerraform Ġ@ Inject Ġinternal Ġconstructor ( ĊĠĠĠ Ġup : ĠUp , Ġdown : ĠDown , Ġfill : ĠFill , Ġclear : ĠClear Ċ ) Ġ: ĠM ct Node ( name Ġ= Ġ" terraform ") Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġchildren ( up , Ġdown , Ġfill , Ġclear ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Plugin Scope ĊĠĠĠ Ġclass ĠUp Ġ@ Inject Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġterraform Helper : ĠTerraform Helper ĊĠĠĠ Ġ) Ġ: ĠM ct Node ( name Ġ= Ġ" up ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġhelp : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Remove Ġblocks Ġabove Ġpath Ġup Ġto Ġspecified Ġheight ." ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠTab Complete Context . tab Complete (): ĠList < String > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" ~ ") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun ĠCommand Context . command () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Point Sequence Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġterraform Helper Ġ= Ġterraform Helper ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Ġ= ĠMaterial . AIR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Plugin Scope ĊĠĠĠ Ġclass ĠDown Ġ@ Inject Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġterraform Helper : ĠTerraform Helper ĊĠĠĠ Ġ) Ġ: ĠM ct Node ( name Ġ= Ġ" down ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġhelp : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Remove Ġblocks Ġbelow Ġpath Ġdown Ġto Ġspecified Ġdepth ." ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠTab Complete Context . tab Complete (): ĠList < String > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" ~ ") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun ĠCommand Context . command () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Point Sequence Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġterraform Helper Ġ= Ġterraform Helper ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Ġ= ĠMaterial . AIR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Plugin Scope ĊĠĠĠ Ġclass ĠFill Ġ@ Inject Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġterraform Helper : ĠTerraform Helper ĊĠĠĠ Ġ) Ġ: ĠM ct Node ( name Ġ= Ġ" fill ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġhelp : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Fill Ġblocks Ġinside Ġpath Ġdown Ġto Ġspecified Ġdepth , Ġor Ġwith Ġprovided Ġcoordinates " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠTab Complete Context . tab Complete (): ĠList < String > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" ~ ", Ġ" x 1 , y 1 , z 1 Ġx 2 , y 2 , z 2 Ġ... ") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun ĠCommand Context . command () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Point Sequence ( up Ġ= Ġfalse , Ġterraform Helper Ġ= Ġterraform Helper ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Ġ= ĠMaterial . DIR T ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Plugin Scope ĊĠĠĠ Ġclass ĠClear Ġ@ Inject Ġinternal Ġconstructor ( ĊĠĠĠ Ġ) Ġ: ĠM ct Node ( name Ġ= Ġ" clear ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġhelp : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Fill Ġblocks Ġinside Ġprovided Ġcoordinates " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠTab Complete Context . tab Complete (): ĠList < String > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" x 1 , y 1 , z 1 Ġx 2 , y 2 , z 2 Ġ... ") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun ĠCommand Context . command () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Point Sequence Prism Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Ġ= ĠMaterial . AIR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġconst Ġval ĠMAX _ HEIGHT Ġ= Ġ 5 0 Ċ private Ġconst Ġval ĠMAX _ AXIS _ LENGTH Ġ= Ġ 1 0 0 Ċ Ċ // ĠMax Ġdistance Ġfrom Ġplayer Ġto Ġterraform Ġlocation Ċ private Ġconst Ġval ĠT ERR A FORM _ MAX _ REMOTE _ DISTANCE Ġ= Ġ 5 0 Ċ Ċ private Ġsuspend Ġfun ĠCommand Context . height ( name : ĠString Ġ= Ġ" height "): ĠInt Ġ{ ĊĠĠĠ Ġval Ġheight Ġ= Ġargs . first OrNull ()?. toInt OrNull () ĊĠĠĠĠĠĠĠ Ġ?: Ġfail (" Please Ġsupply Ġ$ name Ġ( max Ġ$ MAX _ HEIGHT )") ĊĠĠĠ Ġif Ġ( height Ġ<= Ġ 0 Ġ|| Ġheight Ġ> ĠMAX _ HEIGHT ) Ġfail ( ĊĠĠĠĠĠĠĠ Ġ"$ name Ġmust Ġbe Ġpositive ; Ġmax Ġ$ MAX _ HEIGHT " ĊĠĠĠ Ġ) ĊĠĠĠ Ġreturn Ġheight Ċ } Ċ Ċ private Ġsuspend Ġfun ĠCommand Context . inner Path Points ( terraform Helper : ĠTerraform Helper ): ĠList < Point > Ġ{ ĊĠĠĠ Ġval Ġstart Block Ġ= Ġsender . block Below ĊĠĠĠ Ġlogger . info Ġ{ Ġ" On Ġ${ start Block . type }" Ġ} ĊĠĠĠ Ġreturn Ġterraform Helper . points In Polygon ( ĊĠĠĠĠĠĠĠ Ġstart Block , ĊĠĠĠĠĠĠĠ ĠmaxSize Ġ= ĠMAX _ AXIS _ LENGTH ĊĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ?: Ġfail ( build String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Not Ġstand ing Ġon Ġvalid Ġpath . Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Make Ġsure Ġblocks Ġform Ġa Ġpolygon , Ġand Ġthat Ġeach Ġblock Ġin Ġthe Ġpath Ġis Ġadjacent Ġto Ġexactly Ġ 2 Ġblocks . Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Max Ġpath Ġsize Ġis Ġ$ MAX _ AXIS _ LENGTH . Ġ") ĊĠĠĠĠĠĠĠ Ġ}) Ċ } Ċ Ċ /** Ċ Ġ* ĠCollect Ġpoints Ġin Ġa Ġ 3 D Ġpr ism Ġby Ġproviding Ġa Ġlist Ġof Ġxyz Ġpoints Ċ Ġ*/ Ċ private Ġsuspend Ġfun ĠCommand Context . prism Points (): ĠBounding Prism Ġ{ ĊĠĠĠ Ġval Ġnumbers Ġ= Ġsequence Ġ{ ĊĠĠĠĠĠĠĠ Ġargs . forEach Ġ{ Ġarg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarg . split ("," ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield ( it . trim (). toInt OrNull ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. until First Null (). toList () ĊĊĠĠĠ Ġif Ġ( numbers . size Ġ% Ġ 3 Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfail (" Points Ġmust Ġbe Ġprovided Ġin Ġgroups Ġof Ġ 3 Ġ( x , Ġy , Ġz )") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġpoints Ġ= Ġnumbers . chunk ed ( 3 ). map Ġ{ Ġ( x , Ġy , Ġz ) Ġ-> ĠTrip le ( x , Ġy , Ġz ) Ġ} ĊĊĠĠĠ Ġif Ġ( points . size Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfail (" Must Ġhave Ġat Ġleast Ġ 2 Ġpoints ; Ġreceived Ġ${ points . size }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġ( first X , Ġfirst Y , Ġfirst Z ) Ġ= Ġpoints . first () ĊĠĠĠ Ġval Ġbounding Prism Ġ= ĠBounding Prism ( first X , Ġfirst Y , Ġfirst Z ) ĊĠĠĠ Ġpoints . forEach Ġ{ Ġ( x , Ġy , Ġz ) Ġ-> Ġbounding Prism . bind ( x , Ġy , Ġz ) Ġ} ĊĠĠĠ Ġreturn Ġbounding Prism Ċ } Ċ Ċ /** Ċ Ġ* ĠTerraform Ġbased Ġon Ġpath Ġthat Ġplayer Ġis Ġstand ing Ġon Ċ Ġ*/ Ċ private Ġsuspend Ġfun ĠCommand Context . inner Point Sequence Path ( ĊĠĠĠ Ġup : ĠBoolean , ĊĠĠĠ Ġterraform Helper : ĠTerraform Helper , ĊĠĠĠ Ġaction : Ġ( Block ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġheight Ġ= Ġheight ( if Ġ( up ) Ġ" height " Ġelse Ġ" depth ") ĊĠĠĠ Ġval Ġpoints Ġ= Ġinner Path Points ( terraform Helper ) ĊĠĠĠ Ġval Ġworld Ġ= Ġsender . world ĊĠĠĠ Ġ// ĠRange Ġstarts Ġat Ġ- 2 Ġbecause Ġground Ġlevel Ġis Ġbelow Ġthe Ġpath , Ġwhich Ġis Ġbelow Ġthe Ġplayer . ĊĠĠĠ Ġval Ġy Range Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( up ) Ġ(( sender . location . block Y Ġ- Ġ 2 ) .. ( sender . location . block Y Ġ- Ġ 2 Ġ+ Ġheight )) ĊĠĠĠĠĠĠĠ Ġelse Ġ(( sender . location . block Y Ġ- Ġ 2 ) Ġdown To Ġ( sender . location . block Y Ġ- Ġ 2 Ġ- Ġheight )) ĊĊĠĠĠ Ġecho (" T erraform ing Ġ${ points . size Ġ* Ġ( y Range . last Ġ- Ġy Range . first )} Ġblocks ") ĊĊĠĠĠ Ġy Range . forEach Ġ{ Ġy Ġ-> ĊĠĠĠĠĠĠĠ Ġpoints . forEach Ġ{ Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Ġ= Ġworld . getBlock At ( p . x , Ġy , Ġp . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( block ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠTerraform Ġbased Ġon Ġprovided Ġpoints Ċ Ġ*/ Ċ private Ġsuspend Ġfun ĠCommand Context . inner Point Sequence Prism ( action : Ġ( Block ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġbounding Prism Ġ= Ġpr ism Points () ĊĠĠĠ Ġval Ġworld Ġ= Ġsender . world ĊĊĠĠĠ Ġif Ġ( bounding Prism . maxSize Ġ> ĠMAX _ AXIS _ LENGTH ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfail (" T erraform Ġsize Ġis Ġtoo Ġbig . ĠMax Ġaxis Ġlength Ġis Ġ$ MAX _ AXIS _ LENGTH , Ġcurrently Ġ${ bounding Prism . size X } Ġx Ġ${ bounding Prism . size Y } Ġx Ġ${ bounding Prism . size Z }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmin Abs ( ref : ĠInt , Ġmin : ĠInt , Ġmax : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġmin ( abs ( ref Ġ- Ġmin ), Ġabs ( ref Ġ- Ġmax )) ĊĊĠĠĠ Ġval Ġdistance To Prism Ġ= Ġmax ( ĊĠĠĠĠĠĠĠ Ġmin Abs ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender . location . block X , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbounding Prism . min X , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbounding Prism . max X ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġmin Abs ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender . location . block Y , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbounding Prism . min Y , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbounding Prism . max Y ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġmin Abs ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender . location . block Z , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbounding Prism . min Z , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbounding Prism . max Z ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġif Ġ( distance To Prism Ġ> ĠT ERR A FORM _ MAX _ REMOTE _ DISTANCE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfail (" You Ġare Ġtoo Ġfar Ġaway Ġfrom Ġthe Ġterraform Ġlocation . ĠPlease Ġmove Ġwithin Ġ$ T ERR A FORM _ MAX _ REMOTE _ DISTANCE Ġblocks ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġecho (" T erraform ing Ġ${ bounding Prism . size X Ġ* Ġbounding Prism . size Y Ġ* Ġbounding Prism . size Z } Ġblocks ") ĊĊĠĠĠ Ġ( bounding Prism . min X .. bounding Prism . max X ). forEach Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠ Ġ( bounding Prism . min Y .. bounding Prism . max Y ). forEach Ġ{ Ġy Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( bounding Prism . min Z .. bounding Prism . max Z ). forEach Ġ{ Ġz Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Ġ= Ġworld . getBlock At ( x , Ġy , Ġz ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( block ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġsuspend Ġfun ĠCommand Context . inner Point Sequence ( ĊĠĠĠ Ġup : ĠBoolean , ĊĠĠĠ Ġterraform Helper : ĠTerraform Helper , ĊĠĠĠ Ġaction : Ġ( Block ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĊĠĠĠ Ġif Ġ( args . size Ġ< Ġ 3 Ġ&& Ġargs . first OrNull ()?. toInt OrNull () Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġinner Point Sequence Path ( up , Ġterraform Helper , Ġaction ) ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġinner Point Sequence Prism ( action ) Ċ }