package Ġcom . the 9 ground s . ae add itions . part . gas Ċ Ċ import Ġapp eng . api . config . Action able Ċ import Ġapp eng . api . config . Security Permissions Ċ import Ġapp eng . api . parts . IP art Ċ import Ġapp eng . api . parts . IP art Collision Helper Ċ import Ġapp eng . api . parts . IP art Model Ċ import Ġapp eng . api . util . A EC able Type Ċ import Ġcom . the 9 ground s . ae add itions . integration . Integration Ċ import Ġcom . the 9 ground s . ae add itions . integration . me kan ism . gas . Capabilities Ċ import Ġcom . the 9 ground s . ae add itions . integration . me kan ism . gas . Me kan ism Gas Ċ import Ġcom . the 9 ground s . ae add itions . models . Part Models Ċ import Ġcom . the 9 ground s . ae add itions . util .* Ċ import Ġme kan ism . api . gas . Gas Ċ import Ġme kan ism . api . gas . Gas Stack Ċ import Ġme kan ism . api . gas . IG as Handler Ċ import Ġme kan ism . api . gas . IT ube Connection Ċ import Ġnet . minecraft . entity . player . Entity Player Ċ import Ġnet . minecraft . util . Enum Facing Ċ import Ġnet . minecraft . util . Enum Hand Ċ import Ġnet . minecraft . util . math . Vec 3 d Ċ import Ġnet . minecraftforge . common . capabilities . Capability Ċ import Ġnet . minecraftforge . fluid s . Fluid Ċ import Ġnet . minecraftforge . fluid s . Fluid Stack Ċ import Ġnet . minecraftforge . fml . common . Optional Ċ import Ġkotlin . math . min Ċ Ċ @ Optional . Interface List ( value Ġ= Ġ[ ĊĠĠĠ ĠOptional . Interface ( iface Ġ= Ġ" me kan ism . api . gas . IG as Handler ", Ġmod id Ġ= Ġ" Me kan ism API | gas ", Ġstrip refs Ġ= Ġtrue ), ĊĠĠĠ ĠOptional . Interface ( iface Ġ= Ġ" me kan ism . api . gas . IT ube Connection ", Ġmod id Ġ= Ġ" Me kan ism API | gas ", Ġstrip refs Ġ= Ġtrue ) Ċ ]) Ċ class ĠPart Gas Import : ĠPart Gas IO (), ĠI Gas Handler , ĠIT ube Connection Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Cable Connection Length ( ae Cable Type : ĠA EC able Type ? Ġ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 5 . 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Boxes ( b ch : ĠI Part Collision Helper ) Ġ{ ĊĠĠĠĠĠĠĠ Ġb ch . addBox ( 4 . 0 , Ġ 4 . 0 , Ġ 1 4 . 0 , Ġ 1 2 . 0 , Ġ 1 2 . 0 , Ġ 1 6 . 0 ) ĊĠĠĠĠĠĠĠ Ġb ch . addBox ( 5 . 0 , Ġ 5 . 0 , Ġ 1 3 . 0 , Ġ 1 1 . 0 , Ġ 1 1 . 0 , Ġ 1 4 . 0 ) ĊĠĠĠĠĠĠĠ Ġb ch . addBox ( 6 . 0 , Ġ 6 . 0 , Ġ 1 2 . 0 , Ġ 1 0 . 0 , Ġ 1 0 . 0 , Ġ 1 3 . 0 ) ĊĠĠĠĠĠĠĠ Ġb ch . addBox ( 6 . 0 , Ġ 6 . 0 , Ġ 1 1 . 0 , Ġ 1 0 . 0 , Ġ 1 0 . 0 , Ġ 1 2 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Power Usage (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 1 . 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activate ( player : ĠEntity Player ?, Ġenum Hand : ĠEnum Hand ?, Ġpos : ĠVec 3 d ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPermission Util . has Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSecurity Permissions . BUILD , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġas ĠI Part ĊĠĠĠĠĠĠĠ Ġ) Ġ&& Ġsuper . on Activate ( player , Ġenum Hand , Ġpos ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetStatic Models (): ĠI Part Model Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( isActive Ġ&& Ġis Power ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPart Models . IMPORT _ HAS _ CHANNEL ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( is Power ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPart Models . IMPORT _ ON ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPart Models . IMPORT _ OFF ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġis Me kan ism Enabled Ġ= ĠIntegration . Mods . ME KAN IS MG AS . isEnabled ĊĊĠĠĠ Ġoverride Ġfun Ġdo Work ( rate : ĠInt , Ġticks Since Last Call : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ((! is Me kan ism Enabled ) Ġ|| Ġfacing Gas Tank Ġ== Ġnull Ġ|| Ġ! isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġempty Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġactive Filters Ġ= Ġactive Filters ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( fluid Ġin Ġactive Filters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fluid Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fill To Network ( fluid , Ġrate Ġ* Ġticks Since Last Call )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġempty Ġ&& Ġfill To Network ( null , Ġrate Ġ* Ġticks Since Last Call ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Optional . Method ( mod id Ġ= Ġ" Me kan ism API | gas ") ĊĠĠĠ Ġfun Ġfill To Network ( fluid : ĠFluid ?, Ġto Dr ain : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdr ained : ĠG as Stack ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġfacing Tank Ġ= Ġfacing Gas Tank ĊĠĠĠĠĠĠĠ Ġval Ġside Ġ= Ġfacing ĊĊĠĠĠĠĠĠĠ Ġval Ġgas Type Ġ= Ġif Ġ( fluid Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgas Stack Ġ= ĠG as Util . get Gas Stack ( Fluid Stack ( fluid , Ġto Dr ain )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgas Stack ?. gas ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( gas Type Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdr ained Ġ= Ġfacing Tank . draw Gas ( side . op pos ite , Ġto Dr ain , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( facing Tank . can Draw Gas ( side . op pos ite , Ġgas Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdr ained Ġ= Ġfacing Tank . draw Gas ( side . op pos ite , Ġto Dr ain , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( dr ained Ġ== Ġnull Ġ|| Ġdr ained . amount Ġ<= Ġ 0 Ġ|| Ġdr ained . gas Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġto Fill Ġ= ĠStorage Channels . G AS !!. create Stack ( dr ained ) Ġ?: Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġnot Inject ed Ġ= Ġinject Gas ( to Fill , ĠAction able . MOD UL ATE ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( not Inject ed Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ( to Fill . stack Size Ġ- Ġnot Inject ed . stack Size ). toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( amount Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfacing Tank . draw Gas ( side . op pos ite , Ġamount , Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgas Stack Ġ= Ġto Fill . gas Stack ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gas Stack Ġis ĠG as Stack ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfacing Tank . draw Gas ( side . op pos ite , Ġto Dr ain , Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Optional . Method ( mod id Ġ= Ġ" Me kan ism API | gas ") ĊĠĠĠ Ġoverride Ġfun Ġreceive Gas ( side : ĠEnum Facing ?, Ġstack : ĠG as Stack ?, Ġdo Transfer : ĠBoolean ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( stack Ġ== Ġnull Ġ|| Ġstack . amount Ġ<= Ġ 0 Ġ|| Ġ! can Receive Gas ( side , Ġstack . gas ) Ġ|| Ġ! isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġif Ġ( do Transfer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAction able . MOD UL ATE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAction able . SI MUL ATE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWork around Ġto Ġfix Ġduplicate Ġgas Ġwhen Ġthe Ġgas Ġtank Ġauto Ġe ject s ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġmin ( stack . amount , Ġmax Amount To Transfer ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgas Stack Ġ= ĠStorage Channels . G AS !!. create Stack ( Gas Stack ( stack . gas , Ġamount )) ĊĊĠĠĠĠĠĠĠ Ġval Ġnot Inject ed Ġ= Ġinject Gas ( gas Stack , Ġaction ) Ġ?: Ġreturn Ġamount ĊĊĠĠĠĠĠĠĠ Ġreturn Ġamount Ġ- Ġnot Inject ed . stack Size . toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Optional . Method ( mod id Ġ= Ġ" Me kan ism API | gas ") ĊĠĠĠ Ġoverride Ġfun Ġdraw Gas ( p 0 : ĠEnum Facing ?, Ġp 1 : ĠInt , Ġp 2 : ĠBoolean ): ĠG as Stack ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Optional . Method ( mod id Ġ= Ġ" Me kan ism API | gas ") ĊĠĠĠ Ġoverride Ġfun Ġcan Receive Gas ( side : ĠEnum Facing ?, Ġgas : ĠG as ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfluid Ġ= ĠMe kan ism Gas . fluid Gas . get ( gas ) ĊĊĠĠĠĠĠĠĠ Ġvar ĠisEmpty Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( filter Ġin Ġfilter Fluid s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisEmpty Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filter Ġ== Ġfluid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠisEmpty ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Optional . Method ( mod id Ġ= Ġ" Me kan ism API | gas ") ĊĠĠĠ Ġoverride Ġfun Ġcan Draw Gas ( p 0 : ĠEnum Facing ?, Ġp 1 : ĠG as ?): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ@ Optional . Method ( mod id Ġ= Ġ" Me kan ism API | gas ") ĊĠĠĠ Ġoverride Ġfun Ġhas Capability ( capability Class : ĠCap ability < *> ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( capability Class Ġ== ĠCap abilities . G AS _ HANDLER _ CAP ABILITY Ġ|| Ġcapability Class Ġ== ĠCap abilities . T UBE _ CONNECTION _ CAP ABILITY ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Optional . Method ( mod id Ġ= Ġ" Me kan ism API | gas ") ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny ?> Ġget Capability ( capability Class : ĠCap ability < T >? ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( capability Class Ġ== ĠCap abilities . G AS _ HANDLER _ CAP ABILITY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCap abilities . G AS _ HANDLER _ CAP ABILITY . cast ( this ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( capability Class Ġ== ĠCap abilities . T UBE _ CONNECTION _ CAP ABILITY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCap abilities . T UBE _ CONNECTION _ CAP ABILITY . cast ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . get Capability ( capability Class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcan Tube Connect ( enum Facing : ĠEnum Facing ?): ĠBoolean Ġ= Ġif Ġ( enum Facing Ġ== Ġnull ) Ġfalse Ġelse Ġenum Facing Ġ== Ġthis . side . facing Ċ }