From f96761f8ae0a115aac69c4a04a45badd107a7503 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Tue, 16 Oct 2018 16:16:32 +0200 Subject: [PATCH] ironshod, bouncy grenades, mk4 for cyclotron --- assets/hbm/lang/de_DE.lang | 14 + assets/hbm/lang/en_US.lang | 14 + assets/hbm/sounds/alarm/foKlaxonA.ogg | Bin 15305 -> 17402 bytes assets/hbm/sounds/alarm/foKlaxonB.ogg | Bin 17865 -> 19635 bytes .../hbm/textures/items/grenade_if_bouncy.png | Bin 0 -> 315 bytes .../textures/items/grenade_if_brimstone.png | Bin 0 -> 299 bytes .../textures/items/grenade_if_concussion.png | Bin 0 -> 321 bytes .../hbm/textures/items/grenade_if_generic.png | Bin 0 -> 308 bytes assets/hbm/textures/items/grenade_if_he.png | Bin 0 -> 313 bytes .../hbm/textures/items/grenade_if_hopwire.png | Bin 0 -> 314 bytes .../hbm/textures/items/grenade_if_impact.png | Bin 0 -> 297 bytes .../textures/items/grenade_if_incendiary.png | Bin 0 -> 317 bytes .../hbm/textures/items/grenade_if_mystery.png | Bin 0 -> 322 bytes assets/hbm/textures/items/grenade_if_null.png | Bin 0 -> 326 bytes .../hbm/textures/items/grenade_if_spark.png | Bin 0 -> 320 bytes .../hbm/textures/items/grenade_if_sticky.png | Bin 0 -> 324 bytes .../hbm/textures/items/grenade_if_toxic.png | Bin 0 -> 322 bytes com/hbm/blocks/test/TestEventTester.java | 18 +- .../grenade/EntityGrenadeBlackHole.java | 14 +- .../grenade/EntityGrenadeBouncyBase.java | 246 ++++++++++++++++++ .../entity/grenade/EntityGrenadeBurst.java | 33 +-- .../entity/grenade/EntityGrenadeCluster.java | 14 +- .../entity/grenade/EntityGrenadeElectric.java | 15 +- com/hbm/entity/grenade/EntityGrenadeFire.java | 14 +- com/hbm/entity/grenade/EntityGrenadeFrag.java | 14 +- com/hbm/entity/grenade/EntityGrenadeGas.java | 14 +- .../entity/grenade/EntityGrenadeGeneric.java | 12 +- .../entity/grenade/EntityGrenadeIFBouncy.java | 48 ++++ .../grenade/EntityGrenadeIFBrimstone.java | 96 +++++++ .../grenade/EntityGrenadeIFConcussion.java | 47 ++++ .../grenade/EntityGrenadeIFGeneric.java | 48 ++++ com/hbm/entity/grenade/EntityGrenadeIFHE.java | 48 ++++ .../grenade/EntityGrenadeIFHopwire.java | 51 ++++ .../entity/grenade/EntityGrenadeIFImpact.java | 38 +++ .../grenade/EntityGrenadeIFIncendiary.java | 53 ++++ .../grenade/EntityGrenadeIFMystery.java | 46 ++++ .../entity/grenade/EntityGrenadeIFNull.java | 69 +++++ .../entity/grenade/EntityGrenadeIFSpark.java | 51 ++++ .../entity/grenade/EntityGrenadeIFSticky.java | 48 ++++ .../entity/grenade/EntityGrenadeIFToxic.java | 53 ++++ .../entity/grenade/EntityGrenadeLemon.java | 15 +- com/hbm/entity/grenade/EntityGrenadeMIRV.java | 33 +-- com/hbm/entity/grenade/EntityGrenadeMk2.java | 14 +- .../entity/grenade/EntityGrenadeNuclear.java | 14 +- .../entity/grenade/EntityGrenadePlasma.java | 15 +- .../entity/grenade/EntityGrenadePoison.java | 14 +- .../entity/grenade/EntityGrenadePulse.java | 14 +- .../grenade/EntityGrenadeSchrabidium.java | 14 +- .../entity/grenade/EntityGrenadeShrapnel.java | 14 +- .../entity/grenade/EntityGrenadeStrong.java | 14 +- com/hbm/entity/grenade/EntityGrenadeTau.java | 14 +- com/hbm/entity/grenade/EntityGrenadeZOMG.java | 14 +- com/hbm/entity/projectile/EntityBullet.java | 1 + com/hbm/explosion/ExplosionLarge.java | 52 ++++ com/hbm/items/ModItems.java | 99 +++++-- com/hbm/items/weapon/ItemGrenade.java | 80 +++++- com/hbm/main/ClientProxy.java | 13 + com/hbm/main/MainRegistry.java | 123 ++++++++- .../machine/TileEntityMachineCyclotron.java | 4 +- 59 files changed, 1595 insertions(+), 84 deletions(-) create mode 100644 assets/hbm/textures/items/grenade_if_bouncy.png create mode 100644 assets/hbm/textures/items/grenade_if_brimstone.png create mode 100644 assets/hbm/textures/items/grenade_if_concussion.png create mode 100644 assets/hbm/textures/items/grenade_if_generic.png create mode 100644 assets/hbm/textures/items/grenade_if_he.png create mode 100644 assets/hbm/textures/items/grenade_if_hopwire.png create mode 100644 assets/hbm/textures/items/grenade_if_impact.png create mode 100644 assets/hbm/textures/items/grenade_if_incendiary.png create mode 100644 assets/hbm/textures/items/grenade_if_mystery.png create mode 100644 assets/hbm/textures/items/grenade_if_null.png create mode 100644 assets/hbm/textures/items/grenade_if_spark.png create mode 100644 assets/hbm/textures/items/grenade_if_sticky.png create mode 100644 assets/hbm/textures/items/grenade_if_toxic.png create mode 100644 com/hbm/entity/grenade/EntityGrenadeBouncyBase.java create mode 100644 com/hbm/entity/grenade/EntityGrenadeIFBouncy.java create mode 100644 com/hbm/entity/grenade/EntityGrenadeIFBrimstone.java create mode 100644 com/hbm/entity/grenade/EntityGrenadeIFConcussion.java create mode 100644 com/hbm/entity/grenade/EntityGrenadeIFGeneric.java create mode 100644 com/hbm/entity/grenade/EntityGrenadeIFHE.java create mode 100644 com/hbm/entity/grenade/EntityGrenadeIFHopwire.java create mode 100644 com/hbm/entity/grenade/EntityGrenadeIFImpact.java create mode 100644 com/hbm/entity/grenade/EntityGrenadeIFIncendiary.java create mode 100644 com/hbm/entity/grenade/EntityGrenadeIFMystery.java create mode 100644 com/hbm/entity/grenade/EntityGrenadeIFNull.java create mode 100644 com/hbm/entity/grenade/EntityGrenadeIFSpark.java create mode 100644 com/hbm/entity/grenade/EntityGrenadeIFSticky.java create mode 100644 com/hbm/entity/grenade/EntityGrenadeIFToxic.java diff --git a/assets/hbm/lang/de_DE.lang b/assets/hbm/lang/de_DE.lang index 6d4e3d39f..3b329b4cc 100644 --- a/assets/hbm/lang/de_DE.lang +++ b/assets/hbm/lang/de_DE.lang @@ -1080,6 +1080,20 @@ item.grenade_mirv.name=MIRV-Granate item.grenade_breach.name=Durchbruchgranate item.grenade_burst.name=Gräbergranate +item.grenade_if_generic.name=IF - Nullgranate +item.grenade_if_he.name=IF - HE-Granate +item.grenade_if_bouncy.name=IF - Elastissche Granate +item.grenade_if_sticky.name=IF - Klebrige Granate +item.grenade_if_impact.name=IF - Aufschlaggranate +item.grenade_if_incendiary.name=IF - Brandgranate +item.grenade_if_toxic.name=IF - Toxische Granate +item.grenade_if_concussion.name=IF - Erschütterungsgranate +item.grenade_if_brimstone.name=IF - Werfbare Brimstone-Mine +item.grenade_if_mystery.name=IF - M.-Granate +item.grenade_if_spark.name=IF - S.-Granate +item.grenade_if_hopwire.name=IF - Schwarzes Loch Hopwire +item.grenade_if_null.name=IF - Null-Granate + item.rod_uranium_fuel.name=Urankernbrennstoffzelle item.rod_dual_uranium_fuel.name=Doppelte Urankernbrennstoffzelle item.rod_quad_uranium_fuel.name=Vierfache Urankernbrennstoffzelle diff --git a/assets/hbm/lang/en_US.lang b/assets/hbm/lang/en_US.lang index 2da44d5c3..b72252dd2 100644 --- a/assets/hbm/lang/en_US.lang +++ b/assets/hbm/lang/en_US.lang @@ -1080,6 +1080,20 @@ item.grenade_mirv.name=MIRV Grenade item.grenade_breach.name=Breaching Grenade item.grenade_burst.name=Digger Grenade +item.grenade_if_generic.name=IF - Grenade +item.grenade_if_he.name=IF - HE Grenade +item.grenade_if_bouncy.name=IF - Bouncy Grenade +item.grenade_if_sticky.name=IF - Sticky Grenade +item.grenade_if_impact.name=IF - Impact Grenade +item.grenade_if_incendiary.name=IF - Incendiary Grenade +item.grenade_if_toxic.name=IF - Toxic Grenade +item.grenade_if_concussion.name=IF - Concussion Grenade +item.grenade_if_brimstone.name=IF - Tossable Brimsstone Mine +item.grenade_if_mystery.name=IF - M.-Grenade +item.grenade_if_spark.name=IF - S.-Grenade +item.grenade_if_hopwire.name=IF - Black Hole Hopwire +item.grenade_if_null.name=IF - Null Grenade + item.rod_uranium_fuel.name=Uranium Fuel Rod item.rod_dual_uranium_fuel.name=Uranium Dual Fuel Rod item.rod_quad_uranium_fuel.name=Uranium Quad Fuel Rod diff --git a/assets/hbm/sounds/alarm/foKlaxonA.ogg b/assets/hbm/sounds/alarm/foKlaxonA.ogg index e2471c001b5394507439aea4f6da734d15151b62..8c5fdc7a84a722c1646d8bba01c4e87b5fc0235b 100644 GIT binary patch delta 13899 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 delta 11785 zcmXY%bzD>5`@ru;jSfLVI%IT6Dcwkeba#lr00pG(=mr4+1!<8`Qj~@PB1%X}N+YGT zbp9@%?{EL?+`YE*oF~sY?`LPxui12IjC6HP%uLKJEzNDM%q-0E$lv|v5=4f^#;Tvk8#OaBEDk#nDQfHatE&MX+VJ+pf(htbC;c z{w|jnL8I05fs0(%T<4LU*Q?L(w(5$fm>9woyCeceb)+miTPyt4yd?KFy2 zJoEYC+7HVblnd0rfK3)i?pP+ z_BQ=X^^e*$mETqq_?F)?ZT01&;d96=`s1Eo>73X@$gE9hq}&>gKA8?(TmqSx)u{lL zR1$Vg%KdMK?0`{n!Xx8*{bNc*niw41d?iL+&Z1dWn+KXC;-3{got$O91Qf-w;tPr) zQwgAHH%XUP78talY3WIq9LIGeIz)l!aaL|1pN}O*nS|0FUjz8ms?z#6-*PW^%fZOC&lW7U&)(7yRO|MU-H2S;Ei~tmW`Fnk>fS@GaeBM0~+_ z4^WE!jE&Wb^f-YV0Br1ivzMEl)Drs=vtwu9(=~HumpQ9EY^KyBSRg=fWLPHh;`}rl zUjF9#V6C ztE`$+o62~8<)D4nU+v?SOFPkZfVUdnft0|5O;Vx1(A}F7#Yv5_B{Z5=@)f0fri^9R zL?%{Jfo#e^gdnD;cSuXZ>k;vV8yjSd{BPvZZk;F>kgrf5kl^lmN$j8}^9%=A)2aGk zthp08DCC>cP4>LHdVW%s{=HkPI?(fWm1;nF?ea@}Q(+vdC1M#SpwG(;SV2oZ4e}I_ zlH!fJ+Y|26u&)G{iVjRMf|mSb@Qr4>?^Rft?W?9UqS@5fAEX}(Pt`s8!iHT9biOuA z^T`I0LvMbneRuqvFmU&yvenUc2vvT@%?!D}14~Pms`SS{=+9$4#00CCLzNI}+ zUwwBZp^2wZO<2FLmFFzD0tn_@<~w;v4)>TFI__LvDQ6Y36~ql~Z=g z!^2@4KY(#Ltg&J;1=w^c2b1-JlVi*q6*(v$Fz53NvaZJ9#KLoFvOJCy`&jarnd^{Q z+n4R1spsU;e>-;{1Am1_;OKEKZ{AgfP*DTHc&Z+)#7S=ke86Oy?Q6Wh4b}^3bg4x9 zKtK)wLuZHS@S&8D`netnQ(WlaPNH|DP0B!8MK>@WP0 zlT*PKpcXWXLITWmLP`dD`b8T2BhhACa?Gg!+L1cdYwhil2(yO-qt^ImrGv4Tr(rGL zVyx66BgFi0I|4)~?7xMFI%Xut$Q8K+B+Qo(Cev5K8a5@BxPZDkM9&jF;SrUWFx175 z{s~DPmnnbHJ5Yv~cLaYILyRFPjg$ENSMwhHn?tuz+;NOr`8IyISGXf$C^_zJ1gr(t z2HD~$+|h`Md~eyMRub{6pOgMY%aKiELPnVy6`=h!hHSB6^eH>6y7yst{D-6QFT)Qt zYEmi+@o;SjF^UXK?|7+Ve)CrP74&G2d=Y&j-`D|C$zh(#GKV2@5m_E2ODnp0WXvN_ zStU{IE0CdB3iruWQ+nN50MfD&19RJ~7INd=K)%x%bC++)86bhY(a(URMUUMZeBtA~Pe>IzI36F7=BcYZ{kt z0*^WPhynH6)D4CW?h+i6K>v_a1I@iD>$dF3PqwuyaBcLrHbDF5UT}X~6Y&cYy>~-x zfk}xixOjgID-jU^EJwFScukF5;UPD<3c5!JDMe5yzHbgkHGNZ!2zSGOh*ZlQHd4xh zqgYO0J&ceVpVk_mY?-zF38+!+F#t6?8N`4!T!(N+_2y(ix@3k?Rb0E!a66xBq=Nb_ z`ZXnYYz(&5`jpvuko(80m>6nB^PYp?tV45!Ak;HfmUxU~PRecI4b>;MPNylJi||c_H9jR+~)b<;q)zKPA%WnzGtG@T%(U&H4`Yd zy1Ak$GZpK-kYqw}d%XTnle#4qF=X;eYWQ4mnaS6iFDD#Ve-{khn=-fV>*tDwZRj{u z`JD+65FpUYEb0V8D{(*7K&@;V^sL)dJlm;(zNyPw_b0H}zbTKcROOn+>P~6y2d+Qw z-whNleNhVJu5(rXm~byQ{~|n`=9yE~75~_~pMn_xGF#K@2tre#90YP2c82wfN4y6_ z9&I@rl*A>BZP!wdr@r|d>bXlQH%Azex|!^jc3W3Zrz+(as9ZJ=8t4g`pjOk*Rx8;6GV5g?((_$2c*&`}94XmygsW2B#+vttYr&$|Qt{f0ctML!5vS&ES@}qJQx}f0 zqf#mdtpNdy&}zL5~3a+qcj}=3@ z(Go^vfbv{cQ$Uh**%;z3;T5);B5&2vqgdd6gJ+O5@#Tu)iR}>~Ic~xC@@#mUXf~N&sbG_qsIm}g#GncD5#K$%NO7zsreHu z6jc+?JxdE&u7^0Agx7!tP795u%+j+U7ua*ly#wMC?pDk%O}Q|_c3eVxuc$u?%+K$# z8r(<;fuxAs$BoSO|NETQN>R^NrlIN8fRif4gS9s1Qgxh&e;-j4Sr}t;9E`N+a-HhT z(lh-MZ~)gndJd*;dodZJK=4$p;UX-gRk34mh@kWk!9jitv8Z5IKmm`lqlLWk-EYpi zOQ-}pk}>!&L@U$8;1#Lhy|}V;O?S7=jJ^OKGmZ%Kg;mIFh4p#kBMaCGfxR|^(?3pC zlBOj0lRLN3E!1SCY&+^Z7fR?{WriU1HJ1lSw!_>&RB6U+DnVlzLS%!W!6mm^k3E*L z?h|UJFH%TuKRD-3GV6p5JfBs|=vz=OQ=p0|-XoAScE*}$d;Qo93uQI(Vcg3zQQ$H> z%_}dr!x;*+LG%f8^v+^pxW(-S3w0U!c`5nu3BvI11@%&sN)ANf-^YS-aLD`Z8=%|$ zLZ#GK3OX$bH|FCQ$1Ckg^Jmew4;gJ$yh<+`UUyT#-^#4n=e zd2&m)!rLKQW6qPnW$)B@qe^EteoG{=hBfA)9zky>-?nH2LCkFfz-pa~@v=Rm(M-aI z|6tO*ed1|^LE-(XLnDl9b9#9g=yLhzVlBbWXqw1PyOsoV6w*+-C)LwFi{-OL?^;vi zEfgp}_=CTS1pAxo*r?7j6}ZaH}v6aYHynOhW(NFe9@ z_0giXNcxVknxlUbSoOZp5cabsV0-!f*0aRmpH>f~U<2W*N8bB6~f~?CAGg-e7Py`;I3O8KNGP9|KRuY zt91$t;g$BuHK|?5JQ^&=Lp&w7jd-iH9Z5->k0>S6g-kYFHF%7QR0~x|Zq=#UKvZ_D zKWJr?z{_+s%YskoW*rX(uOYGCF5~^pVWDN77?%O%g%9 z;1Q;;wdmzqenW&7!Z1<;{M)})y)r}zT(+h8FP04KO>9_Z@%VQEDAJ+Qv+7#eH)n%5 zsO+!*1Wxd}TcU{L`&gy<;(MRrvFowWL7JpMURi>3yAnvB^0j5$HzTqUuD%wF>RVti zZ=b4&3PEmmjWPmm4#?gGw;ZaSmOr)D2a7)nRPYFZogVuc_x!5bfuY`5X zpEIt8ohBT`L-8J07uya{h7Niu$s3;_c9CP-h|J^pOq?^Wpz4JqZF8U!)4Xn>U!cX`^u87YIHO#+%HKCf| zu#*!-d^lXb4e227x6x-IhZC85k8WzB|UtBoxmQG~Y$54&dx9?U889D4fBmtmH zZ%(DqtpGv|SkOCLGsQeFXlwVx!O_{>-p$3y!QRfzL+9ZGBVz+SLlZMgYZFUrQ(H50 zBU=Y^Tcby=E|4keLyY}k9FzgS|1lE@kZGfU%S1_O9Tj+VQE?nMCH9{<+DHGguPR7^ z!X1`PDHmT*9I%V?m_OswxUpA=EE(4_Knulq?S6y<(me#;l;fPl z0{HK$+y5m3Ca+;1b_3FPT;P+5f5FXmSt-}tY9S+~yMbfmaS{oJvDo=`WcdilouTKO zk^}h>3Z!6i#1aVHrx$tGGkNEMg-WIpwA*#MrPVv^2W}nR1N!_PJ74WrNm?e*|R?2jK~Ew zoV?q|FkqLEjBEdlxeWQjXf`}EPa*fyendnQ4Gr?WLAfY}QlGvsg%lF00qw9X^;cEh zI0m}wi=G!A{A3TS=Zb6#xs~96*r03DT)=gPjQv?{ZqA!Id*{)h^Cj1ZM;{MsP%t2b z4h=4ZoZRuFKrhmZ%;YIse`GTP%6R6sYv1j8R!DZC()*ZM^gqC0KjDyPoX;4YbQKn( zWtNS-LXlyI!VQ`(>9|03%J_2K3RALa%Tn_XkCxtn_{)<#^EZ8E>xSCNy3Mx08Ixd` z^BwEo<-~HscMjMZ)+F-;%+jbVK9F@QfI}I?Zt21%_GIB5%3%tH(5}SdxACa~O+X-h zA`?tat=oaQufQ(I_}q3;`^f-K8xBBEI?#SSSEwU;f8;%0$00dnux}9z z7a^ZB#TT9_Zx2tjWZc_RbFemrA-=qOFs_1>zr8(0oWRV*nkxS#zuJNbo7d_DWbvCi zM%_p|c#cg(t=k!p?90kW1;;_JjPp0PPJEB2)#88FldYQjWBFdY_J)b~ybQh-4sbz> zw*J<{6k?{qhrBx5vp>=xNGfBZK_;gAt0^y^xF4@(3oQI-Ih%NxCW@Yw`As? zFqxwXeIs0@nA1wf7QK@)?L9S@b_rsxs%+7$AyM=Nz<*eng>HzMIAU4~^8@r)Eb`fgb zP^m)~zUa@dOUu!Z^*`Ht?bmkoZ(KH74eXW_ndY$&>TIj?g{pG~3>=?rU1E2-{W+qz zxY#hg1jD@U@ctpDpZYR@DAOH#YZlj=&CI3uNh!9M`2|$m<&RY(SK#VU{v4~-SuhjW z$OZFR;AV2ysbgi;i0r)nYPGc%ZTPZ^7f=Zdx%kuZ_ny)}y~cK^yq!i`9WU;0?i%F3 z+|?a({+KqUo1(FX(z^4Io0@HwJ0;qmyp$*b#HPL}@B=%JQK%>d(itW~Dm*noU5-V& zWZao53hN#jl3+VDalV_JPbLivqDJ@sRRMtq-CCQJm$V2+r!r zs6=2XXUT1W&9AT-Rfa433sHRw!&3qPqC2|-oUKip`q;aOwZN0mZ^VcA0ho$~)huFc zA~rpHS|d~U3HmTtB_UKf$?Lm6y_Uy`WW12#7NL$LV2NF87F-l=xMf(3Y~LZRs&q2^ z%bq|w*d)BZ*8tXN52`V+pMd88fNKMmS?4v@w0_1#mW@ho=AzO%i@y0RsSLR%?e=p$ zbX6PQ7hF`Wy{%|LXmOjIn%`)hJaeT_EEEc}ljjB^{bUaXQMs_=h2lDq0{kD|!9x3| zd=K8dp&sQ2_^vF$jR9Ga`&6wFS2*a&YoKYN>t9QCjyV%-7nPU+l7x{8RSg8mP73AY z#T0PXtJAB*5_qAo(z$ihb@gU$q8d9do`Vf9{6|^Swnr|t$A`-SI(>3%wBGSfkj$?? zHi6fzI`hHqJ{6>wxDw%`zo%D-1m2`q9T!~wJ#3#h)uf5Lo_#);a>h2vQa!Uot%RL7 zPO?xIvoQMAQEn3?jJ2g=fzjVL%_XR)aO>N{&uMq-F?u@cp$?bMn;1BB`Q%d}B%G=y zeAmm-&Smm)aJT*CopNrsYTi517+1ki-J}{6cye!s2D~Ve86<@> zp4X|EiF|vZ$-wzexp~UbRXnXAjf^!;66=9!);5XaoihfIKO;4*cw<|zu3&!AfiJk4 zf(+r18y*h;Xo^0)ZCbjfxVpIjskf`R^${+&3Lgk1&C-V^WvF1|xuv2v8_F1ohBRO_RU z)T8ex^{2Az_H2y1I>+#Lp#jO zQ^>4blCG`}w&?JWWX$lAd1LZ20Bw%Ok{5E|1_T|=o&|m_`uJ#E%Z#D(x7MH@Pt%0u zAk5_TGK?XwarlfeL0QQK@8zT_{7Nlr`#2hOUt(a5Vb}7F9x@u^eDk6$3by7#%Zda1 z`ApRNp->}^*bZ*9_StErU-Far22H28fSEf{{O zB1vD9BSeL=U?cRtKe_R9GABYB`BaXI+)d71Ee5!O&7_5nMmmTNJD1vdCen`~3h0xp zYKx2bQc57ij69NEkFuOXl@_4pSiYMh^pTTJg!XF&KMfjQv!12bgQMi@EHv2h&hlJ& zj=2KBCR9j7c2FR=Lm+UwLkj+iG!N?@I`Bt$8XsblFRcx=CqVF%nLnT`ew)!F^VGm} zr}w8<+uSGhOldnkwlx2@Q9TOo19o28*xZ>>8mKuE+U3`-2ck4cUKjsZ1hD{t1(1s{ zn`Kfc3HL+T=!r-(cJ_UMsMd308j{Os*J5Dz*Grdoy#%iPKLK?EPWwejV_C%)eo!zyY5Ux|we@@e1-uT_ZN;l%(U2#CUkE_P-|cMtt; zkfr0FVYxxsw3dbHz!16E080#2(JNuBFOf#$4WeC*xw8+J(srkf3kJ@m`Q3G z!T@v*PwMvE{j}a6cXOsKXI;-KE4@Q9rk_2?=RZnw3utj`dW@tu{z3TT*V+q2pl!sF zyRNdXT_bFdBNCfD7s9sPJHL2A{DK?a%>0D6BHfb7;Rzn&z+&m@C` z<7(hNy|(IIJ@=)~ufs`q4W{&LsimCkYbWvJ=futaB$}kLa)r8;^5;TUpPoJk^Y~ko zm2NAiU9!|$jNKwZZK0nwWa@DNQg`4nlWnR zIx9p5KDL{QL8vpcX54dvE8MhewvVFSN0{(aRE7^|+UvtrNhTr}h5hmM08nm>yfluS zE17_i98f*d_er_6`OHU*<7?6bd`5`O!Mu2C`$%%s;FDzo+8y=}d}*6CZ^bbZkxR4L zJ*2ov&L<>=wx5#`iG|;<$awK|5DN>+p@_Gb_c)sjg#en7&+eJ-h@+D6$FL$ziE>B4 z&ua89QKs)OoA$eZS||U#N7v_1e1~t?F;rhy9?DI~7>fU8p06CK{BJ9YZN2{(?U zE%RSx8{jA)g!=Vj1a)BEuU~~)P2mz~JTw-%)NHz<%L!BiZark!jOtO6!1sHh0xD@> z+gXxv;&a@_r@3i;w6y;Rn@x$d{P6a?zi}#|s&ik&Xl|hD7z!zX8ESoh!Tr8JxHe

Cgco$QCr?C!NiQVQMEk~TBdvg7x?Kfr%JoNd+L_)7io+-1=_6Ja*jVal zph5=wr7W`u>@YvqQ&8ZD=xal=YEeN2{ps&Gm2Zl8bZ`Ht^#zEEhW8HHKAGafWexP~h69@q6bAG5S~6eJUdOVU+}Qb4HQN7O-qtzbXXUT{@1a4KPM@q)luh4$>zgA$6QHZa zj+}ech=jtsp176ku+>(AIJ_qS3ZaYRX-OCS$Z%cEwOvL(s@s^CB9JZG&@ z<&3bEIWX|cty-jri!p`601FlBNOjQyT?jf)7E-r=hZ%|dl5oZ)#M5&Zmu_w^u?kek zMh0~No8rv4*~WQ?TJZJoQgQif@fVX-Q#6yTWX2WB#TMT|bp?ay^)PfKJY=0~Tgtj` zCOhW-@bZpS)j&MAx+Xgs0M^>%%oIewxj;702u_l+8l3*~`RvYv+eOcIv>I9ctgG7= zL$#WQ3tNVpf%N<;UKux5bj`{(<6H-_#n#Em-o@J5*~!k{$==b<-o?e<&c)iv!@>HAm9?YmBPxhlZj*F+ zf4PlALlqELGJlL3qs6!TcZl)G#r<)K)~%p);lIi~lL*Yd^G%!_XjC6~dT8rC9o!{< zNAvc+RX&~nVFUP<;J2%Ch;n6HCsh!Lj8J3XYI+N^$N#{CPeXPC5_hhK=w}UR=mRc_ zkKKHTwIXAaC%#VqRPSIW;t!`TR%dAdb2+AbqSxIJ!1em4KohUg)^YdoY5_5zia4f& z&D?v(75?pe+!aGxd)M4<7+)!&E$<|UxZ3Ix-^^QY!!Saa%sN-@xuTCjCYV2T%k#4B zbEe5lnpP~QFa0i6-^gZBjRJ9{YETb!a!1Q5+5hWckwK#@%bOW{*T0IA6ArVx;vzsW ze!hBZz_*gYeN*&yUepElHCDTttcwB745ckQI}ZhmZ4Ja9_Mnhi6>g5uD^RtTuG)xE zj$M_JdnRm-U*;J5quVzWxq@Dl;fPF-FwfDS^&h1~fO(0QQ@~t}v3dKHOSbYJEv_7Rj7Ej^(C__hdk@rd z1u)38L{02U7IqUb(-Pu}P`+o;n=mWK?lw~^g_J3?x~_6eqJ<+5zL;NEEg_U+Pp8i* zpk8ixJ!?63zAN=0odF8+Ntw(=TU1dTJ%RMq$hD|e0aA$eRUlb|3AM5d2j$ZO zzc=3CT9kTGXMqPU(4Z91IG;WiU~f%2+R1}hAmvD!ck`GA7J?kOSb>cT!VN`rau^L`Nv)#JDgPk7fd}U1 z8333N_*s1Z^~d&9-?s4q#|0d$Y8{LmL*Poz>M|8tDd3C;4G-C%N4=c z!e`7(5dp#Q;hm5n3ufH>A^V*rH?QHs&T&l03>N=iZ4E<1y>b0jl|FUcd!Z^-pWOhf zxti;qGy$o)`q8Grky*%Tpx`j>;0EANPkuHoq!s5jMx7L^M#m=ebT@U;G}%4p@N@20wXV z0bQGO{h8XM?l(Y8-=7IZ!hb8vsH`@tIY{SNWwusZmn8iA344P;K9 zE6Q?a0#Ums{BJn|L(b9cboHIgJ1ojtPKeC%1v^TpHvs|K%{~SQpC*R{w`K7l7t1YC z5)cUFX3ckWS#;X%?krym`4n>L0c`vJk~sZca#-YgTPpyqYPLWxsG>R7Xnt;n^CoO| zXXu~KDoO{$y_LWd`l|fPbaEp+qc63T3{oW2y#0MPWb*Lr|iMbeQ8(oo{LeG~(AuT#VQgGSN3x~r((lD%VJ+)LFyDs>2?8^1M zBsW#%?jHhlH_o51`E#E&?>wi`J>Eqk_>dpK^Xx#&O6C(6hQ=$H;lgZ&bgEkK8Sxmu z(!*Y&3@O_1cnJ$xNhB5$7wg7cZ21y$_>oL!PV?P_N)#4FR_H#LOrv6q$K~_C{@|sE zzr}1d(;f6_BzyejG6|#7xKp5qZ1F8z%pJkDpZimO?oc1MWoM`ag!u{>Wm zYTO1FbLkcEd$fId-?&vuQc$)TgcSh?;><4}Ob2-wpi8G`^V{28+7}5azB*!j$gE1o zddQXKSX*SV;+e?8@$GAc2uWI?Y#js{SHD ze9VnwoX;Nrk1~JUStU?6vCcuS2y<6p*Zt@b>2R^zA_nM#W9i$T{Z3;_GCw^E+UOmK z3YVAzJYSHXdF-sti6AJ1W|&6s`<#dWkBqN}bPmqp25O*j+IB_9eUJWKsX;469jNX9cp z{4SiAf+%={YLSv*sLgmlo9hHe62o@$Ab?f`i^MiNX|lHvrL}ycZzTHV~MER)%e!456QNHNV~?HRFOZPGQJlMam8KUwk)V^ z1Qg6k+0kDrxme;x$Cm3y4l8cDO)i$yL~#NcF|#F%|C}tuTVAX=zukd&`8E1G_~l7Z zzg-&TZq)KZ$zqfM`+I@Hh#_q*u^7C5>l6u1d*_lBp;&(*N}>d4Yk_d=3Pj7HmLbae zrk-`8S#Oa{=qck1F38(v85 zb6I%A25oWQpI@xkChs@ki=lWka(71 zOpTnp9b0aoC!9oAw!$ZM+i76r6UA%fW+#=)=#x?5#XQR4sN+(moQRF2Cd|x)?9~ZIyd&%H zkN}|T>b>PAkoKM!^OZjA+G8f}O!GJGd;E=e&RX*NxCaLGrYa6diVO+@*aZlkxFK@A zqH!-AI(D5vTD*elJwSTaCoTDgZ04q`XlU4>f8Li7U01J)hgNFc?>r}+ov+UxQSLnz z02Y`4&xYX9l8R;6uEDdsg;BmE#j6xPjDC3><3w$gkSc0yy*#y}366!0ZFS<6dC2xm zUZH81%_DwiQMa_P*1(_| wpH6?oB#t8`IWrT0$E%?hz4#f6$IJq-LY#420Sg6W2O1YJO!&=}W*7JW0C@ay^Z)<= diff --git a/assets/hbm/sounds/alarm/foKlaxonB.ogg b/assets/hbm/sounds/alarm/foKlaxonB.ogg index 6a2b5fb7dab076f29117fd59a71a1b3be4b929d1..3dc8f5b655879fc8ffa94bdaced79126a9153080 100644 GIT binary patch delta 16061 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 delta 14277 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 literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/grenade_if_brimstone.png b/assets/hbm/textures/items/grenade_if_brimstone.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b46f95e64c4d63e4d30204fd1fa02323c5b08d GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJtM=93Yk-Zie`JdIEGmG-<@R0)nXvvTHHLxfnPx^bE}u=2bXEpUuKB^5O6ixm9zCw zg24UR^L^(0-ml&=A-U)0>bZ>db53h6jrweGMQZQ*RIish6*HHunZ&YF|Ej1W!<}ni zRU9^n-|$hAaMWJ7ds0cTMj7|#-go`y7T?`{Equr920f-u-5qc90#LT=By}Z;C1rt33 zJtM=93Yk-ZiZ*(>IEGmGpPgjL#bhYp8XR#$|3>#-mYg8ZRd)_ZS1{>65d3yxqWBL3 z!^2Vs54AQPI9L6-+)VM$TjAt2+mBSe zF`<(_*xf0!>j^Yu)PKEISiw`X)N_|e7wZ|x#;FFeo_9p%9jIfwytkG|Qy_A}XNLT@ zjhaFN(FNwU-VQ1X2`-1%|6x%Ucyh>?N!Lw$MeL&d123!pcOMh?;a=LES6+Pw=y(QC LS3j3^P60#LT=By}Z;C1rt33 zJtM=93Yk-Zik5h~IEGmGpPh7&^N50gYw#rZ{&`!NwKp(&dpy;$bDBsO>lvxWsRps0cSPnL$ZLLiuX4{)hZM(a)_*Gad?q&BXnOm_opEAA xgW%i!pOkwXCa}wMmKf}E*t4Ih|NUQmsrXZA$LA0#LT=By}Z;C1rt33 zJtM=93Yk-ZidK5MIEGmGpPh7&v&BHbRaf))1I^_PtU6*F#5S;VZ}_aE{~>Xb>>Um{ z5jN&?)t`lpefw*jIF4Q`2ynDDP+6?GG^FU<)_bp`UT@Xes(OhHBL2%^}Hi8??7Jj%X^i7mN=w1UbC&K;`5o0#LT=By}Z;C1rt33 zJtM=93Yk-ZidK2LIEGmGpPl5$bwq*3)&2_uv#q1P!j2N-2d94DKau%|H*EICGD8EW z7i#~X{x>;r-|l^_-SsVjqFY=K+B@e4;hJ z_xfZG2A3men5s0=)I=j6&3^f|@dab;%|Bmi|8M%pTo%#Pb9-)_8PL@Xp00i_>zopr E00OyoW&i*H literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/grenade_if_impact.png b/assets/hbm/textures/items/grenade_if_impact.png new file mode 100644 index 0000000000000000000000000000000000000000..3bd6cef7763e5cc0ca33f5562012b083165c6011 GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJtM=93Yk-Zie`GcIEGmG-<@=jw?To&Rq|kyj}+4(>AUbU!T?N*~hhHkEJCwp)0O`jQ5qPAvpu$bzPeO-!83XP`=1RaE& zHcU>DXmV0#LT=By}Z;C1rt33 zJtM=93Yk-Ziq?9%IEGmGpPh7&^N50g>stlUC5>}zy!__nWLtZ%W+r&wc*W!Y!(f;5 zwN~4lgpLW7`TLFu{QK5v7#4lmk+t{0l%8dCiglN6vAVwX>PDTlDofA%raXMUEp)0% zO?}IQ!xEyxAGW@q%i!s?()-fV0G)(u9BW!$dOce9fu&5^=li+Gx~xjvo8%teE>7rT zIU<&`{61F)3rkPNpQ-YREKN2QUJIHpvOfANYEk>X{$d5=noAp{g8Sv(0UgfZ>FVdQ I&MBb@01a<0#LT=By}Z;C1rt33 zJtM=93Yk-ZiZ*$=IEGmGpPh7&lgUuPHMo)YM#BSD^Wrn9!40Yrjj|C3%@R1xW?pmOBBENYWE#mCQY$3pV&J8 zcy_4gq3_ieKMmZDveeAYpUdFswbJ|2(g2-=YaDA@UV1%R_JO5L+UNVZ$GWUa+?(Vc z-Yrh(VmTs~v-~|*2MbG2#-FM3i7ZVv60#LT=By}Z;C1rt33 zJtM=93Yk-Zine*WIEGmGFP(gn_kaQqOR$jtyge_vjWn9nRy5_w=w5O&a~ElC7hPiT z_~|Z}Csr$!C3?3rJ)iU9*3vmFEp7?w#!Nn3iXJ^1!!?(NuiYxXbjI>&Y)f&I^Sx?d2(ne|vmOr$DB_W5GDJ z2kRDbvv&AKl-G+ouy7c-JPzD9ugTA`;LRUT2SI&-eabubc+|%|{g}OnF{I+MNg3~( R<3JxUc)I$ztaD0e0stNxba(&& literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/grenade_if_spark.png b/assets/hbm/textures/items/grenade_if_spark.png new file mode 100644 index 0000000000000000000000000000000000000000..07c89be6bf741b1bd18fbadadd5dca755bb8bc2e GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJtM=93Yk-ZiZ*zZ0zA>BeZtn4DE*G(syNBDK z9}wZ}(7oYjFCxInArbgr+x`#-OXY_N4(yA$kNnmy_;K(5qK~Xct{x28o7?&y=ynEA LS3j3^P60#LT=By}Z;C1rt33 zJtM=93Yk-Zine&VIEGmGCnrd3IdI^>1A8O2TMG?*Ur2Qr@hmxU@ZiJ!vu8_77;mX> zdT>fzfQMC~G$OWTQRS)s|9K2}Oj%UUPbd}Loi?Gf;5oA?myV+`LqmP;((j870#LT=By}Z;C1rt33 zJtM=93Yk-ZiZ*$=IEGmGpPjUk_mF{rt1Tn90aLH{^mQ>C8HFzdUc7WMmC-H1b8-61 z?#;zqZi^HyX-+G8e|P(1fq&mR4a1@@JF@m3n9{RsPO= 180.0F) + { + this.prevRotationPitch += 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw < -180.0F) + { + this.prevRotationYaw -= 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw >= 180.0F) + { + this.prevRotationYaw += 360.0F; + } + + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + float f2 = 0.99F; + float f3 = this.getGravityVelocity(); + + if (this.isInWater()) + { + for (int i = 0; i < 4; ++i) + { + float f4 = 0.25F; + this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)f4, this.posY - this.motionY * (double)f4, this.posZ - this.motionZ * (double)f4, this.motionX, this.motionY, this.motionZ); + } + + f2 = 0.8F; + } + + this.motionX *= (double)f2; + this.motionY *= (double)f2; + this.motionZ *= (double)f2; + this.motionY -= (double)f3; + this.setPosition(this.posX, this.posY, this.posZ); + + timer++; + + if(timer >= getMaxTimer()) { + explode(); + } + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) { + timer = nbt.getInteger("timer"); + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) { + nbt.setInteger("timer", timer); + } + + @SideOnly(Side.CLIENT) + public float getShadowSize() + { + return 0.0F; + } + + public EntityLivingBase getThrower() + { + if (this.thrower == null && this.throwerName != null && this.throwerName.length() > 0) + { + this.thrower = this.worldObj.getPlayerEntityByName(this.throwerName); + } + + return this.thrower; + } + + public abstract void explode(); + + protected abstract int getMaxTimer(); + + protected abstract double getBounceMod(); + +} diff --git a/com/hbm/entity/grenade/EntityGrenadeBurst.java b/com/hbm/entity/grenade/EntityGrenadeBurst.java index 1911f8b15..61e305678 100644 --- a/com/hbm/entity/grenade/EntityGrenadeBurst.java +++ b/com/hbm/entity/grenade/EntityGrenadeBurst.java @@ -1,6 +1,7 @@ package com.hbm.entity.grenade; import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -9,7 +10,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; -public class EntityGrenadeBurst extends EntityGrenadeBase { +public class EntityGrenadeBurst extends EntityGrenadeBouncyBase { public EntityGrenadeBurst(World p_i1773_1_) { @@ -25,13 +26,13 @@ public class EntityGrenadeBurst extends EntityGrenadeBase { { super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_); } - + @Override - public void onUpdate() { - super.onUpdate(); + public void explode() { - if(this.ticksExisted > 20 && !worldObj.isRemote) { - this.setDead(); + if (!this.worldObj.isRemote) + { + this.setDead(); for(int i = 0; i < 8; i++) { @@ -45,16 +46,16 @@ public class EntityGrenadeBurst extends EntityGrenadeBase { worldObj.spawnEntityInWorld(grenade); } - } - } - - @Override - public void explode() { - - if (!this.worldObj.isRemote) - { - this.setDead(); - worldObj.spawnEntityInWorld(new EntityItem(worldObj, posX, posY, posZ, new ItemStack(ModItems.grenade_burst))); } } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_burst); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } } diff --git a/com/hbm/entity/grenade/EntityGrenadeCluster.java b/com/hbm/entity/grenade/EntityGrenadeCluster.java index f1424bf8c..c1f11293d 100644 --- a/com/hbm/entity/grenade/EntityGrenadeCluster.java +++ b/com/hbm/entity/grenade/EntityGrenadeCluster.java @@ -4,8 +4,10 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; import com.hbm.explosion.ExplosionChaos; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; -public class EntityGrenadeCluster extends EntityGrenadeBase +public class EntityGrenadeCluster extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; @@ -34,4 +36,14 @@ public class EntityGrenadeCluster extends EntityGrenadeBase this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 1.5F, true); } } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_cluster); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } } diff --git a/com/hbm/entity/grenade/EntityGrenadeElectric.java b/com/hbm/entity/grenade/EntityGrenadeElectric.java index 1dcd279cb..201983773 100644 --- a/com/hbm/entity/grenade/EntityGrenadeElectric.java +++ b/com/hbm/entity/grenade/EntityGrenadeElectric.java @@ -1,10 +1,13 @@ package com.hbm.entity.grenade; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; + import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.world.World; -public class EntityGrenadeElectric extends EntityGrenadeBase +public class EntityGrenadeElectric extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; @@ -34,4 +37,14 @@ public class EntityGrenadeElectric extends EntityGrenadeBase this.worldObj.spawnEntityInWorld(new EntityLightningBolt(this.worldObj, this.posX, this.posY, this.posZ)); } + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_electric); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } + } diff --git a/com/hbm/entity/grenade/EntityGrenadeFire.java b/com/hbm/entity/grenade/EntityGrenadeFire.java index 12a6ad6b0..cbd525028 100644 --- a/com/hbm/entity/grenade/EntityGrenadeFire.java +++ b/com/hbm/entity/grenade/EntityGrenadeFire.java @@ -5,8 +5,10 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; import com.hbm.explosion.ExplosionChaos; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; -public class EntityGrenadeFire extends EntityGrenadeBase +public class EntityGrenadeFire extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; public Entity shooter; @@ -38,4 +40,14 @@ public class EntityGrenadeFire extends EntityGrenadeBase this.worldObj.playSoundEffect((int)this.posX, (int)this.posY, (int)this.posZ, "random.explode", 4.0F, (1.0F + (this.worldObj.rand.nextFloat() - this.worldObj.rand.nextFloat()) * 0.2F) * 0.7F); } } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_fire); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } } diff --git a/com/hbm/entity/grenade/EntityGrenadeFrag.java b/com/hbm/entity/grenade/EntityGrenadeFrag.java index e3720f4f0..afcfb8d80 100644 --- a/com/hbm/entity/grenade/EntityGrenadeFrag.java +++ b/com/hbm/entity/grenade/EntityGrenadeFrag.java @@ -5,8 +5,10 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; import com.hbm.explosion.ExplosionChaos; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; -public class EntityGrenadeFrag extends EntityGrenadeBase +public class EntityGrenadeFrag extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; public Entity shooter; @@ -45,4 +47,14 @@ public class EntityGrenadeFrag extends EntityGrenadeBase } } } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_frag); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } } diff --git a/com/hbm/entity/grenade/EntityGrenadeGas.java b/com/hbm/entity/grenade/EntityGrenadeGas.java index b5877de03..ab24f5459 100644 --- a/com/hbm/entity/grenade/EntityGrenadeGas.java +++ b/com/hbm/entity/grenade/EntityGrenadeGas.java @@ -7,8 +7,10 @@ import java.util.Random; import com.hbm.explosion.ExplosionChaos; import com.hbm.explosion.ExplosionLarge; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; -public class EntityGrenadeGas extends EntityGrenadeBase { +public class EntityGrenadeGas extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; Random rand = new Random(); @@ -48,4 +50,14 @@ public class EntityGrenadeGas extends EntityGrenadeBase { } } + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_gas); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } + } diff --git a/com/hbm/entity/grenade/EntityGrenadeGeneric.java b/com/hbm/entity/grenade/EntityGrenadeGeneric.java index 0f20ee556..290fc4a96 100644 --- a/com/hbm/entity/grenade/EntityGrenadeGeneric.java +++ b/com/hbm/entity/grenade/EntityGrenadeGeneric.java @@ -3,7 +3,7 @@ package com.hbm.entity.grenade; import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; -public class EntityGrenadeGeneric extends EntityGrenadeBase +public class EntityGrenadeGeneric extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; @@ -32,4 +32,14 @@ public class EntityGrenadeGeneric extends EntityGrenadeBase } } + @Override + protected int getMaxTimer() { + return 100; + } + + @Override + protected double getBounceMod() { + return 0.25D; + } + } diff --git a/com/hbm/entity/grenade/EntityGrenadeIFBouncy.java b/com/hbm/entity/grenade/EntityGrenadeIFBouncy.java new file mode 100644 index 000000000..94a5f74a9 --- /dev/null +++ b/com/hbm/entity/grenade/EntityGrenadeIFBouncy.java @@ -0,0 +1,48 @@ +package com.hbm.entity.grenade; + +import com.hbm.explosion.ExplosionLarge; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; + +public class EntityGrenadeIFBouncy extends EntityGrenadeBouncyBase { + + public EntityGrenadeIFBouncy(World p_i1773_1_) + { + super(p_i1773_1_); + } + + public EntityGrenadeIFBouncy(World p_i1774_1_, EntityLivingBase p_i1774_2_) + { + super(p_i1774_1_, p_i1774_2_); + } + + public EntityGrenadeIFBouncy(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) + { + super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_); + } + + @Override + public void explode() { + + if (!this.worldObj.isRemote) + { + this.setDead(); + + ExplosionLarge.jolt(worldObj, posX, posY, posZ, 5, 200, 0.25); + ExplosionLarge.explode(worldObj, posX, posY, posZ, 5, true, true, true); + } + } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_if_bouncy); + } + + @Override + protected double getBounceMod() { + return 0.75D; + } +} diff --git a/com/hbm/entity/grenade/EntityGrenadeIFBrimstone.java b/com/hbm/entity/grenade/EntityGrenadeIFBrimstone.java new file mode 100644 index 000000000..370ef98e3 --- /dev/null +++ b/com/hbm/entity/grenade/EntityGrenadeIFBrimstone.java @@ -0,0 +1,96 @@ +package com.hbm.entity.grenade; + +import com.hbm.entity.projectile.EntityBullet; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; + +public class EntityGrenadeIFBrimstone extends EntityGrenadeBouncyBase { + + public EntityGrenadeIFBrimstone(World p_i1773_1_) + { + super(p_i1773_1_); + } + + public EntityGrenadeIFBrimstone(World p_i1774_1_, EntityLivingBase p_i1774_2_) + { + super(p_i1774_1_, p_i1774_2_); + } + + public EntityGrenadeIFBrimstone(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) + { + super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_); + } + + @Override + public void onUpdate() { + super.onUpdate(); + + if(this.timer > (this.getMaxTimer() * 0.65)) { + + if(!worldObj.isRemote) { + EntityBullet fragment; + + fragment = new EntityBullet(worldObj, (EntityPlayer) this.thrower, 3.0F, 35, 45, false, "tauDay"); + fragment.setDamage(rand.nextInt(301) + 100); + + fragment.motionX = rand.nextGaussian(); + fragment.motionY = rand.nextGaussian(); + fragment.motionZ = rand.nextGaussian(); + fragment.shootingEntity = this.thrower; + + fragment.posX = posX; + fragment.posY = posY; + fragment.posZ = posZ; + + fragment.setIsCritical(true); + + worldObj.spawnEntityInWorld(fragment); + } + } + } + + @Override + public void explode() { + + if (!this.worldObj.isRemote) + { + this.setDead(); + + worldObj.newExplosion(this, posX, posY, posZ, 5, false, false); + + for(int i = 0; i < 100; i++) { + EntityBullet fragment; + + fragment = new EntityBullet(worldObj, (EntityPlayer) this.thrower, 3.0F, 35, 45, false, "tauDay"); + fragment.setDamage(rand.nextInt(301) + 100); + + fragment.motionX = rand.nextGaussian() * 0.25; + fragment.motionY = rand.nextGaussian() * 0.25; + fragment.motionZ = rand.nextGaussian() * 0.25; + fragment.shootingEntity = this.thrower; + + fragment.posX = posX; + fragment.posY = posY; + fragment.posZ = posZ; + + fragment.setIsCritical(true); + + worldObj.spawnEntityInWorld(fragment); + } + } + } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_if_brimstone); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } +} diff --git a/com/hbm/entity/grenade/EntityGrenadeIFConcussion.java b/com/hbm/entity/grenade/EntityGrenadeIFConcussion.java new file mode 100644 index 000000000..22d83ce26 --- /dev/null +++ b/com/hbm/entity/grenade/EntityGrenadeIFConcussion.java @@ -0,0 +1,47 @@ +package com.hbm.entity.grenade; + +import com.hbm.explosion.ExplosionLarge; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; + +public class EntityGrenadeIFConcussion extends EntityGrenadeBouncyBase { + + public EntityGrenadeIFConcussion(World p_i1773_1_) + { + super(p_i1773_1_); + } + + public EntityGrenadeIFConcussion(World p_i1774_1_, EntityLivingBase p_i1774_2_) + { + super(p_i1774_1_, p_i1774_2_); + } + + public EntityGrenadeIFConcussion(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) + { + super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_); + } + + @Override + public void explode() { + + if (!this.worldObj.isRemote) + { + this.setDead(); + + worldObj.newExplosion(this, posX, posY, posZ, 15, false, false); + } + } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_if_concussion); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } +} diff --git a/com/hbm/entity/grenade/EntityGrenadeIFGeneric.java b/com/hbm/entity/grenade/EntityGrenadeIFGeneric.java new file mode 100644 index 000000000..393abd81c --- /dev/null +++ b/com/hbm/entity/grenade/EntityGrenadeIFGeneric.java @@ -0,0 +1,48 @@ +package com.hbm.entity.grenade; + +import com.hbm.explosion.ExplosionLarge; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; + +public class EntityGrenadeIFGeneric extends EntityGrenadeBouncyBase { + + public EntityGrenadeIFGeneric(World p_i1773_1_) + { + super(p_i1773_1_); + } + + public EntityGrenadeIFGeneric(World p_i1774_1_, EntityLivingBase p_i1774_2_) + { + super(p_i1774_1_, p_i1774_2_); + } + + public EntityGrenadeIFGeneric(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) + { + super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_); + } + + @Override + public void explode() { + + if (!this.worldObj.isRemote) + { + this.setDead(); + + ExplosionLarge.jolt(worldObj, posX, posY, posZ, 5, 200, 0.25); + ExplosionLarge.explode(worldObj, posX, posY, posZ, 5, true, true, true); + } + } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_if_generic); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } +} diff --git a/com/hbm/entity/grenade/EntityGrenadeIFHE.java b/com/hbm/entity/grenade/EntityGrenadeIFHE.java new file mode 100644 index 000000000..7565a93ad --- /dev/null +++ b/com/hbm/entity/grenade/EntityGrenadeIFHE.java @@ -0,0 +1,48 @@ +package com.hbm.entity.grenade; + +import com.hbm.explosion.ExplosionLarge; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; + +public class EntityGrenadeIFHE extends EntityGrenadeBouncyBase { + + public EntityGrenadeIFHE(World p_i1773_1_) + { + super(p_i1773_1_); + } + + public EntityGrenadeIFHE(World p_i1774_1_, EntityLivingBase p_i1774_2_) + { + super(p_i1774_1_, p_i1774_2_); + } + + public EntityGrenadeIFHE(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) + { + super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_); + } + + @Override + public void explode() { + + if (!this.worldObj.isRemote) + { + this.setDead(); + + ExplosionLarge.jolt(worldObj, posX, posY, posZ, 7.5, 300, 0.25); + ExplosionLarge.explode(worldObj, posX, posY, posZ, 7, true, true, true); + } + } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_if_he); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } +} diff --git a/com/hbm/entity/grenade/EntityGrenadeIFHopwire.java b/com/hbm/entity/grenade/EntityGrenadeIFHopwire.java new file mode 100644 index 000000000..23aabee92 --- /dev/null +++ b/com/hbm/entity/grenade/EntityGrenadeIFHopwire.java @@ -0,0 +1,51 @@ +package com.hbm.entity.grenade; + +import com.hbm.entity.effect.EntityVortex; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; + +public class EntityGrenadeIFHopwire extends EntityGrenadeBouncyBase { + + public EntityGrenadeIFHopwire(World p_i1773_1_) + { + super(p_i1773_1_); + } + + public EntityGrenadeIFHopwire(World p_i1774_1_, EntityLivingBase p_i1774_2_) + { + super(p_i1774_1_, p_i1774_2_); + } + + public EntityGrenadeIFHopwire(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) + { + super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_); + } + + @Override + public void explode() { + + if (!this.worldObj.isRemote) + { + this.setDead(); + + EntityVortex vortex = new EntityVortex(worldObj, 0.75F); + vortex.posX = posX; + vortex.posY = posY; + vortex.posZ = posZ; + worldObj.spawnEntityInWorld(vortex); + } + } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_if_hopwire); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } +} diff --git a/com/hbm/entity/grenade/EntityGrenadeIFImpact.java b/com/hbm/entity/grenade/EntityGrenadeIFImpact.java new file mode 100644 index 000000000..5a3428a55 --- /dev/null +++ b/com/hbm/entity/grenade/EntityGrenadeIFImpact.java @@ -0,0 +1,38 @@ +package com.hbm.entity.grenade; + +import com.hbm.explosion.ExplosionLarge; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; + +public class EntityGrenadeIFImpact extends EntityGrenadeBase { + + public EntityGrenadeIFImpact(World p_i1773_1_) + { + super(p_i1773_1_); + } + + public EntityGrenadeIFImpact(World p_i1774_1_, EntityLivingBase p_i1774_2_) + { + super(p_i1774_1_, p_i1774_2_); + } + + public EntityGrenadeIFImpact(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) + { + super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_); + } + + @Override + public void explode() { + + if (!this.worldObj.isRemote) + { + this.setDead(); + + ExplosionLarge.jolt(worldObj, posX, posY, posZ, 5, 200, 0.25); + ExplosionLarge.explode(worldObj, posX, posY, posZ, 5, true, true, true); + } + } +} diff --git a/com/hbm/entity/grenade/EntityGrenadeIFIncendiary.java b/com/hbm/entity/grenade/EntityGrenadeIFIncendiary.java new file mode 100644 index 000000000..1d94c4a7b --- /dev/null +++ b/com/hbm/entity/grenade/EntityGrenadeIFIncendiary.java @@ -0,0 +1,53 @@ +package com.hbm.entity.grenade; + +import com.hbm.explosion.ExplosionChaos; +import com.hbm.explosion.ExplosionLarge; +import com.hbm.explosion.ExplosionThermo; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; + +public class EntityGrenadeIFIncendiary extends EntityGrenadeBouncyBase { + + public EntityGrenadeIFIncendiary(World p_i1773_1_) + { + super(p_i1773_1_); + } + + public EntityGrenadeIFIncendiary(World p_i1774_1_, EntityLivingBase p_i1774_2_) + { + super(p_i1774_1_, p_i1774_2_); + } + + public EntityGrenadeIFIncendiary(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) + { + super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_); + } + + @Override + public void explode() { + + if (!this.worldObj.isRemote) + { + this.setDead(); + + ExplosionLarge.jolt(worldObj, posX, posY, posZ, 5, 200, 0.25); + ExplosionLarge.explode(worldObj, posX, posY, posZ, 5, true, true, true); + ExplosionThermo.setEntitiesOnFire(worldObj, (int)posX, (int)posY, (int)posZ, 8); + ExplosionChaos.flameDeath(worldObj, (int)posX, (int)posY, (int)posZ, 15); + ExplosionChaos.burn(worldObj, (int)posX, (int)posY, (int)posZ, 10); + } + } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_if_incendiary); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } +} diff --git a/com/hbm/entity/grenade/EntityGrenadeIFMystery.java b/com/hbm/entity/grenade/EntityGrenadeIFMystery.java new file mode 100644 index 000000000..18370d4af --- /dev/null +++ b/com/hbm/entity/grenade/EntityGrenadeIFMystery.java @@ -0,0 +1,46 @@ +package com.hbm.entity.grenade; + +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; + +public class EntityGrenadeIFMystery extends EntityGrenadeBouncyBase { + + public EntityGrenadeIFMystery(World p_i1773_1_) + { + super(p_i1773_1_); + } + + public EntityGrenadeIFMystery(World p_i1774_1_, EntityLivingBase p_i1774_2_) + { + super(p_i1774_1_, p_i1774_2_); + } + + public EntityGrenadeIFMystery(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) + { + super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_); + } + + @Override + public void explode() { + + if (!this.worldObj.isRemote) + { + this.setDead(); + + worldObj.newExplosion(this, posX, posY, posZ, 10, false, false); + } + } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_if_mystery); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } +} diff --git a/com/hbm/entity/grenade/EntityGrenadeIFNull.java b/com/hbm/entity/grenade/EntityGrenadeIFNull.java new file mode 100644 index 000000000..3bbcd2e2e --- /dev/null +++ b/com/hbm/entity/grenade/EntityGrenadeIFNull.java @@ -0,0 +1,69 @@ +package com.hbm.entity.grenade; + +import java.util.List; + +import com.hbm.entity.effect.EntityVortex; +import com.hbm.entity.particle.EntityDSmokeFX; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; + +public class EntityGrenadeIFNull extends EntityGrenadeBouncyBase { + + public EntityGrenadeIFNull(World p_i1773_1_) + { + super(p_i1773_1_); + } + + public EntityGrenadeIFNull(World p_i1774_1_, EntityLivingBase p_i1774_2_) + { + super(p_i1774_1_, p_i1774_2_); + } + + public EntityGrenadeIFNull(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) + { + super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_); + } + + @Override + public void explode() { + + if (!this.worldObj.isRemote) + { + this.setDead(); + + for(int a = -3; a <= 3; a++) + for(int b = -3; b <= 3; b++) + for(int c = -3; c <= 3; c++) + worldObj.setBlockToAir((int)posX + a, (int)posY + b, (int)posZ + c); + + List list = worldObj.getEntitiesWithinAABBExcludingEntity(this, AxisAlignedBB.getBoundingBox((int)posX + 0.5 - 3, (int)posY + 0.5 - 3, (int)posZ + 0.5 - 3, (int)posX + 0.5 + 3, (int)posY + 0.5 + 3, (int)posZ + 0.5 + 3)); + + for(Object o : list) { + if(o instanceof EntityLivingBase) { + EntityLivingBase e = (EntityLivingBase)o; + + e.setHealth(0); + } else if(o instanceof Entity) { + Entity e = (Entity)o; + + e.setDead(); + } + } + } + } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_if_null); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } +} diff --git a/com/hbm/entity/grenade/EntityGrenadeIFSpark.java b/com/hbm/entity/grenade/EntityGrenadeIFSpark.java new file mode 100644 index 000000000..db249cf88 --- /dev/null +++ b/com/hbm/entity/grenade/EntityGrenadeIFSpark.java @@ -0,0 +1,51 @@ +package com.hbm.entity.grenade; + +import com.hbm.entity.effect.EntityRagingVortex; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; + +public class EntityGrenadeIFSpark extends EntityGrenadeBouncyBase { + + public EntityGrenadeIFSpark(World p_i1773_1_) + { + super(p_i1773_1_); + } + + public EntityGrenadeIFSpark(World p_i1774_1_, EntityLivingBase p_i1774_2_) + { + super(p_i1774_1_, p_i1774_2_); + } + + public EntityGrenadeIFSpark(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) + { + super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_); + } + + @Override + public void explode() { + + if (!this.worldObj.isRemote) + { + this.setDead(); + + EntityRagingVortex vortex = new EntityRagingVortex(worldObj, 1.5F); + vortex.posX = posX; + vortex.posY = posY; + vortex.posZ = posZ; + worldObj.spawnEntityInWorld(vortex); + } + } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_if_spark); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } +} diff --git a/com/hbm/entity/grenade/EntityGrenadeIFSticky.java b/com/hbm/entity/grenade/EntityGrenadeIFSticky.java new file mode 100644 index 000000000..c08658505 --- /dev/null +++ b/com/hbm/entity/grenade/EntityGrenadeIFSticky.java @@ -0,0 +1,48 @@ +package com.hbm.entity.grenade; + +import com.hbm.explosion.ExplosionLarge; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; + +public class EntityGrenadeIFSticky extends EntityGrenadeBouncyBase { + + public EntityGrenadeIFSticky(World p_i1773_1_) + { + super(p_i1773_1_); + } + + public EntityGrenadeIFSticky(World p_i1774_1_, EntityLivingBase p_i1774_2_) + { + super(p_i1774_1_, p_i1774_2_); + } + + public EntityGrenadeIFSticky(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) + { + super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_); + } + + @Override + public void explode() { + + if (!this.worldObj.isRemote) + { + this.setDead(); + + ExplosionLarge.jolt(worldObj, posX, posY, posZ, 5, 200, 0.25); + ExplosionLarge.explode(worldObj, posX, posY, posZ, 5, true, true, true); + } + } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_if_sticky); + } + + @Override + protected double getBounceMod() { + return 0.05D; + } +} diff --git a/com/hbm/entity/grenade/EntityGrenadeIFToxic.java b/com/hbm/entity/grenade/EntityGrenadeIFToxic.java new file mode 100644 index 000000000..d17910734 --- /dev/null +++ b/com/hbm/entity/grenade/EntityGrenadeIFToxic.java @@ -0,0 +1,53 @@ +package com.hbm.entity.grenade; + +import com.hbm.explosion.ExplosionChaos; +import com.hbm.explosion.ExplosionLarge; +import com.hbm.explosion.ExplosionNukeGeneric; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; + +public class EntityGrenadeIFToxic extends EntityGrenadeBouncyBase { + + public EntityGrenadeIFToxic(World p_i1773_1_) + { + super(p_i1773_1_); + } + + public EntityGrenadeIFToxic(World p_i1774_1_, EntityLivingBase p_i1774_2_) + { + super(p_i1774_1_, p_i1774_2_); + } + + public EntityGrenadeIFToxic(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) + { + super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_); + } + + @Override + public void explode() { + + if (!this.worldObj.isRemote) + { + this.setDead(); + + ExplosionLarge.jolt(worldObj, posX, posY, posZ, 3, 200, 0.25); + ExplosionLarge.explode(worldObj, posX, posY, posZ, 2, true, true, true); + ExplosionChaos.poison(worldObj, (int)posX, (int)posY, (int)posZ, 12); + ExplosionNukeGeneric.waste(worldObj, (int)posX, (int)posY, (int)posZ, 12); + ExplosionChaos.spawnChlorine(worldObj, posX, posY, posZ, 50, 1.5, 0); + } + } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_if_toxic); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } +} diff --git a/com/hbm/entity/grenade/EntityGrenadeLemon.java b/com/hbm/entity/grenade/EntityGrenadeLemon.java index 2e72dc136..0440d5b64 100644 --- a/com/hbm/entity/grenade/EntityGrenadeLemon.java +++ b/com/hbm/entity/grenade/EntityGrenadeLemon.java @@ -1,10 +1,13 @@ package com.hbm.entity.grenade; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; + import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; -public class EntityGrenadeLemon extends EntityGrenadeBase +public class EntityGrenadeLemon extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; @@ -32,4 +35,14 @@ public class EntityGrenadeLemon extends EntityGrenadeBase this.worldObj.newExplosion((Entity)null, (float)this.posX, (float)this.posY, (float)this.posZ, 5.0F, true, true); } } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_lemon); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } } diff --git a/com/hbm/entity/grenade/EntityGrenadeMIRV.java b/com/hbm/entity/grenade/EntityGrenadeMIRV.java index fd7a79ea1..b867f4ec8 100644 --- a/com/hbm/entity/grenade/EntityGrenadeMIRV.java +++ b/com/hbm/entity/grenade/EntityGrenadeMIRV.java @@ -2,6 +2,7 @@ package com.hbm.entity.grenade; import com.hbm.explosion.ExplosionLarge; import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -10,7 +11,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; -public class EntityGrenadeMIRV extends EntityGrenadeBase { +public class EntityGrenadeMIRV extends EntityGrenadeBouncyBase { public EntityGrenadeMIRV(World p_i1773_1_) { @@ -26,13 +27,13 @@ public class EntityGrenadeMIRV extends EntityGrenadeBase { { super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_); } - + @Override - public void onUpdate() { - super.onUpdate(); + public void explode() { - if(this.ticksExisted > 20 && !worldObj.isRemote) { - this.setDead(); + if (!this.worldObj.isRemote) + { + this.setDead(); for(int i = 0; i < 8; i++) { @@ -47,16 +48,16 @@ public class EntityGrenadeMIRV extends EntityGrenadeBase { worldObj.spawnEntityInWorld(grenade); } - } - } - - @Override - public void explode() { - - if (!this.worldObj.isRemote) - { - this.setDead(); - worldObj.spawnEntityInWorld(new EntityItem(worldObj, posX, posY, posZ, new ItemStack(ModItems.grenade_mirv))); } } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_mirv); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } } diff --git a/com/hbm/entity/grenade/EntityGrenadeMk2.java b/com/hbm/entity/grenade/EntityGrenadeMk2.java index 3575d2b25..df7692cd0 100644 --- a/com/hbm/entity/grenade/EntityGrenadeMk2.java +++ b/com/hbm/entity/grenade/EntityGrenadeMk2.java @@ -1,11 +1,13 @@ package com.hbm.entity.grenade; import com.hbm.explosion.ExplosionLarge; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; -public class EntityGrenadeMk2 extends EntityGrenadeBase { +public class EntityGrenadeMk2 extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; @@ -31,4 +33,14 @@ public class EntityGrenadeMk2 extends EntityGrenadeBase { ExplosionLarge.explode(worldObj, posX, posY, posZ, 7.5F, true, false, false); } } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_mk2); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } } diff --git a/com/hbm/entity/grenade/EntityGrenadeNuclear.java b/com/hbm/entity/grenade/EntityGrenadeNuclear.java index 731ebac3f..23b1f59db 100644 --- a/com/hbm/entity/grenade/EntityGrenadeNuclear.java +++ b/com/hbm/entity/grenade/EntityGrenadeNuclear.java @@ -5,12 +5,14 @@ import com.hbm.entity.logic.EntityNukeExplosionMK3; import com.hbm.entity.logic.EntityNukeExplosionMK4; import com.hbm.explosion.ExplosionParticle; import com.hbm.explosion.ExplosionParticleB; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; import com.hbm.main.MainRegistry; import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; -public class EntityGrenadeNuclear extends EntityGrenadeBase +public class EntityGrenadeNuclear extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; @@ -52,4 +54,14 @@ public class EntityGrenadeNuclear extends EntityGrenadeBase } } } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_nuclear); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } } diff --git a/com/hbm/entity/grenade/EntityGrenadePlasma.java b/com/hbm/entity/grenade/EntityGrenadePlasma.java index 932d4628d..ecf073b85 100644 --- a/com/hbm/entity/grenade/EntityGrenadePlasma.java +++ b/com/hbm/entity/grenade/EntityGrenadePlasma.java @@ -1,10 +1,13 @@ package com.hbm.entity.grenade; import com.hbm.explosion.ExplosionChaos; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; + import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; -public class EntityGrenadePlasma extends EntityGrenadeBase +public class EntityGrenadePlasma extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; @@ -33,4 +36,14 @@ public class EntityGrenadePlasma extends EntityGrenadeBase ExplosionChaos.plasma(this.worldObj, (int)this.posX, (int)this.posY, (int)this.posZ, 7 ); } } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_plasma); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } } diff --git a/com/hbm/entity/grenade/EntityGrenadePoison.java b/com/hbm/entity/grenade/EntityGrenadePoison.java index 88a1cdfbd..90591edd6 100644 --- a/com/hbm/entity/grenade/EntityGrenadePoison.java +++ b/com/hbm/entity/grenade/EntityGrenadePoison.java @@ -1,11 +1,13 @@ package com.hbm.entity.grenade; import com.hbm.explosion.ExplosionNukeGeneric; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; -public class EntityGrenadePoison extends EntityGrenadeBase +public class EntityGrenadePoison extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; @@ -36,4 +38,14 @@ public class EntityGrenadePoison extends EntityGrenadeBase } } + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_poison); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } + } diff --git a/com/hbm/entity/grenade/EntityGrenadePulse.java b/com/hbm/entity/grenade/EntityGrenadePulse.java index 0b4beef7c..24819a718 100644 --- a/com/hbm/entity/grenade/EntityGrenadePulse.java +++ b/com/hbm/entity/grenade/EntityGrenadePulse.java @@ -2,11 +2,13 @@ package com.hbm.entity.grenade; import com.hbm.explosion.ExplosionChaos; import com.hbm.explosion.ExplosionLarge; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; -public class EntityGrenadePulse extends EntityGrenadeBase { +public class EntityGrenadePulse extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; @@ -35,4 +37,14 @@ public class EntityGrenadePulse extends EntityGrenadeBase { ExplosionLarge.spawnShock(worldObj, posX, posY, posZ, 24, 2); } } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_pulse); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } } diff --git a/com/hbm/entity/grenade/EntityGrenadeSchrabidium.java b/com/hbm/entity/grenade/EntityGrenadeSchrabidium.java index 24e8b75fe..d25cd173e 100644 --- a/com/hbm/entity/grenade/EntityGrenadeSchrabidium.java +++ b/com/hbm/entity/grenade/EntityGrenadeSchrabidium.java @@ -1,11 +1,13 @@ package com.hbm.entity.grenade; import com.hbm.explosion.ExplosionChaos; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; -public class EntityGrenadeSchrabidium extends EntityGrenadeBase +public class EntityGrenadeSchrabidium extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; @@ -35,4 +37,14 @@ public class EntityGrenadeSchrabidium extends EntityGrenadeBase } } + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_schrabidium); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } + } diff --git a/com/hbm/entity/grenade/EntityGrenadeShrapnel.java b/com/hbm/entity/grenade/EntityGrenadeShrapnel.java index 2c5d73dcc..5155be9f2 100644 --- a/com/hbm/entity/grenade/EntityGrenadeShrapnel.java +++ b/com/hbm/entity/grenade/EntityGrenadeShrapnel.java @@ -5,8 +5,10 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; import com.hbm.explosion.ExplosionLarge; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; -public class EntityGrenadeShrapnel extends EntityGrenadeBase +public class EntityGrenadeShrapnel extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; public Entity shooter; @@ -38,4 +40,14 @@ public class EntityGrenadeShrapnel extends EntityGrenadeBase } } } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_shrapnel); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } } diff --git a/com/hbm/entity/grenade/EntityGrenadeStrong.java b/com/hbm/entity/grenade/EntityGrenadeStrong.java index efe420842..e57cd946f 100644 --- a/com/hbm/entity/grenade/EntityGrenadeStrong.java +++ b/com/hbm/entity/grenade/EntityGrenadeStrong.java @@ -1,11 +1,13 @@ package com.hbm.entity.grenade; import com.hbm.explosion.ExplosionLarge; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; -public class EntityGrenadeStrong extends EntityGrenadeBase +public class EntityGrenadeStrong extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; @@ -33,4 +35,14 @@ public class EntityGrenadeStrong extends EntityGrenadeBase ExplosionLarge.explode(worldObj, posX, posY, posZ, 5.0F, true, false, false); } } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_strong); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } } diff --git a/com/hbm/entity/grenade/EntityGrenadeTau.java b/com/hbm/entity/grenade/EntityGrenadeTau.java index 9de3eaeb7..147ce4282 100644 --- a/com/hbm/entity/grenade/EntityGrenadeTau.java +++ b/com/hbm/entity/grenade/EntityGrenadeTau.java @@ -1,11 +1,13 @@ package com.hbm.entity.grenade; import com.hbm.explosion.ExplosionChaos; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; -public class EntityGrenadeTau extends EntityGrenadeBase +public class EntityGrenadeTau extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; @@ -34,4 +36,14 @@ public class EntityGrenadeTau extends EntityGrenadeBase ExplosionChaos.tauMeSinPi(this.worldObj, this.posX, this.posY, this.posZ, 100, this.getThrower(), this); } } + + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_tau); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } } diff --git a/com/hbm/entity/grenade/EntityGrenadeZOMG.java b/com/hbm/entity/grenade/EntityGrenadeZOMG.java index 517b50fb7..ed163b629 100644 --- a/com/hbm/entity/grenade/EntityGrenadeZOMG.java +++ b/com/hbm/entity/grenade/EntityGrenadeZOMG.java @@ -1,11 +1,13 @@ package com.hbm.entity.grenade; import com.hbm.explosion.ExplosionChaos; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemGrenade; import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; -public class EntityGrenadeZOMG extends EntityGrenadeBase +public class EntityGrenadeZOMG extends EntityGrenadeBouncyBase { private static final String __OBFID = "CL_00001722"; @@ -34,4 +36,14 @@ public class EntityGrenadeZOMG extends EntityGrenadeBase } } + @Override + protected int getMaxTimer() { + return ItemGrenade.getFuseTicks(ModItems.grenade_tau); + } + + @Override + protected double getBounceMod() { + return 0.25D; + } + } diff --git a/com/hbm/entity/projectile/EntityBullet.java b/com/hbm/entity/projectile/EntityBullet.java index a233686ad..bce6c7b02 100644 --- a/com/hbm/entity/projectile/EntityBullet.java +++ b/com/hbm/entity/projectile/EntityBullet.java @@ -198,6 +198,7 @@ public class EntityBullet extends Entity implements IProjectile { this.setIsCritical(isTau != "chopper"); } + //why the living shit did i make isTau a string? who knows, who cares. public EntityBullet(World p_i1756_1_, EntityLivingBase p_i1756_2_, float p_i1756_3_, int dmgMin, int dmgMax, boolean instakill, String isTau, EntityGrenadeTau grenade) { super(p_i1756_1_); diff --git a/com/hbm/explosion/ExplosionLarge.java b/com/hbm/explosion/ExplosionLarge.java index 139221626..0ffb95cde 100644 --- a/com/hbm/explosion/ExplosionLarge.java +++ b/com/hbm/explosion/ExplosionLarge.java @@ -10,6 +10,7 @@ import com.hbm.entity.projectile.EntityRubble; import com.hbm.entity.projectile.EntityShrapnel; import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityFallingBlock; import net.minecraft.entity.item.EntityItem; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; @@ -202,6 +203,57 @@ public class ExplosionLarge { spawnShrapnels(world, x, y, z, shrapnelFunction((int)strength)); } + public static void jolt(World world, double posX, double posY, double posZ, double strength, int count, double vel) { + + for(int j = 0; j < count; j++) { + + double phi = rand.nextDouble() * (Math.PI * 2); + double costheta = rand.nextDouble() * 2 - 1; + double theta = Math.acos(costheta); + double x = Math.sin( theta) * Math.cos( phi ); + double y = Math.sin( theta) * Math.sin( phi ); + double z = Math.cos( theta ); + + Vec3 vec = Vec3.createVectorHelper(x, y, z); + + for(int i = 0; i < strength; i ++) { + double x0 = posX + (vec.xCoord * i); + double y0 = posY + (vec.yCoord * i); + double z0 = posZ + (vec.zCoord * i); + + if(!world.isRemote) { + if(world.getBlock((int)x0, (int)y0, (int)z0).getMaterial().isLiquid()) { + world.setBlock((int)x0, (int)y0, (int)z0, Blocks.air); + } + + if(world.getBlock((int)x0, (int)y0, (int)z0) != Blocks.air) { + + if(world.getBlock((int)x0, (int)y0, (int)z0).getExplosionResistance(null) > 70) + continue; + + EntityRubble rubble = new EntityRubble(world); + rubble.posX = x0 + 0.5F; + rubble.posY = y0 + 0.5F; + rubble.posZ = z0 + 0.5F; + rubble.setMetaBasedOnMat(world.getBlock((int)x0, (int)y0, (int)z0).getMaterial()); + + Vec3 vec4 = Vec3.createVectorHelper(posX - rubble.posX, posY - rubble.posY, posZ - rubble.posZ); + vec4.normalize(); + + rubble.motionX = vec4.xCoord * vel; + rubble.motionY = vec4.yCoord * vel; + rubble.motionZ = vec4.zCoord * vel; + + world.spawnEntityInWorld(rubble); + + world.setBlock((int)x0, (int)y0, (int)z0, Blocks.air); + break; + } + } + } + } + } + public static int cloudFunction(int i) { //return (int)(345 * (1 - Math.pow(Math.E, -i/15)) + 15); return (int)(545 * (1 - Math.pow(Math.E, -i/15)) + 15); diff --git a/com/hbm/items/ModItems.java b/com/hbm/items/ModItems.java index 671c03222..a64e91fbd 100644 --- a/com/hbm/items/ModItems.java +++ b/com/hbm/items/ModItems.java @@ -830,6 +830,20 @@ public class ModItems { public static Item grenade_pink_cloud; public static Item ullapool_caber; + public static Item grenade_if_generic; + public static Item grenade_if_he; + public static Item grenade_if_bouncy; + public static Item grenade_if_sticky; + public static Item grenade_if_impact; + public static Item grenade_if_incendiary; + public static Item grenade_if_toxic; + public static Item grenade_if_concussion; + public static Item grenade_if_brimstone; + public static Item grenade_if_mystery; + public static Item grenade_if_spark; + public static Item grenade_if_hopwire; + public static Item grenade_if_null; + public static Item grenade_smart; public static Item grenade_mirv; public static Item grenade_breach; @@ -2076,36 +2090,50 @@ public class ModItems { gun_moist_nugget = new ItemNugget(3, false).setUnlocalizedName("gun_moist_nugget").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_moist_nugget"); gun_dampfmaschine = new GunDampfmaschine().setUnlocalizedName("gun_dampfmaschine").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_dampfmaschine"); - grenade_generic = new ItemGrenade().setUnlocalizedName("grenade_generic").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_generic"); - grenade_strong = new ItemGrenade().setUnlocalizedName("grenade_strong").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_strong"); - grenade_frag = new ItemGrenade().setUnlocalizedName("grenade_frag").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_frag_alt"); - grenade_fire = new ItemGrenade().setUnlocalizedName("grenade_fire").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_fire_alt"); - grenade_shrapnel = new ItemGrenade().setUnlocalizedName("grenade_shrapnel").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_shrapnel"); - grenade_cluster = new ItemGrenade().setUnlocalizedName("grenade_cluster").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_cluster_alt"); - grenade_flare = new ItemGrenade().setUnlocalizedName("grenade_flare").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_flare_alt"); - grenade_electric = new ItemGrenade().setUnlocalizedName("grenade_electric").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_electric_alt"); - grenade_poison = new ItemGrenade().setUnlocalizedName("grenade_poison").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_poison_alt"); - grenade_gas = new ItemGrenade().setUnlocalizedName("grenade_gas").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_gas_alt"); - grenade_pulse = new ItemGrenade().setUnlocalizedName("grenade_pulse").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_pulse"); - grenade_plasma = new ItemGrenade().setUnlocalizedName("grenade_plasma").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_plasma_alt"); - grenade_tau = new ItemGrenade().setUnlocalizedName("grenade_tau").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_tau_alt"); - grenade_schrabidium = new ItemGrenade().setUnlocalizedName("grenade_schrabidium").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_schrabidium_alt"); - grenade_lemon = new ItemGrenade().setUnlocalizedName("grenade_lemon").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_lemon"); - grenade_gascan = new ItemGrenade().setUnlocalizedName("grenade_gascan").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_gascan"); - grenade_mk2 = new ItemGrenade().setUnlocalizedName("grenade_mk2").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_mk2_alt"); - grenade_aschrab = new ItemGrenade().setUnlocalizedName("grenade_aschrab").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_aschrab"); - grenade_nuke = new ItemGrenade().setUnlocalizedName("grenade_nuke").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_nuke_alt"); - grenade_nuclear = new ItemGrenade().setUnlocalizedName("grenade_nuclear").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_nuclear"); - grenade_zomg = new ItemGrenade().setUnlocalizedName("grenade_zomg").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_zomg"); - grenade_black_hole = new ItemGrenade().setUnlocalizedName("grenade_black_hole").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_black_hole"); - grenade_cloud = new ItemGrenade().setUnlocalizedName("grenade_cloud").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_cloud"); - grenade_pink_cloud = new ItemGrenade().setUnlocalizedName("grenade_pink_cloud").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_pink_cloud"); + grenade_generic = new ItemGrenade(4).setUnlocalizedName("grenade_generic").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_generic"); + grenade_strong = new ItemGrenade(5).setUnlocalizedName("grenade_strong").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_strong"); + grenade_frag = new ItemGrenade(4).setUnlocalizedName("grenade_frag").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_frag_alt"); + grenade_fire = new ItemGrenade(4).setUnlocalizedName("grenade_fire").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_fire_alt"); + grenade_shrapnel = new ItemGrenade(4).setUnlocalizedName("grenade_shrapnel").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_shrapnel"); + grenade_cluster = new ItemGrenade(5).setUnlocalizedName("grenade_cluster").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_cluster_alt"); + grenade_flare = new ItemGrenade(0).setUnlocalizedName("grenade_flare").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_flare_alt"); + grenade_electric = new ItemGrenade(5).setUnlocalizedName("grenade_electric").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_electric_alt"); + grenade_poison = new ItemGrenade(4).setUnlocalizedName("grenade_poison").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_poison_alt"); + grenade_gas = new ItemGrenade(4).setUnlocalizedName("grenade_gas").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_gas_alt"); + grenade_pulse = new ItemGrenade(4).setUnlocalizedName("grenade_pulse").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_pulse"); + grenade_plasma = new ItemGrenade(5).setUnlocalizedName("grenade_plasma").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_plasma_alt"); + grenade_tau = new ItemGrenade(5).setUnlocalizedName("grenade_tau").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_tau_alt"); + grenade_schrabidium = new ItemGrenade(7).setUnlocalizedName("grenade_schrabidium").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_schrabidium_alt"); + grenade_lemon = new ItemGrenade(4).setUnlocalizedName("grenade_lemon").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_lemon"); + grenade_gascan = new ItemGrenade(-1).setUnlocalizedName("grenade_gascan").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_gascan"); + grenade_mk2 = new ItemGrenade(5).setUnlocalizedName("grenade_mk2").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_mk2_alt"); + grenade_aschrab = new ItemGrenade(-1).setUnlocalizedName("grenade_aschrab").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_aschrab"); + grenade_nuke = new ItemGrenade(-1).setUnlocalizedName("grenade_nuke").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_nuke_alt"); + grenade_nuclear = new ItemGrenade(7).setUnlocalizedName("grenade_nuclear").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_nuclear"); + grenade_zomg = new ItemGrenade(7).setUnlocalizedName("grenade_zomg").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_zomg"); + grenade_black_hole = new ItemGrenade(7).setUnlocalizedName("grenade_black_hole").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_black_hole"); + grenade_cloud = new ItemGrenade(-1).setUnlocalizedName("grenade_cloud").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_cloud"); + grenade_pink_cloud = new ItemGrenade(-1).setUnlocalizedName("grenade_pink_cloud").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_pink_cloud"); ullapool_caber = new WeaponSpecial(MainRegistry.enumToolMaterialSteel).setUnlocalizedName("ullapool_caber").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ullapool_caber"); - grenade_smart = new ItemGrenade().setUnlocalizedName("grenade_smart").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_smart"); - grenade_mirv = new ItemGrenade().setUnlocalizedName("grenade_mirv").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_mirv"); - grenade_breach = new ItemGrenade().setUnlocalizedName("grenade_breach").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_breach"); - grenade_burst = new ItemGrenade().setUnlocalizedName("grenade_burst").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_burst"); + grenade_if_generic = new ItemGrenade(4).setUnlocalizedName("grenade_if_generic").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_if_generic"); + grenade_if_he = new ItemGrenade(5).setUnlocalizedName("grenade_if_he").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_if_he"); + grenade_if_bouncy = new ItemGrenade(4).setUnlocalizedName("grenade_if_bouncy").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_if_bouncy"); + grenade_if_sticky = new ItemGrenade(4).setUnlocalizedName("grenade_if_sticky").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_if_sticky"); + grenade_if_impact = new ItemGrenade(-1).setUnlocalizedName("grenade_if_impact").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_if_impact"); + grenade_if_incendiary = new ItemGrenade(4).setUnlocalizedName("grenade_if_incendiary").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_if_incendiary"); + grenade_if_toxic = new ItemGrenade(4).setUnlocalizedName("grenade_if_toxic").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_if_toxic"); + grenade_if_concussion = new ItemGrenade(4).setUnlocalizedName("grenade_if_concussion").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_if_concussion"); + grenade_if_brimstone = new ItemGrenade(5).setUnlocalizedName("grenade_if_brimstone").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_if_brimstone"); + grenade_if_mystery = new ItemGrenade(5).setUnlocalizedName("grenade_if_mystery").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_if_mystery"); + grenade_if_spark = new ItemGrenade(5).setUnlocalizedName("grenade_if_spark").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_if_spark"); + grenade_if_hopwire = new ItemGrenade(7).setUnlocalizedName("grenade_if_hopwire").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_if_hopwire"); + grenade_if_null = new ItemGrenade(7).setUnlocalizedName("grenade_if_null").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_if_null"); + + grenade_smart = new ItemGrenade(-1).setUnlocalizedName("grenade_smart").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_smart"); + grenade_mirv = new ItemGrenade(1).setUnlocalizedName("grenade_mirv").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_mirv"); + grenade_breach = new ItemGrenade(-1).setUnlocalizedName("grenade_breach").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_breach"); + grenade_burst = new ItemGrenade(1).setUnlocalizedName("grenade_burst").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_burst"); weaponized_starblaster_cell = new WeaponizedCell().setUnlocalizedName("weaponized_starblaster_cell").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_b92_ammo_weaponized"); @@ -3598,6 +3626,21 @@ public class ModItems { GameRegistry.registerItem(grenade_nuclear, grenade_nuclear.getUnlocalizedName()); GameRegistry.registerItem(grenade_zomg, grenade_zomg.getUnlocalizedName()); GameRegistry.registerItem(grenade_black_hole, grenade_black_hole.getUnlocalizedName()); + + GameRegistry.registerItem(grenade_if_generic, grenade_if_generic.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_he, grenade_if_he.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_bouncy, grenade_if_bouncy.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_sticky, grenade_if_sticky.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_impact, grenade_if_impact.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_incendiary, grenade_if_incendiary.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_toxic, grenade_if_toxic.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_concussion, grenade_if_concussion.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_brimstone, grenade_if_brimstone.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_mystery, grenade_if_mystery.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_spark, grenade_if_spark.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_hopwire, grenade_if_hopwire.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_null, grenade_if_null.getUnlocalizedName()); + GameRegistry.registerItem(ullapool_caber, ullapool_caber.getUnlocalizedName()); GameRegistry.registerItem(weaponized_starblaster_cell, weaponized_starblaster_cell.getUnlocalizedName()); diff --git a/com/hbm/items/weapon/ItemGrenade.java b/com/hbm/items/weapon/ItemGrenade.java index 2eb380fdc..e22313d57 100644 --- a/com/hbm/items/weapon/ItemGrenade.java +++ b/com/hbm/items/weapon/ItemGrenade.java @@ -1,5 +1,7 @@ package com.hbm.items.weapon; +import java.util.List; + import com.hbm.entity.grenade.EntityGrenadeASchrab; import com.hbm.entity.grenade.EntityGrenadeBlackHole; import com.hbm.entity.grenade.EntityGrenadeBreach; @@ -13,6 +15,19 @@ import com.hbm.entity.grenade.EntityGrenadeFrag; import com.hbm.entity.grenade.EntityGrenadeGas; import com.hbm.entity.grenade.EntityGrenadeGascan; import com.hbm.entity.grenade.EntityGrenadeGeneric; +import com.hbm.entity.grenade.EntityGrenadeIFBouncy; +import com.hbm.entity.grenade.EntityGrenadeIFBrimstone; +import com.hbm.entity.grenade.EntityGrenadeIFConcussion; +import com.hbm.entity.grenade.EntityGrenadeIFGeneric; +import com.hbm.entity.grenade.EntityGrenadeIFHE; +import com.hbm.entity.grenade.EntityGrenadeIFHopwire; +import com.hbm.entity.grenade.EntityGrenadeIFImpact; +import com.hbm.entity.grenade.EntityGrenadeIFIncendiary; +import com.hbm.entity.grenade.EntityGrenadeIFMystery; +import com.hbm.entity.grenade.EntityGrenadeIFNull; +import com.hbm.entity.grenade.EntityGrenadeIFSpark; +import com.hbm.entity.grenade.EntityGrenadeIFSticky; +import com.hbm.entity.grenade.EntityGrenadeIFToxic; import com.hbm.entity.grenade.EntityGrenadeLemon; import com.hbm.entity.grenade.EntityGrenadeMIRV; import com.hbm.entity.grenade.EntityGrenadeMk2; @@ -37,9 +52,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class ItemGrenade extends Item { + + public int fuse = 4; - public ItemGrenade() { + public ItemGrenade(int fuse) { this.maxStackSize = 16; + this.fuse = fuse; } @Override @@ -139,6 +157,46 @@ public class ItemGrenade extends Item { if (this == ModItems.grenade_burst) { p_77659_2_.spawnEntityInWorld(new EntityGrenadeBurst(p_77659_2_, p_77659_3_)); } + + if (this == ModItems.grenade_if_generic) { + p_77659_2_.spawnEntityInWorld(new EntityGrenadeIFGeneric(p_77659_2_, p_77659_3_)); + } + if (this == ModItems.grenade_if_he) { + p_77659_2_.spawnEntityInWorld(new EntityGrenadeIFHE(p_77659_2_, p_77659_3_)); + } + if (this == ModItems.grenade_if_bouncy) { + p_77659_2_.spawnEntityInWorld(new EntityGrenadeIFBouncy(p_77659_2_, p_77659_3_)); + } + if (this == ModItems.grenade_if_sticky) { + p_77659_2_.spawnEntityInWorld(new EntityGrenadeIFSticky(p_77659_2_, p_77659_3_)); + } + if (this == ModItems.grenade_if_impact) { + p_77659_2_.spawnEntityInWorld(new EntityGrenadeIFImpact(p_77659_2_, p_77659_3_)); + } + if (this == ModItems.grenade_if_incendiary) { + p_77659_2_.spawnEntityInWorld(new EntityGrenadeIFIncendiary(p_77659_2_, p_77659_3_)); + } + if (this == ModItems.grenade_if_toxic) { + p_77659_2_.spawnEntityInWorld(new EntityGrenadeIFToxic(p_77659_2_, p_77659_3_)); + } + if (this == ModItems.grenade_if_concussion) { + p_77659_2_.spawnEntityInWorld(new EntityGrenadeIFConcussion(p_77659_2_, p_77659_3_)); + } + if (this == ModItems.grenade_if_brimstone) { + p_77659_2_.spawnEntityInWorld(new EntityGrenadeIFBrimstone(p_77659_2_, p_77659_3_)); + } + if (this == ModItems.grenade_if_mystery) { + p_77659_2_.spawnEntityInWorld(new EntityGrenadeIFMystery(p_77659_2_, p_77659_3_)); + } + if (this == ModItems.grenade_if_spark) { + p_77659_2_.spawnEntityInWorld(new EntityGrenadeIFSpark(p_77659_2_, p_77659_3_)); + } + if (this == ModItems.grenade_if_hopwire) { + p_77659_2_.spawnEntityInWorld(new EntityGrenadeIFHopwire(p_77659_2_, p_77659_3_)); + } + if (this == ModItems.grenade_if_null) { + p_77659_2_.spawnEntityInWorld(new EntityGrenadeIFNull(p_77659_2_, p_77659_3_)); + } } return p_77659_1_; @@ -161,5 +219,25 @@ public class ItemGrenade extends Item { return EnumRarity.common; } + + private String translateFuse() { + if(fuse == -1) + return "Impact"; + + if(fuse == 0) + return "Instant"; + + return fuse + "s"; + } + + @Override + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { + + list.add("Fuse: " + translateFuse()); + } + + public static int getFuseTicks(Item grenade) { + return ((ItemGrenade)grenade).fuse * 20; + } } diff --git a/com/hbm/main/ClientProxy.java b/com/hbm/main/ClientProxy.java index ffbd8c47a..fb9ae0523 100644 --- a/com/hbm/main/ClientProxy.java +++ b/com/hbm/main/ClientProxy.java @@ -147,6 +147,19 @@ public class ClientProxy extends ServerProxy RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeMIRV.class, new RenderSnowball(ModItems.grenade_mirv)); RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeBreach.class, new RenderSnowball(ModItems.grenade_breach)); RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeBurst.class, new RenderSnowball(ModItems.grenade_burst)); + RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeIFGeneric.class, new RenderSnowball(ModItems.grenade_if_generic)); + RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeIFHE.class, new RenderSnowball(ModItems.grenade_if_he)); + RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeIFBouncy.class, new RenderSnowball(ModItems.grenade_if_bouncy)); + RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeIFSticky.class, new RenderSnowball(ModItems.grenade_if_sticky)); + RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeIFImpact.class, new RenderSnowball(ModItems.grenade_if_impact)); + RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeIFIncendiary.class, new RenderSnowball(ModItems.grenade_if_incendiary)); + RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeIFToxic.class, new RenderSnowball(ModItems.grenade_if_toxic)); + RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeIFConcussion.class, new RenderSnowball(ModItems.grenade_if_concussion)); + RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeIFBrimstone.class, new RenderSnowball(ModItems.grenade_if_brimstone)); + RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeIFMystery.class, new RenderSnowball(ModItems.grenade_if_mystery)); + RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeIFSpark.class, new RenderSnowball(ModItems.grenade_if_spark)); + RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeIFHopwire.class, new RenderSnowball(ModItems.grenade_if_hopwire)); + RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeIFNull.class, new RenderSnowball(ModItems.grenade_if_null)); RenderingRegistry.registerEntityRenderingHandler(EntitySchrab.class, new RenderFlare()); diff --git a/com/hbm/main/MainRegistry.java b/com/hbm/main/MainRegistry.java index c6a39da73..bea2912c7 100644 --- a/com/hbm/main/MainRegistry.java +++ b/com/hbm/main/MainRegistry.java @@ -77,6 +77,19 @@ import com.hbm.entity.grenade.EntityGrenadeFrag; import com.hbm.entity.grenade.EntityGrenadeGas; import com.hbm.entity.grenade.EntityGrenadeGascan; import com.hbm.entity.grenade.EntityGrenadeGeneric; +import com.hbm.entity.grenade.EntityGrenadeIFBouncy; +import com.hbm.entity.grenade.EntityGrenadeIFBrimstone; +import com.hbm.entity.grenade.EntityGrenadeIFConcussion; +import com.hbm.entity.grenade.EntityGrenadeIFGeneric; +import com.hbm.entity.grenade.EntityGrenadeIFHE; +import com.hbm.entity.grenade.EntityGrenadeIFHopwire; +import com.hbm.entity.grenade.EntityGrenadeIFImpact; +import com.hbm.entity.grenade.EntityGrenadeIFIncendiary; +import com.hbm.entity.grenade.EntityGrenadeIFMystery; +import com.hbm.entity.grenade.EntityGrenadeIFNull; +import com.hbm.entity.grenade.EntityGrenadeIFSpark; +import com.hbm.entity.grenade.EntityGrenadeIFSticky; +import com.hbm.entity.grenade.EntityGrenadeIFToxic; import com.hbm.entity.grenade.EntityGrenadeLemon; import com.hbm.entity.grenade.EntityGrenadeMIRV; import com.hbm.entity.grenade.EntityGrenadeMk2; @@ -536,7 +549,8 @@ public class MainRegistry @EventHandler public void PreLoad(FMLPreInitializationEvent PreEvent) { - logger = PreEvent.getModLog(); + if(logger == null) + logger = PreEvent.getModLog(); //Reroll Polaroid @@ -822,6 +836,19 @@ public class MainRegistry EntityRegistry.registerModEntity(EntityGrenadeBreach.class, "entity_grenade_breach", 114, this, 250, 1, true); EntityRegistry.registerModEntity(EntityGrenadeBurst.class, "entity_grenade_burst", 115, this, 250, 1, true); EntityRegistry.registerModEntity(EntityBurningFOEQ.class, "entity_burning_foeq", 116, this, 1000, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFGeneric.class, "entity_grenade_ironshod", 117, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFHE.class, "entity_grenade_ironshod", 118, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFBouncy.class, "entity_grenade_ironshod", 119, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFSticky.class, "entity_grenade_ironshod", 120, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFImpact.class, "entity_grenade_ironshod", 121, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFIncendiary.class, "entity_grenade_ironshod", 122, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFToxic.class, "entity_grenade_ironshod", 123, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFConcussion.class, "entity_grenade_ironshod", 124, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFBrimstone.class, "entity_grenade_ironshod", 125, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFMystery.class, "entity_grenade_ironshod", 126, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFSpark.class, "entity_grenade_ironshod", 127, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFHopwire.class, "entity_grenade_ironshod", 128, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFNull.class, "entity_grenade_ironshod", 129, this, 250, 1, true); EntityRegistry.registerGlobalEntityID(EntityNuclearCreeper.class, "entity_mob_nuclear_creeper", EntityRegistry.findGlobalUniqueEntityId(), 0x204131, 0x75CE00); EntityRegistry.registerGlobalEntityID(EntityTaintedCreeper.class, "entity_mob_tainted_creeper", EntityRegistry.findGlobalUniqueEntityId(), 0x813b9b, 0xd71fdd); @@ -1036,6 +1063,97 @@ public class MainRegistry { return new EntityGrenadeBurst(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_generic, new BehaviorProjectileDispense() { + + protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) + { + return new EntityGrenadeIFGeneric(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_he, new BehaviorProjectileDispense() { + + protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) + { + return new EntityGrenadeIFHE(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_bouncy, new BehaviorProjectileDispense() { + + protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) + { + return new EntityGrenadeIFBouncy(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_sticky, new BehaviorProjectileDispense() { + + protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) + { + return new EntityGrenadeIFSticky(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_impact, new BehaviorProjectileDispense() { + + protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) + { + return new EntityGrenadeIFImpact(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_incendiary, new BehaviorProjectileDispense() { + + protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) + { + return new EntityGrenadeIFIncendiary(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_toxic, new BehaviorProjectileDispense() { + + protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) + { + return new EntityGrenadeIFToxic(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_concussion, new BehaviorProjectileDispense() { + + protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) + { + return new EntityGrenadeIFConcussion(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_brimstone, new BehaviorProjectileDispense() { + + protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) + { + return new EntityGrenadeIFBrimstone(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_mystery, new BehaviorProjectileDispense() { + + protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) + { + return new EntityGrenadeIFMystery(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_spark, new BehaviorProjectileDispense() { + + protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) + { + return new EntityGrenadeIFSpark(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_hopwire, new BehaviorProjectileDispense() { + + protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) + { + return new EntityGrenadeIFHopwire(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_null, new BehaviorProjectileDispense() { + + protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) + { + return new EntityGrenadeIFNull(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); + } }); } @@ -1408,6 +1526,9 @@ public class MainRegistry @EventHandler public void preInit(FMLPreInitializationEvent event) { + if(logger == null) + logger = event.getModLog(); + FMLCommonHandler.instance().bus().register(new ModEventHandler()); MinecraftForge.EVENT_BUS.register(new ModEventHandler()); MinecraftForge.TERRAIN_GEN_BUS.register(new ModEventHandler()); diff --git a/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java b/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java index c0d8fc408..ab20f2b63 100644 --- a/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java +++ b/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java @@ -6,7 +6,7 @@ import java.util.Random; import com.hbm.entity.effect.EntityBlackHole; import com.hbm.entity.effect.EntityCloudFleija; -import com.hbm.entity.logic.EntityNukeExplosionAdvanced; +import com.hbm.entity.logic.EntityNukeExplosionMK3; import com.hbm.entity.logic.EntityNukeExplosionMK4; import com.hbm.explosion.ExplosionChaos; import com.hbm.explosion.ExplosionLarge; @@ -281,7 +281,7 @@ public class TileEntityMachineCyclotron extends TileEntity implements ISidedInve } if(i == 2) { - EntityNukeExplosionAdvanced entity = new EntityNukeExplosionAdvanced(worldObj); + EntityNukeExplosionMK3 entity = new EntityNukeExplosionMK3(worldObj); entity.posX = this.xCoord; entity.posY = this.yCoord; entity.posZ = this.zCoord;