package Ġnet . cy dh ra . tech n ocracy . astr on aut ics . content . tile entity Ċ Ċ import Ġnet . cy dh ra . tech n ocracy . astr on aut ics . client . gui . Tab Plan etary Rendering Ċ import Ġnet . cy dh ra . tech n ocracy . astr on aut ics . content . blocks . Rocket Controller Block Ċ import Ġnet . cy dh ra . tech n ocracy . astr on aut ics . content . blocks . rocket H ull Block Ċ import Ġnet . cy dh ra . tech n ocracy . astr on aut ics . content . blocks . rocket Storage Block Ċ import Ġnet . cy dh ra . tech n ocracy . astr on aut ics . content . entity . Entity Rocket Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . TC Foundation Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . api . ecs . I Ag greg atable Gui Provider Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . api . tile entities . T CT ile Entity Gui Provider Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . api . tile entities . TE Inventory Provider Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . client . gui . Simple Gui Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . client . gui . TC Gui Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . client . gui . TC Icon Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . client . gui . T CT ab Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . client . gui . components . button . Default Button Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . client . gui . components . fluid meter . Default Fluid Meter Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . client . gui . components . slot . T CS lot IO Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . client . gui . container . TC Container Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . client . gui . handler . TC Gui Handler Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . content . capabilities . fluid . Dynamic Fluid Capability Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . content . capabilities . inventory . Dynamic Inventory Capability Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . content . tile entities . components .* Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . data . world . groups . Group Manager Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . model . tile entities . impl . Ag greg atable TileEntity Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . network . components ync . Gui Update Listener Ċ import Ġnet . cy dh ra . tech n ocracy . foundation . util . structures . Template Ċ import Ġnet . minecraft . entity . player . Entity Player Ċ import Ġnet . minecraft . item . ItemStack Ċ import Ġnet . minecraft . util . Enum Facing Ċ import Ġnet . minecraft . util . NonNull List Ċ import Ġnet . minecraft . util . math . Block Pos Ċ import Ġnet . minecraft . util . text . Text Component String Ċ import Ġnet . minecraft . util . text . Text Component Translation Ċ import Ġnet . minecraft . world . World Ċ import Ġkotlin . math . ceil Ċ import Ġkotlin . math . min ĊĊ Ċ class ĠTile Entity Rocket Controller Ġ: ĠAg greg atable TileEntity (), ĠI Ag greg atable Gui Provider , ĠTE Inventory Provider , ĠT CT ile Entity Gui Provider , ĠDynamic Inventory Capability . Custom ItemStack Stack Limit Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon Slot Update ( inventory : ĠDynamic Inventory Capability , Ġslot : ĠInt , Ġstack : ĠItemStack , Ġoriginal Stack : ĠItemStack ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Item Valid ( inventory : ĠDynamic Inventory Capability , Ġslot : ĠInt , Ġstack : ĠItemStack ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Stack Limit ( slot : ĠInt , Ġstack : ĠItemStack , Ġdefault : ĠInt ): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmax Stack Size . getValue () ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġif Ġ( current Rocket Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! current Rocket !!. dy son Cargo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Todo Ġlimit Ġsome Ġkinds Ġof Ġcargo Ġto Ġone Ġper Ġslot ĊĠĠĠĠĠĠĠ Ġ// current Ġdy son Ġcargo Ġis Ġ 1 6 Ġper Ġcargo Ġelement , Ġmax Ġrocket Ġis Ġ 6 Ġmodules Ġ* Ġ 8 Ġstorage Ġslots Ġ* Ġ 1 6 Ġitems Ġ= Ġ 7 6 8 Ġmax Ġdy son Ġparts Ġper Ġrocket ĊĠĠĠĠĠĠĠ Ġreturn Ġ 1 6 // default */ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġowner Ship Ġ= ĠTile Entity Owner Ship Component () ĊĠĠĠ Ġval Ġlinked Ġ= ĠTile Entity Data Component ( false ) ĊĠĠĠ Ġval Ġmax Stack Size Ġ= ĠTile Entity Data Component ( 0 )// ĠTile Entity Integer Data Component () ĊĠĠĠ Ġval Ġdyn Capability Ġ= ĠDynamic Fluid Capability ( 0 , Ġmutable ListOf (" rocket _ fuel ")) ĊĠĠĠ Ġval Ġfluid Buffer Ġ= ĠTile Entity Fluid Component ( dyn Capability , ĠEnum Facing . values (). to Mutable Set ()) ĊĠĠĠ Ġval Ġinventory Buffer Ġ= ĠTile Entity Inventory Component ( 0 , Ġthis , ĠEnum Facing . values (). to Mutable Set ()) ĊĊĠĠĠ Ġvar Ġcurrent Rocket : ĠEntity Rocket ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġlink To Current Rocket ( rocket : ĠEntity Rocket ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current Rocket Ġ== Ġnull Ġ|| Ġcurrent Rocket !!. is Dead ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Rocket Ġ= Ġrocket ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// forward Ġcapability Ġto Ġentity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfluid Buffer . fluid Ġ= Ġrocket . tank . fluid ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinventory Buffer . inventory . stacks Ġ= Ġrocket . cargo Slots !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinventory Buffer . inventory . force Slot Types ( Dynamic Inventory Capability . Inventory Type . BOTH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfluid Buffer . tile Ġ= Ġthis ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Gui ( player : ĠEntity Player ?): ĠTC Gui Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġgui Ġ= ĠSimple Gui ( gui Height Ġ= Ġ 2 3 0 , Ġcontainer Ġ= ĠTC Container ( this )) ĊĠĠĠĠĠĠĠ Ġgui . register Tab ( object Ġ: ĠT CT ab ("${ getBlock Type (). localized Name } Ġlinked : Ġ${ current Rocket Ġ!= Ġnull }", Ġgui , Ġ- 1 , ĠTC Icon ( this . block Type )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( linked . getValue ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfm Ġ= ĠDefault Fluid Meter ( 1 0 , Ġ 2 5 , Ġfluid Buffer , Ġgui ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfm . width Ġ= Ġ 2 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfm . height Ġ= Ġ 1 0 5 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Slots Per Row Ġ= Ġ 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmax Slots Ġ= Ġinventory Buffer . inventory . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrows Ġ= Ġceil ( max Slots Ġ/ Ġmax Slots Per Row . toDouble ()). toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( row Ġin Ġ 0 Ġuntil Ġrows ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurr Slots Ġ= Ġmin ( max Slots Per Row , Ġmax Slots ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( slot Ġin Ġ 0 Ġuntil Ġcurr Slots ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . components . add ( T CS lot IO ( inventory Buffer . inventory , Ġslot Ġ+ Ġrow Ġ* Ġmax Slots Per Row , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 5 Ġ+ Ġslot Ġ* Ġ 1 8 , Ġ 2 6 Ġ+ Ġrow Ġ* Ġ 1 8 , Ġparent )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Slots Ġ-= Ġmax Slots Per Row ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponents . add ( fm ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponents . add ( Default Button ( 3 5 , Ġ 2 5 Ġ+ Ġ 1 0 5 Ġ- Ġ 2 0 , Ġgui . orig Width Ġ- Ġ 5 Ġ- Ġ 3 5 , Ġ 2 0 , Ġ" Remove ĠRocket ", Ġparent ) Ġ{ Ġside , Ġplayer , Ġtile Entity , Ġbutton Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! player . is User ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( tile Entity Ġas ĠTile Entity Rocket Controller ). current Rocket !!. lift Off Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinked . setState ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// force Ġupdate Ġto Ġbe Ġsend ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGui Update Listener . sync Components To Clients () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// re open Ġgui Ġto Ġapply Ġchange ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . open Gui ( TC Foundation , ĠTC Gui Handler . machine Gui , Ġplayer . world , Ġpos . x , Ġpos . y , Ġpos . z ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworld . remove Entity ( current Rocket ) */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* components . add ( Red Round Button ( 5 , Ġ 9 Ġ+ Ġ 5 0 Ġ+ Ġ 1 0 , Ġgui . orig Width Ġ- Ġ 8 , Ġ 2 0 , Ġ" Build ĠRocket ") Ġ{ Ġplayer , Ġtile Entity , Ġbutton Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// on Ġserver Ġonly ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! player . is User ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) */ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponents . add ( Default Button ( 5 , Ġ 9 , Ġgui . orig Width Ġ- Ġ 8 , Ġ 2 0 , Ġ" Build ĠRocket ", Ġparent ) Ġ{ Ġside , Ġplayer , Ġtile Entity , Ġbutton Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// on Ġserver Ġonly ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! player . is User ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstruct Rocket ( player , Ġplayer . world ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// stick Ġto Ġbottom ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// 5 8 Ġ=> Ġlast Ġrow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// 1 6 Ġ=> Ġsize Ġof Ġthe Ġlast Ġrow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// 5 Ġ=> Ġsp acer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// 1 2 Ġ=> Ġfont Ġheight Ġ+ Ġ 3 px Ġsp acer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player Inventory Slots ( player , Ġ 8 , Ġgui . orig Height Ġ- Ġ 5 8 Ġ- Ġ 1 6 Ġ- Ġ 5 Ġ- Ġ 1 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġgui . register Tab ( Tab Plan etary Rendering ( gui )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġgui ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrender () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconstruct Rocket ( player In : ĠEntity Player , Ġworld In : ĠWorld ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( owner Ship . current Owner Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġowner Ship . set Owner Ship ( Group Manager . getGroup From User ( player In . unique ID )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( owner Ship . current Owner !!. get Rights ( player In . unique ID ) Ġ== ĠGroup Manager . Player Group . Group Rights . NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer In . sendMessage ( Text Component Translation (" rocket . controller . invalid . ownership ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Rocket Controller Block . launch pad . init ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRocket Controller Block . launch pad . load From Assets (" launch pad ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRocket Controller Block . rocket _ base . load From Assets (" rocket / rocket _ base ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRocket Controller Block . rocket _ tip _ a . load From Assets (" rocket / rocket _ tip _ a ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRocket Controller Block . rocket _ tip _ b . load From Assets (" rocket / rocket _ tip _ b ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRocket Controller Block . tank _ module . load From Assets (" rocket / tank _ module ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRocket Controller Block . dy son _ cargo . load From Assets (" rocket / storage _ module ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRocket Controller Block . s atellite _ cargo . load From Assets (" rocket / s atellite _ module ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( current Rocket Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer In . sendMessage ( Text Component Translation (" rocket . controller . invalid . already _ linked ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmatches Ġ= ĠRocket Controller Block . launch pad . matches ( world In , Ġpos , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( matches Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Ġ= ĠRocket Controller Block . rocket _ base . matches ( world In , Ġpos , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( base Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrotation Ġ= Ġbase . first ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblocks Ġ= Ġmutable ListOf < Block Pos >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblocks . addAll ( base . second ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoff Pos Ġ= Ġpos . add ( 0 , Ġ 4 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtip Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtotal Storage Elements Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdy son Cargo Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs atellite Cargo Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtank Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! tip Ġ&& Ġindex Ġ< Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch _ tank Ġ= ĠRocket Controller Block . tank _ module . matches ( world In , Ġoff Pos , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match _ tank Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblocks . addAll ( match _ tank . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( total Storage Elements Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtank ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff Pos Ġ= Ġoff Pos . add ( 0 , Ġ 3 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch _ storage Ġ= ĠRocket Controller Block . dy son _ cargo . matches ( world In , Ġoff Pos , Ġtrue , Ġvalid Ġ= Ġ{ Ġ_, Ġblock , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( block Ġ== Ġrocket Storage Block ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdy son Cargo ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Ġ== Ġrocket H ull Block Ġ|| Ġblock Ġ== Ġrocket Storage Block ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match _ storage Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblocks . addAll ( match _ storage . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Storage Elements ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff Pos Ġ= Ġoff Pos . add ( 0 , Ġ 3 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch _ s ate lite Ġ= ĠRocket Controller Block . s atellite _ cargo . matches ( world In , Ġoff Pos , Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match _ s ate lite Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblocks . addAll ( match _ s ate lite . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Storage Elements ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs atellite Cargo ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff Pos Ġ= Ġoff Pos . add ( 0 , Ġ 3 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// todo Ġadd Ġrocket Ġcontroller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmatch _ tip Ġ= ĠRocket Controller Block . rocket _ tip _ a . matches ( world In , Ġoff Pos , Ġtrue , Ġvalid Ġ= Ġ{ Ġcheck _ state , Ġblock , Ġ_ Ġ-> Ġblock Ġ== Ġrocket H ull Block Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match _ tip Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblocks . addAll ( match _ tip . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtip Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch _ tip Ġ= ĠRocket Controller Block . rocket _ tip _ b . matches ( world In , Ġoff Pos , Ġtrue , Ġvalid Ġ= Ġ{ Ġcheck _ state , Ġblock , Ġ_ Ġ-> Ġblock Ġ== Ġrocket H ull Block Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match _ tip Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblocks . addAll ( match _ tip . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtip Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s atellite Cargo Ġ!= Ġ 0 Ġ&& Ġdy son Cargo Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer In . sendMessage ( Text Component Translation (" rocket . controller . invalid . cant Mix ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tip Ġ&& Ġtank Ġ* Ġ 2 Ġ>= Ġtotal Storage Elements ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// offset Ġthe Ġposition Ġtowards Ġthe Ġrocket ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġpos . offset ( rotation . rotate ( Enum Facing . NORTH ), Ġ- 3 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemplate Ġ= ĠTemplate ( offset , Ġworld In , Ġblocks ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġent Ġ= ĠEntity Rocket ( world In , Ġtemplate , Ġpos , Ġowner Ship . current Owner !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ent . motion Y Ġ= Ġ 0 . 0 0 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġent . setPosition ( offset . x Ġ+ Ġ 0 . 5 , Ġoffset . y . toDouble (), Ġoffset . z Ġ+ Ġ 0 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworld In . spawn Entity ( ent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// 1 6 Ġbuckets Ġbase Ġrocket Ġ+ Ġ 1 6 Ġbuckets Ġfor Ġeach Ġtank Ġmodule ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġent . tank . fluid . capacity Ġ= Ġ( 1 6 Ġ+ Ġtank Ġ* Ġ 1 6 ) Ġ* Ġ 1 0 0 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dy son Cargo Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . max Stack Size . setValue ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġent . dy son Cargo Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġent . cargo Slots Ġ= ĠNon Null List . with Size ( dy son Cargo Ġ+ Ġ 2 0 , ĠItemStack . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . max Stack Size . setValue ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġent . cargo Slots Ġ= ĠNon Null List . with Size ( total Storage Elements Ġ+ Ġ 2 0 , ĠItemStack . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ent . lift Off Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink To Current Rocket ( ent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( e Ġin Ġblocks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworld In . set Block To Air ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer In . sendMessage ( Text Component String (" rocket Ġbuild : Ġ$ total Storage Elements Ġstorage Ġmodules Ġwith Ġ$ dy son Cargo Ġelements Ġand Ġ$ tank Ġtank Ġmodules ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinked . setValue ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// force Ġupdate Ġto Ġbe Ġsend ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGui Update Listener . sync Components To Clients () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// re open Ġgui Ġto Ġapply Ġchange ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer In . open Gui ( TC Foundation , ĠTC Gui Handler . machine Gui , Ġworld In , Ġpos . x , Ġpos . y , Ġpos . z ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer In . sendMessage ( Text Component Translation (" rocket . controller . invalid . rocket ")) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer In . sendMessage ( Text Component Translation (" rocket . controller . invalid . launch pad ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġunlink Rocket () Ġ{ ĊĠĠĠĠĠĠĠ Ġlinked . setValue ( false ) ĊĠĠĠĠĠĠĠ Ġcurrent Rocket Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfluid Buffer . fluid Ġ= Ġdyn Capability ĊĠĠĠĠĠĠĠ Ġinventory Buffer . inventory . stacks Ġ= ĠNon Null List . with Size ( 0 , ĠItemStack . EMPTY ) ĊĠĠĠĠĠĠĠ Ġthis . mark For Update () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġregister Component ( owner Ship , Ġ" ownership ") ĊĠĠĠĠĠĠĠ Ġregister Component ( linked , Ġ" linked ") ĊĠĠĠĠĠĠĠ Ġregister Component ( max Stack Size , Ġ" max Stack Size ") ĊĠĠĠĠĠĠĠ Ġregister Component ( fluid Buffer , Ġ" fluid Buffer ") ĊĠĠĠĠĠĠĠ Ġregister Component ( inventory Buffer , Ġ" inv Buffer ") ĊĠĠĠĠĠĠĠ Ġ// no Ġneed Ġto Ġsave Ġor Ġupdate Ġas Ġit Ġonly Ġreferences Ġto Ġthe Ġentity ĊĠĠĠĠĠĠĠ Ġlinked . allow Auto Save Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfluid Buffer . allow Auto Save Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġinventory Buffer . allow Auto Save Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcan Interact With ( player : ĠEntity Player ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( player Ġ== Ġnull ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġplayer . is Entity Alive Ġ&& Ġ! tile . is Invalid Ġ&& Ġplayer . get Distance Sq ( tile . pos ) Ġ<= Ġ 1 6 ĊĠĠĠ Ġ} Ċ }