From 60294bf6825772ef65c72f36469688474ba6f226 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Tue, 11 Sep 2018 16:53:11 +0200 Subject: [PATCH] added keys, locks, locksmith table and cloud residue item --- assets/hbm/lang/de_DE.lang | 7 + assets/hbm/lang/en_US.lang | 7 + assets/hbm/sounds.json | 2 + assets/hbm/sounds/block/lockHang.ogg | Bin 0 -> 8218 bytes assets/hbm/sounds/block/lockOpen.ogg | Bin 0 -> 11088 bytes .../textures/blocks/machine_keyforge_side.png | Bin 0 -> 605 bytes .../textures/blocks/machine_keyforge_top.png | Bin 0 -> 552 bytes assets/hbm/textures/gui/gui_keyforge.png | Bin 0 -> 1294 bytes assets/hbm/textures/items/key_blue.png | Bin 0 -> 238 bytes assets/hbm/textures/items/key_red.png | Bin 0 -> 231 bytes assets/hbm/textures/items/powder_cloud.png | Bin 0 -> 277 bytes com/hbm/blocks/ModBlocks.java | 7 +- com/hbm/blocks/bomb/BlockCloudResidue.java | 3 +- com/hbm/blocks/machine/DummyBlockVault.java | 20 +- com/hbm/blocks/machine/MachineKeyForge.java | 128 +++++++++++ com/hbm/blocks/machine/VaultDoor.java | 17 +- com/hbm/handler/GUIHandler.java | 19 ++ com/hbm/inventory/MachineRecipes.java | 9 + .../container/ContainerMachineKeyForge.java | 82 +++++++ com/hbm/inventory/gui/GUIMachineKeyForge.java | 56 +++++ com/hbm/items/ModItems.java | 16 ++ com/hbm/items/tool/ItemKey.java | 5 + com/hbm/items/tool/ItemKeyPin.java | 35 +++ com/hbm/items/tool/ItemLock.java | 62 +++++ com/hbm/lib/RefStrings.java | 2 +- com/hbm/main/CraftingManager.java | 5 + com/hbm/main/MainRegistry.java | 2 + .../machine/TileEntityLockableBase.java | 67 ++++++ .../machine/TileEntityMachineKeyForge.java | 214 ++++++++++++++++++ .../machine/TileEntityVaultDoor.java | 2 +- 30 files changed, 757 insertions(+), 10 deletions(-) create mode 100644 assets/hbm/sounds/block/lockHang.ogg create mode 100644 assets/hbm/sounds/block/lockOpen.ogg create mode 100644 assets/hbm/textures/blocks/machine_keyforge_side.png create mode 100644 assets/hbm/textures/blocks/machine_keyforge_top.png create mode 100644 assets/hbm/textures/gui/gui_keyforge.png create mode 100644 assets/hbm/textures/items/key_blue.png create mode 100644 assets/hbm/textures/items/key_red.png create mode 100644 assets/hbm/textures/items/powder_cloud.png create mode 100644 com/hbm/blocks/machine/MachineKeyForge.java create mode 100644 com/hbm/inventory/container/ContainerMachineKeyForge.java create mode 100644 com/hbm/inventory/gui/GUIMachineKeyForge.java create mode 100644 com/hbm/items/tool/ItemKey.java create mode 100644 com/hbm/items/tool/ItemKeyPin.java create mode 100644 com/hbm/items/tool/ItemLock.java create mode 100644 com/hbm/tileentity/machine/TileEntityLockableBase.java create mode 100644 com/hbm/tileentity/machine/TileEntityMachineKeyForge.java diff --git a/assets/hbm/lang/de_DE.lang b/assets/hbm/lang/de_DE.lang index 6e68fb16b..4b2f46a2b 100644 --- a/assets/hbm/lang/de_DE.lang +++ b/assets/hbm/lang/de_DE.lang @@ -251,6 +251,12 @@ item.turret_control.name=Geschützsteuerung item.turret_chip.name=Geschütz-KI-Chip item.turret_biometry.name=Geschütz-Telemetriekarte +item.key.name=Schlüssel +item.key_red.name=Roter Schlüssel +item.padlock.name=Vorhängeschloss +tile.machine_keyforge.name=Schlossertisch +container.keyForge=Schlossertisch + tile.mine_ap.name=Antipersonenmine tile.mine_he.name=Antipanzermine tile.mine_shrap.name=Schrapnellmine @@ -1732,6 +1738,7 @@ tile.crystal_pulsar.name=Pulsating Crystal tile.taint.name=Korrupter Schmutz tile.residue.name=Wolkenrückstände +item.powder_cloud.name=Wolkenrückstände tile.cheater_virus.name=Geliertes Euphemium tile.cheater_virus_seed.name=Instabiler Euphemiumschrabid-Block diff --git a/assets/hbm/lang/en_US.lang b/assets/hbm/lang/en_US.lang index fe6cec1e3..9dc9c31b6 100644 --- a/assets/hbm/lang/en_US.lang +++ b/assets/hbm/lang/en_US.lang @@ -264,6 +264,12 @@ item.turret_control.name=Turret Controller item.turret_chip.name=Turret AI-Chip item.turret_biometry.name=Turret Telemetry Card +item.key.name=Key +item.key_red.name=Red Key +item.padlock.name=Padlock +tile.machine_keyforge.name=Locksmith Table +container.keyForge=Locksmith Table + tile.mine_ap.name=Anti-Personell Mine tile.mine_he.name=Anti-Tank Mine tile.mine_shrap.name=Shrapnel Mine @@ -1732,6 +1738,7 @@ tile.crystal_pulsar.name=Pulsating Crystal tile.taint.name=Taint tile.residue.name=Cloud Residue +item.powder_cloud.name=Cloud Residue tile.cheater_virus.name=Gelid Euphemium tile.cheater_virus_seed.name=Unstable Euphemium Schrabide Block diff --git a/assets/hbm/sounds.json b/assets/hbm/sounds.json index 5584abf72..4122fa57d 100644 --- a/assets/hbm/sounds.json +++ b/assets/hbm/sounds.json @@ -23,6 +23,8 @@ "block.vaultThud": {"category": "block", "sounds": [{"name": "block/vaultThud", "stream": false}]}, "block.vaultScrapeNew": {"category": "block", "sounds": [{"name": "block/vaultScrapeNew", "stream": false}]}, "block.vaultThudNew": {"category": "block", "sounds": [{"name": "block/vaultThudNew", "stream": false}]}, + "block.lockOpen": {"category": "block", "sounds": [{"name": "block/lockOpen", "stream": false}]}, + "block.lockHang": {"category": "block", "sounds": [{"name": "block/lockHang", "stream": false}]}, "item.techBleep": {"category": "player", "sounds": [{"name": "tool/techBleep", "stream": false}]}, "item.techBoop": {"category": "player", "sounds": [{"name": "tool/techBoop", "stream": false}]}, diff --git a/assets/hbm/sounds/block/lockHang.ogg b/assets/hbm/sounds/block/lockHang.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ea9fb1b177fb54f903b32db458c6ad3b157deec5 GIT binary patch literal 8218 zcmeHscT|&0*Y86IrGz2}Fj6#>07@~^ONf9FKp+t5AiXHkML>!WiU`P|385=Ziqa$k z0xBp1LVz4V>4G#VN)eD^z9)Fjd*1W?^RBzz``2A}*3OeXd-m*^`R#f3>`4q=T}=RL z;Lnm5p^2ujWEZ<~Dt@Y)UcL_QeiQ+f>=W2XX$r;L>))P;iGgf?DFAU zHEwbL8Uv=GlN?2_@s0u1BMc4=1k3D1Z}0IGq5J0ifWaSo}k=V-UXD zW57EAfFO;zI(?vBzeBrfpvM_mEa*Tm07g(xC%#B0>9bA>%pyhji01E>OZL=O;j$WX%bDbBMqKo z|3+3B&b&w6K@1^-?k5u#XP9uUnUb-XVFOVa6(5w%csuZVkW(zD>@#q@G zQ#m@%f>N^M8x((qsM<9diMM7c{?Z@Gag9~ng+UyQ|vP&8}i_%PdQ8}nD1B-4&X-bU3={^{==r6#j z0VJbPG#5tauZKgNPz;Z6H@vhU5-t9?>|ugzk7V8ZqleN;WgV+BvrGr%qC`~(#>Df& zu=%w$#RYs+{T0h=RnIVJcySu$*b#n$AoeJFUZ-SZie-m5cxjIBG4Zlra0*gf0|15_ z&;j;Sf73dY$S!Qm0n%BL>;;mE7B;|nBqP9r5Nh=y+GZzo0;Jsld-Duui+|9srGu}y zAh_9oEd>6S$M3!3A}kH^*D^te0^VGgj`o{wElh6^);lO^xQQ_2R5j+(A|bE?Cv1%6 zJ&om@Nf&HPOIdm1}D`@=b003a_s^;n$fEsWJ4`I$?P0kKsw1!Nu|EU;|5C)teuuMQQ6;J@N(yMwi z&g21g81#J)^S|r>DX(EXed!sYTc#NLCXX*J&6p#kT+A_E_q|MgKU}nG7^4);Rg`IR z>;#6@5_DcP0KrpDdqa`6lE_-b5i$Ufj9}?kVXIbQ`?C%+ppi7BK@e&Ftp7J($Uy{h zQw5|yjerAv(_{zf&$=X$MrD9T#Tbkp|8;pe@XxWp6;Z}g`D-k2Mc_dHcgFg!C;R^m z{J)L>1U%}d!OvA8F235+KpZC^t-y+4!P66I6f)?DQ41PeR7uXSHm8FiT7P4KAV!s= zu%F6--p#A!M%c1*e>Y_;XkZJ=y=@}qf~2vT;-)A5ZZhO5Y%;QWF8=bo)^l;|6XnPM zZu)l)jLbaV-~ldO$o$uwycOb|sep)Ca7qA>G;7Wcrd1ij@c?ku0xt#z`v0!{b3hIt zjv9~_0|x{%jH?zIbco(sAcMYNC1QaJj0m8z7-e?V8YT`t5n$k_28;oKUaLmZfKv-! z;*J-IM^NG+S5RI_P@X%Aq(Vdp#pk)=AzH-q2AL&d<>C-6EQpHHGzIpkl8zZ5I;N5q zKv4tCNe&iyqF_!GU-Gydw4!3jr8R)S4q@H#pe-<2axX9cvY`SFL;{Z}Fn@_Ix%QDBx4jLpMBV0X#M!TE?IqP&2?rFdm#-`In|zW>67~=r(2a0*O zO-?9CO%T6VJ%BsThAb44ppFm&fR{WaTqfPpB0@zFzPB(O2TDXZJq=whScJjAPvA^3 z;=+$oFdlF$1OtbsA47>3r<(%6hdVUjC)&vE9U2g110n>q!9&}TS+<1Bu}_g99TP9J zkdvAq^ET73PZ!SX_+D|LC@q1K6=Bfxl+*}be3bX3VbGxLG8!(7>r)ghP8$SOI03-) z2<=Dj=4sDp9KnsD0^xSF06hjGo&j^mFMtT+OI&pE^Fg4bq-*m}^wTK~6zIiAPJnrV z0SH~KJk?%+_XL#?o*HJib>(8vx)NEdx+M zee%jB1vuYvNraOy<-A1lL?wVJc{BudObC~TVPyKp_U8a}z%8F#GfYXShLM*j85R1m zcfzmS>L|gYJkbB*{#V2QVU-RzhgAR;)jm`!z1AHtzY2PkDgt!QOP=CP-^(cY2~>ij zh)^-N1da#97%jt1RAeYj8@80p^J7K9tKOKKe#uEovy87QA76J$V-gZG$1rvz|QfFm;sr5$CzM|T?xy7QL|XN39k zOAiM@i{~Ec;V@|3;-kJeBb2Ui@gI~64g>|xHH~sF;y{TBg9snV#0rbR>{SSdK`|Dm zfvCfyA!v|G!RW$^InYdC1BK&4F$#l?;uI$^6@upB#b7tIP?`}64tfr%04BaX8lt>d zZu>_}zw!Ty7)}6?R*ON4Rbi2*i+PGhQJ1o!xcu%)`Y~Jf7CW%Q>8oPEWQnJqTb3~k zqmO114$y~-o_&)EZtbE>zeI2WV8qh^A|jFjfQFXtJn(WF_~Zxir>4Dh5`1$sUE(y` zQQo(Vm>}#XR7i(N)H%S^+`7od8u@_g+~Uj=8X;OCMh!{Uf(Tk@j(0n!*R9tqm;2%3 z0fL}iFbf2}fqTvxU}qnAZ|~%G-P`}x?Fd|4LNXZqz`_IE25+UpNKH+I9}h3zN$4ql z0YRbDXJBB6{&lk!i~wk9e`QOQ=uAs{bakfnP&(=lP_E7txhemc0l$vc&z~{~Ej8_n zJ2O+VGP=l(`Ng$;GC&q0(~@ZqOqZR0es-2ROgL;;_-eVxK)uqxD>v3KVLXD#i%W;N?!i`Ub^@V+L3!<2OQ2mEgu$g z$D0D;GM|6^?VK6e-kEOI#(JUI!phiBui+2F@emqwwyw|5iQ@aCgVvpIUbH;;-n%Xb zY$V_ZojyL@vo@B(m%aEcz`a%q~o{o^{E8CXlbHMwC|<=q|m_ zMwEE3WJfhv4(S+tXv;+NQh+}1uIn>Sj|KzV;pexv!$NP>s56fy5WgJE?(*;-v>27u z)g>Aadfg`PwKKV2x+pWuSX^O=?R2b{Ti)ohf3uNXVp@#fU|pb1Y8lnhC|>G!B>B)1 zg}2(PUSHw9JXgpW5gJRv_L~MiY2R6GP}0g1#D3N%!Bx>lj5nk5JsRK2IS>v~ zwmiOy#k>kK!Fy~N4^j`XC2Buf=Vm~@i}>UgW)yo(WnA%T1_ytmXTbh`^_NTqnut5# zJ!V*R0%9w-BH$l5k)n%hG;ETYX(&3pxca#GO)eZa#0DV!vs7(HLpaL#L_Q1(4HusL z#sWH-ELfl%L|_}B3s_O``%ajOT(;|MNNvuFvAQ`A)y4!>b@cI}k;!_dToL0LR{Xa{ zwpBkNCl<71`JQb*Qy@sW80`2ab5AI%X?5WrTl)6|k3Z5C8l+E}wRN;A3WOUFw|HpY zn)T0hrXMIrSF}r*^|(D~`h-hi7FCCF8iBG%+|Zv z#!OBm4yorC1F#Xg^Fe7&zo{g5R5TGXS0YK@!`g@ooA2M=3oWf9UN$TxDI~?_!Y*zh zRA+5}sQW^GhuOi_4U-e9i>E~OCvL>blLFmG%q4oy^_zw2Ck^Et2Kwa;BkCsRZl3kM#M(s#w-4teh1+fp(` z^E{N~C+cs8pnv8g3AwZ~^**HDG(EE{GO0f|Fs?-aKoVj-iOeA`)FzNrT3sV+@Yn>x zA%KA5+dDFW6>E+^!v;524FwEXS#8IYC(L%<`1^TrBqiOLW$bu5?35GM?6}NC%)cGB zNVos{{JGJn%PoIs^YP)5U6c@*H0{eS1KNE>sp~p}b{H4s(jK4IY7732`iHrVIal1? zz0dOF^*d)Ir`Y4oPlvyO-|zW;ElJO&EjN#g&h5*h$lM<#ye6t=7A@vn9@t%5=weJ} z?Ik-N|6S@7o>e`Bo6OynO%41;C%ed?Uavo4rg5j0Ei0*{Y&tTE9{4GCiWSpO<}7Ox zynUbaset}RIJJR&iUN*U8;hp1ouiYY?X3BH3p`eU2zACH*%tvO6`O1M0cy3MEtZ`P z7|u_bZ~&U;+ny0Wu`ORdW3I9{J7pGr$hIB6HAAC|5BhquTVeS1{7 z`dHIie!--h4QsG#A2fL?ZundMKHEQ0ZdLFwfY!21tv*o^LrP7uNPUogV`BP>e`m*w zS;%m`7E%J)s%A4BF9)w`Fz_XKVosI`zg5>Et&`Ph$Q=C$0TyV1UQ#lWUO1J`j7t3G z=PX6o>q0<`TVdkXHD)k~a*ISxOI6;;QKdWd>c{*RIlXx~mH5O}d$Kaa`I*}Ji6Jk# zo64TkSl@9IDr+w-SBMx&o7L?1b>^6c%>&%(ObhQirBgB$!k3Kd?8tQ0@Q9b` zMuI?C0u45ny$s^vEjnZYIc{VGAcjoFYsS%zaca$vy?dgm*udr=_I_hmPSY`eTem_2ck1O%`ifY?w6Sk& znr_>CjJ_^<;lBTi+t;B~u#q}Tb?Xnls#ZO*cXz(^+3zr}$6MyFj?O9#OXw{gS}{&t ztC^howl3p+!Dm>WRc`s61nq}q-9F8cfU~26Ph4pqFJ!jPRntJn2oJWS?&Y>~OPaJc>-@1|@kGSmg~;;}?A;tiN;c4CX9Z0@Dg zK@{fP^?pTvZy~sFJLjas&k*8HUh6bnYK4<%=8$R8(pW#DXduTOFK;;!a|WMq?qDRn zZm?*epSd5P+2Ud?iZH6vn!o?Oy>!Py?G{zAj4iQu;uN{Id>fNZ|!7VcSL@MCn1<{h$xw#=C+H6x*fWuZ>}1JC9eHD_G~ z>VCjh4EqYY#gJ%&7C}lB!*WQoY~|dKkYD!h(&DPwkj`__he@u-DE{%qKfr$G>c`DS68Z2^dW%)5*Q>A@?TOq_D$^DgH0EmJ`#}D7 z(aBVVU3pmN2A=4>FZ5tHXk?azLZ5)!tsSe2Ab3gsc80l<@KXF!7{}5 zq1uDR-E7f3_u$kLcC&ke1pL&T;{);pJN?)lXMV1qE}JrWd=rMF9>R%>sbNcmR(mBr z0GILOCG8Eb)cI0ls^a&8v&8&kIUAPC4%47FqaETmHJni|1d162;6IQ(WQ)vtXL0aG zP;H?H>Ic65tn$zREgJ^+Oqi2&-X9^^@U_(_HQWNjb6YXUf7) z;*Zv$_z^1MUEvvnVf)gKE8A00ORAo;@o)s)F9>{L38ugUJ&)|4Q2V^ZC*yGporAPoKX z*;o2$0Lt?raaqz^Bcr{iX}RXc?~#*wW5<(neRQ3(l=hgc)JziTzG(Lf7et8OjsVo) z7u*ve_hSy)2Rf3{JX*BlI#-s+JlQU>dj$>*`dCIG)4|Gb2?Df>vwdwoa^6G1s^R*Z z{^U~fx32kvby6OgH0Ywwv)|^(W`5aDt!ZN=W^VPy!S^}kD5<=lP~r#X`)j%6f^n`% z)qRAP;E+?-t;BQHB_+P2UVNscHTAGZ^17$uQm{{4BtOEMvF*GA&wUE-*XsI_Z%Xy= zMauCBWco{lb1BbT`f_(Zw@$irzW!kwp=#63S*|t2;?zxvd-?q}qfb2?zcRlB1`=LR zGojob=O1{E3*NefMuR_YEtR~s|oP|;g=?bW9#iD(a z;%K%~qlU#!xG<@RG_~ux7G1=2ag{@0LJo`MXO%6sH&pa{|9I^sk-mf-?)+^$Y{Sa+ zuyc>?`(ZcuXUDf$c@=rN>fJq3^CiOeTW4lMSJ%X+@F(gYcJ!=c<5;HwUhle-pGsI=$4>5-NvWktDUbc_TeTnauP2FCq*LYh`K_5YdL%vGUfj@+tU2LXf~XoRqTX2o6nuO*r+aBbZ-8m8LC5dZjoyi^ajZ| zK_(Hl1BN?eM9!avYvegL)#jUly8{WIvr5~aR+9U_h7G(4SIn9DUZ}BGx1aq(eruAA z?Rkref%&AJqMTo^PwewkEChj>Ogp^iW>CA)D3jh9<#h8GGfO^amB*m`p({#Ltt&in zI?9Jk^ZO*hC5{K(n5}_q>78C>g8G`i{`b&N8xxwcBc-d@N1386yL(SZrj$&k>9^6P z2!RJWzo$^giwb>%!{EOw%q%}OpxQV~_g$A1L;5ySPtAiYv|v#<7ba)+&~cEE$97P$ ztqfhupuPK0PG?uM@)VR~q`~{LyBG@+$P*n3W`eps&w1}8ZB#y%H*jCuM9M!#vNIs~ z)#fHK8X_+8;W(hiLvIf(R)wkbBA~auRzH9Dm|JnSZV3-?X@EZsTW`V+!ZaO2Mw*JF?6?|%$%e|KA5k3ifH)IyV1 zzAhYIPj@k-5_+(_v#{^i*t8~PaCK_z;9!3rK@JXUg#txiMbk^*2KfADxPHWht<=J> dqX1EV?&FUTsXOkiKSwVvoM7XariyR@{s(GU=qLaH literal 0 HcmV?d00001 diff --git a/assets/hbm/sounds/block/lockOpen.ogg b/assets/hbm/sounds/block/lockOpen.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d0b991292f6c7d46d0fee9d15fa0b9431fa5c4f7 GIT binary patch literal 11088 zcmeHtXH*nTw{8Ol5F{u`Buf^FgMeftM;Smwl9CY+$(cbxB&*~cBuGYb1`z}$4M9K{ zWRx`IA;|#4FsH%y{l4>_KWE+b-CuXzS~cAjcI~QqcJ;2Ox<}W}P9Goy{t6^d#Z*s| zIXm?91k40pE^d|%?xzKWN@b@vFnAN3-5LpWPh0*goVGlz>67|UM(KzDN0=k}qlh1@ zf8g-UUO?B)j@8M*^8T56R&`bpAz?8gVIeVAp1JhUe?{KYVbOp;eHU8~@5gR7GAdfE z`W~Lv4lb<1B5YvAU0rQ$WgP>38EqG92U`alYgS8N*8eUi(c%BcxF$7K)CBZU>(=tlMzc0#?_F%07F;nQgkOW!CqQn7XsIue(O0aC1HIzcJ zF)gG_5)|eTQ@a;(L2{Wf^b)7Z$OK^pS{#RQ9OqeFiYVdluRe<+XU)|B z;GQ0tvMcq)vv$@1K%65HS@0mTz&;Wc9!ne=Rz?T}1Hd`38^~RKY1ITJxPjqhy))v! zMUy0(YiG?t3@Jw)Y>O|13lUwraApT^7{OGLLfyfCgB(n+LH>@UToRcvpJPm(rcouy zl%ZDV8@on2NxuP|m@JZVrlRE<$oUc4(Sj^)YUgA-dJ*x_pC4#_==0(MT_+F*9@Fp?yQ&9kV}yXcT?WIS>6rR zcNUv?;J7J?N(-sI|Io3#4ywUhkN~}Oh94`4z2b#y)^GGqHCu-BzRz&G#8>nOPS#V? z0D$fe;|LYgzvDI|oQhNL3K(yViHMEqD;s*+OeT36Hw2n|e`$sZ`~k)T&&LmvY>fXA z|4bcx5?R5;{%0b*J@oDalFJ+klz&eXG$`zbsaJDoj&cl+^6TzGbg#ooE!NeK5!DOfCGIj}bD7*3Z zk3#;;apbBD2&j?AAE)t`0RVvP>j&!o5k~DRoa4}2hWfY0p~~a>hW}g89)oCK1%V|2 z-VgvelqQ8xRyq5rF8o|$JjPlj|^3{+tWB}j|CAii71b>g%s2Qr+f$*z2HaI~oJGD3HIrER1;Pkak+U_GwpX1fmW4>T%CszVGbQKn>uwL8+_<>H#G^%~&JB z!Ii8wSCfH)phq_|N_x(dR#*bI?Gq6?6G}8QzK~K_(py}W1tMFU`^ z0D@Unz)jnVOr((7YDn^8A~aGMl@T8;+>_!yq|STIYCsZ|pAdb@il7=xr__kI;EeYq zKsCTJ9SvU2&>>0gf`m~}LU*xffgkQ295KPz97X-N0FCCFYV&Get}CVhWFSzjLqjTXM}E97-m z;)5q-vIndtH-*O^0)TA@5uo(qa_Nl>>X`Gi4AoZv5EIsDy+~n@#DOH2!zx-Bv^aQ< z$+eCK7X{ceF*l!e}duKtk=rPScdJd+EBYN!{SwGF+esLomN?eu^{ zsR)iW;q+W|MUjUSMEI>3G}sdEDe{7rW0U}iFTDcyHAC9Rc_ehqe>{dY03=jHHF(Mm<=G49 z^QRS6Q$wiTBlz9P9u5{*lJj0D4+F^(eJ!mBaVk_xgM`yli=M->h=cl;GfD-^c zo&pdY{00Ds&Yc$pKK=xLxl?)&o>RRJJ~>LZ;YwYK&wTEYP*Uj=$XmWp6aWk!nC6?A z$|n;DEYDRCv7KWhR^TVk2|mY|@vQ5ri_fRaI>Wqto~)o=kOcx;;F>c9sHjE;9$VWx zJ@fDh2o4R8egir`Fwg@5;Hi{TUP%e!PJfNzIwKP^3o9G@4Gz#n|2dbl1_S5L{b5U| z-uc|QzYg9v&)Ng02k+Bz9brR3Nm)4=L5PT;oV0?1h_Ilrkf?&3f)buX03xj*FQ+Id zt*9ceEPorKtSl>wzlOhvC&tr4ghhm9W%G5&-}yBt#Q`tD-ae}hoH40*1rp3r7-e}0Hz$<}xijK%S zdO(f#egf-{qVc!=j`=<82pjF$6Bw+<2Zit!)}X7p4yd61zuR@nLz5-_zY&%ViI_pq zD^5bV3b=N5Mt|FUvimtNe-8g!IxDYk{SG>MwatvG^6|a~&yU;7l|;udQaf@Ll zMPq2n2273ThWj8%zIFR@!Sv%xma%9Ubny4|{8KMIt^RI2q^|Qg5h&A= zg62F-t;%_%ggoBXF24J)tdn6dN&(4;8Q7@kXy-M{9!92lEJme$sL;VO$W9UD4}8C8 zSfCa5-mPwbBf)Zfq#{d%#{}2#Wibx2n7An;vS9}e>C@TtMx>18O>p)GKG>RC7_ zBpHC!gbl~m{N5Tf1XNOmR&pCU%2JX)1kEBb!^%Bt4dg~A{I~H&mu1nrZ7u2eF#F1_KMC&{*zw`2!u7Q$`E&Q|=zR{?ZrUTdGnr<|c4tw!ubBNFg&MkaST5l? zc2TrpRvo_w2?mCW3tt}(?5WL|Ww*(0HaT@l(Brg9J+W4pWv|_p&+{{g6F8}$+{sjL z#oWr{w$9@{*>^qtg?ICqHlZ$?^u{wf7O_>+D;7GNKBfUR{^_*DH@{76eDB&6X`jgE zkd$Op1SME+|hrKqy=`Z|RC`bfmw9smkGNN`33tu{B9`xGO z$CRMmJJxWp>%Wc)QHM8LMCbf=z2|-`KMHD}DqWr(=l`aqtGSkTt;383cEJCBO|9yQ zkH`{qDbcO*plK3bQG>)`dNh&WwefqE+$=`9(2K2Fu;#Ul;;{>{_@;w4yG`a&+TD#Q zC)t*!@dm0KZ(e1hncOp34Z*UPlf&muC4IVUOP-}zMp7Z%m-!H>KTyxT*~ zZFlYL)67nkuFwjmyGUrya3?nm-J-!{R1gn0F$}U?!P&gBrfOF5EV1O zw6vt&T|;3sX1~+ErUIMh8fl}E^O5oX-mrh3U_pcYdW}WIQlktxJ}Ahy*sLMBv#&@* zt`xhodw+e)Bt1w)eW@h_?d1|bnRg|q9U9~Hnn^&8Jue{rgT0a1jK*Utgy_f(etYq7H-pkx3q5;o=;$^5fZ8u9lz`<*?fk%gOmMHBus9FyBYgD+L$Oo_Q7| z=l2GRM+Vmt^~H_qBqv4~T%{9mJQ+_|Eag zqvF741`_YCaJ>!vl0!H5i%2In{i3&-0|s(`sqAq^sXscv)2I3;ZBU0K7OMyQaMMO^ zwEju<=53F!t#8l2>cBNLHv0Q{{yx}dst96h*o|t(J14fvSZ`W8+uxxMTVKx`6oTM+ zQXPXRnaCUDCh(IdsyTF+-_;v9#3qtq)@FA%6>>h-S9jEqA@YhOjmFm++>N&8Zv{NZ z`y#j!_c#6mX(Uke@QTJw0?tPwVM3NQ}Z zQ`w>!hp}%xLa&Xn2tJGmFDXsl`YAL1*xxv@fAgeEgBAO7Ejn5(>9ww^8o|2CL(%bH z#LXX%sE|SX6FZ8gMfJ`--cKDc99TFWnbh4BSQ&+8^yD3S!r3ns9cEvs49ut~mzFX{ zgjl0tjB;k*O$5!Nc{4QoJS$w#J%)4pE;BJd`hK1m(a}`Bm(y}IGEdKKj+D7^$2Tek zL%*)p%8Ol6c`z{oJ8n5TsG>;X(RS5pK2qv+Ewg%%b%KkU+IR}t-@1c4*!AM_Fl|o= zk6NMYc%a&Yomp5iT?E!ursN1NDA&;kyYIZ3S9LKaJCFXo`s7VOZRg(N&&{vN^F7;q zJAPH>i#3OPkXJ=($TzusmE~0@uW={HNfpv#l{$N*s@_|b=82{NTG~i0ap%3J*`3wk z-4?-8^x?-@l-Fe7e2{F*U^Z;X6~3g97+~mFGu^ql%w(u51?;Io`^0>W;&$pjNCY*% z7H>l~kTOBqSv<+{emc7&M~K%A-sqDz;*448=)DYLGnQO!1PmANrFL)wuC#$~jXt-h zVn}o@nZ591*7m0E+TxveREg$rt~!Fs zgSdNc9p>ZbB)D=zc^%)5>~p`-@qykpC|t^-BFS59#REOZ)!8vQ_4yF@&e!!;dsf4V z3oWB64Ww{O{c0g?V?CB$}r~!xB zgQMK;5&V`%Q)}(a9kOQyYn9m9j9n?LTWw8_grJP-#A6i!^I3SNO%a9ak$%K2RoD~Q zL9zb3+OIs7H6|Q-fC9so7F*r$f;kTDSV5)L<|s&zzvqcL`?hQZmuhX=n*Xt=L0qFa za!wRsYUdG`GW~{CP#T9F+aYXAuuQJPkllF?i}~SIzrMr*TaM3uJ3r8Ik#6vf29{IN zU%LHvk9{#yn$S9SXu zluPnrXd=iyOrs3usGOH)Gm99BD=(G5-Gl)HzdNl%`V244@WZUf9X4)<>)T6CO|IC3U6m>O_Nu5pSWuv8k9`WcH_BvSL#^hG z@EaYww8HPt+E9?u%g8{4`0?Gn->B)}R3AcF44hk|W!Oo%+0$5mZIs$Rveh5`V$GYJ zcV&cy)2iw%3X6cey?xYTCw_Uafz8>uLunUYD3leMgo@3~uG`K;mPj)0=vo{4{%DCa za=+~mDo_qGTJ5`!u(2zKTrFtkxQ-Wr^zv{>o*$r+}^_XFa!-ytYacbGA#X3(}ROw*PJBnq# zO!rAP2twPCnXxcDqGL1gaPw8;EixC~s2}r)Z0C{r0Qam8KNvj6Ny$(^iD5eLTC$9N z{`0*w90m!;+!6a&+PLGMZObCi;=Ek-!`}3;>5-#t`V!e*k>bj>=j()L!K{z`s^5>f z6Wq6;oDO859*Qb*S1bHdn&0o&prF5?j-VdNKS#ZacIiN>SDGlA`skb5)o*Aj-5Bhx z%Xip`k2FB`dAY;-rg&iN0pfjVOo_ z?fbk*@rn~%A4*UT*VvCl9N+0qwRmdIT*>Y(B?P}3cxe@!M zOqzWk;ziNv-<3_@Kt^x4;jp;m?2@OjO44;`(}$y-YAY26{RzO;AVkKNj%fxXme3F1 zz)%#a5fM(Ji6A?YX)3v6H;V@=yrDI@;}%zKon72UA&z{ILL;fsI;4m6UD3SMhLb^z zDj9ZmR{-u4FgC&ZYXu3{eOFupPLy;NtbFtwqf5W%wa4R!Dlc%~+F{=+#2TJB71 z{0%~b0U_>8Wn7&aWz~5Y5R6NK1qPP6jv#Q_4Y%0%*+LH(aTkw#ZhZ(pkTeN{ImWxD zk=7Pj=a1^+TXsixl2zvg@S@p*_{S~V2U92`BVFbWq%$V;xPZmWT#lwD{8h^2O2m_m z!zlv9%wFU7++UKEN1KzRtY5@0?Ba=iSYi(C*jbnwr=O8n*Z0RarR}t3MM%nOn;F_& zE?d8J-Czk>zxPnDRmw>ekRBF7aTk;{+azsE)}<79PKa1;R3cJj_surzHRo>loAi5@ zYjz?1R-qP6$b!!o&_@qYUhQ^}J@$NTPipk-{Ef?k5W~SRu{9+ASMJ(o}TAtR2 zGu8ao7LzhGCh8s_gUSzRxC&nA73{?~F?c~9(ctcn?P2de%!Xld%PXAP?pr&z(UrXN zpMRSm@J;%9w-(dk!&I-wbzSf=JEO-9#WzZu(N(&;n_nIa+0a(z+N6W1^XAdm0L}!GI`w^OvGeg%1Y!quxNnLS ztHEFfIi-@*{AeWku$2qON4x$@jygcMhAe8$a7W7AYt19B(BjMU`P-@Obz@26dmmue z1aJ@eEg+bD#b!84weemA%lpdmz-vKdc`BH^8%Jr!6~!GEwL=NFu1ftj+uZL65|iVZ z3(ZZUK@!Za4-VKiJ#!8!4`aq~*UzSL9md=GI1F)?_B}0ug?-C@EcE{S`P#mjxuYcG zJXQO0+&#TAza7lGs+eEiGn{MFj>kJ){2MNU7fw*)KJPDYqYR;l2j^=w>aUj28As{E z=HH{qi9(BpEWVBQAdIlClVKK2U691AS4jjE{ zr1}F=TRtN^vkAPp(HvjO(bjI{?!iZOWCcn1pe#5WWiTpxu~v;F5@(fPoP#k<5)YaV zkI-m{XbLsH?d{-4E`(QJexa{>7m>}@b@V--N;XmYRe%^#zRDC|8C}d!G=N{(Famf{9HGfGZNcrhxMD-<&an^RpM zsNUJjS;f$E^oC!edv5-E#X`4ZTb!}Ce_rLAtvzeL8dQTmEv5uY<_G(YXz=xwtW9vB zpS4GXvzSvXB~Nv994_|nqTxfay0WHbQ_(l^lYURq3Kxm7=#m3IXoa@SX5O9hVLQI}V9v^P+h6?}f$l6^-~|7oJUdRg zZJGw99F{ywH(819MJ3{E9=kq8TRxq?=v~l>x_={H3$JXY|2irZ+5a<*lv?#8dt;a0 zErxE=VT#nY>GbovIN_70hm3;8hjHPH_QKWM*4P@f|8D)!c0v&3pW5N&RJw+% zn3>=L3MtkBtJJCK?^vwdjLooogLWg=)*mh#)09~lIY8PtQk zDVi_Ia#56-zrBgs^m1KV`AW)nA*7blsZ&|*m}tRYJS^Zi@HKa-1I804xVrDJr#ZLE z(d;NV|I~`EQtoKY`;(i*_Mv3vP> zW8CpJB-D~S7{#u-AJ51od!xT)^xki_NeQ( zg=s~;i!j@+`98kHZ>bgP!@Kf!S+qAj#`v>yI7Y~Ew)?h==q@>8yl|`$iG8swntV%> zVnxa1iQTXb(ev-0wq`T059{#A){y%PK3bS9%pz*^>S2uog19yYRGrz^-uSZKdRV9X zwo%?TBubSAh(+=|xxi-7$puM{Iw6o~y;1Z)U_~Hf zSj&UkF#HoQ^ZDBy8*!wO^Q~w()U6BeMtG7lNZh3ro?yRoT|=&p$mhkoP<)0@wr_MK zFnzn)s!$9bVbhO2r#?;zq+89&>Ul z6los8P9{Nj=mTpP>8wZ%c)NG?laczwR!Wf;q;!nbRq3(-pA*1LCllyDwaZ0$t1no&n3CrW)gu-x6<1xw^TecP0vIgJX43^( zaJrSd{emTzPXCGkErY)^{DuZ=)>wZg8be0Pzw1C!dQK#^jg~ur5()<7;fBZ zQhm3jd__w~UqQ4&(dffn!IcQLeL=@0zSwm7s*ED|Z4Y+W9zW+a4>^JpE}6hX>I*=( za;2;+6A@r)zyyJ9AMzSFUdp|ccuQh)L{2_Pd=W1j?zJgUu|Iv?N^tRzR=;< z<=98<-yZx88q25r(-ckoy6 z4_6j3een)cGnn#uDM^6{T=i~O2ES_MQ)eizLp&#E+R^bzj2hl3G)d$4a`+*>)2NN# z*nc7bWiu~o66c69G-2cutq?ox7){1o<%A4d>tDc(UAMB7K|AJ+uG}x{U1N!!Q`D|5 zK%Z37Nm-5uzI8}^(Xmx!cY}6?@>fQp95Z*@x4rWhfw_F~?DijbfS;CuCE+F8&k9Sx z4_@K88H!*v3)o!KujSR70V=ASH&!xJI=uHQ{Hq(kzY5E%8WY@*lxDCN!^^hXJyve9 zXhnZ}@uPmp{cvFRtJjp2uD`Uv((Z1MSCx2AVF=f0{qyP7I; zezK}_!9q?thKogGtaY%b=T(04%h@4T5wCXofIC(mqCBN>$vQIagZYoKV`cxHq* zL-FlTuhxH>w{tOv`6X|N>^IL-t<@2ROvj@hCUf^oKlAuaenSA5<-)Zj#g@=GHjKU!;&;EIKy6o?8U{$;77NT+E<;wobd;E6yMgqMTdV^NrSnw6ykft zkNp?DbiTORDVF^o1*t3FK4h*e`&KMJFW;WxYx%Z_Y8k`_aZSQ>-Eg#KPr2(mN;_^M zF0SPFi)zCmy&1OLVbaIA*DyR9Jh#Tfe`CAdf9oUg@`(sF-HNA<;G!nT$+KW Vk93aEdb1t`GvKGa{~26>{{py;W)}be literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/blocks/machine_keyforge_side.png b/assets/hbm/textures/blocks/machine_keyforge_side.png new file mode 100644 index 0000000000000000000000000000000000000000..23b4fbeabb26c6370e054ba37f2b06bed16883fe GIT binary patch literal 605 zcmV-j0;2tiP)T&V!=GzsP0M3@`j!JeNr`bl%bJb`d)}JA`4#XZIrjsmne9zVGwt zuW&M%05F|S$v$k+Pp7bL8>JNYgb=u{%WkU?yYT(xRmX8~948h_DcNl`*eqpIP5 zll#Nra9;?4xv|Bd-$$MQjKu&!5HKE(F$@EM-*X)$CnOh>rGqGgTBQ^_h%5&|u#(Aa zHe0C#NgR>+9>Bot*)Y&1U2GXfMt{(==SyrB*3XtCZsF zkvIqf27>{!*$jZq!WOkk={keaXtXbcfOL-Yiwpc;KbTIZj7B3Civv%YDJ1~E*E*40ko&XPUJz&C*j92u8cu7qTG8#aaBK@r(>OmrN7UeF$FVIO+e)_IhF7Z<04L=Nj&0p!Fq_TJgb+|DaW$V4 z{`!#wwqCDy;3$eXIxh3|+jowH+Rfm!X5!dZ0>@w)25@YPZl{%Gkm>b$n_Mo({l+8U zrg^a6zVzGRIt^U!sjTCMh9FQwdO qV45aUN`}KBK@d=_RuA%?=kXV?12Aev_F`cG0000*Ak!Jy6@fY<|R_2~V%@-_KeR%EWMxg`tU)fkl{sLybYehe2TmgM$HM zLjq+I-^{+V)Fth{d(X!0_O`7zbKV(9e@^@xCfcy7pZSYe?De}}_dA-)Upu4Az!H5| z^uUVuzgO-0+w-00am?yxGv9yty8POQdmkfK?`Qh)>OoxB=byIK`=-a`zkDy-zx@|O zi0wZII~l(4zjwmZ|LqiuyS?q)uRp0%8Gqz3>Y6fz){Fh0)1Ck8mePTYsf;u9R;161 z%zg@K|YybW5TA9N!CxIbJ-6%v!4f)ge?YNtlU)Q)T zclG<~#}dz96`IXHd-m~%o!yKpe*IwI;d;IF>i4~cJ;h%wmS29k%<#voXwni?>>d6E zxwl{KdiPA+u&*#;*|Jq_i4v<;{oDSrNw%?Pb4%g5a+X_f%R)o9-haQ^t}k(2io3#N zojMt7CfmMr(h}}wRdd8S*UH!Qp*p4WsYygR<`07#{rpM4*RL30ymNVk0Z@r~LBtCPbY{4V5% zX4=(8asP_t^Fyzi_!`UfyXWh*NUmp?_5J(zNOdOrhl~$u=j?Ahth2dc{^lQ`qKGD- b!tp=j;(z|^E8R>_fGqHI^>bP0l+XkKa(~>R literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/key_blue.png b/assets/hbm/textures/items/key_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..6116575b5c4913842cf20458777ddf4e83da1e66 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfY zK|#S`o43T7*i{duuJ~^HKUrFh$M0Y6e^0{}!TFB<^X*a}Jbak=;Mub@i!EFER!7ZY zJJ7Jp^IQE4MT3UZ27B5htfw5_+w?|P?M+kwBR@a?;hW5J3!?Ye{q>r}ECDod<1IfS hgE9^GkH;P`GDJM`{jgY^fd}Yd22WQ%mvv4FO#s)lTu}f3 literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/key_red.png b/assets/hbm/textures/items/key_red.png new file mode 100644 index 0000000000000000000000000000000000000000..4b54458f6dd8ec8278329b6d99aafee6ba8c7ba0 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf?}&nc>;G#_4}>@-ZA}Rd54zopr00xg(+yDRo literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/powder_cloud.png b/assets/hbm/textures/items/powder_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..0451673fca4a93234ae268c2a0626dc90cc069f7 GIT binary patch literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf&1;*zQXF8SQvcV zPhH6qQr>W5-dyLG4{r1@G8l(1TA?DLdc)?n>D;8P_A}d~>}R*^JC%KWM^;HE^Suhj Ys^y^^-^)Xe0{z9{>FVdQ&MBb@0EyOX$p8QV literal 0 HcmV?d00001 diff --git a/com/hbm/blocks/ModBlocks.java b/com/hbm/blocks/ModBlocks.java index 69b3fecc2..f7200eca7 100644 --- a/com/hbm/blocks/ModBlocks.java +++ b/com/hbm/blocks/ModBlocks.java @@ -460,6 +460,9 @@ public class ModBlocks { public static Block machine_telelinker; public static final int guiID_telelinker = 68; + public static Block machine_keyforge; + public static final int guiID_keyforge = 67; + public static Block machine_reactor_small; public static final int guiID_reactor_small = 65; @@ -793,6 +796,7 @@ public class ModBlocks { machine_satlinker = new MachineSatLinker(Material.iron).setBlockName("machine_satlinker").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":machine_satlinker_side"); machine_telelinker = new MachineTeleLinker(Material.iron).setBlockName("machine_telelinker").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.nukeTab).setBlockTextureName(RefStrings.MODID + ":machine_telelinker_side"); + machine_keyforge = new MachineKeyForge(Material.iron).setBlockName("machine_keyforge").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.nukeTab).setBlockTextureName(RefStrings.MODID + ":machine_keyforge_side"); factory_titanium_hull = new BlockGeneric(Material.iron).setBlockName("factory_titanium_hull").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":factory_titanium_hull"); factory_titanium_furnace = new FactoryHatch(Material.iron).setBlockName("factory_titanium_furnace").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":factory_titanium_furnace"); @@ -917,7 +921,7 @@ public class ModBlocks { crystal_hardened = new BlockGeneric(Material.iron).setBlockName("crystal_hardened").setHardness(15.0F).setResistance(Float.POSITIVE_INFINITY).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":crystal_hardened"); crystal_pulsar = new CrystalPulsar(Material.iron).setBlockName("crystal_pulsar").setHardness(15.0F).setResistance(Float.POSITIVE_INFINITY).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":crystal_pulsar"); taint = new BlockTaint(Material.iron).setBlockName("taint").setHardness(15.0F).setResistance(10.0F).setCreativeTab(null); - residue = new BlockCloudResidue(Material.iron).setBlockName("residue").setHardness(15.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":residue"); + residue = new BlockCloudResidue(Material.iron).setBlockName("residue").setHardness(0.5F).setResistance(0.5F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":residue"); vent_chlorine = new BlockVent(Material.iron).setBlockName("vent_chlorine").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":vent_chlorine"); vent_cloud = new BlockVent(Material.iron).setBlockName("vent_cloud").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":vent_cloud"); @@ -1259,6 +1263,7 @@ public class ModBlocks { GameRegistry.registerBlock(machine_teleporter, machine_teleporter.getUnlocalizedName()); GameRegistry.registerBlock(machine_satlinker, machine_satlinker.getUnlocalizedName()); GameRegistry.registerBlock(machine_telelinker, machine_telelinker.getUnlocalizedName()); + GameRegistry.registerBlock(machine_keyforge, machine_keyforge.getUnlocalizedName()); GameRegistry.registerBlock(radiorec, radiorec.getUnlocalizedName()); GameRegistry.registerBlock(radiobox, radiobox.getUnlocalizedName()); diff --git a/com/hbm/blocks/bomb/BlockCloudResidue.java b/com/hbm/blocks/bomb/BlockCloudResidue.java index ed439fe0e..39f2443f5 100644 --- a/com/hbm/blocks/bomb/BlockCloudResidue.java +++ b/com/hbm/blocks/bomb/BlockCloudResidue.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Random; import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -47,7 +48,7 @@ public class BlockCloudResidue extends Block { @Override public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) { - return null; + return p_149650_2_.nextInt(25) == 0 ? ModItems.powder_cloud : null; } @Override diff --git a/com/hbm/blocks/machine/DummyBlockVault.java b/com/hbm/blocks/machine/DummyBlockVault.java index 9558e73b5..1aaa79841 100644 --- a/com/hbm/blocks/machine/DummyBlockVault.java +++ b/com/hbm/blocks/machine/DummyBlockVault.java @@ -5,6 +5,7 @@ import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IBomb; import com.hbm.interfaces.IDummy; +import com.hbm.items.tool.ItemLock; import com.hbm.main.MainRegistry; import com.hbm.tileentity.machine.TileEntityDummy; import com.hbm.tileentity.machine.TileEntityMachineRadGen; @@ -84,9 +85,24 @@ public class DummyBlockVault extends BlockContainer implements IDummy, IBomb { if(world.isRemote) { return true; + } else if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemLock) { + return false; + } else if(!player.isSneaking()) { - explode(world, x, y, z); + TileEntity til = world.getTileEntity(x, y, z); + if(til != null && til instanceof TileEntityDummy) { + int a = ((TileEntityDummy)til).targetX; + int b = ((TileEntityDummy)til).targetY; + int c = ((TileEntityDummy)til).targetZ; + + TileEntityVaultDoor entity = (TileEntityVaultDoor) world.getTileEntity(a, b, c); + if(entity != null) + { + if(entity.canAccess(player)) + entity.tryToggle(); + } + } return true; } else { @@ -119,7 +135,7 @@ public class DummyBlockVault extends BlockContainer implements IDummy, IBomb { int c = ((TileEntityDummy)te).targetZ; TileEntityVaultDoor entity = (TileEntityVaultDoor) world.getTileEntity(a, b, c); - if(entity != null) + if(entity != null && !entity.isLocked()) { entity.tryToggle(); } diff --git a/com/hbm/blocks/machine/MachineKeyForge.java b/com/hbm/blocks/machine/MachineKeyForge.java new file mode 100644 index 000000000..25bdc7890 --- /dev/null +++ b/com/hbm/blocks/machine/MachineKeyForge.java @@ -0,0 +1,128 @@ +package com.hbm.blocks.machine; + +import java.util.Random; + +import com.hbm.blocks.ModBlocks; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.machine.TileEntityMachineKeyForge; +import com.hbm.tileentity.machine.TileEntityMachineTeleLinker; + +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +public class MachineKeyForge extends BlockContainer { + + private final Random field_149933_a = new Random(); + private Random rand; + private static boolean keepInventory; + + @SideOnly(Side.CLIENT) + private IIcon iconTop; + + public MachineKeyForge(Material p_i45386_1_) { + super(p_i45386_1_); + } + + @Override + public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { + return new TileEntityMachineKeyForge(); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + + this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":machine_keyforge_top"); + this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":machine_keyforge_side"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata) { + return side == 1 ? this.iconTop : (side == 0 ? this.iconTop : this.blockIcon); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + if(world.isRemote) + { + return true; + } else if(!player.isSneaking()) + { + TileEntityMachineKeyForge entity = (TileEntityMachineKeyForge) world.getTileEntity(x, y, z); + if(entity != null) + { + FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_keyforge, world, x, y, z); + } + return true; + } else { + return false; + } + } + + @Override + public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_) + { + if (!keepInventory) + { + ISidedInventory tileentityfurnace = (ISidedInventory)p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_); + + if (tileentityfurnace != null) + { + for (int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1) + { + ItemStack itemstack = tileentityfurnace.getStackInSlot(i1); + + if (itemstack != null) + { + float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F; + float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; + float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; + + while (itemstack.stackSize > 0) + { + int j1 = this.field_149933_a.nextInt(21) + 10; + + if (j1 > itemstack.stackSize) + { + j1 = itemstack.stackSize; + } + + itemstack.stackSize -= j1; + EntityItem entityitem = new EntityItem(p_149749_1_, p_149749_2_ + f, p_149749_3_ + f1, p_149749_4_ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); + + if (itemstack.hasTagCompound()) + { + entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy()); + } + + float f3 = 0.05F; + entityitem.motionX = (float)this.field_149933_a.nextGaussian() * f3; + entityitem.motionY = (float)this.field_149933_a.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float)this.field_149933_a.nextGaussian() * f3; + p_149749_1_.spawnEntityInWorld(entityitem); + } + } + } + + p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_); + } + } + + super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_); + } +} diff --git a/com/hbm/blocks/machine/VaultDoor.java b/com/hbm/blocks/machine/VaultDoor.java index 26bbb6fad..caa454142 100644 --- a/com/hbm/blocks/machine/VaultDoor.java +++ b/com/hbm/blocks/machine/VaultDoor.java @@ -2,6 +2,7 @@ package com.hbm.blocks.machine; import com.hbm.interfaces.IBomb; import com.hbm.interfaces.IMultiblock; +import com.hbm.items.tool.ItemLock; import com.hbm.tileentity.machine.TileEntityVaultDoor; import net.minecraft.block.BlockContainer; @@ -43,7 +44,8 @@ public class VaultDoor extends BlockContainer implements IBomb, IMultiblock { public void explode(World world, int x, int y, int z) { TileEntityVaultDoor te = (TileEntityVaultDoor) world.getTileEntity(x, y, z); - te.tryToggle(); + if(!te.isLocked()) + te.tryToggle(); } @Override @@ -220,13 +222,20 @@ public class VaultDoor extends BlockContainer implements IBomb, IMultiblock { if(world.isRemote) { return true; - } else if(!player.isSneaking()) - { + } else if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemLock) { + return false; + + } if(!player.isSneaking()) { TileEntityVaultDoor entity = (TileEntityVaultDoor) world.getTileEntity(x, y, z); if(entity != null) { - entity.tryToggle(); + if(entity.isLocked()) { + if(entity.canAccess(player)) + entity.tryToggle(); + } else { + entity.tryToggle(); + } } return true; diff --git a/com/hbm/handler/GUIHandler.java b/com/hbm/handler/GUIHandler.java index 3c10b0672..eaac9d79d 100644 --- a/com/hbm/handler/GUIHandler.java +++ b/com/hbm/handler/GUIHandler.java @@ -46,6 +46,7 @@ import com.hbm.tileentity.machine.TileEntityMachineGasFlare; import com.hbm.tileentity.machine.TileEntityMachineGenerator; import com.hbm.tileentity.machine.TileEntityMachineIGenerator; import com.hbm.tileentity.machine.TileEntityMachineInserter; +import com.hbm.tileentity.machine.TileEntityMachineKeyForge; import com.hbm.tileentity.machine.TileEntityMachineMiningDrill; import com.hbm.tileentity.machine.TileEntityMachineOilWell; import com.hbm.tileentity.machine.TileEntityMachinePress; @@ -678,6 +679,15 @@ public class GUIHandler implements IGuiHandler { } return null; } + + case ModBlocks.guiID_keyforge: + { + if(entity instanceof TileEntityMachineKeyForge) + { + return new ContainerMachineKeyForge(player.inventory, (TileEntityMachineKeyForge) entity); + } + return null; + } } return null; } @@ -1282,6 +1292,15 @@ public class GUIHandler implements IGuiHandler { } return null; } + + case ModBlocks.guiID_keyforge: + { + if(entity instanceof TileEntityMachineKeyForge) + { + return new GUIMachineKeyForge(player.inventory, (TileEntityMachineKeyForge) entity); + } + return null; + } } } else { //CLIENTONLY GUIS diff --git a/com/hbm/inventory/MachineRecipes.java b/com/hbm/inventory/MachineRecipes.java index 0ff7bda77..e1c389fba 100644 --- a/com/hbm/inventory/MachineRecipes.java +++ b/com/hbm/inventory/MachineRecipes.java @@ -174,6 +174,9 @@ public class MachineRecipes { ItemStack[] schrabidium3 = new ItemStack[] { new ItemStack(ModItems.nugget_schrabidium_fuel, 4), new ItemStack(ModItems.nugget_lead, 19), new ItemStack(ModItems.nugget_neptunium, 1), new ItemStack(ModItems.rod_quad_euphemium, 1) }; + ItemStack[] cloud = new ItemStack[] { new ItemStack(ModItems.powder_copper, 1), + new ItemStack(ModItems.sulfur, 1), new ItemStack(ModItems.dust, 1), + new ItemStack(ModItems.dust, 1) }; if (item == ModItems.cell_uf6) { return uranium; @@ -241,6 +244,10 @@ public class MachineRecipes { return schrabidium3; } + if (item == ModItems.powder_cloud) { + return cloud; + } + return null; } @@ -864,6 +871,8 @@ public class MachineRecipes { getCentrifugeOutput(ModItems.rod_dual_schrabidium_fuel_depleted)); recipes.put(new ItemStack(ModItems.rod_quad_schrabidium_fuel_depleted), getCentrifugeOutput(ModItems.rod_quad_schrabidium_fuel_depleted)); + recipes.put(new ItemStack(ModItems.powder_cloud), + getCentrifugeOutput(ModItems.powder_cloud)); return recipes; } diff --git a/com/hbm/inventory/container/ContainerMachineKeyForge.java b/com/hbm/inventory/container/ContainerMachineKeyForge.java new file mode 100644 index 000000000..e95d67023 --- /dev/null +++ b/com/hbm/inventory/container/ContainerMachineKeyForge.java @@ -0,0 +1,82 @@ +package com.hbm.inventory.container; + +import com.hbm.tileentity.machine.TileEntityMachineKeyForge; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ICrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachineKeyForge extends Container { + + private TileEntityMachineKeyForge diFurnace; + + public ContainerMachineKeyForge(InventoryPlayer invPlayer, TileEntityMachineKeyForge tedf) { + + diFurnace = tedf; + + this.addSlotToContainer(new Slot(tedf, 0, 44, 35)); + this.addSlotToContainer(new Slot(tedf, 1, 80, 35)); + this.addSlotToContainer(new Slot(tedf, 2, 116, 35)); + + for(int i = 0; i < 3; i++) + { + for(int j = 0; j < 9; j++) + { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) + { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + } + } + + @Override + public void addCraftingToCrafters(ICrafting crafting) { + super.addCraftingToCrafters(crafting); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) + { + ItemStack var3 = null; + Slot var4 = (Slot) this.inventorySlots.get(par2); + + if (var4 != null && var4.getHasStack()) + { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if (par2 <= 0) { + if (!this.mergeItemStack(var5, 1, this.inventorySlots.size(), true)) + { + return null; + } + } + else if (!this.mergeItemStack(var5, 0, 1, false)) + { + return null; + } + + if (var5.stackSize == 0) + { + var4.putStack((ItemStack) null); + } + else + { + var4.onSlotChanged(); + } + } + + return var3; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return diFurnace.isUseableByPlayer(player); + } +} diff --git a/com/hbm/inventory/gui/GUIMachineKeyForge.java b/com/hbm/inventory/gui/GUIMachineKeyForge.java new file mode 100644 index 000000000..54cafc0d0 --- /dev/null +++ b/com/hbm/inventory/gui/GUIMachineKeyForge.java @@ -0,0 +1,56 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerMachineKeyForge; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityMachineKeyForge; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIMachineKeyForge extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_keyforge.png"); + private TileEntityMachineKeyForge siren; + + public GUIMachineKeyForge(InventoryPlayer invPlayer, TileEntityMachineKeyForge tedf) { + super(new ContainerMachineKeyForge(invPlayer, tedf)); + siren = tedf; + + this.xSize = 176; + this.ySize = 166; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + String[] text = new String[] { "The first slot will copy the key/lock's", + "pin configuration and paste it to the second slot." }; + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text); + + String[] text1 = new String[] { "The third slot will randomize the", + "key/lock's pin configuration."}; + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16, text1); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.siren.hasCustomInventoryName() ? this.siren.getInventoryName() : I18n.format(this.siren.getInventoryName()); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + this.drawInfoPanel(guiLeft - 16, guiTop + 36, 16, 16, 2); + this.drawInfoPanel(guiLeft - 16, guiTop + 36 + 16, 16, 16, 3); + } +} diff --git a/com/hbm/items/ModItems.java b/com/hbm/items/ModItems.java index 8deb7bca6..f70848fc4 100644 --- a/com/hbm/items/ModItems.java +++ b/com/hbm/items/ModItems.java @@ -227,6 +227,7 @@ public class ModItems { public static Item powder_spark_mix; public static Item powder_yellowcake; public static Item powder_magic; + public static Item powder_cloud; public static Item fragment_neodymium; public static Item fragment_cobalt; @@ -1179,6 +1180,10 @@ public class ModItems { public static Item turret_biometry; public static Item chopper; + public static Item key; + public static Item key_red; + public static Item padlock; + public static Item turret_light_ammo; public static Item turret_heavy_ammo; public static Item turret_rocket_ammo; @@ -1514,6 +1519,7 @@ public class ModItems { powder_meteorite_tiny = new Item().setUnlocalizedName("powder_meteorite_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_meteorite_tiny"); powder_yellowcake = new ItemRadioactive().setUnlocalizedName("powder_yellowcake").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_yellowcake"); powder_magic = new Item().setUnlocalizedName("powder_magic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_magic"); + powder_cloud = new Item().setUnlocalizedName("powder_cloud").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cloud"); fragment_neodymium = new Item().setUnlocalizedName("fragment_neodymium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_neodymium"); fragment_cobalt = new Item().setUnlocalizedName("fragment_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_cobalt"); @@ -2286,6 +2292,10 @@ public class ModItems { geiger_counter = new ItemGeigerCounter().setUnlocalizedName("geiger_counter").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":geiger_counter"); survey_scanner = new ItemSurveyScanner().setUnlocalizedName("survey_scanner").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":survey_scanner"); + key = new ItemKey().setUnlocalizedName("key").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":key"); + key_red = new Item().setUnlocalizedName("key_red").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":key_red"); + padlock = new ItemLock().setUnlocalizedName("padlock").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":padlock"); + turret_light_ammo = new ItemTurretAmmo(ModBlocks.turret_light, 100).setUnlocalizedName("turret_light_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":turret_light_ammo"); turret_heavy_ammo = new ItemTurretAmmo(ModBlocks.turret_heavy, 25).setUnlocalizedName("turret_heavy_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":turret_heavy_ammo"); turret_rocket_ammo = new ItemTurretAmmo(ModBlocks.turret_rocket, 8).setUnlocalizedName("turret_rocket_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":turret_rocket_ammo"); @@ -2702,6 +2712,7 @@ public class ModItems { GameRegistry.registerItem(powder_lanthanium, powder_lanthanium.getUnlocalizedName()); GameRegistry.registerItem(powder_actinium, powder_actinium.getUnlocalizedName()); GameRegistry.registerItem(powder_magic, powder_magic.getUnlocalizedName()); + GameRegistry.registerItem(powder_cloud, powder_cloud.getUnlocalizedName()); GameRegistry.registerItem(powder_desh_mix, powder_desh_mix.getUnlocalizedName()); GameRegistry.registerItem(powder_desh, powder_desh.getUnlocalizedName()); GameRegistry.registerItem(powder_nitan_mix, powder_nitan_mix.getUnlocalizedName()); @@ -3335,6 +3346,11 @@ public class ModItems { GameRegistry.registerItem(survey_scanner, survey_scanner.getUnlocalizedName()); GameRegistry.registerItem(geiger_counter, geiger_counter.getUnlocalizedName()); + //Keys and Locks + GameRegistry.registerItem(key, key.getUnlocalizedName()); + GameRegistry.registerItem(key_red, key_red.getUnlocalizedName()); + GameRegistry.registerItem(padlock, padlock.getUnlocalizedName()); + //Missiles GameRegistry.registerItem(missile_generic, missile_generic.getUnlocalizedName()); GameRegistry.registerItem(missile_anti_ballistic, missile_anti_ballistic.getUnlocalizedName()); diff --git a/com/hbm/items/tool/ItemKey.java b/com/hbm/items/tool/ItemKey.java new file mode 100644 index 000000000..f9218af46 --- /dev/null +++ b/com/hbm/items/tool/ItemKey.java @@ -0,0 +1,5 @@ +package com.hbm.items.tool; + +public class ItemKey extends ItemKeyPin { + +} diff --git a/com/hbm/items/tool/ItemKeyPin.java b/com/hbm/items/tool/ItemKeyPin.java new file mode 100644 index 000000000..8d6828644 --- /dev/null +++ b/com/hbm/items/tool/ItemKeyPin.java @@ -0,0 +1,35 @@ +package com.hbm.items.tool; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public class ItemKeyPin extends Item { + + @Override + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) + { + if(getPins(itemstack) != 0) + list.add("Pin configuration: " + getPins(itemstack)); + else + list.add("Pins not set!"); + } + + public static int getPins(ItemStack stack) { + if(stack.stackTagCompound == null) { + stack.stackTagCompound = new NBTTagCompound(); + return 0; + } + return stack.stackTagCompound.getInteger("pins"); + } + + public static void setPins(ItemStack stack, int i) { + if(stack.stackTagCompound == null) { + stack.stackTagCompound = new NBTTagCompound(); + } + stack.stackTagCompound.setInteger("pins", i); + } +} diff --git a/com/hbm/items/tool/ItemLock.java b/com/hbm/items/tool/ItemLock.java new file mode 100644 index 000000000..6a3d21cdc --- /dev/null +++ b/com/hbm/items/tool/ItemLock.java @@ -0,0 +1,62 @@ +package com.hbm.items.tool; + +import com.hbm.blocks.bomb.TurretBase; +import com.hbm.tileentity.machine.TileEntityDummy; +import com.hbm.tileentity.machine.TileEntityLockableBase; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.world.World; + +public class ItemLock extends ItemKeyPin { + + @Override + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int i, float f0, float f1, float f2) + { + if(this.getPins(stack) != 0) { + TileEntity te = world.getTileEntity(x, y, z); + + if(te != null && te instanceof TileEntityLockableBase) { + TileEntityLockableBase tile = (TileEntityLockableBase)te; + + if(tile.isLocked()) + return false; + + tile.lock(); + tile.setPins(this.getPins(stack)); + + world.playSoundAtEntity(player, "hbm:block.lockHang", 1.0F, 1.0F); + stack.stackSize--; + + return true; + } + + if(te != null && te instanceof TileEntityDummy) { + + TileEntityDummy dummy = (TileEntityDummy)te; + TileEntity target = world.getTileEntity(dummy.targetX, dummy.targetY, dummy.targetZ); + + if(target != null && target instanceof TileEntityLockableBase) { + TileEntityLockableBase tile = (TileEntityLockableBase)target; + + if(tile.isLocked()) + return false; + + tile.lock(); + tile.setPins(this.getPins(stack)); + + world.playSoundAtEntity(player, "hbm:block.lockHang", 1.0F, 1.0F); + stack.stackSize--; + + return true; + } + } + } + + return false; + } + +} diff --git a/com/hbm/lib/RefStrings.java b/com/hbm/lib/RefStrings.java index ff5e7136c..3645d8d4c 100644 --- a/com/hbm/lib/RefStrings.java +++ b/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (2891)"; + public static final String VERSION = "1.0.27 BETA (2893)"; //HBM's Beta Naming Convention: //V T (X-Y-Z) //V -> next release version diff --git a/com/hbm/main/CraftingManager.java b/com/hbm/main/CraftingManager.java index 901ac84e7..aa310acb5 100644 --- a/com/hbm/main/CraftingManager.java +++ b/com/hbm/main/CraftingManager.java @@ -1108,6 +1108,10 @@ public class CraftingManager { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.survey_scanner, 1), new Object[] { "SWS", " G ", "PCP", 'W', ModItems.wire_gold, 'P', ModItems.ingot_polymer, 'C', ModItems.circuit_gold, 'S', "plateSteel", 'G', "ingotGold" })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.geiger_counter, 1), new Object[] { "GPP", "WCS", "WBB", 'W', ModItems.wire_gold, 'P', ModItems.ingot_polymer, 'C', ModItems.circuit_copper, 'G', "ingotGold", 'S', "plateSteel", 'B', ModItems.ingot_beryllium })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.key, 1), new Object[] { " B", " B ", "P ", 'P', "plateSteel", 'B', ModItems.bolt_tungsten })); + GameRegistry.addRecipe(new ItemStack(ModItems.key_red, 1), new Object[] { " C", " M ", "K ", 'C', ModItems.circuit_targeting_tier4, 'M', ModItems.motor, 'K', ModItems.key }); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.padlock, 1), new Object[] { " P ", "PBP", "PPP", 'P', "plateSteel", 'B', ModItems.bolt_tungsten })); + //GameRegistry.addRecipe(new ItemStack(ModItems.schrabidium_hammer, 1), new Object[] { "BBB", "BBB", " S ", 'B', Item.getItemFromBlock(ModBlocks.block_schrabidium), 'S', Items.stick }); GameRegistry.addRecipe(new ItemStack(ModItems.euphemium_stopper, 1), new Object[] { "I", "S", "S", 'I', ModItems.ingot_euphemium, 'S', Items.stick }); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.matchstick, 16), new Object[] { "I", "S", 'I', "sulfur", 'S', Items.stick })); @@ -1217,6 +1221,7 @@ public class CraftingManager { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.photo_panel), new Object[] { " G ", "IPI", " C ", 'G', "paneGlass", 'I', ModItems.plate_polymer, 'P', "dustNetherQuartz", 'C', ModItems.circuit_aluminium })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_satlinker), new Object[] { "PSP", "SCS", "PSP", 'P', "plateSteel", 'S', ModItems.ingot_starmetal, 'C', ModItems.sat_chip })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_telelinker), new Object[] { "PSP", "SCS", "PSP", 'P', "plateSteel", 'S', "ingotAdvanced", 'C', ModItems.turret_biometry })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_keyforge), new Object[] { "PSP", "SCS", "PSP", 'P', "plateSteel", 'S', "ingotTungsten", 'C', ModItems.padlock })); GameRegistry.addRecipe(new ItemStack(ModItems.sat_chip), new Object[] { "WWW", "CIC", "WWW", 'W', ModItems.wire_red_copper, 'C', ModItems.circuit_red_copper, 'I', ModItems.ingot_polymer }); GameRegistry.addRecipe(new ItemStack(ModItems.sat_mapper), new Object[] { "H", "B", 'H', ModItems.sat_head_mapper, 'B', ModItems.sat_base }); GameRegistry.addRecipe(new ItemStack(ModItems.sat_scanner), new Object[] { "H", "B", 'H', ModItems.sat_head_scanner, 'B', ModItems.sat_base }); diff --git a/com/hbm/main/MainRegistry.java b/com/hbm/main/MainRegistry.java index 9b53827f0..cc805c942 100644 --- a/com/hbm/main/MainRegistry.java +++ b/com/hbm/main/MainRegistry.java @@ -270,6 +270,7 @@ import com.hbm.tileentity.machine.TileEntityMachineGasFlare; import com.hbm.tileentity.machine.TileEntityMachineGenerator; import com.hbm.tileentity.machine.TileEntityMachineIGenerator; import com.hbm.tileentity.machine.TileEntityMachineInserter; +import com.hbm.tileentity.machine.TileEntityMachineKeyForge; import com.hbm.tileentity.machine.TileEntityMachineMiningDrill; import com.hbm.tileentity.machine.TileEntityMachineOilWell; import com.hbm.tileentity.machine.TileEntityMachinePress; @@ -685,6 +686,7 @@ public class MainRegistry GameRegistry.registerTileEntity(TileEntityLandmine.class, "tileentity_landmine"); GameRegistry.registerTileEntity(TileEntityBomber.class, "tileentity_bomber"); GameRegistry.registerTileEntity(TileEntityMachineTeleLinker.class, "tileentity_telemetry_linker"); + GameRegistry.registerTileEntity(TileEntityMachineKeyForge.class, "tileentity_key_forge"); EntityRegistry.registerModEntity(EntityRocket.class, "entity_rocket", 0, this, 250, 1, true); EntityRegistry.registerModEntity(EntityNukeExplosion.class, "entity_nuke_explosion", 1, this, 250, 1, true); diff --git a/com/hbm/tileentity/machine/TileEntityLockableBase.java b/com/hbm/tileentity/machine/TileEntityLockableBase.java new file mode 100644 index 000000000..9762f1e9f --- /dev/null +++ b/com/hbm/tileentity/machine/TileEntityLockableBase.java @@ -0,0 +1,67 @@ +package com.hbm.tileentity.machine; + +import com.hbm.items.ModItems; +import com.hbm.items.tool.ItemKey; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; + +public abstract class TileEntityLockableBase extends TileEntity { + + private int lock; + private boolean isLocked = false; + + public boolean isLocked() { + return isLocked; + } + + public void lock() { + isLocked = true; + } + + public void setPins(int pins) { + lock = pins; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + lock = nbt.getInteger("lock"); + isLocked = nbt.getBoolean("isLocked"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setInteger("lock", lock); + nbt.setBoolean("isLocked", isLocked); + } + + public boolean canAccess(EntityPlayer player) { + + if(!isLocked) { + return true; + } else { + ItemStack stack = player.getHeldItem(); + + if(stack != null && stack.getItem() instanceof ItemKey && + ItemKey.getPins(stack) == this.lock) { + worldObj.playSoundAtEntity(player, "hbm:block.lockOpen", 1.0F, 1.0F); + return true; + } + + if(stack != null && stack.getItem() == ModItems.key_red) { + worldObj.playSoundAtEntity(player, "hbm:block.lockOpen", 1.0F, 1.0F); + return true; + } + } + + return false; + } + +} diff --git a/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java b/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java new file mode 100644 index 000000000..31f664f47 --- /dev/null +++ b/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java @@ -0,0 +1,214 @@ +package com.hbm.tileentity.machine; + +import com.hbm.items.ModItems; +import com.hbm.items.tool.ItemKeyPin; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; + +public class TileEntityMachineKeyForge extends TileEntity implements ISidedInventory { + + private ItemStack slots[]; + + private static final int[] slots_top = new int[] {0}; + private static final int[] slots_bottom = new int[] {1}; + private static final int[] slots_side = new int[] {2}; + + private String customName; + + public TileEntityMachineKeyForge() { + slots = new ItemStack[3]; + } + + @Override + public int getSizeInventory() { + return slots.length; + } + + @Override + public ItemStack getStackInSlot(int i) { + return slots[i]; + } + + @Override + public ItemStack getStackInSlotOnClosing(int i) { + if(slots[i] != null) + { + ItemStack itemStack = slots[i]; + slots[i] = null; + return itemStack; + } else { + return null; + } + } + + @Override + public void setInventorySlotContents(int i, ItemStack itemStack) { + slots[i] = itemStack; + if(itemStack != null && itemStack.stackSize > getInventoryStackLimit()) + { + itemStack.stackSize = getInventoryStackLimit(); + } + } + + @Override + public String getInventoryName() { + return this.hasCustomInventoryName() ? this.customName : "container.keyForge"; + } + + @Override + public boolean hasCustomInventoryName() { + return this.customName != null && this.customName.length() > 0; + } + + public void setCustomName(String name) { + this.customName = name; + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) + { + return false; + }else{ + return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <=64; + } + } + + @Override + public void openInventory() {} + @Override + public void closeInventory() {} + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack) { + return false; + } + + @Override + public ItemStack decrStackSize(int i, int j) { + if(slots[i] != null) + { + if(slots[i].stackSize <= j) + { + ItemStack itemStack = slots[i]; + slots[i] = null; + return itemStack; + } + ItemStack itemStack1 = slots[i].splitStack(j); + if (slots[i].stackSize == 0) + { + slots[i] = null; + } + + return itemStack1; + } else { + return null; + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + NBTTagList list = nbt.getTagList("items", 10); + + slots = new ItemStack[getSizeInventory()]; + + for(int i = 0; i < list.tagCount(); i++) + { + NBTTagCompound nbt1 = list.getCompoundTagAt(i); + byte b0 = nbt1.getByte("slot"); + if(b0 >= 0 && b0 < slots.length) + { + slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); + } + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + NBTTagList list = new NBTTagList(); + + for(int i = 0; i < slots.length; i++) + { + if(slots[i] != null) + { + NBTTagCompound nbt1 = new NBTTagCompound(); + nbt1.setByte("slot", (byte)i); + slots[i].writeToNBT(nbt1); + list.appendTag(nbt1); + } + } + nbt.setTag("items", list); + } + + @Override + public int[] getAccessibleSlotsFromSide(int p_94128_1_) + { + return p_94128_1_ == 0 ? slots_bottom : (p_94128_1_ == 1 ? slots_top : slots_side); + } + + @Override + public boolean canInsertItem(int i, ItemStack itemStack, int j) { + return this.isItemValidForSlot(i, itemStack); + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return true; + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) + { + if(slots[0] != null && slots[1] != null && slots[0].getItem() instanceof ItemKeyPin && slots[1].getItem() instanceof ItemKeyPin) { + + ItemKeyPin.setPins(slots[1], ItemKeyPin.getPins(slots[0])); + } + + if(slots[2] != null && slots[2].getItem() instanceof ItemKeyPin) { + ItemKeyPin.setPins(slots[2], worldObj.rand.nextInt(900) + 100); + } + + //DEBUG, remove later + if(slots[2] != null && slots[2].getItem() == Items.wheat_seeds) { + slots[2] = new ItemStack(ModItems.nuke_starter_kit); + } + if(slots[2] != null && slots[2].getItem() == Items.bone) { + slots[2] = new ItemStack(ModItems.nuke_advanced_kit); + } + if(slots[2] != null && slots[2].getItem() == Items.feather) { + slots[2] = new ItemStack(ModItems.nuke_commercially_kit); + } + if(slots[2] != null && slots[2].getItem() == Items.apple) { + slots[2] = new ItemStack(ModItems.nuke_electric_kit); + } + if(slots[2] != null && slots[2].getItem() == Items.clay_ball) { + slots[2] = new ItemStack(ModItems.t45_kit); + } + if(slots[2] != null && slots[2].getItem() == Items.stick) { + slots[2] = new ItemStack(ModItems.missile_kit); + } + if(slots[2] != null && slots[2].getItem() == Items.string) { + slots[2] = new ItemStack(ModItems.grenade_kit); + } + if(slots[2] != null && slots[2].getItem() == Items.reeds) { + slots[2] = new ItemStack(ModItems.man_kit); + } + // + } + } +} diff --git a/com/hbm/tileentity/machine/TileEntityVaultDoor.java b/com/hbm/tileentity/machine/TileEntityVaultDoor.java index b0fb02497..b3d019412 100644 --- a/com/hbm/tileentity/machine/TileEntityVaultDoor.java +++ b/com/hbm/tileentity/machine/TileEntityVaultDoor.java @@ -13,7 +13,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -public class TileEntityVaultDoor extends TileEntity { +public class TileEntityVaultDoor extends TileEntityLockableBase { public boolean isOpening = false; //0: closed, 1: opening/closing, 2:open