From d66b75b76cdce3f0187afd23b7b186895e20178a Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 14 Nov 2024 22:50:38 +0100 Subject: [PATCH] "i was in the war" congratulations, i'm gonna be in the next one and they have laser beams now --- .../projectile/EntityBulletBeamBase.java | 2 + .../hbm/items/weapon/sedna/BulletConfig.java | 25 +++++++++ .../weapon/sedna/factory/Orchestras.java | 19 +++++++ .../weapon/sedna/factory/XFactoryEnergy.java | 12 ++-- .../assets/hbm/models/weapons/lasrifle.obj | 52 +++++++++--------- .../hbm/textures/models/weapons/lasrifle.png | Bin 2483 -> 4506 bytes 6 files changed, 78 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/hbm/entity/projectile/EntityBulletBeamBase.java b/src/main/java/com/hbm/entity/projectile/EntityBulletBeamBase.java index ad675f469..1d4e2bfe9 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityBulletBeamBase.java +++ b/src/main/java/com/hbm/entity/projectile/EntityBulletBeamBase.java @@ -35,6 +35,8 @@ public class EntityBulletBeamBase extends Entity implements IEntityAdditionalSpa this.setSize(0.5F, 0.5F); } + public EntityLivingBase getThrower() { return this.thrower; } + public EntityBulletBeamBase(EntityLivingBase entity, BulletConfig config, float baseDamage, float angularInaccuracy, double sideOffset, double heightOffset, double frontOffset) { this(entity.worldObj); diff --git a/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java b/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java index 7b6fe25a0..fadc8ee17 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java +++ b/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java @@ -211,6 +211,31 @@ public class BulletConfig implements Cloneable { } }; + public static BiConsumer LAMBDA_STANDARD_BEAM_HIT = (bullet, mop) -> { + + if(mop.typeOfHit == mop.typeOfHit.ENTITY) { + Entity entity = mop.entityHit; + + if(entity instanceof EntityLivingBase && ((EntityLivingBase) entity).getHealth() <= 0) return; + + DamageSource damageCalc = bullet.config.getDamage(bullet, bullet.getThrower(), false); + + if(!(entity instanceof EntityLivingBase)) { + EntityDamageUtil.attackEntityFromIgnoreIFrame(entity, damageCalc, bullet.damage); + return; + } + + EntityLivingBase living = (EntityLivingBase) entity; + + if(bullet.config.armorPiercingPercent == 0) { + EntityDamageUtil.attackEntityFromIgnoreIFrame(entity, damageCalc, bullet.damage); + } else { + DamageSource damagePiercing = bullet.config.getDamage(bullet, bullet.getThrower(), true); + EntityDamageUtil.attackArmorPiercing(living, damageCalc, damagePiercing, bullet.damage, bullet.config.armorPiercingPercent); + } + } + }; + public static BiConsumer LAMBDA_BEAM_HIT = (beam, mop) -> { if(mop.typeOfHit == mop.typeOfHit.ENTITY) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index 6f17f3bda..e44256000 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -1034,5 +1034,24 @@ public class Orchestras { if(entity.worldObj.isRemote) return; AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); + + if(type == AnimType.RELOAD) { + if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); + if(timer == 18) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.impact", 0.25F, 1F); + if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); + if(timer == 38) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); + } + + if(type == AnimType.INSPECT) { + if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); + if(timer == 12) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); + if(timer == 20) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); + } + + if(type == AnimType.JAMMED) { + if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); + if(timer == 22) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); + if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); + } }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java index c47a2f87e..58a345ae7 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java @@ -91,9 +91,9 @@ public class XFactoryEnergy { energy_tesla_blacklightning = new BulletConfig().setItem(EnumAmmo.CAPACITOR_BLACKLIGHTNING).setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true) .setDamage(5F).setOnBeamImpact(LAMBDA_LIGHTNING_HIT); - energy_las = new BulletConfig().setItem(EnumAmmo.CAPACITOR).setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true); - energy_las_overcharge = new BulletConfig().setItem(EnumAmmo.CAPACITOR_OVERCHARGE).setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true); - energy_las_blacklightning = new BulletConfig().setItem(EnumAmmo.CAPACITOR_BLACKLIGHTNING).setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true); + energy_las = new BulletConfig().setItem(EnumAmmo.CAPACITOR).setSpread(0.0F).setLife(5).setRenderRotations(false).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT); + energy_las_overcharge = new BulletConfig().setItem(EnumAmmo.CAPACITOR_OVERCHARGE).setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT); + energy_las_blacklightning = new BulletConfig().setItem(EnumAmmo.CAPACITOR_BLACKLIGHTNING).setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT); ModItems.gun_tesla_cannon = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(2_000).draw(10).inspect(33).reloadSequential(true).crosshair(Crosshair.CIRCLE) @@ -107,9 +107,9 @@ public class XFactoryEnergy { ).setUnlocalizedName("gun_tesla_cannon"); ModItems.gun_lasrifle = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() - .dura(2_000).draw(10).inspect(33).reloadSequential(true).crosshair(Crosshair.CIRCLE) + .dura(2_000).draw(10).inspect(26).reloadSequential(true).crosshair(Crosshair.CIRCLE) .rec(new Receiver(0) - .dmg(15F).delay(10).reload(20).jam(19).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) + .dmg(15F).delay(8).reload(44).jam(36).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 24).addConfigs(energy_las, energy_las_overcharge, energy_las_blacklightning)) .offset(0.75, -0.0625 * 1.5, -0.1875) .setupBeamFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) @@ -143,7 +143,7 @@ public class XFactoryEnergy { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_DOWN)); case CYCLE: return new BusAnimation() - .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, ItemGunBaseNT.getIsAiming(stack) ? -0.5 : -1, 50, IType.SIN_DOWN).addPos(0, 0, 0, 150, IType.SIN_FULL)) + .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, -0.5, 50, IType.SIN_DOWN).addPos(0, 0, 0, 150, IType.SIN_FULL)) .addBus("CYCLE", new BusAnimationSequence().addPos(0, 0, 0, 150).addPos(0, 0, 22.5, 350)) .addBus("COUNT", new BusAnimationSequence().addPos(amount, 0, 0, 0)); case RELOAD: return new BusAnimation() diff --git a/src/main/resources/assets/hbm/models/weapons/lasrifle.obj b/src/main/resources/assets/hbm/models/weapons/lasrifle.obj index a46554bbe..5cb099694 100644 --- a/src/main/resources/assets/hbm/models/weapons/lasrifle.obj +++ b/src/main/resources/assets/hbm/models/weapons/lasrifle.obj @@ -2024,58 +2024,58 @@ vt 0.024036 0.230847 vt 0.030765 0.259434 vt 0.028962 0.275939 vt 0.024036 0.288021 -vt 0.338462 0.169811 +vt 0.261538 0.169811 vt 0.030769 0.150943 -vt 0.338462 0.150943 -vt 0.338462 0.075472 +vt 0.261538 0.150943 +vt 0.261538 0.075472 vt 0.030769 0.056604 -vt 0.338462 0.056604 -vt 0.338462 0.018868 +vt 0.261538 0.056604 +vt 0.261538 0.018868 vt 0.030769 -0.000000 -vt 0.338462 -0.000000 -vt 0.338462 0.188679 +vt 0.261538 -0.000000 +vt 0.261538 0.188679 vt 0.030769 0.169811 -vt 0.338462 0.094340 +vt 0.261538 0.094340 vt 0.030769 0.075472 -vt 0.338462 0.132075 +vt 0.261538 0.132075 vt 0.030769 0.113208 -vt 0.338462 0.113208 -vt 0.338462 0.037736 +vt 0.261538 0.113208 +vt 0.261538 0.037736 vt 0.030769 0.018868 -vt 0.338462 0.207547 +vt 0.261538 0.207547 vt 0.030769 0.188679 vt 0.030769 0.094340 vt 0.030769 0.132075 vt 0.030769 0.037736 -vt 0.338462 0.226415 +vt 0.261538 0.226415 vt 0.030769 0.207547 vt 0.030769 0.415094 -vt 0.338462 0.433962 +vt 0.261538 0.433962 vt 0.030769 0.433962 vt 0.030769 0.320755 -vt 0.338462 0.339623 +vt 0.261538 0.339623 vt 0.030769 0.339623 vt 0.030769 0.358491 -vt 0.338462 0.377358 +vt 0.261538 0.377358 vt 0.030769 0.377358 vt 0.030769 0.264151 -vt 0.338462 0.283019 +vt 0.261538 0.283019 vt 0.030769 0.283019 -vt 0.338462 0.452830 +vt 0.261538 0.452830 vt 0.030769 0.452830 -vt 0.338462 0.396226 +vt 0.261538 0.396226 vt 0.030769 0.396226 -vt 0.338462 0.301887 +vt 0.261538 0.301887 vt 0.030769 0.301887 vt 0.030769 0.226415 -vt 0.338462 0.245283 +vt 0.261538 0.245283 vt 0.030769 0.245283 -vt 0.338462 0.415094 -vt 0.338462 0.320755 -vt 0.338462 0.358491 -vt 0.338462 0.264151 +vt 0.261538 0.415094 +vt 0.261538 0.320755 +vt 0.261538 0.358491 +vt 0.261538 0.264151 vt 0.030769 0.226415 -vt 0.338462 0.226415 +vt 0.261538 0.226415 vn 0.0000 0.0000 1.0000 vn -1.0000 0.0000 0.0000 vn -0.8660 0.5000 0.0000 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/lasrifle.png b/src/main/resources/assets/hbm/textures/models/weapons/lasrifle.png index 6d0b454446ba5d4fcd3c58c2ea9542ead18695d0..7458e6d96a2adc3db705adc1afedf88a0b3992fd 100644 GIT binary patch delta 4497 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 delta 2458 zcmV;L31#-0BeN5bGk*zcNklPmbKU6~-TfIzVTU8+hTRfh@fBHZ?%@1K+?H z^cD1YglTyC0zn_Z2~hjYt`QjMWdb-rj?gz?7AmSGiqxMXpF~pM4`{SnE{U{C`tBzxDhJF~gH-YK?+P;4f9|$#FKFEa=op~JgufaX`qN6KCbUYD|WGY3P??K(Ve279m zsD|zh)0=Cx_U3Sp{r2H^y1Tn0BBIyVS9*DQS@mW2n|};ULt#kKWccvm!?weMSFrY4 zEv2FR$^UczJCtDVp3?LHLCAy?)BWHJTYGc3$9|*ViKrEWSUCC&W2{&K0LF-T2(PcN zba!``L=;k!W1RrV1u;`G*9Q*~0svu>3qs#NAR_wo>67XI?f$#_H^01e=i=UZx&1M| z{cE^$KqZS_u6QU{&Y|@gNKNS=5PAc*nbDv^H9&?hzSM6BpGwpM#WF;N}W$p zKemIF;%?L$i^B zB~}bfRFh%4YzRVtDM7INE_IDP84O+C>LJ})d}_dbs8dD=09eGPKLZ)2lF<4-yF?U9 z7;>H+HcB`*rlu$%Z$UTnlsEZ-WT0V_;jjW_4a7cA*Z9fzZ+)W?B<4U- z!tNfz`KRW((FuXYY&`M2xFpZteC{pReL`JAEu4)*^eSfTo8=wp=dYkJ;a z3@eEePUf1Sho84C*p{pQw{5uq+{8hmgxw4GbL<=780R*8ic;V;Dy(KfIA0<=@1R)dLM5jl}BE&*(c-w2%H_TNa z0S#z@Ab@JILXgxSvxech8Jpf0E@EEH6cB_=a6N=@j)Hd^)Mi_X^AM(*4W;)o>|Fs6 z#+Q_o_o+%feD!4HT02i6)PKY9w%>U6Eo0}zD-eWC@GX|o3V^%R-ZJ{8BG1?n0&796 zBGyANbZ_iAm_Cxi!Y?-iLC74RC;&f;njUHLAhr>J&qE+`W=WRS-*d9At4X|s*c_eP zdp_>)mG3j80R)(qpsR2$>7$Or&ufG@bO@=L&N2?iJzgc2Egw{KF?tFyY zNhJcQqXQyD2#2KBD1RYmF|g4FcNK8yr&#H3@+Q5dr`!s8Iy^AVQD^*RKj{7Xk|+1b+Y~IEoNh5Ftnd520vy z?+OGkLUQg6h zpwKObE|&%(1ZkwN-+yj@#nqlLCBzybV8ME%!d z%(;dULjP@Mw|@~K#36nCeqMh_iDD4)0G49sF1WKMpY*gqL>4O!JHKPk6BYyjz~LBs z2+aOS0o+Dr9zu!H0oac5I0OhlwLlEO9Oz|`CKC?W; z0Um-h@DL6|4b2He2mlCBYSaJ^K^k}nhepb0kXn}kS(m|NR%Qv7WQwkhQkoO+5Tt>J zkR^N0ZAcY0U|j|39(t1U7olVnYpaXDbt*X;K24CpqBvv(DBw}aNlG$GJuB=2RwwL;mXT%d5aM2 zjeB7<6970ULsRj>ZA8!)1c*Z%@DM;jj6DPh004&t;}E2Qhfp+}d3mYt3-mGo06P8; YArq<6RmX2}1poj507*qoM6N<$g2+a5xc~qF