From 38ecb23a8e454734d5e64a47079a9b466a87c650 Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 28 Nov 2024 16:59:33 +0100 Subject: [PATCH] more stupid shit --- changelog | 1 + .../standard/EntityProcessorCross.java | 6 ++- .../standard/EntityProcessorCrossSmooth.java | 22 ++++++++ .../java/com/hbm/inventory/fluid/Fluids.java | 4 +- src/main/java/com/hbm/items/ModItems.java | 2 + .../hbm/items/weapon/sedna/BulletConfig.java | 37 +++++++------ .../weapon/sedna/factory/GunFactory.java | 2 +- .../sedna/factory/GunFactoryClient.java | 2 + .../hbm/items/weapon/sedna/factory/Lego.java | 4 +- .../sedna/factory/XFactoryAccelerator.java | 5 +- .../weapon/sedna/factory/XFactoryEnergy.java | 16 +++--- .../weapon/sedna/factory/XFactoryFlamer.java | 49 ++++++++++++++---- .../weapon/sedna/factory/XFactoryFolly.java | 5 +- .../java/com/hbm/main/ResourceManager.java | 1 + .../item/weapon/sedna/ItemRenderFlamer.java | 8 ++- .../com/hbm/util/DamageResistanceHandler.java | 9 ++++ .../java/com/hbm/util/EntityDamageUtil.java | 3 +- .../textures/models/weapons/flamethrower.png | Bin 6267 -> 6671 bytes .../weapons/flamethrower_daybreaker.png | Bin 0 -> 6654 bytes .../models/weapons/flamethrower_topaz.png | Bin 6279 -> 6679 bytes 20 files changed, 125 insertions(+), 51 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/flamethrower_daybreaker.png diff --git a/changelog b/changelog index 0a0e0f03d..ec4d48f14 100644 --- a/changelog +++ b/changelog @@ -57,6 +57,7 @@ * Logistic drones now move at 0.625 blocks/t instead of 0.6. There is no balancing reason for this, I just hate weird numbers like 0.6 * Fallout effects now remove snow layers in the same area where they would remove things like small plants and leaves * Adjusted damage values to many swords and some tools +* Unsats and aromatics can now be filled into gas canisters ## Fixed * The conveyor grabber should no longer skip over items when used in long lines diff --git a/src/main/java/com/hbm/explosion/vanillant/standard/EntityProcessorCross.java b/src/main/java/com/hbm/explosion/vanillant/standard/EntityProcessorCross.java index 3bc9f6870..88d55d49b 100644 --- a/src/main/java/com/hbm/explosion/vanillant/standard/EntityProcessorCross.java +++ b/src/main/java/com/hbm/explosion/vanillant/standard/EntityProcessorCross.java @@ -110,7 +110,7 @@ public class EntityProcessorCross implements IEntityProcessor { for(Entry entry : damageMap.entrySet()) { Entity entity = entry.getKey(); - entity.attackEntityFrom(setExplosionSource(explosion.compat), entry.getValue()); + attackEntity(entity, explosion, entry.getValue()); if(damage != null) { double distanceScaled = entity.getDistance(x, y, z) / size; @@ -121,6 +121,10 @@ public class EntityProcessorCross implements IEntityProcessor { return affectedPlayers; } + public void attackEntity(Entity entity, ExplosionVNT source, float amount) { + entity.attackEntityFrom(setExplosionSource(source.compat), amount); + } + public float calculateDamage(double distanceScaled, double density, double knockback, float size) { return (float) ((int) ((knockback * knockback + knockback) / 2.0D * 8.0D * size + 1.0D)); } diff --git a/src/main/java/com/hbm/explosion/vanillant/standard/EntityProcessorCrossSmooth.java b/src/main/java/com/hbm/explosion/vanillant/standard/EntityProcessorCrossSmooth.java index 725b9fc92..51bdef9e5 100644 --- a/src/main/java/com/hbm/explosion/vanillant/standard/EntityProcessorCrossSmooth.java +++ b/src/main/java/com/hbm/explosion/vanillant/standard/EntityProcessorCrossSmooth.java @@ -1,14 +1,36 @@ package com.hbm.explosion.vanillant.standard; +import com.hbm.explosion.vanillant.ExplosionVNT; +import com.hbm.items.weapon.sedna.BulletConfig; +import com.hbm.util.DamageResistanceHandler.DamageClass; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; + public class EntityProcessorCrossSmooth extends EntityProcessorCross { protected float fixedDamage; + protected float pierceDT = 0; + protected float pierceDR = 0; + protected DamageClass clazz = DamageClass.EXPLOSIVE; public EntityProcessorCrossSmooth(double nodeDist, float fixedDamage) { super(nodeDist); this.fixedDamage = fixedDamage; } + public EntityProcessorCrossSmooth setupPiercing(float pierceDT, float pierceDR) { + this.pierceDT = pierceDT; + this.pierceDR = pierceDR; + return this; + } + + @Override + public void attackEntity(Entity entity, ExplosionVNT source, float amount) { + entity.attackEntityFrom(BulletConfig.getDamage(null, source.exploder instanceof EntityLivingBase ? (EntityLivingBase) source.exploder : null, clazz), amount); + } + + @Override public float calculateDamage(double distanceScaled, double density, double knockback, float size) { return (float) (fixedDamage * (1 - distanceScaled)); } diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index d0f21d3cd..3c6f3b283 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -307,8 +307,8 @@ public class Fluids { NAPHTHA_CRACK = new FluidType("NAPHTHA_CRACK", 0x595744, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x5F6D44)).addTraits(new FT_Flammable(125_000), new FT_Combustible(FuelGrade.MEDIUM, 200_000), LIQUID, VISCOUS, P_FUEL); LIGHTOIL_CRACK = new FluidType("LIGHTOIL_CRACK", 0x8c7451, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xB46B52)).addTraits(new FT_Flammable(200_000), new FT_Combustible(FuelGrade.MEDIUM, 500_000), LIQUID, P_FUEL); DIESEL_CRACK = new FluidType("DIESEL_CRACK", 0xf2eed5, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xFF2C2C)).addTraits(new FT_Flammable(200_000), new FT_Combustible(FuelGrade.HIGH, 450_000), LIQUID, P_FUEL); - AROMATICS = new FluidType("AROMATICS", 0x68A09A, 1, 4, 1, EnumSymbol.NONE).addTraits(new FT_Flammable(25_000), LIQUID, VISCOUS, P_GAS); - UNSATURATEDS = new FluidType("UNSATURATEDS", 0x628FAE, 1, 4, 1, EnumSymbol.NONE).addTraits(new FT_Flammable(1_000_000), GASEOUS, P_GAS); //acetylene burns as hot as satan's asshole + AROMATICS = new FluidType("AROMATICS", 0x68A09A, 1, 4, 1, EnumSymbol.NONE).addContainers(new CD_Gastank(0x68A09A, 0xEDCF27)).addTraits(new FT_Flammable(25_000), LIQUID, VISCOUS, P_GAS); + UNSATURATEDS = new FluidType("UNSATURATEDS", 0x628FAE, 1, 4, 1, EnumSymbol.NONE).addContainers(new CD_Gastank(0x628FAE, 0xEDCF27)).addTraits(new FT_Flammable(1_000_000), GASEOUS, P_GAS); //acetylene burns as hot as satan's asshole SALIENT = new FluidType("SALIENT", 0x457F2D, 0, 0, 0, EnumSymbol.NONE).addTraits(DELICIOUS, LIQUID, VISCOUS); XPJUICE = new FluidType("XPJUICE", 0xBBFF09, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS); ENDERJUICE = new FluidType("ENDERJUICE", 0x127766, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index a5b47a678..d643c7cd9 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1603,6 +1603,7 @@ public class ModItems { public static Item gun_congolake; public static Item gun_flamer; public static Item gun_flamer_topaz; + public static Item gun_flamer_daybreaker; public static Item gun_uzi; public static Item gun_uzi_akimbo; public static Item gun_spas12; @@ -6902,6 +6903,7 @@ public class ModItems { GameRegistry.registerItem(gun_congolake, gun_congolake.getUnlocalizedName()); GameRegistry.registerItem(gun_flamer, gun_flamer.getUnlocalizedName()); GameRegistry.registerItem(gun_flamer_topaz, gun_flamer_topaz.getUnlocalizedName()); + GameRegistry.registerItem(gun_flamer_daybreaker, gun_flamer_daybreaker.getUnlocalizedName()); GameRegistry.registerItem(gun_uzi, gun_uzi.getUnlocalizedName()); GameRegistry.registerItem(gun_uzi_akimbo, gun_uzi_akimbo.getUnlocalizedName()); GameRegistry.registerItem(gun_spas12, gun_spas12.getUnlocalizedName()); 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 9f7eab4ff..ce2c77254 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java +++ b/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java @@ -12,11 +12,11 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; -import com.hbm.lib.ModDamageSource; import com.hbm.particle.SpentCasing; import com.hbm.util.BobMathUtil; import com.hbm.util.EntityDamageUtil; import com.hbm.util.TrackerUtil; +import com.hbm.util.DamageResistanceHandler.DamageClass; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -48,14 +48,10 @@ public class BulletConfig implements Cloneable { public float damageMult = 1.0F; public float armorThresholdNegation = 0.0F; public float armorPiercingPercent = 0.0F; - public float knockbackMult = 1.0F; + public float knockbackMult = 0.25F; public float headshotMult = 1.0F; - public String damageType = ModDamageSource.s_bullet; - public boolean dmgProj = true; - public boolean dmgFire = false; - public boolean dmgExplosion = false; - public boolean dmgBypass = false; + public DamageClass dmgClass = DamageClass.PHYSICAL; public float ricochetAngle = 5F; public int maxRicochetCount = 2; @@ -110,8 +106,7 @@ public class BulletConfig implements Cloneable { public BulletConfig setArmorPiercing(float armorPiercingPercent) { this.armorPiercingPercent = armorPiercingPercent; return this; } public BulletConfig setKnockback(float knockbackMult) { this.knockbackMult = knockbackMult; return this; } public BulletConfig setHeadshot(float headshotMult) { this.headshotMult = headshotMult; return this; } - public BulletConfig setDamageType(String type) { this.damageType = type; return this; } - public BulletConfig setupDamageClass(boolean proj, boolean fire, boolean explosion, boolean bypass) { this.dmgProj = proj; this.dmgFire = fire; this.dmgExplosion = explosion; this.dmgBypass = bypass; return this; } + public BulletConfig setupDamageClass(DamageClass clazz) { this.dmgClass = clazz; return this; } public BulletConfig setRicochetAngle(float angle) { this.ricochetAngle = angle; return this; } public BulletConfig setRicochetCount(int count) { this.maxRicochetCount = count; return this; } public BulletConfig setDamageFalloutByPen(boolean falloff) { this.damageFalloffByPen = falloff; return this; } @@ -140,17 +135,21 @@ public class BulletConfig implements Cloneable { BEAM } - public DamageSource getDamage(Entity projectile, EntityLivingBase shooter, boolean bypass) { + public static DamageSource getDamage(Entity projectile, EntityLivingBase shooter, DamageClass dmgClass) { DamageSource dmg; - if(shooter != null) dmg = new EntityDamageSourceIndirect(damageType, projectile, shooter); - else dmg = new DamageSource(damageType); + if(shooter != null) dmg = new EntityDamageSourceIndirect(dmgClass.name(), projectile, shooter); + else dmg = new DamageSource(dmgClass.name()); - if(this.dmgProj) dmg.setProjectile(); - if(this.dmgFire) dmg.setFireDamage(); - if(this.dmgExplosion) dmg.setExplosion(); - if(this.dmgBypass || bypass) dmg.setDamageBypassesArmor(); + switch(dmgClass) { + case PHYSICAL: dmg.setProjectile(); break; + case FIRE: dmg.setFireDamage(); break; + case EXPLOSIVE: dmg.setExplosion(); break; + case ELECTRIC: break; + case LASER: break; + case SUBATOMIC: break; + } return dmg; } @@ -199,7 +198,7 @@ public class BulletConfig implements Cloneable { if(entity == bullet.getThrower() && bullet.ticksExisted < bullet.selfDamageDelay()) return; if(entity instanceof EntityLivingBase && ((EntityLivingBase) entity).getHealth() <= 0) return; - DamageSource source = bullet.config.getDamage(bullet, bullet.getThrower(), false); + DamageSource source = bullet.config.getDamage(bullet, bullet.getThrower(), bullet.config.dmgClass); if(!(entity instanceof EntityLivingBase)) { EntityDamageUtil.attackEntityFromIgnoreIFrame(entity, source, bullet.damage); @@ -228,7 +227,7 @@ public class BulletConfig implements Cloneable { if(entity instanceof EntityLivingBase && ((EntityLivingBase) entity).getHealth() <= 0) return; - DamageSource source = bullet.config.getDamage(bullet, bullet.getThrower(), false); + DamageSource source = bullet.config.getDamage(bullet, bullet.getThrower(), bullet.config.dmgClass); if(!(entity instanceof EntityLivingBase)) { EntityDamageUtil.attackEntityFromIgnoreIFrame(entity, source, bullet.damage); @@ -247,7 +246,7 @@ public class BulletConfig implements Cloneable { if(entity instanceof EntityLivingBase && ((EntityLivingBase) entity).getHealth() <= 0) return; - DamageSource source = beam.config.getDamage(beam, beam.thrower, false); + DamageSource source = beam.config.getDamage(beam, beam.thrower, beam.config.dmgClass); if(!(entity instanceof EntityLivingBase)) { EntityDamageUtil.attackEntityFromIgnoreIFrame(entity, source, beam.damage); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java index eebf26029..51bf4adfd 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java @@ -84,7 +84,7 @@ public class GunFactory { G40_HE, G40_HEAT, G40_DEMO, G40_INC, G40_PHOSPHORUS, ROCKET_HE, ROCKET_HEAT, ROCKET_DEMO, ROCKET_INC, ROCKET_PHOSPHORUS, FLAME_DIESEL, FLAME_GAS, FLAME_NAPALM, FLAME_BALEFIRE, - CAPACITOR, CAPACITOR_OVERCHARGE, CAPACITOR_BLACKLIGHTNING, + CAPACITOR, CAPACITOR_OVERCHARGE, TAU_URANIUM, COIL_TUNGSTEN, COIL_FERROURANIUM, NUKE_STANDARD, NUKE_DEMO, NUKE_HIGH, NUKE_TOTS, NUKE_HIVE diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index 69fb56d80..f9afb903a 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -52,6 +52,7 @@ public class GunFactoryClient { MinecraftForgeClient.registerItemRenderer(ModItems.gun_congolake, new ItemRenderCongoLake()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_flamer, new ItemRenderFlamer(ResourceManager.flamethrower_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_flamer_topaz, new ItemRenderFlamer(ResourceManager.flamethrower_topaz_tex)); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_flamer_daybreaker, new ItemRenderFlamer(ResourceManager.flamethrower_daybreaker_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_lag, new ItemRenderLAG()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_uzi, new ItemRenderUzi()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_uzi_akimbo, new ItemRenderUziAkimbo()); @@ -183,6 +184,7 @@ public class GunFactoryClient { ((ItemGunBaseNT) ModItems.gun_congolake) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_flamer) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO_NOCOUNTER); ((ItemGunBaseNT) ModItems.gun_flamer_topaz) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO_NOCOUNTER); + ((ItemGunBaseNT) ModItems.gun_flamer_daybreaker) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO_NOCOUNTER); ((ItemGunBaseNT) ModItems.gun_uzi) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_spas12) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_panzerschreck) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java index 511f5f586..5b9f5e4f3 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java @@ -230,7 +230,7 @@ public class Lego { if(i == 0 && config.blackPowder) BlackPowderHelper.composeEffect(entity.worldObj, mk4.posX, mk4.posY, mk4.posZ, mk4.motionX, mk4.motionY, mk4.motionZ, 10, 0.25F, 0.5F, 10, 0.25F); entity.worldObj.spawnEntityInWorld(mk4); } else if(config.pType == ProjectileType.BULLET_CHUNKLOADING) { - EntityBulletBaseMK4 mk4 = new EntityBulletBaseMK4CL(entity, config, damage, spread, sideOffset, heightOffset, forwardOffset); + EntityBulletBaseMK4CL mk4 = new EntityBulletBaseMK4CL(entity, config, damage, spread, sideOffset, heightOffset, forwardOffset); if(ItemGunBaseNT.getIsLockedOn(stack)) mk4.lockonTarget = entity.worldObj.getEntityByID(ItemGunBaseNT.getLockonTarget(stack)); if(i == 0 && config.blackPowder) BlackPowderHelper.composeEffect(entity.worldObj, mk4.posX, mk4.posY, mk4.posZ, mk4.motionX, mk4.motionY, mk4.motionZ, 10, 0.25F, 0.5F, 10, 0.25F); entity.worldObj.spawnEntityInWorld(mk4); @@ -275,7 +275,7 @@ public class Lego { public static void standardExplode(EntityBulletBaseMK4 bullet, MovingObjectPosition mop, float range) { standardExplode(bullet, mop, range, 1F); } public static void standardExplode(EntityBulletBaseMK4 bullet, MovingObjectPosition mop, float range, float damageMod) { ExplosionVNT vnt = new ExplosionVNT(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, range); - vnt.setEntityProcessor(new EntityProcessorCrossSmooth(1, bullet.damage * damageMod)); + vnt.setEntityProcessor(new EntityProcessorCrossSmooth(1, bullet.damage * damageMod).setupPiercing(bullet.config.armorThresholdNegation, bullet.config.armorPiercingPercent)); vnt.setPlayerProcessor(new PlayerProcessorStandard()); vnt.setSFX(new ExplosionEffectWeapon(10, 2.5F, 1F)); vnt.explode(); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryAccelerator.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryAccelerator.java index 616d8f651..68c46b3eb 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryAccelerator.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryAccelerator.java @@ -21,6 +21,7 @@ import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; import com.hbm.render.anim.HbmAnimations.AnimType; +import com.hbm.util.DamageResistanceHandler.DamageClass; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -79,9 +80,9 @@ public class XFactoryAccelerator { public static void init() { - tau_uranium = new BulletConfig().setItem(EnumAmmo.TAU_URANIUM).setBeam().setLife(5).setRenderRotations(false).setDoesPenetrate(true).setDamageFalloutByPen(false) + tau_uranium = new BulletConfig().setItem(EnumAmmo.TAU_URANIUM).setupDamageClass(DamageClass.SUBATOMIC).setBeam().setLife(5).setRenderRotations(false).setDoesPenetrate(true).setDamageFalloutByPen(false) .setOnBeamImpact(BulletConfig.LAMBDA_BEAM_HIT); - tau_uranium_charge = new BulletConfig().setItem(EnumAmmo.TAU_URANIUM).setBeam().setLife(5).setRenderRotations(false).setDoesPenetrate(true).setDamageFalloutByPen(false).setSpectral(true) + tau_uranium_charge = new BulletConfig().setItem(EnumAmmo.TAU_URANIUM).setupDamageClass(DamageClass.SUBATOMIC).setBeam().setLife(5).setRenderRotations(false).setDoesPenetrate(true).setDamageFalloutByPen(false).setSpectral(true) .setOnBeamImpact(BulletConfig.LAMBDA_BEAM_HIT); coil_tungsten = new BulletConfig().setItem(EnumAmmo.COIL_TUNGSTEN).setVel(7.5F).setLife(50).setDoesPenetrate(true).setDamageFalloutByPen(false).setSpectral(true) 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 b0d2f3018..5fdc4324f 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 @@ -25,6 +25,7 @@ import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; import com.hbm.render.anim.HbmAnimations.AnimType; +import com.hbm.util.DamageResistanceHandler.DamageClass; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.EntityLivingBase; @@ -88,22 +89,19 @@ public class XFactoryEnergy { public static void init() { - energy_tesla = new BulletConfig().setItem(EnumAmmo.CAPACITOR).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true) + energy_tesla = new BulletConfig().setItem(EnumAmmo.CAPACITOR).setupDamageClass(DamageClass.ELECTRIC).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true) .setOnBeamImpact(LAMBDA_LIGHTNING_HIT); - energy_tesla_overcharge = new BulletConfig().setItem(EnumAmmo.CAPACITOR_OVERCHARGE).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true) + energy_tesla_overcharge = new BulletConfig().setItem(EnumAmmo.CAPACITOR_OVERCHARGE).setupDamageClass(DamageClass.ELECTRIC).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true) .setDamage(1.5F).setOnBeamImpact(LAMBDA_LIGHTNING_HIT); - energy_tesla_blacklightning = new BulletConfig().setItem(EnumAmmo.CAPACITOR_BLACKLIGHTNING).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true) - .setDamage(5F).setOnBeamImpact(LAMBDA_LIGHTNING_HIT); - energy_las = new BulletConfig().setItem(EnumAmmo.CAPACITOR).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT); - energy_las_overcharge = new BulletConfig().setItem(EnumAmmo.CAPACITOR_OVERCHARGE).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT); - energy_las_blacklightning = new BulletConfig().setItem(EnumAmmo.CAPACITOR_BLACKLIGHTNING).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT); + energy_las = new BulletConfig().setItem(EnumAmmo.CAPACITOR).setupDamageClass(DamageClass.LASER).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT); + energy_las_overcharge = new BulletConfig().setItem(EnumAmmo.CAPACITOR_OVERCHARGE).setupDamageClass(DamageClass.LASER).setBeam().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) .rec(new Receiver(0) .dmg(15F).delay(20).reload(44).jam(19).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) - .mag(new MagazineBelt().addConfigs(energy_tesla, energy_tesla_overcharge, energy_tesla_blacklightning)) + .mag(new MagazineBelt().addConfigs(energy_tesla, energy_tesla_overcharge)) .offset(0.75, 0, -0.375) .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() @@ -114,7 +112,7 @@ public class XFactoryEnergy { .dura(2_000).draw(10).inspect(26).reloadSequential(true).crosshair(Crosshair.CIRCLE).scopeTexture(scope_luna) .rec(new Receiver(0) .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)) + .mag(new MagazineFullReload(0, 24).addConfigs(energy_las, energy_las_overcharge)) .offset(0.75, -0.0625 * 1.5, -0.1875) .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java index e0cc05b14..7d43cbc16 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java @@ -26,6 +26,7 @@ import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; import com.hbm.render.anim.HbmAnimations.AnimType; +import com.hbm.util.DamageResistanceHandler.DamageClass; import net.minecraft.block.Block; import net.minecraft.entity.Entity; @@ -49,6 +50,11 @@ public class XFactoryFlamer { public static BulletConfig flame_topaz_napalm; public static BulletConfig flame_topaz_balefire; + public static BulletConfig flame_daybreaker_diesel; + public static BulletConfig flame_daybreaker_gas; + public static BulletConfig flame_daybreaker_napalm; + public static BulletConfig flame_daybreaker_balefire; + public static Consumer LAMBDA_FIRE = (bullet) -> { if(bullet.worldObj.isRemote && MainRegistry.proxy.me().getDistanceToEntity(bullet) < 100) FlameCreator.composeEffectClient(bullet.worldObj, bullet.posX, bullet.posY - 0.125, bullet.posZ, FlameCreator.META_FIRE); }; @@ -102,15 +108,28 @@ public class XFactoryFlamer { } public static void init() { - flame_diesel = new BulletConfig().setItem(EnumAmmo.FLAME_DIESEL).setLife(100).setVel(1F).setGrav(0.02D).setReloadCount(300).setSelfDamageDelay(20).setOnUpdate(LAMBDA_FIRE).setOnRicochet(LAMBDA_LINGER_DIESEL); - flame_gas = new BulletConfig().setItem(EnumAmmo.FLAME_GAS).setLife(10).setSpread(0.05F).setVel(1F).setGrav(0.0D).setReloadCount(300).setSelfDamageDelay(20).setOnUpdate(LAMBDA_FIRE).setOnRicochet(LAMBDA_LINGER_GAS); - flame_napalm = new BulletConfig().setItem(EnumAmmo.FLAME_NAPALM).setLife(200).setVel(1F).setGrav(0.02D).setReloadCount(300).setSelfDamageDelay(20).setOnUpdate(LAMBDA_FIRE).setOnRicochet(LAMBDA_LINGER_NAPALM); - flame_balefire = new BulletConfig().setItem(EnumAmmo.FLAME_BALEFIRE).setLife(200).setVel(1F).setGrav(0.02D).setReloadCount(300).setSelfDamageDelay(20).setOnUpdate(LAMBDA_BALEFIRE).setOnRicochet(LAMBDA_LINGER_BALEFIRE); + flame_diesel = new BulletConfig().setItem(EnumAmmo.FLAME_DIESEL).setupDamageClass(DamageClass.FIRE).setLife(100).setVel(1F).setGrav(0.02D).setReloadCount(500).setSelfDamageDelay(20) + .setOnUpdate(LAMBDA_FIRE).setOnRicochet(LAMBDA_LINGER_DIESEL); + flame_gas = new BulletConfig().setItem(EnumAmmo.FLAME_GAS).setupDamageClass(DamageClass.FIRE).setLife(10).setSpread(0.05F).setVel(1F).setGrav(0.0D).setReloadCount(500).setSelfDamageDelay(20) + .setOnUpdate(LAMBDA_FIRE).setOnRicochet(LAMBDA_LINGER_GAS); + flame_napalm = new BulletConfig().setItem(EnumAmmo.FLAME_NAPALM).setupDamageClass(DamageClass.FIRE).setLife(200).setVel(1F).setGrav(0.02D).setReloadCount(500).setSelfDamageDelay(20) + .setOnUpdate(LAMBDA_FIRE).setOnRicochet(LAMBDA_LINGER_NAPALM); + flame_balefire = new BulletConfig().setItem(EnumAmmo.FLAME_BALEFIRE).setupDamageClass(DamageClass.FIRE).setLife(200).setVel(1F).setGrav(0.02D).setReloadCount(500).setSelfDamageDelay(20) + .setOnUpdate(LAMBDA_BALEFIRE).setOnRicochet(LAMBDA_LINGER_BALEFIRE); - flame_topaz_diesel = flame_diesel.clone().setLife(60).setGrav(0.0D).setReloadCount(500).setProjectiles(2).setSpread(0.05F); - flame_topaz_gas = flame_gas.clone().setReloadCount(500).setProjectiles(2).setSpread(0.05F); - flame_topaz_napalm = flame_napalm.clone().setLife(60).setGrav(0.0D).setReloadCount(500).setProjectiles(2).setSpread(0.05F); - flame_topaz_balefire = flame_balefire.clone().setLife(60).setGrav(0.0D).setReloadCount(500).setProjectiles(2).setSpread(0.05F); + flame_topaz_diesel = flame_diesel .clone().setProjectiles(2).setSpread(0.05F).setLife(60).setGrav(0.0D); + flame_topaz_gas = flame_gas .clone().setProjectiles(2).setSpread(0.05F); + flame_topaz_napalm = flame_napalm .clone().setProjectiles(2).setSpread(0.05F).setLife(60).setGrav(0.0D); + flame_topaz_balefire = flame_balefire .clone().setProjectiles(2).setSpread(0.05F).setLife(60).setGrav(0.0D); + + flame_daybreaker_diesel = flame_diesel.clone().setLife(200).setVel(2F).setGrav(0.035D) + .setOnImpact((bullet, mop) -> { Lego.standardExplode(bullet, mop, 5F); spawnFire(bullet, mop, 6F, 2F, 200, EntityFireLingering.TYPE_DIESEL); bullet.setDead(); }); + flame_daybreaker_gas = flame_gas.clone().setLife(200).setVel(2F).setGrav(0.035D) + .setOnImpact((bullet, mop) -> { Lego.standardExplode(bullet, mop, 5F); bullet.setDead(); }); + flame_daybreaker_napalm = flame_napalm.clone().setLife(200).setVel(2F).setGrav(0.035D) + .setOnImpact((bullet, mop) -> { Lego.standardExplode(bullet, mop, 7.5F); spawnFire(bullet, mop, 6F, 2F, 300, EntityFireLingering.TYPE_DIESEL); bullet.setDead(); }); + flame_daybreaker_balefire = flame_balefire.clone().setLife(200).setVel(2F).setGrav(0.035D) + .setOnImpact((bullet, mop) -> { Lego.standardExplode(bullet, mop, 5F); spawnFire(bullet, mop, 7.5F, 2.5F, 400, EntityFireLingering.TYPE_BALEFIRE); bullet.setDead(); }); ModItems.gun_flamer = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(20_000).draw(10).inspect(17).crosshair(Crosshair.L_CIRCLE) @@ -118,7 +137,7 @@ public class XFactoryFlamer { .dmg(10F).delay(1).auto(true).reload(90).jam(17) .mag(new MagazineFullReload(0, 300).addConfigs(flame_diesel, flame_gas, flame_napalm, flame_balefire)) .offset(0.75, -0.0625, -0.25D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire()) .setupStandardConfiguration() .anim(LAMBDA_FLAMER_ANIMS).orchestra(Orchestras.ORCHESTRA_FLAMER) ).setUnlocalizedName("gun_flamer"); @@ -128,10 +147,20 @@ public class XFactoryFlamer { .dmg(10F).delay(1).auto(true).reload(90).jam(17) .mag(new MagazineFullReload(0, 500).addConfigs(flame_topaz_diesel, flame_topaz_gas, flame_topaz_napalm, flame_topaz_balefire)) .offset(0.75, -0.0625, -0.25D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire()) .setupStandardConfiguration() .anim(LAMBDA_FLAMER_ANIMS).orchestra(Orchestras.ORCHESTRA_FLAMER) ).setUnlocalizedName("gun_flamer_topaz"); + ModItems.gun_flamer_daybreaker = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig() + .dura(20_000).draw(10).inspect(17).crosshair(Crosshair.L_CIRCLE) + .rec(new Receiver(0) + .dmg(10F).delay(10).auto(true).reload(90).jam(17) + .mag(new MagazineFullReload(0, 50).addConfigs(flame_daybreaker_diesel, flame_daybreaker_gas, flame_daybreaker_napalm, flame_daybreaker_balefire)) + .offset(0.75, -0.0625, -0.25D) + .setupStandardFire()) + .setupStandardConfiguration() + .anim(LAMBDA_FLAMER_ANIMS).orchestra(Orchestras.ORCHESTRA_FLAMER) + ).setUnlocalizedName("gun_flamer_daybreaker"); ModItems.gun_chemthrower = new ItemGunChemthrower(WeaponQuality.A_SIDE, new GunConfig() .dura(90_000).draw(10).inspect(17).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFolly.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFolly.java index 06ff41d47..a3927a0da 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFolly.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFolly.java @@ -31,6 +31,7 @@ import com.hbm.util.EntityDamageUtil; import com.hbm.util.Vec3NT; import com.hbm.util.ContaminationUtil.ContaminationType; import com.hbm.util.ContaminationUtil.HazardType; +import com.hbm.util.DamageResistanceHandler.DamageClass; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.Entity; @@ -78,7 +79,7 @@ public class XFactoryFolly { for(int ix = x - 1; ix <= x + 1; ix++) for(int iy = y - 1; iy <= y + 1; iy++) for(int iz = z - 1; iz <= z + 1; iz++) { if(iy > 0 && iy < 256) beam.worldObj.setBlock(ix, iy, iz, Blocks.air); AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox(ix - 1, iy - 1, iz - 1, ix + 2, iy + 2, iz + 2); - for(Entity e : entities) if(e != beam.thrower && e.boundingBox.intersectsWith(aabb)) EntityDamageUtil.attackEntityFromIgnoreIFrame(e, beam.config.getDamage(beam, beam.thrower, true), beam.damage); + for(Entity e : entities) if(e != beam.thrower && e.boundingBox.intersectsWith(aabb)) EntityDamageUtil.attackEntityFromIgnoreIFrame(e, beam.config.getDamage(beam, beam.thrower, beam.config.dmgClass), beam.damage); } } }; @@ -93,7 +94,7 @@ public class XFactoryFolly { public static void init() { - folly_sm = new BulletConfig().setItem(EnumAmmoSecret.FOLLY_SM).setBeam().setLife(100).setVel(2F).setGrav(0.015D).setRenderRotations(false).setSpectral(true).setDoesPenetrate(true) + folly_sm = new BulletConfig().setItem(EnumAmmoSecret.FOLLY_SM).setupDamageClass(DamageClass.SUBATOMIC).setBeam().setLife(100).setVel(2F).setGrav(0.015D).setRenderRotations(false).setSpectral(true).setDoesPenetrate(true) .setOnUpdate(LAMBDA_SM_UPDATE); folly_nuke = new BulletConfig().setItem(EnumAmmoSecret.FOLLY_NUKE).setChunkloading().setLife(600).setVel(4F).setGrav(0.015D) .setOnImpact(LAMBDA_NUKE_IMPACT); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 7100fe663..a6fbf9565 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -988,6 +988,7 @@ public class ResourceManager { public static final ResourceLocation liberator_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/liberator.png"); public static final ResourceLocation flamethrower_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/flamethrower.png"); public static final ResourceLocation flamethrower_topaz_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/flamethrower_topaz.png"); + public static final ResourceLocation flamethrower_daybreaker_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/flamethrower_daybreaker.png"); public static final ResourceLocation mike_hawk_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lag.png"); public static final ResourceLocation uzi_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/uzi.png"); public static final ResourceLocation panzerschreck_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/panzerschreck.png"); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFlamer.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFlamer.java index 778dd4ba9..5ec21511a 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFlamer.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFlamer.java @@ -2,6 +2,7 @@ package com.hbm.render.item.weapon.sedna; import org.lwjgl.opengl.GL11; +import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.mags.IMagazine; import com.hbm.main.MainRegistry; @@ -63,6 +64,7 @@ public class ItemRenderFlamer extends ItemRenderWeaponBase { GL11.glPushMatrix(); HbmAnimations.applyRelevantTransformation("Gun"); ResourceManager.flamethrower.renderPart("Gun"); + if(hasShield(stack)) ResourceManager.flamethrower.renderPart("HeatShield"); GL11.glPopMatrix(); GL11.glPushMatrix(); @@ -70,7 +72,6 @@ public class ItemRenderFlamer extends ItemRenderWeaponBase { ResourceManager.flamethrower.renderPart("Tank"); GL11.glPopMatrix(); - GL11.glPushMatrix(); HbmAnimations.applyRelevantTransformation("Gauge"); GL11.glTranslated(1.25, 1.25, 0); @@ -111,6 +112,11 @@ public class ItemRenderFlamer extends ItemRenderWeaponBase { ResourceManager.flamethrower.renderPart("Gun"); ResourceManager.flamethrower.renderPart("Tank"); ResourceManager.flamethrower.renderPart("Gauge"); + if(hasShield(stack)) ResourceManager.flamethrower.renderPart("HeatShield"); GL11.glShadeModel(GL11.GL_FLAT); } + + public boolean hasShield(ItemStack stack) { + return stack.getItem() == ModItems.gun_flamer_daybreaker; + } } diff --git a/src/main/java/com/hbm/util/DamageResistanceHandler.java b/src/main/java/com/hbm/util/DamageResistanceHandler.java index 823e97126..8e25d7077 100644 --- a/src/main/java/com/hbm/util/DamageResistanceHandler.java +++ b/src/main/java/com/hbm/util/DamageResistanceHandler.java @@ -33,6 +33,15 @@ public class DamageResistanceHandler { public static HashMap itemStats = new HashMap(); public static HashMap, ResistanceStats> setStats = new HashMap(); public static HashMap, ResistanceStats> entityStats = new HashMap(); + + public static enum DamageClass { + PHYSICAL, + FIRE, + EXPLOSIVE, + ELECTRIC, + LASER, + SUBATOMIC + } public static void init() { entityStats.put(EntityCreeper.class, new ResistanceStats().add(KEY_EXPLOSION, 2F, 0.5F)); diff --git a/src/main/java/com/hbm/util/EntityDamageUtil.java b/src/main/java/com/hbm/util/EntityDamageUtil.java index 6cc3f083a..3b4050c72 100644 --- a/src/main/java/com/hbm/util/EntityDamageUtil.java +++ b/src/main/java/com/hbm/util/EntityDamageUtil.java @@ -48,6 +48,7 @@ public class EntityDamageUtil { if(ForgeHooks.onLivingAttack(living, source, amount) && allowSpecialCancel) return false; if(living.isEntityInvulnerable()) return false; if(living.worldObj.isRemote) return false; + if(living instanceof EntityPlayer && ((EntityPlayer) living).capabilities.disableDamage && !source.canHarmInCreative()) return false; living.entityAge = 0; if(living.getHealth() <= 0.0F) return false; @@ -151,8 +152,6 @@ public class EntityDamageUtil { float armor = amount * (float) i; damageArmorNT(living, amount); amount = armor / 25.0F; - - //TODO: special handling depending on armor stats } return amount; diff --git a/src/main/resources/assets/hbm/textures/models/weapons/flamethrower.png b/src/main/resources/assets/hbm/textures/models/weapons/flamethrower.png index d27d13845e342398c1793dfedb1025df3b2c579d..1923803828a037c942bde902a16eec2e0ecae35b 100644 GIT binary patch literal 6671 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 literal 6267 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 Il56S;@935~tQh!zdCM@J~Ct=23to*J=(Sglb- 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 B33&hj literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/flamethrower_topaz.png b/src/main/resources/assets/hbm/textures/models/weapons/flamethrower_topaz.png index 3e668925146565b716dd6478b2b7b283323c3f28..53c100c739b75eb6208dce979c9037bac18cd99c 100644 GIT binary patch literal 6679 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 literal 6279 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