package Ġorg . server ct . par rot . par ro tx . search . location Ċ Ċ import Ġorg . bukkit . Location Ċ import Ġorg . bukkit . block . Block Ċ import Ġorg . bukkit . block . Block Face Ċ import Ġorg . server ct . par rot . par ro tx . search . api . corre ctor . Corre ctor Ċ import Ġtab ool ib . common . platform . function . submit Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ Ċ object ĠSurface Corre ctor Ġ: ĠCorre ctor < Location > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġheight s Ġ= Ġ 0 Ġuntil Ġ 2 5 5 ĊĊĠĠĠ Ġoverride Ġfun Ġcorrect ( value : ĠLocation ): ĠCompletableFuture < Location > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfuture Ġ= ĠCompletableFuture < Location >() ĊĠĠĠĠĠĠĠ Ġif Ġ( value . world Ġ== Ġnull Ġ|| Ġvalue . block Y Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfuture . complete Exception ally ( IllegalArgumentException (" Invalid Ġlocation : Ġ$ value ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfuture ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsubmit ( async Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġblock Ġ= Ġvalue . block ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( block . y Ġin Ġheight s Ġ&& Ġ! is Surface ( block )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Ġ= Ġcloser ( block ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfuture . complete ( block . location ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfuture ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Surface ( block : ĠBlock ): ĠBoolean Ġ= Ġ! block . isEmpty Ġ&& Ġblock . get Relative ( Block Face . UP ). isEmpty ĊĊĠĠĠ Ġprivate Ġfun Ġcloser ( block : ĠBlock ): ĠBlock Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġblock . isEmpty Ġ-> Ġblock . get Relative ( Block Face . DOWN ) ĊĠĠĠĠĠĠĠ Ġblock . is Liquid Ġ-> Ġblock . get Relative ( Block Face . UP ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġblock ĊĠĠĠ Ġ} Ċ Ċ }