package Ġcom . k ne el awk . w ired red stone . util Ċ Ċ import Ġcom . google . common . cache . Cache Builder Ċ import Ġcom . google . common . cache . Cache Loader Ċ import Ġcom . google . common . cache . Loading Cache Ċ import Ġnet . minecraft . util . math . Box Ċ import Ġnet . minecraft . util . math . Direction Ċ import Ġnet . minecraft . util . shape . Voxel Shape Ċ import Ġnet . minecraft . util . shape . Voxel Shapes Ċ import Ġjava . util .* Ċ Ċ object ĠBounding Box Utils Ġ{ ĊĠĠĠ Ġdata Ġclass ĠShape Key ( val Ġside : ĠDirection , Ġval Ġconnections : ĠU Byte ) ĊĊĠĠĠ Ġprivate Ġfun Ġget Wire Shape ( wire Width : ĠDouble , Ġwire Height : ĠDouble , Ġkey : ĠShape Key ): ĠV oxel Shape Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaxis Ġ= Ġkey . side . axis ĊĠĠĠĠĠĠĠ Ġval Ġconnections Ġ= Ġkey . connections ĊĊĠĠĠĠĠĠĠ Ġif Ġ( connections Ġ== Ġ 0 u . to U Byte ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠV oxel Shapes . cub oid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRotation Utils . rot ated Box ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey . side , ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 Ġ- Ġwire Width Ġ/ Ġ 3 2 . 0 , Ġ 0 . 0 , Ġ 0 . 5 Ġ- Ġwire Width Ġ/ Ġ 3 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 Ġ+ Ġwire Width Ġ/ Ġ 3 2 . 0 , Ġwire Height Ġ/ Ġ 1 6 . 0 , Ġ 0 . 5 Ġ+ Ġwire Width Ġ/ Ġ 3 2 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( do Z Neg , Ġz Neg End ) Ġ= Ġcalculate Connection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnections , Ġaxis , Ġwire Width , ĠDirection . NORTH , Ġwire Height , Ġ 0 . 0 , ĠDirection . Axis . Y , Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( do X Neg , Ġx Neg End ) Ġ= Ġcalculate Connection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnections , Ġaxis , Ġwire Width , ĠDirection . WEST , Ġwire Height , Ġ 0 . 0 , ĠDirection . Axis . X , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( do Z Pos , Ġz Pos End ) Ġ= Ġcalculate Connection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnections , Ġaxis , Ġwire Width , ĠDirection . SO UTH , Ġ 1 6 . 0 Ġ- Ġwire Height , Ġ 1 6 . 0 , ĠDirection . Axis . Y , Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( do X Pos , Ġx Pos End ) Ġ= Ġcalculate Connection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnections , Ġaxis , Ġwire Width , ĠDirection . EAST , Ġ 1 6 . 0 Ġ- Ġwire Height , Ġ 1 6 . 0 , ĠDirection . Axis . X , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġshape Ġ= ĠV oxel Shapes . empty () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( do X Neg Ġ|| Ġdo X Pos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape Ġ= ĠV oxel Shapes . cub oid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRotation Utils . rot ated Box ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey . side , ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Neg End Ġ/ Ġ 1 6 . 0 , Ġ 0 . 0 , Ġ 0 . 5 Ġ- Ġwire Width Ġ/ Ġ 3 2 . 0 , Ġx Pos End Ġ/ Ġ 1 6 . 0 , Ġwire Height Ġ/ Ġ 1 6 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 Ġ+ Ġwire Width Ġ/ Ġ 3 2 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( do Z Neg Ġ|| Ġdo Z Pos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape Ġ= ĠV oxel Shapes . union ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape , ĠV oxel Shapes . cub oid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRotation Utils . rot ated Box ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey . side , ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 Ġ- Ġwire Width Ġ/ Ġ 3 2 . 0 , Ġ 0 . 0 , Ġz Neg End Ġ/ Ġ 1 6 . 0 , Ġ 0 . 5 Ġ+ Ġwire Width Ġ/ Ġ 3 2 . 0 , Ġwire Height Ġ/ Ġ 1 6 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġz Pos End Ġ/ Ġ 1 6 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġshape ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Connection ( ĊĠĠĠĠĠĠĠ Ġconnections : ĠU Byte , Ġaxis : ĠDirection . Axis , Ġwire Width : ĠDouble , Ġcard inal : ĠDirection , Ġinternal End : ĠDouble , ĊĠĠĠĠĠĠĠ Ġexternal End : ĠDouble , Ġspecial Axis : ĠDirection . Axis , Ġaxis Is L arger : ĠBoolean ĊĠĠĠ Ġ): ĠPair < Boolean , ĠDouble > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Connection Utils . is Internal ( connections , Ġcard inal )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( true , Ġif Ġ(( axis Ġ== Ġspecial Axis ) Ġ== Ġaxis Is L arger ) Ġexternal End Ġelse Ġinternal End ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Connection Utils . is External ( connections , Ġcard inal ) Ġ|| ĠConnection Utils . is Corner ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnections , Ġcard inal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( true , Ġexternal End ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 8 f Ġ+ Ġif Ġ( card inal Ġ== ĠDirection . NORTH Ġ|| Ġcard inal Ġ== ĠDirection . WEST ) Ġ- wire Width Ġ/ Ġ 2 f Ġelse Ġwire Width Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Wire Outline Shapes ( wire Width : ĠDouble , Ġwire Height : ĠDouble ): ĠLoading Cache < Shape Key , ĠV oxel Shape > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCache Builder . newBuilder (). build ( Cache Loader . from Ġ{ Ġkey Ġ-> Ġget Wire Shape ( wire Width , Ġwire Height , Ġkey ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Rot ated Shapes ( base : ĠBox ): ĠEnum Map < Direction , ĠV oxel Shape > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠEnum Map < Direction , ĠV oxel Shape >( Direction :: class . java ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( dir Ġin ĠDirection . values ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ dir ] Ġ= ĠV oxel Shapes . cub oid ( Rotation Utils . rot ated Box ( dir , Ġbase )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Wire Conflict Shapes ( wire Width : ĠDouble , Ġwire Height : ĠDouble ): ĠEnum Map < Direction , ĠV oxel Shape > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Rot ated Shapes ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 Ġ- Ġwire Width Ġ/ Ġ 3 2 . 0 , Ġ 0 . 0 , Ġ 0 . 5 Ġ- Ġwire Width Ġ/ Ġ 3 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 Ġ+ Ġwire Width Ġ/ Ġ 3 2 . 0 , Ġwire Height Ġ/ Ġ 1 6 . 0 , Ġ 0 . 5 Ġ+ Ġwire Width Ġ/ Ġ 3 2 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Wire Inside Connection Shape ( ĊĠĠĠĠĠĠĠ Ġside : ĠDirection , Ġcard inal : ĠDirection , Ġwire Width : ĠDouble , Ġwire Height : ĠDouble ĊĠĠĠ Ġ): ĠBox ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( card inal . horizontal Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRotation Utils . rot ated Box ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġside , ĠRotation Utils . card inal Rot ated Box ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard inal , ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 Ġ- Ġwire Width Ġ/ Ġ 3 2 . 0 , Ġ 0 . 0 , Ġ 0 . 0 , Ġ 0 . 5 Ġ+ Ġwire Width Ġ/ Ġ 3 2 . 0 , Ġwire Height Ġ/ Ġ 1 6 . 0 , Ġ 0 . 5 Ġ- Ġwire Width Ġ/ Ġ 3 2 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Wire Outside Connection Shape ( ĊĠĠĠĠĠĠĠ Ġside : ĠDirection , Ġcard inal : ĠDirection , Ġwire Width : ĠDouble , Ġwire Height : ĠDouble , ĠshouldBe Inside Block : ĠBoolean ĊĠĠĠ Ġ): ĠBox ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( card inal . axis Ġ== ĠDirection . Axis . Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRotation Utils . rot ated Box ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġside , ĠRotation Utils . card inal Rot ated Box ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard inal , Ġif Ġ( shouldBe Inside Block ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 Ġ- Ġwire Width Ġ/ Ġ 3 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 Ġ- Ġwire Height Ġ/ Ġ 1 6 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 Ġ+ Ġwire Width Ġ/ Ġ 3 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwire Height Ġ/ Ġ 1 6 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 Ġ- Ġwire Width Ġ/ Ġ 3 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- wire Height Ġ/ Ġ 1 6 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 Ġ+ Ġwire Width Ġ/ Ġ 3 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwire Height Ġ/ Ġ 1 6 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }