@ file : Suppress (" Un stable Api Usage ") Ċ Ċ package Ġdev . ad ire lle . adic r after . cr after . impl Ċ Ċ import Ġdev . ad ire lle . adic r after . cr after . api . Cr after Ċ import Ġdev . ad ire lle . adic r after . cr after . api . recipe . Ingredient Ċ import Ġdev . ad ire lle . adic r after . cr after . api . recipe . Item Ingredient Ċ import Ġdev . ad ire lle . adic r after . cr after . api . storage . Storage Provider Ċ import Ġdev . ad ire lle . adic r after . utils . with Nested Transaction Ċ import Ġnet . fabric mc . fabric . api . transfer . v 1 . item . Item Variant Ċ import Ġnet . fabric mc . fabric . api . transfer . v 1 . transaction . Transaction Context Ċ import Ġnet . fabric mc . fabric . api . transfer . v 1 . transaction . Transaction Context . Outer Close Callback Ċ import Ġnet . fabric mc . fabric . api . transfer . v 1 . transaction . Transaction Context . Result Ċ import Ġnet . minecraft . item . Item Convert ible Ċ import Ġjava . util .* Ċ import Ġkotlin . math . min Ċ Ċ class ĠCr after Impl ( ĊĠĠĠ Ġprivate Ġval Ġresource : ĠItem Variant , ĊĠĠĠ Ġprivate Ġval Ġamount : ĠLong , ĊĠĠĠ Ġprivate Ġval Ġingredients : ĠIterable < Ingredient <* >>, ĊĠĠĠ Ġprivate Ġval Ġstorage Provider : ĠStorage Provider , ĊĠĠĠ Ġprivate Ġval Ġlistener : ĠCr after . Listener Ċ ) Ġ: ĠCr after , ĠO uter Close Callback Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġis Resource Blank () Ġ= Ġresource . isBlank ĊĠĠĠ Ġoverride Ġfun ĠgetResource () Ġ= Ġresource ĊĠĠĠ Ġoverride Ġfun Ġget Amount () Ġ= Ġamount ĊĠĠĠ Ġoverride Ġfun Ġget Capacity () Ġ= Ġresource . item . max Count . to Long () ĊĊĠĠĠ Ġoverride Ġfun Ġfind Ingredient For ( item : ĠItem Convert ible ): ĠOptional < Item Ingredient > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreal Item Ġ= Ġitem . as Item () ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn ĠOptional . of Nullable ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġingredients . first OrNull Ġ{ Ġit . resource .` object ` Ġ== Ġreal Item Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠOptional < Item Ingredient > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġextract ( resource : ĠItem Variant , Ġmax Amount : ĠLong , Ġtx : ĠTransaction Context ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( resource . isBlank Ġ|| Ġmax Amount Ġ< Ġ 1 ) Ġreturn Ġ 0 L ĊĠĠĠĠĠĠĠ Ġval Ġavailable Ġ= Ġwith Nested Transaction ( tx ) Ġ{ Ġnested Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( exact , Ġcraft ed ) Ġ= Ġcraft Internal ( max Amount , Ġnested ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exact ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnested . commit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcraft ed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnested . abort () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcraft ed ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( available Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcraft Internal ( available , Ġtx ). second ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsimulate Extract ( resource : ĠItem Variant , Ġmax Amount : ĠLong , Ġtx : ĠTransaction Context ?): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( resource . isBlank Ġ|| Ġmax Amount Ġ< Ġ 1 ) Ġreturn Ġ 0 L ĊĠĠĠĠĠĠĠ Ġwith Nested Transaction ( tx ) Ġ{ Ġnested Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcraft Internal ( max Amount , Ġnested ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnested . abort () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult . second ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcraft Internal ( ĊĠĠĠĠĠĠĠ Ġmax Amount : ĠLong , ĊĠĠĠĠĠĠĠ Ġtx : ĠTransaction Context ĊĠĠĠ Ġ): ĠPair < Boolean , ĠLong > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax Batch s Ġ= Ġ( max Amount Ġ+ Ġamount Ġ- Ġ 1 ) Ġ/ Ġamount ĊĠĠĠĠĠĠĠ Ġvar Ġcraft ed Batch s Ġ= Ġmax Batch s ĊĠĠĠĠĠĠĠ Ġfor Ġ( ingredient Ġin Ġingredients ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextracted Ġ= Ġingredient . extract From ( storage Provider , Ġingredient . amount Ġ* Ġmax Batch s , Ġtx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcraft ed Batch s Ġ= Ġmin ( craft ed Batch s , Ġextracted Ġ/ Ġingredient . amount ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( craft ed Batch s Ġ== Ġ 0 L ) Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( craft ed Batch s Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx . add Outer Close Callback ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( craft ed Batch s Ġ== Ġmax Batch s , Ġamount Ġ* Ġcraft ed Batch s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġafter Outer Close ( result : ĠResult ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result . was Commit ted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Cr after Update () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ