package Ġnet . cy dh ra . tech n ocracy . foundation . pipes . types Ċ Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . pipes . Filtered Pipe Type Graph Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . pipes . Wrapped Block Pos Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . tile entity . TileEntity Pipe Ċ import Ġnet . minecraft . item . ItemStack Ċ import Ġnet . minecraft . tile entity . TileEntity Ċ import Ġnet . minecraft . util . Enum Facing Ċ import Ġnet . minecraft . world . World Ċ import Ġnet . minecraftforge . items . I Item Handler Ċ import Ġorg . j gr ap ht . traverse . Closest First Iterator ĊĊ Ċ object ĠItem Pipe Handler Ġ: ĠIP ipe Handler Ġ{ ĊĠĠĠ Ġoverride Ġval Ġtype : ĠPipe Type ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠPipe Type . ITEM ĊĊĠĠĠ Ġoverride Ġfun Ġhandle ( world : ĠWorld , ĠcurrentNode : ĠWr apped Block Pos , Ġextraction Pipe : ĠTile Entity Pipe , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextraction TileEntity : ĠTile Entity , Ġextraction Facing : ĠEnum Facing , Ġgraph : ĠFilter ed Pipe Type Graph ): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= ĠClose st First Iterator ( graph , ĠcurrentNode ) ĊĊĠĠĠĠĠĠĠ Ġ// output Ġshould Ġnot Ġbe Ġsplit Ġequal Ġto Ġall Ġinputs , Ġjust Ġfind Ġthe Ġbest Ġexit Ġnode ĊĠĠĠĠĠĠĠ Ġfor Ġ( node Ġin Ġiterator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! node . has IO ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinputs Ġ= Ġnode . getInput Fac ings ( type , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( input Side Ġin Ġinputs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node Ġ== ĠcurrentNode Ġ&& Ġextraction Facing Ġ== Ġinput Side ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpipe In Ġ= Ġworld . get TileEntity ( node . pos ) Ġas ĠTile Entity Pipe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtile In Ġ= Ġworld . get TileEntity ( node . pos . offset ( input Side )) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extract ( extraction Pipe , Ġpipe In , Ġextraction TileEntity , Ġtile In , Ġextraction Facing , Ġinput Side )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO Ġtimeout ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" found Ġoutput ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġextract ( pipe In : ĠTile Entity Pipe , Ġpipe Out : ĠTile Entity Pipe , Ġtile In : ĠTile Entity , Ġtile Out : ĠTile Entity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfacing In : ĠEnum Facing , Ġfacing Out : ĠEnum Facing ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcap In Ġ= Ġtile In . get Capability ( type . capability !! , Ġfacing In . op pos ite ) ĊĠĠĠĠĠĠĠ Ġval Ġcap Out Ġ= Ġtile Out . get Capability ( type . capability !! , Ġfacing Out . op pos ite ) ĊĊĠĠĠĠĠĠĠ Ġval Ġhandler In Ġ= Ġcap In Ġas ĠI Item Handler ĊĠĠĠĠĠĠĠ Ġval Ġhandler Out Ġ= Ġcap Out Ġas ĠI Item Handler ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( slot In Ġin Ġ 0 Ġuntil Ġhandler In . slots ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// todo Ġlimit Ġitem Ġtransfer Ġrate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// todo Ġitem Ġin out / output Ġfiltering ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlimit Ġ= Ġ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstack In Ġ= Ġhandler In . extract Item ( slot In , Ġlimit , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stack In Ġ!= ĠItemStack . EMPTY ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmax Item Output Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( slot Out Ġin Ġ 0 Ġuntil Ġhandler Out . slots ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Out Ġ= Ġhandler Out . insert Item ( slot Out , Ġstack In , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stack Out . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Item Output Ġ+= Ġstack In . count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Item Output Ġ+= Ġstack In . count Ġ- Ġstack Out . count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack In Ġ= Ġstack Out ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( max Item Output Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack In Ġ= Ġhandler In . extract Item ( slot In , Ġmax Item Output , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( slot Out Ġin Ġ 0 Ġuntil Ġhandler Out . slots ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack In Ġ= Ġhandler Out . insert Item ( slot Out , Ġstack In , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stack In . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* for Ġ( slot Out Ġin Ġ 0 Ġuntil Ġhandler Out . slots ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Out Ġ= Ġhandler Out . insert Item ( slot Out , Ġstack In , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stack Out . isEmpty Ġ|| Ġstack In . count Ġ!= Ġstack Out . count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stack Out . isEmpty ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler Out . insert Item ( slot Out , Ġstack In , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Ġ= ĠMath . min ( limit , Ġstack Out . count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack In Ġ= Ġhandler In . extract Item ( slot In , Ġlimit , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler Out . insert Item ( slot Out , Ġstack In , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġif Ġ( stack Out . isEmpty Ġ|| Ġstack In . count Ġ!= Ġstack Out . count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stack Out . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack In Ġ= Ġhandler In . extract Item ( slot In , Ġlimit , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler Out . insert Item ( slot Out , Ġstack In , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Ġ= ĠMath . min ( limit , Ġstack Out . count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack In Ġ= Ġhandler In . extract Item ( slot In , Ġlimit , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler Out . insert Item ( slot Out , Ġstack In , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* for Ġ( slot Out Ġin Ġ 0 Ġuntil Ġhandler Out . slots ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Out Ġ= Ġhandler Out . insert Item ( slot Out , Ġstack In , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stack Out . isEmpty Ġ|| Ġstack In . count Ġ!= Ġstack Out . count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stack Out . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack In Ġ= Ġhandler In . extract Item ( slot In , Ġlimit , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler Out . insert Item ( slot Out , Ġstack In , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Ġ= ĠMath . min ( limit , Ġstack Out . count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack In Ġ= Ġhandler In . extract Item ( slot In , Ġlimit , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler Out . insert Item ( slot Out , Ġstack In , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ }