From 759903158b907f8875b4514bb9b631636ca2deb3 Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 6 Apr 2026 20:09:10 +0200 Subject: [PATCH] more grenade crap --- src/main/java/com/hbm/blocks/ModBlocks.java | 13 --- .../grenade/EntityGrenadeUniversal.java | 1 + .../entity/projectile/EntityThrowableNT.java | 14 +++- .../standard/EntityProcessorCross.java | 2 + .../weapon/grenade/ItemGrenadeFilling.java | 75 +++++++++++++++-- .../weapon/grenade/ItemGrenadeShell.java | 10 +-- .../weapon/grenade/ItemGrenadeUniversal.java | 2 + .../weapon/sedna/factory/ConfettiUtil.java | 1 + .../hbm/items/weapon/sedna/factory/Lego.java | 2 +- src/main/java/com/hbm/main/MainRegistry.java | 6 +- .../java/com/hbm/main/ModEventHandler.java | 15 ---- .../java/com/hbm/main/ResourceManager.java | 6 ++ .../hbm/render/item/ItemRenderGrenade.java | 77 ++++++++++++++++-- .../com/hbm/util/DamageResistanceHandler.java | 2 + .../hbm/textures/models/grenades/stick.png | Bin 669 -> 4117 bytes .../textures/models/grenades/stick_body.png | Bin 0 -> 950 bytes .../textures/models/grenades/stick_fuze.png | Bin 0 -> 171 bytes .../textures/models/grenades/stick_label.png | Bin 0 -> 391 bytes .../hbm/textures/models/grenades/tech.png | Bin 796 -> 1076 bytes .../textures/models/grenades/tech_body.png | Bin 0 -> 410 bytes .../textures/models/grenades/tech_fuze.png | Bin 0 -> 158 bytes .../textures/models/grenades/tech_lights.png | Bin 0 -> 226 bytes 22 files changed, 172 insertions(+), 54 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/models/grenades/stick_body.png create mode 100644 src/main/resources/assets/hbm/textures/models/grenades/stick_fuze.png create mode 100644 src/main/resources/assets/hbm/textures/models/grenades/stick_label.png create mode 100644 src/main/resources/assets/hbm/textures/models/grenades/tech_body.png create mode 100644 src/main/resources/assets/hbm/textures/models/grenades/tech_fuze.png create mode 100644 src/main/resources/assets/hbm/textures/models/grenades/tech_lights.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 1d9aecff4..de693e8ec 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1150,10 +1150,6 @@ public class ModBlocks { public static Block gas_explosive; public static Block vacuum; - @Deprecated public static Block absorber; - @Deprecated public static Block absorber_red; - @Deprecated public static Block absorber_green; - @Deprecated public static Block absorber_pink; public static Block rad_absorber; public static Block decon; @@ -2288,11 +2284,6 @@ public class ModBlocks { gas_explosive = new BlockGasExplosive().setBlockName("gas_explosive").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":gas_explosive"); vacuum = new BlockVacuum().setBlockName("vacuum").setResistance(1000000F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":vacuum"); - absorber = new BlockGeneric(Material.iron).setBlockName("absorber").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_deprecated"); - absorber_red = new BlockGeneric(Material.iron).setBlockName("absorber_red").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_deprecated"); - absorber_green = new BlockGeneric(Material.iron).setBlockName("absorber_green").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_deprecated"); - absorber_pink = new BlockGeneric(Material.iron).setBlockName("absorber_pink").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_deprecated"); - rad_absorber = new BlockAbsorber(Material.iron).setBlockName("rad_absorber").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); decon = new BlockDecon(Material.iron).setBlockName("decon").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":decon_side"); @@ -3312,10 +3303,6 @@ public class ModBlocks { GameRegistry.registerBlock(struct_icf_core, struct_icf_core.getUnlocalizedName()); //Absorbers - GameRegistry.registerBlock(absorber, absorber.getUnlocalizedName()); - GameRegistry.registerBlock(absorber_red, absorber_red.getUnlocalizedName()); - GameRegistry.registerBlock(absorber_green, absorber_green.getUnlocalizedName()); - GameRegistry.registerBlock(absorber_pink, absorber_pink.getUnlocalizedName()); GameRegistry.registerBlock(rad_absorber, ItemBlockBase.class, rad_absorber.getUnlocalizedName()); GameRegistry.registerBlock(decon, decon.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/entity/grenade/EntityGrenadeUniversal.java b/src/main/java/com/hbm/entity/grenade/EntityGrenadeUniversal.java index 0bb36c78c..6d6991441 100644 --- a/src/main/java/com/hbm/entity/grenade/EntityGrenadeUniversal.java +++ b/src/main/java/com/hbm/entity/grenade/EntityGrenadeUniversal.java @@ -110,4 +110,5 @@ public class EntityGrenadeUniversal extends EntityThrowableInterp { } @Override protected int groundDespawn() { return 0; } + @Override public boolean fullBlockCollisions() { return true; } } diff --git a/src/main/java/com/hbm/entity/projectile/EntityThrowableNT.java b/src/main/java/com/hbm/entity/projectile/EntityThrowableNT.java index 380ff5af2..e589f7b56 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityThrowableNT.java +++ b/src/main/java/com/hbm/entity/projectile/EntityThrowableNT.java @@ -248,9 +248,13 @@ public abstract class EntityThrowableNT extends Entity implements IProjectile { float drag = this.getAirDrag(); double gravity = this.getGravityVelocity(); - this.posX += this.motionX * motionMult(); - this.posY += this.motionY * motionMult(); - this.posZ += this.motionZ * motionMult(); + if(fullBlockCollisions()) { + this.moveEntity(this.motionX * motionMult(), this.motionY * motionMult(), this.motionZ * motionMult()); + } else { + this.posX += this.motionX * motionMult(); + this.posY += this.motionY * motionMult(); + this.posZ += this.motionZ * motionMult(); + } if(this.isInWater()) { for(int i = 0; i < 4; ++i) { @@ -269,6 +273,10 @@ public abstract class EntityThrowableNT extends Entity implements IProjectile { } } + public boolean fullBlockCollisions() { + return false; + } + public boolean doesImpactEntities() { return true; } 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 d699707da..c4b9a697e 100644 --- a/src/main/java/com/hbm/explosion/vanillant/standard/EntityProcessorCross.java +++ b/src/main/java/com/hbm/explosion/vanillant/standard/EntityProcessorCross.java @@ -9,6 +9,7 @@ import com.hbm.explosion.vanillant.ExplosionVNT; import com.hbm.explosion.vanillant.interfaces.ICustomDamageHandler; import com.hbm.explosion.vanillant.interfaces.IEntityProcessor; import com.hbm.explosion.vanillant.interfaces.IEntityRangeMutator; +import com.hbm.interfaces.NotableComments; import net.minecraft.enchantment.EnchantmentProtection; import net.minecraft.entity.Entity; @@ -22,6 +23,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.event.ForgeEventFactory; +@NotableComments /** The amount of good decisions in NTM is few and far between, but the VNT explosion surely is one of them. */ public class EntityProcessorCross implements IEntityProcessor { diff --git a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFilling.java b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFilling.java index 1fe50493a..60239b0da 100644 --- a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFilling.java +++ b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFilling.java @@ -5,6 +5,7 @@ import java.util.Set; import java.util.function.BiConsumer; import java.util.function.Consumer; +import com.hbm.entity.effect.EntityFireLingering; import com.hbm.entity.grenade.EntityGrenadeUniversal; import com.hbm.entity.projectile.EntityBulletBaseMK4; import com.hbm.explosion.vanillant.ExplosionVNT; @@ -14,13 +15,22 @@ import com.hbm.explosion.vanillant.standard.EntityProcessorCrossSmooth; import com.hbm.explosion.vanillant.standard.ExplosionEffectTiny; import com.hbm.explosion.vanillant.standard.ExplosionEffectWeapon; import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; +import com.hbm.handler.threading.PacketThreading; import com.hbm.items.ItemEnumMulti; import com.hbm.items.weapon.grenade.ItemGrenadeShell.EnumGrenadeShell; import static com.hbm.items.weapon.grenade.ItemGrenadeShell.EnumGrenadeShell.*; import com.hbm.items.weapon.sedna.BulletConfig; import com.hbm.items.weapon.sedna.factory.Lego; +import com.hbm.main.NTMSounds; +import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.util.DamageResistanceHandler.DamageClass; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class ItemGrenadeFilling extends ItemEnumMulti { @@ -38,8 +48,10 @@ public class ItemGrenadeFilling extends ItemEnumMulti { HE(EXPLODE_HE, 0x595533, 0xA49D62, FRAG, STICK), // high explosive HE_FRAG(EXPLODE_FRAG, 0x595533, 0xE0BA29, FRAG, STICK), // high explosive with fragmentation DEMO(EXPLODE_DEMO, 0x595533, 0xDD4029, FRAG, STICK), // demolition - INC(null, 0x5A5A5A, 0xFF5F21, FRAG, STICK), // incendiary + INC(EXPLODE_INC, 0x5A5A5A, 0xFF5F21, FRAG, STICK), // incendiary CLUSTER(EXPLODE_CLUSTER, 0x5A5A5A, 0xFFC711, FRAG, STICK), // explosive pellets + EMP(EXPLODE_EMP, 0x93A1AC, 0x00FFFF, TECH), // tesla + PLASMA(EXPLODE_PLASMA, 0x655B2C, 0x4CFF00, TECH), // EMP but more oomph NUCLEAR(null, 0, 0, NUKE); // nuka grenade // and more which i haven't decided. probably plasma, EMP, perhaps laser(?) @@ -57,13 +69,9 @@ public class ItemGrenadeFilling extends ItemEnumMulti { } } - public static Consumer EXPLODE_POWDER = (grenade) -> { - standardExplode(grenade, 5F, 10F, 5F, 0F); - }; + public static Consumer EXPLODE_POWDER = (grenade) -> { standardExplode(grenade, 5F, 10F, 5F, 0F); }; - public static Consumer EXPLODE_HE = (grenade) -> { - standardExplode(grenade, 7.5F, 25F, 10F, 0.1F); - }; + public static Consumer EXPLODE_HE = (grenade) -> { standardExplode(grenade, 7.5F, 25F, 10F, 0.1F); }; public static Consumer EXPLODE_FRAG = (grenade) -> { standardExplode(grenade, 7.5F, 15F, 10F, 0.1F); @@ -99,6 +107,57 @@ public class ItemGrenadeFilling extends ItemEnumMulti { vnt.setSFX(new ExplosionEffectWeapon(10, 2.5F, 1F)); vnt.explode(); }; + + public static Consumer EXPLODE_INC = (grenade) -> { + World world = grenade.worldObj; + standardExplode(grenade, 3F, 10F); + EntityFireLingering fire = new EntityFireLingering(world).setArea(6, 2).setDuration(200).setType(EntityFireLingering.TYPE_DIESEL); + fire.setPosition(grenade.posX, grenade.posY, grenade.posZ); + world.spawnEntityInWorld(fire); + for(int dx = -2; dx <= 2; dx++) for(int dy = -2; dy <= 2; dy++) for(int dz = -2; dz <= 2; dz++) { + int x = (int) Math.floor(grenade.posX) + dx; + int y = (int) Math.floor(grenade.posY) + dy; + int z = (int) Math.floor(grenade.posZ) + dz; + if(world.getBlock(x, y, z).isAir(grenade.worldObj, x, y, z)) { + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + if(world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ).isFlammable(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir.getOpposite())) { + world.setBlock(x, y, z, Blocks.fire); + break; + } + } + } + } + }; + + public static Consumer EXPLODE_EMP = (grenade) -> { + explodeStandardEnergy(grenade, 30F, 3F, DamageClass.ELECTRIC, 0.5F, 0.5F, 1F, 3F); + }; + + public static Consumer EXPLODE_PLASMA = (grenade) -> { + explodeStandardEnergy(grenade, 50F, 5F, DamageClass.PLASMA, 0.5F, 1F, 0.5F, 4F); + }; + + public static void explodeStandardEnergy(EntityGrenadeUniversal grenade, float damage, float range, DamageClass damageClass, float r, float g, float b, float scale) { + ExplosionVNT vnt = new ExplosionVNT(grenade.worldObj, grenade.posX, grenade.posY, grenade.posZ, range, grenade.getThrower()); + vnt.setEntityProcessor(new EntityProcessorCrossSmooth(1, damage).setDamageClass(damageClass)); + vnt.setPlayerProcessor(new PlayerProcessorStandard()); + vnt.explode(); + grenade.worldObj.playSoundEffect(grenade.posX, grenade.posY, grenade.posZ, "hbm:entity.ufoBlast", 5.0F, 0.9F + grenade.worldObj.rand.nextFloat() * 0.2F); + grenade.worldObj.playSoundEffect(grenade.posX, grenade.posY, grenade.posZ, NTMSounds.VANILLA_FIREWORKS_BANG, 5.0F, 0.5F); + + float yaw = grenade.worldObj.rand.nextFloat() * 180F; + for(int i = 0; i < 3; i++) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "plasmablast"); + data.setFloat("r", r); + data.setFloat("g", g); + data.setFloat("b", b); + data.setFloat("pitch", -60F + 60F * i); + data.setFloat("yaw", yaw); + data.setFloat("scale", scale); + PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, grenade.posX, grenade.posY + 0.125, grenade.posZ), new TargetPoint(grenade.dimension, grenade.posX, grenade.posY, grenade.posZ, 100)); + } + } public static BiConsumer LAMBDA_TINY_EXPLODE = (bullet, mop) -> { if(bullet.ticksExisted < 2) return; @@ -118,7 +177,7 @@ public class ItemGrenadeFilling extends ItemEnumMulti { public static void tinyExplode(EntityGrenadeUniversal grenade, float range, float damage) { tinyExplode(grenade, range, damage, 0F, 0F); } public static void tinyExplode(EntityGrenadeUniversal grenade, float range, float damage, float dt, float dr) { ExplosionVNT vnt = new ExplosionVNT(grenade.worldObj, grenade.posX, grenade.posY, grenade.posZ, range, grenade.getThrower()); - vnt.setEntityProcessor(new EntityProcessorCrossSmooth(1, damage).setupPiercing(dt, dr).setKnockback(0.25D)); + vnt.setEntityProcessor(new EntityProcessorCrossSmooth(0.5, damage).setupPiercing(dt, dr).setKnockback(0.25D)); vnt.setPlayerProcessor(new PlayerProcessorStandard()); vnt.setSFX(new ExplosionEffectTiny()); vnt.explode(); diff --git a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeShell.java b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeShell.java index 05722cd89..f89eb7848 100644 --- a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeShell.java +++ b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeShell.java @@ -30,12 +30,10 @@ public class ItemGrenadeShell extends ItemEnumMulti { } public static enum EnumGrenadeShell { - FRAG(4, 20, 0.5D), // bonus fragmentation - STICK(4, 20, 0.25D), // thrown father - TECH(2, 20, 0.5D), // casing with electronics for EMP/plasma - NUKE(1, 20, 0.25D); // nuka grenade casing for high yield grenades - /* ^ - * nice */ + FRAG(4, 20, 0.5D), // bonus fragmentation + STICK(4, 20, 0.25D), // thrown farther + TECH(2, 20, 0.5D), // casing with electronics for EMP/plasma + NUKE(1, 20, 0.25D); // nuka grenade casing for high yield grenades private int stackLimit; private int drawDuration; diff --git a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeUniversal.java b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeUniversal.java index be3b5c9f1..955866000 100644 --- a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeUniversal.java +++ b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeUniversal.java @@ -134,6 +134,8 @@ public class ItemGrenadeUniversal extends Item implements IEquipReceiver { for(EnumGrenadeShell shell : EnumGrenadeShell.values()) for(EnumGrenadeFilling filling : EnumGrenadeFilling.values()) { if(filling.compatibleShells.contains(shell)) for(EnumGrenadeFuze fuze : EnumGrenadeFuze.values()) list.add(make(shell, filling, fuze)); } + + list.add(make(EnumGrenadeShell.TECH, EnumGrenadeFilling.HE, EnumGrenadeFuze.S3)); } @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/ConfettiUtil.java b/src/main/java/com/hbm/items/weapon/sedna/factory/ConfettiUtil.java index f7f5629c7..3f86dedf8 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/ConfettiUtil.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/ConfettiUtil.java @@ -30,6 +30,7 @@ public class ConfettiUtil { if(entity.isEntityAlive()) return; if(source.damageType.equals(DamageClass.LASER.name().toLowerCase(Locale.US))) pulverize(entity); if(source.damageType.equals(DamageClass.ELECTRIC.name().toLowerCase(Locale.US))) pulverize(entity); + if(source.damageType.equals(DamageClass.PLASMA.name().toLowerCase(Locale.US))) cremate(entity); if(source.isExplosion()) gib(entity); if(source.isFireDamage()) cremate(entity); } 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 1fdf49add..0d4cf9248 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 @@ -299,7 +299,7 @@ public class Lego { double y = mop.hitVec.yCoord + dir.offsetY * 0.25D; double z = mop.hitVec.zCoord + dir.offsetZ * 0.25D; ExplosionVNT vnt = new ExplosionVNT(bullet.worldObj, x, y, z, range, bullet.getThrower()); - vnt.setEntityProcessor(new EntityProcessorCrossSmooth(1, bullet.damage * damageMod) + vnt.setEntityProcessor(new EntityProcessorCrossSmooth(0.5, bullet.damage * damageMod) .setupPiercing(bullet.config.armorThresholdNegation, bullet.config.armorPiercingPercent).setKnockback(0.25D)); vnt.setPlayerProcessor(new PlayerProcessorStandard()); vnt.setSFX(new ExplosionEffectTiny()); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 6e23e231a..e63640db7 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1517,7 +1517,11 @@ public class MainRegistry { ignoreMappings.add("hbm:item.euphemium_capacitor"); ignoreMappings.add("hbm:item.toolbox_legacy"); ignoreMappings.add("hbm:item.crucible_template"); - + ignoreMappings.add("hbm:tile.absorber"); + ignoreMappings.add("hbm:tile.absorber_red"); + ignoreMappings.add("hbm:tile.absorber_green"); + ignoreMappings.add("hbm:tile.absorber_pink"); + /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); remapItems.put("hbm:item.man_explosive8", ModItems.explosive_lenses); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 524a2d08e..66c1d0bda 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -1078,21 +1078,6 @@ public class ModEventHandler { event.getChunk().func_150807_a(x, y, z, Blocks.air, 0); } }*/ - - for(int x = 0; x < 16; x++) for(int y = 0; y < 255; y++) for(int z = 0; z < 16; z++) { - if(event.getChunk().getBlock(x, y, z) == ModBlocks.absorber) { - event.getChunk().func_150807_a(x, y, z, ModBlocks.rad_absorber, 0); - } - else if(event.getChunk().getBlock(x, y, z) == ModBlocks.absorber_red) { - event.getChunk().func_150807_a(x, y, z, ModBlocks.rad_absorber, 1); - } - else if(event.getChunk().getBlock(x, y, z) == ModBlocks.absorber_green) { - event.getChunk().func_150807_a(x, y, z, ModBlocks.rad_absorber, 2); - } - else if(event.getChunk().getBlock(x, y, z) == ModBlocks.absorber_pink) { - event.getChunk().func_150807_a(x, y, z, ModBlocks.rad_absorber, 3); - } - } } @SubscribeEvent diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 54b8e95f8..ee9c886fe 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1109,7 +1109,13 @@ public class ResourceManager { public static final ResourceLocation grenade_frag_label_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/frag_label.png"); public static final ResourceLocation grenade_frag_fuze_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/frag_fuze.png"); public static final ResourceLocation grenade_stick_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/stick.png"); + public static final ResourceLocation grenade_stick_body_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/stick_body.png"); + public static final ResourceLocation grenade_stick_label_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/stick_label.png"); + public static final ResourceLocation grenade_stick_fuze_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/stick_fuze.png"); public static final ResourceLocation grenade_tech_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/tech.png"); + public static final ResourceLocation grenade_tech_body_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/tech_body.png"); + public static final ResourceLocation grenade_tech_lights_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/tech_lights.png"); + public static final ResourceLocation grenade_tech_fuze_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/tech_fuze.png"); public static final ResourceLocation grenade_nuka_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/nuka.png"); public static final ResourceLocation bj_eyepatch = new ResourceLocation(RefStrings.MODID, "textures/armor/bj_eyepatch.png"); diff --git a/src/main/java/com/hbm/render/item/ItemRenderGrenade.java b/src/main/java/com/hbm/render/item/ItemRenderGrenade.java index 445587ad7..51ccc340e 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderGrenade.java +++ b/src/main/java/com/hbm/render/item/ItemRenderGrenade.java @@ -8,6 +8,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.items.weapon.grenade.ItemGrenadeUniversal; import com.hbm.main.ResourceManager; +import com.hbm.render.tileentity.RenderArcFurnace; import com.hbm.util.ColorUtil; import net.minecraft.client.Minecraft; @@ -85,14 +86,17 @@ public class ItemRenderGrenade implements IItemRenderer { } if(shell == EnumGrenadeShell.STICK) { - Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.grenade_stick_tex); - ResourceManager.grenades.renderPart("Stick"); + renderStickBody(stack); + EnumGrenadeFilling filling = ItemGrenadeUniversal.getFilling(stack); + GL11.glColor3f(ColorUtil.fr(filling.bodyColor), ColorUtil.fg(filling.bodyColor), ColorUtil.fb(filling.bodyColor)); + bind(ResourceManager.grenade_stick_body_tex); ResourceManager.grenades.renderPart("StickCap"); + GL11.glColor3f(1F, 1F, 1F); } if(shell == EnumGrenadeShell.TECH) { + renderTechBody(stack); Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.grenade_tech_tex); - ResourceManager.grenades.renderPart("Tech"); ResourceManager.grenades.renderPart("TechRing"); } @@ -134,10 +138,13 @@ public class ItemRenderGrenade implements IItemRenderer { if(renderType == null) { GL11.glTranslated(0, -2, 0); } - Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.grenade_stick_tex); - ResourceManager.grenades.renderPart("Stick"); + renderStickBody(stack); if(renderType != null) { + EnumGrenadeFilling filling = ItemGrenadeUniversal.getFilling(stack); + GL11.glColor3f(ColorUtil.fr(filling.bodyColor), ColorUtil.fg(filling.bodyColor), ColorUtil.fb(filling.bodyColor)); + bind(ResourceManager.grenade_stick_body_tex); ResourceManager.grenades.renderPart("StickCap"); + GL11.glColor3f(1F, 1F, 1F); } } @@ -154,9 +161,9 @@ public class ItemRenderGrenade implements IItemRenderer { GL11.glScaled(1.5, 1.5, 1.5); GL11.glTranslated(0, -1, 0); } - Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.grenade_tech_tex); - ResourceManager.grenades.renderPart("Tech"); + renderTechBody(stack); if(renderType != null) { + Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.grenade_tech_tex); ResourceManager.grenades.renderPart("TechRing"); } } @@ -210,6 +217,62 @@ public class ItemRenderGrenade implements IItemRenderer { GL11.glDisable(GL11.GL_BLEND); } + public static void renderStickBody(ItemStack stack) { + + EnumGrenadeFilling filling = ItemGrenadeUniversal.getFilling(stack); + EnumGrenadeFuze fuze = ItemGrenadeUniversal.getFuze(stack); + + bind(ResourceManager.grenade_stick_tex); + ResourceManager.grenades.renderPart("Stick"); + + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + + GL11.glColor3f(ColorUtil.fr(filling.bodyColor), ColorUtil.fg(filling.bodyColor), ColorUtil.fb(filling.bodyColor)); + bind(ResourceManager.grenade_stick_body_tex); + ResourceManager.grenades.renderPart("Stick"); + + GL11.glColor3f(ColorUtil.fr(filling.labelColor), ColorUtil.fg(filling.labelColor), ColorUtil.fb(filling.labelColor)); + bind(ResourceManager.grenade_stick_label_tex); + ResourceManager.grenades.renderPart("Stick"); + + GL11.glColor3f(ColorUtil.fr(fuze.bandColor), ColorUtil.fg(fuze.bandColor), ColorUtil.fb(fuze.bandColor)); + bind(ResourceManager.grenade_stick_fuze_tex); + ResourceManager.grenades.renderPart("Stick"); + + GL11.glColor3f(1F, 1F, 1F); + GL11.glDisable(GL11.GL_BLEND); + } + + public static void renderTechBody(ItemStack stack) { + + EnumGrenadeFilling filling = ItemGrenadeUniversal.getFilling(stack); + EnumGrenadeFuze fuze = ItemGrenadeUniversal.getFuze(stack); + + bind(ResourceManager.grenade_tech_tex); + ResourceManager.grenades.renderPart("Tech"); + + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + + GL11.glColor3f(ColorUtil.fr(filling.bodyColor), ColorUtil.fg(filling.bodyColor), ColorUtil.fb(filling.bodyColor)); + bind(ResourceManager.grenade_tech_body_tex); + ResourceManager.grenades.renderPart("Tech"); + + GL11.glColor3f(ColorUtil.fr(fuze.bandColor), ColorUtil.fg(fuze.bandColor), ColorUtil.fb(fuze.bandColor)); + bind(ResourceManager.grenade_tech_fuze_tex); + ResourceManager.grenades.renderPart("Tech"); + + RenderArcFurnace.fullbright(true); + GL11.glColor3f(ColorUtil.fr(filling.labelColor), ColorUtil.fg(filling.labelColor), ColorUtil.fb(filling.labelColor)); + bind(ResourceManager.grenade_tech_lights_tex); + ResourceManager.grenades.renderPart("Tech"); + RenderArcFurnace.fullbright(false); + + GL11.glColor3f(1F, 1F, 1F); + GL11.glDisable(GL11.GL_BLEND); + } + public static void bind(ResourceLocation res) { Minecraft.getMinecraft().getTextureManager().bindTexture(res); } diff --git a/src/main/java/com/hbm/util/DamageResistanceHandler.java b/src/main/java/com/hbm/util/DamageResistanceHandler.java index 0636050b0..e6b482f0d 100644 --- a/src/main/java/com/hbm/util/DamageResistanceHandler.java +++ b/src/main/java/com/hbm/util/DamageResistanceHandler.java @@ -409,6 +409,7 @@ public class DamageResistanceHandler { FIRE, EXPLOSIVE, ELECTRIC, + PLASMA, LASER, MICROWAVE, SUBATOMIC, @@ -457,6 +458,7 @@ public class DamageResistanceHandler { if(source.isFireDamage()) return CATEGORY_FIRE; if(source.isProjectile()) return CATEGORY_PHYSICAL; if(source.damageType.toLowerCase(Locale.US).equals(DamageClass.LASER.name().toLowerCase(Locale.US))) return CATEGORY_ENERGY; + if(source.damageType.toLowerCase(Locale.US).equals(DamageClass.PLASMA.name().toLowerCase(Locale.US))) return CATEGORY_ENERGY; if(source.damageType.toLowerCase(Locale.US).equals(DamageClass.MICROWAVE.name().toLowerCase(Locale.US))) return CATEGORY_ENERGY; if(source.damageType.toLowerCase(Locale.US).equals(DamageClass.SUBATOMIC.name().toLowerCase(Locale.US))) return CATEGORY_ENERGY; if(source.damageType.toLowerCase(Locale.US).equals(DamageClass.ELECTRIC.name().toLowerCase(Locale.US))) return CATEGORY_ENERGY; diff --git a/src/main/resources/assets/hbm/textures/models/grenades/stick.png b/src/main/resources/assets/hbm/textures/models/grenades/stick.png index 135bb14056656631fdffaa59b74e001518f822d0..e81d3fc5e280958b091a6587f16c59443b2f947b 100644 GIT binary patch delta 4105 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 pNy`oM!e{CG<=WTnM)O)d*?Yc zQZeW4-Pp3#3KFe}Z%;Ao@NS#%v;Wu`g*%qa=Uv4uJCy95%6HeyUoAKLa#?M(3s2+6 zzjgY~?%#j!ecu27bKc(i#;x1Fum5p*6Z4Gcm0$CdeXjmL9A(51e&G3M%U{QrXGXOt z%DUtQgqt4w)e!N}d8cE-{XB-xHtO8+vzBGvU99Qt61k) z{+_!*)JCp<(fsW?-q#CH=3m~+I%U_b9S={}UVQXMzU}>PH9hN}`!4A_`m-pwF(l1r z=rNoh_*Sxq_0*qTyBDl3eQ?+P(9*{Zs~7SM+-3>5Ene_;{pQ>3KNLS$>{_3p{)S76 zyXnyOiF>%YnmPI(&v|n@fa@N6xnmO8u$#3GKc4-%de7pes$_$9O~i*Ag;P4&CTMN2 z_7iyihOJ=#eRI}cU*9jy3N1ym84fw^I@JES;lqxtWiy`7{OGjsu-$_d3*K3{+NYOF zzncGdXRGP4nqQ2`XP({*ut&FW8wewwy0Hw0z#b*EMtgmM;3-^i6Kt+fLgx&hwt^ zS#W3h!WENk^;eXwWRgjan;`KR7|(EE)%i~TL-4wN%Vahy9a%MfZOWoBX;;P{uKl`+ zW;`u{O4NVBSJbnQ-omgkO?v0jf^Y9{=Q19fv8;M`@ShzoR8K_RR$=L? zf3tz#LYnEQzxTPW56%+D4PPhDt+qYte|nbq6Rwxr+YEUASBu!iUp!;6f5XG2or|uo zoG0yd@OFZNn%TBJ_uY3&PZ!eFgGMAcHm@>o6nfRaXqA0eb&D7%t$;=G5Nh$;KE29d z#Hy~w!MTS&qvLKwj5Gs7???48FPA&LwsBh|Iy&#ht)KoYe}@Usa+@AuWd=hgV3-)@ jIUlXCcj)=feB>YFd*iFGl2S|?L9yfM>gTe~DWM4f;b@{l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/grenades/stick_fuze.png b/src/main/resources/assets/hbm/textures/models/grenades/stick_fuze.png new file mode 100644 index 0000000000000000000000000000000000000000..d593fd7d20c72936ad60a622ba1c81822a212245 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^2|zr9gAGVZN51g^QY^(zo*^7SP{WbZ0purnx;TbZ z%z1n9pdf<+&*2S+{#m!{zEHlzvhOnwP?|*W#nN+=?8P^E>|2ZzW-@{_e>lk;R?5OM ScUkId5ZBYy&t;ucLK6UTwj=fc literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/grenades/stick_label.png b/src/main/resources/assets/hbm/textures/models/grenades/stick_label.png new file mode 100644 index 0000000000000000000000000000000000000000..c90d268a14386e375da75e8a3f5f44fac2e57db3 GIT binary patch literal 391 zcmeAS@N?(olHy`uVBq!ia0vp^2|zr9gAGVZN51g^QY^(zo*^7SP{WbZ!N9<1=jq}Y zQZeW44adG_1rdgTxju(3#lEk%E7yy()D~*%x@^en@hk3<2&3~~j(BTdpb5l)0}ju` zn%BJEwOwNQvyT-fJI`tFi{{;;(yUoySusS3M~fh0?+>J2#bGh z-J~ZRz#S&JL*ntgS3#D?c1-{Jv;5WNM^^V1zUDg79Llzi=grhl9C;gAd&{ox3*OG@ z;iw<(cyHeO-%od@&R_gk(4?Bjw{P3rB76T&+dkddRC^`#N(ob6QzZADNWLGd^Hk1; zA26}KzxL;m9;p+nXFY2$dhs(k_1BZPsXMprpZ~ObclNxN|DR7(Op)$mviY>? zLK`;kDY#a@<>Zc|)d$qGw=uo@w_XL|e}f(J{2R_Ws_Qp3fdoBW{an^LB{Ts5M0A|6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/grenades/tech.png b/src/main/resources/assets/hbm/textures/models/grenades/tech.png index 7e2ff932b7b058e9255a45a97c25ea9463e0a90b..ad30a49a264d57c7480ef02e8eb026eb963a93ee 100644 GIT binary patch delta 1040 zcmV+r1n>Kt2DAu}Gk*i?Nklx2-H6j2au zBq(TOA*qA}#1u9bDQql~M%(-cLa>k^=oR6>NF>b>NF(7e7J9-$?zTRQu*vN1?2ozJ zWM;?j2M*ru?A{H0Z{C}IZ+4uO<&8c8ZM=Q=!cqDCY+`y`<$w1B%{ce(-Zp9kf7t%4 z^dJ4d!MeV$yAMDiBf2{P)WSMmPj?@HLL4HZmF128#Pm4re0onrMDuqZ($62i&SrRM zSKF=u5^ZT#r-vAoH2(}z{wR%N&AAmyOqAiDgZ-0K#-3Oy-wOWPV^=D+NR;7wN zN<>7k#0bBQ670A=Fs^(0(Tr2C*HJD^LE1&P+kJ9fqH_84xZ5T2JX(12 zSa`W?MoYR}I901s*Y~O8^$2#{me~og>-*G@QR@<5D%_e)wuqp;Tq=dmo$Wd1dFL1N zwgy5Qp?|@S+dP4=qW0K1&B6x2MQ7Ln{BbbD?s&cUY&)1(jg2{Ua?%g%24~YnY*~R# zaDyh>Q7Z0e$TgQsrSSDh?s-_YB$!2Kz>nrYT;5gl=Q>`G?mc**1m^?BF=pv#)``MQ2cPN2P=`Z5Hi3efAsz zYa}VA4ht;V(Tr?Nl?6M#7X&_gMwGv1jW-)Kla{!MR;%*1@n8fSN;JovHqnda!#N2X3sKVd=Z5I4!m7hAO@K)LEr*$ zd~`^%FAGB8f+1TwKnym7q!_xjxlWTavwt!7yuaHFRict&INlE~0HTs&-ZCRba6uTf zZj5@cX83wA@21lV2vO29U>L!M!50~1%7sbkO~haW5v>DDEBL47uCeGY1J!$Uq-}sd delta 757 zcmdnOF^6q}aXr&zPZ!6KiaBrRI`-W%5NVsQ-FJaG<)ZZ$KAl~2y>cSLMZ-Uw7QK*h z?dBJ*y@$W>Or6DiM)nTtjFyD7PMgr2l4IIQSqSp+Li+-lF~S++x3w^UAA~ zj>$Z_*7msc>{rWc;w^k^>80<@9WG_eI<_@eJ2cd@e)Xz@IS%a2&W#5b9(b_k$Sr5} z?1-nGC0FOy^Sli2kNLmv>%L2REV4X&tZ@{#pB(*H=#sFWOocjY zx=oGZ_qSb-ooj#N{*#||HNx}PFZ_7@!>)g?zh9r(sQh~Rhkwtw>e-(^yVAwo z`A-;vO+ap5_Cnj@=j(%^Y zFK$`={JdWJzm8ILa!T!<`qpC!btN`}%U-yId=uB3XIxT{ckR{ocTb*eExmb6c;SK0 zA0lsKYbI{mE1@*^hUD?v+n!ZkT++-}r(V2%o-HiE`hXFy?D*DJLSOj5o|({DW>74E z0)Delr@XQaFx;nu!yOcPiTYKFIc)Bq;)VO)h*ab$`iPcr1b=b5(Gj6N2&{(LGcevJZC1i=(l&2`X+_Sy!w+L^zDCb k^89+e7ob!H43atj?Jhq)xa`@5-wZ(D>FVdQ&MBb@0BuxkQvd(} diff --git a/src/main/resources/assets/hbm/textures/models/grenades/tech_body.png b/src/main/resources/assets/hbm/textures/models/grenades/tech_body.png new file mode 100644 index 0000000000000000000000000000000000000000..f837758e3a4ddda7187da3f1c1dce4ac1909ca3d GIT binary patch literal 410 zcmeAS@N?(olHy`uVBq!ia0vp^6+j%o!3HER&ED7vq*#ibJVQ8upoSx*gMooD(9^{+ zq+-t7+lE<(9RwI0v^l;oe}DId%l4nuUx&F>{~e|Vu{Ozeh?Ly9o3_kELhM?#cJ}u? zbD&9Z(C~RzYUH;|jxI)h$>COQ?|0?iR{7y{*dS!;gZ@j56Q;AUUtj+^%8JeCQnP+o zG=JE^gD(#r{CfWR<`SNiB~8t*-+!-uDRJV2ATQ8F2kBL_V%;WGcYb^mG@m72=R4EU zo2^ZD;R^plbGb!?YBt_#GY65!*0cRP=vhz@>vi&0j^kyM)W7PX{`VG*{VAX)6?0j3ZAwlz6kRA{raQL`OgbIr~E$1J7d|) x+%?rDXI3;xf4shPV`V{s+@_|>&5R62KUgB|(*rV>c?f~R$J5o%Wt~$(695@@t@r={ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/grenades/tech_fuze.png b/src/main/resources/assets/hbm/textures/models/grenades/tech_fuze.png new file mode 100644 index 0000000000000000000000000000000000000000..fb20b9086bdc2a1f4989a703c7ef61a81e71880f GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^6+j%o!3HER&ED7vq*#ibJVQ8upoSx*1IQ2cba4!+ znDh3cAtQqV2ZQ6yPN)AWE{WGgUKNQynBM>HUU&W~t-No^X*~ZljMwvlOdEakt zG3V_SLoQ}T0oDti9-9rm-uqv3t$XcDr>-R&Ya|QqufB4u|FAg|P&FEOa6a!UW7y>= z>G|ir*Xmcku0Fane8S9$Gp`yx3Y1N7ohf;H+um=-3#X)Bd~h`L1Izo~wK@4MjQ+v4 y5o#~@_TT$GW9z@EZ1dmT{$6uU3dQIK?`o#Fq?Ere%3guo&fw|l=d#Wzp$P!5-BJGl literal 0 HcmV?d00001