From 5075f28bc20b3ab4ecef2c5000473e11b1f6b192 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 3 Feb 2023 15:06:05 +0100 Subject: [PATCH] 12 gauge percussive cap, casing spawner for turrets --- .../java/com/hbm/crafting/WeaponRecipes.java | 1 + .../hbm/handler/BulletConfigSyncingUtil.java | 2 + .../hbm/handler/guncfg/Gun12GaugeFactory.java | 63 ++++++++++++++++-- .../java/com/hbm/items/ItemAmmoEnums.java | 3 +- .../java/com/hbm/items/weapon/ItemAmmo.java | 2 + src/main/java/com/hbm/lib/HbmCollection.java | 6 +- .../turret/TileEntityTurretBaseNT.java | 43 ++++++++++++ src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../items/ammo_12gauge_percussion.png | Bin 0 -> 342 bytes .../hbm/textures/items/ballistic_gauntlet.png | Bin 0 -> 327 bytes 10 files changed, 113 insertions(+), 9 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_12gauge_percussion.png create mode 100644 src/main/resources/assets/hbm/textures/items/ballistic_gauntlet.png diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index 18dc7368f..317d6fdeb 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -186,6 +186,7 @@ public class WeaponRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.assembly_nopip, 24), new Object[] { " I", "GC", " P", 'I', PB.ingot(), 'G', ModItems.ballistite, 'C', ModItems.casing_44, 'P', ModItems.primer_44 }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_12gauge, 12), new Object[] { " I ", "GCL", " P ", 'I', ModItems.pellet_buckshot, 'G', ModItems.cordite, 'C', ModItems.casing_buckshot, 'P', ModItems.primer_buckshot, 'L', ModItems.plate_polymer }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_12gauge, 12), new Object[] { " I ", "GCL", " P ", 'I', ModItems.pellet_buckshot, 'G', ModItems.ballistite, 'C', ModItems.casing_buckshot, 'P', ModItems.primer_buckshot, 'L', ModItems.plate_polymer }); + CraftingManager.addRecipeAuto(ModItems.ammo_12gauge.stackFromEnum(12, Ammo12Gauge.PERCUSSION), new Object[] { "G", "C", "P", 'G', ModItems.ballistite, 'C', ModItems.casing_buckshot, 'P', ModItems.primer_buckshot }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_4gauge, 12), new Object[] { " I ", "GCL", " P ", 'I', ModItems.pellet_buckshot, 'G', ModItems.cordite, 'C', ModItems.casing_50, 'P', ModItems.primer_50, 'L', ModItems.plate_polymer }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_4gauge, 12), new Object[] { " I ", "GCL", " P ", 'I', ModItems.pellet_buckshot, 'G', ModItems.ballistite, 'C', ModItems.casing_50, 'P', ModItems.primer_50, 'L', ModItems.plate_polymer }); CraftingManager.addRecipeAuto(ModItems.ammo_4gauge.stackFromEnum(12, Ammo4Gauge.SLUG), new Object[] { " I ", "GCL", " P ", 'I', PB.ingot(), 'G', ANY_SMOKELESS.dust(), 'C', ModItems.casing_50, 'P', ModItems.primer_50, 'L', ModItems.plate_polymer }); diff --git a/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java b/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java index a975b4b8e..7f79d825e 100644 --- a/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java +++ b/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java @@ -74,6 +74,7 @@ public class BulletConfigSyncingUtil { public static int G12_DU = i++; public static int G12_AM = i++; public static int G12_SLEEK = i++; + public static int G12_PERCUSSION = i++; public static int LR22_NORMAL = i++; public static int LR22_AP = i++; @@ -348,6 +349,7 @@ public class BulletConfigSyncingUtil { configSet.put(G12_DU, Gun12GaugeFactory.get12GaugeDUConfig()); configSet.put(G12_AM, Gun12GaugeFactory.get12GaugeAMConfig()); configSet.put(G12_SLEEK, Gun12GaugeFactory.get12GaugeSleekConfig()); + configSet.put(G12_PERCUSSION, Gun12GaugeFactory.get12GaugePercussionConfig()); configSet.put(LR22_NORMAL, Gun22LRFactory.get22LRConfig()); configSet.put(LR22_AP, Gun22LRFactory.get22LRAPConfig()); diff --git a/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java index d36f06468..51940cc74 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java @@ -1,6 +1,7 @@ package com.hbm.handler.guncfg; import java.util.ArrayList; +import java.util.List; import com.hbm.entity.projectile.EntityBulletBase; import com.hbm.handler.BulletConfigSyncingUtil; @@ -13,6 +14,8 @@ import com.hbm.items.ItemAmmoEnums.Ammo12Gauge; import com.hbm.items.ModItems; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; +import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.PacketDispatcher; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.potion.HbmPotion; @@ -22,9 +25,14 @@ import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay.Crosshair; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionEffect; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; import net.minecraft.util.Vec3; public class Gun12GaugeFactory { @@ -33,11 +41,11 @@ public class Gun12GaugeFactory { private static final SpentCasing CASING12GAUGE; static { - EJECTOR_SPAS = new CasingEjector().setMotion(Vec3.createVectorHelper(-0.4, 0.1, 0)).setOffset(Vec3.createVectorHelper(-0.35, 0, 0.5)).setAngleRange(0.01F, 0.03F).setDelay(10); - EJECTOR_SPAS_ALT = new CasingEjector().setMotion(Vec3.createVectorHelper(-0.4, 0.1, 0)).setOffset(Vec3.createVectorHelper(-0.35, 0, 0.5)).setAngleRange(0.01F, 0.03F).setDelay(10).setAmount(2); - EJECTOR_BENELLI = new CasingEjector().setMotion(Vec3.createVectorHelper(-0.4, 0.1, 0)).setOffset(Vec3.createVectorHelper(-0.3, 1, 0)).setAngleRange(0.01F, 0.03F); - EJECTOR_UBOINIK = new CasingEjector().setMotion(Vec3.createVectorHelper(-0.4, 0.1, 0)).setOffset(Vec3.createVectorHelper(-0.35, -0.3, 0.5)).setAngleRange(0.01F, 0.03F); - EJECTOR_SSG = new CasingEjector().setMotion(Vec3.createVectorHelper(0.2, 0, -0.2)).setOffset(Vec3.createVectorHelper(0.8, 0, 0)).setAngleRange(0.05F, 0.02F).setDelay(20).setAmount(2); + EJECTOR_SPAS = new CasingEjector().setMotion(-0.4, 0.1, 0).setOffset(-0.35, 0, 0.5).setAngleRange(0.01F, 0.03F).setDelay(10); + EJECTOR_SPAS_ALT = new CasingEjector().setMotion(-0.4, 0.1, 0).setOffset(-0.35, 0, 0.5).setAngleRange(0.01F, 0.03F).setDelay(10).setAmount(2); + EJECTOR_BENELLI = new CasingEjector().setMotion(-0.4, 0.1, 0).setOffset(-0.3, 1, 0).setAngleRange(0.01F, 0.03F); + EJECTOR_UBOINIK = new CasingEjector().setMotion(-0.4, 0.1, 0).setOffset(-0.35, -0.3, 0.5).setAngleRange(0.01F, 0.03F); + EJECTOR_SSG = new CasingEjector().setMotion(0.2, 0, -0.2).setOffset(0.8, 0, 0).setAngleRange(0.05F, 0.02F).setDelay(20).setAmount(2); CASING12GAUGE = new SpentCasing(CasingType.SHOTGUN).setScale(1.5F).setBounceMotion(0.05F, 0.02F); } @@ -294,5 +302,50 @@ public class Gun12GaugeFactory { return bullet; } + + public static BulletConfiguration get12GaugePercussionConfig() { + + BulletConfiguration bullet = new BulletConfiguration(); + + bullet.ammo = new ComparableStack(ModItems.ammo_12gauge.stackFromEnum(Ammo12Gauge.PERCUSSION)); + bullet.spread = 0F; + bullet.spentCasing = CASING12GAUGE.clone().register("12GaPerc").setColor(0x9E1616, SpentCasing.COLOR_CASE_12GA); + + bullet.maxAge = 0; + + bullet.bUpdate = (entityBullet) -> { + + if(!entityBullet.worldObj.isRemote) { + + Vec3 vec = Vec3.createVectorHelper(entityBullet.motionX, entityBullet.motionY, entityBullet.motionZ); + double radius = vec.lengthVector(); + double x = entityBullet.posX + vec.xCoord; + double y = entityBullet.posY + vec.yCoord; + double z = entityBullet.posZ + vec.zCoord; + AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox(x, y, z, x, y, z).expand(radius, radius, radius); + List list = entityBullet.worldObj.getEntitiesWithinAABBExcludingEntity(entityBullet.shooter, aabb); + + for(Entity e : list) { + DamageSource source = entityBullet.shooter instanceof EntityPlayer ? DamageSource.causePlayerDamage((EntityPlayer) entityBullet.shooter) : DamageSource.magic; + e.attackEntityFrom(source, 30F); + } + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "plasmablast"); + data.setFloat("r", 0.75F); + data.setFloat("g", 0.75F); + data.setFloat("b", 0.75F); + data.setFloat("pitch", (float) Math.toDegrees(entityBullet.rotationPitch)); + data.setFloat("yaw", (float) Math.toDegrees(entityBullet.rotationYaw)); + data.setFloat("scale", 2F); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x, y, z), + new TargetPoint(entityBullet.dimension, x, y, z, 100)); + + entityBullet.setDead(); + } + }; + + return bullet; + } } diff --git a/src/main/java/com/hbm/items/ItemAmmoEnums.java b/src/main/java/com/hbm/items/ItemAmmoEnums.java index 30a9d9995..da40e8af4 100644 --- a/src/main/java/com/hbm/items/ItemAmmoEnums.java +++ b/src/main/java/com/hbm/items/ItemAmmoEnums.java @@ -726,7 +726,8 @@ public class ItemAmmoEnums { SHRAPNEL("ammo_12gauge_shrapnel", AmmoItemTrait.PRO_DAMAGE, AmmoItemTrait.NEU_MORE_BOUNCY, AmmoItemTrait.CON_WEAR), DU("ammo_12gauge_du", AmmoItemTrait.PRO_DAMAGE, AmmoItemTrait.PRO_PENETRATION, AmmoItemTrait.NEU_HEAVY_METAL, AmmoItemTrait.CON_HEAVY_WEAR), MARAUDER("ammo_12gauge_marauder", AmmoItemTrait.PRO_MARAUDER, AmmoItemTrait.NEU_NO_CON), - SLEEK("ammo_12gauge_sleek", AmmoItemTrait.NEU_MASKMAN_FLECHETTE); + SLEEK("ammo_12gauge_sleek", AmmoItemTrait.NEU_MASKMAN_FLECHETTE), + PERCUSSION("ammo_12gauge_percussion", AmmoItemTrait.PRO_PERCUSSION, AmmoItemTrait.CON_NO_PROJECTILE); private final Set traits; private final String unloc; diff --git a/src/main/java/com/hbm/items/weapon/ItemAmmo.java b/src/main/java/com/hbm/items/weapon/ItemAmmo.java index 089c54f3a..1917cfa1c 100644 --- a/src/main/java/com/hbm/items/weapon/ItemAmmo.java +++ b/src/main/java/com/hbm/items/weapon/ItemAmmo.java @@ -36,6 +36,7 @@ public class ItemAmmo extends ItemEnumMulti { CON_NO_EXPLODE3, CON_NO_FIRE, CON_NO_MIRV, + CON_NO_PROJECTILE, CON_PENETRATION, CON_RADIUS, CON_RANGE2, @@ -88,6 +89,7 @@ public class ItemAmmo extends ItemEnumMulti { PRO_NO_GRAVITY, PRO_NUCLEAR, PRO_PENETRATION, + PRO_PERCUSSION, PRO_PHOSPHORUS, PRO_PHOSPHORUS_SPLASH, PRO_POISON_GAS, diff --git a/src/main/java/com/hbm/lib/HbmCollection.java b/src/main/java/com/hbm/lib/HbmCollection.java index 3f665ea71..ef842740d 100644 --- a/src/main/java/com/hbm/lib/HbmCollection.java +++ b/src/main/java/com/hbm/lib/HbmCollection.java @@ -23,7 +23,7 @@ public class HbmCollection { /// BULLET COLLECTIONS // SHOTGUNS /** 12 GAUGE **/ - public static final List twelveGauge = ImmutableList.of(BulletConfigSyncingUtil.G12_NORMAL, BulletConfigSyncingUtil.G12_INCENDIARY, BulletConfigSyncingUtil.G12_SHRAPNEL, BulletConfigSyncingUtil.G12_DU, BulletConfigSyncingUtil.G12_AM, BulletConfigSyncingUtil.G12_SLEEK); + public static final List twelveGauge = ImmutableList.of(BulletConfigSyncingUtil.G12_NORMAL, BulletConfigSyncingUtil.G12_INCENDIARY, BulletConfigSyncingUtil.G12_SHRAPNEL, BulletConfigSyncingUtil.G12_DU, BulletConfigSyncingUtil.G12_AM, BulletConfigSyncingUtil.G12_SLEEK, BulletConfigSyncingUtil.G12_PERCUSSION); /** 20 GAUGE **/ public static final List twentyGauge = ImmutableList.of(BulletConfigSyncingUtil.G20_NORMAL, BulletConfigSyncingUtil.G20_SLUG, BulletConfigSyncingUtil.G20_FLECHETTE, BulletConfigSyncingUtil.G20_FIRE, BulletConfigSyncingUtil.G20_SHRAPNEL, BulletConfigSyncingUtil.G20_EXPLOSIVE, BulletConfigSyncingUtil.G20_CAUSTIC, BulletConfigSyncingUtil.G20_SHOCK, BulletConfigSyncingUtil.G20_WITHER, BulletConfigSyncingUtil.G20_SLEEK); /** 4 GAUGE **/ @@ -55,6 +55,7 @@ public class HbmCollection { public static final List threeZeroEight = ImmutableList.of(BulletConfigSyncingUtil.W308); /** 5MM **/ public static final List fiveMM = ImmutableList.of(BulletConfigSyncingUtil.R5_NORMAL, BulletConfigSyncingUtil.R5_EXPLOSIVE, BulletConfigSyncingUtil.R5_DU, BulletConfigSyncingUtil.R5_STAR, BulletConfigSyncingUtil.CHL_R5); + /** 5MM LACUNAE **/ public static final List fiveMMBolt = ImmutableList.of(BulletConfigSyncingUtil.R5_NORMAL_BOLT, BulletConfigSyncingUtil.R5_EXPLOSIVE_BOLT, BulletConfigSyncingUtil.R5_DU_BOLT, BulletConfigSyncingUtil.R5_STAR_BOLT, BulletConfigSyncingUtil.CHL_R5_BOLT); // MISC /** .75 **/ @@ -74,8 +75,7 @@ public class HbmCollection { /// FREQUENTLY USED TRANSLATION KEYS // GUN MANUFACTURERS - public static enum EnumGunManufacturer - { + public static enum EnumGunManufacturer { /**Armalite**/ ARMALITE, /**Auto-Ordnance Corporation**/ diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java index 0bcd8a7bf..c169b4cd9 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java @@ -17,6 +17,8 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemTurretBiometry; import com.hbm.lib.Library; +import com.hbm.main.MainRegistry; +import com.hbm.particle.SpentCasing; import com.hbm.tileentity.TileEntityMachineBase; import api.hbm.energy.IEnergyUser; @@ -90,6 +92,8 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple //tally marks! public int stattrak; + public int casingDelay; + protected SpentCasing cachedCasingConfig = null; /** * X @@ -226,6 +230,14 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple else this.lastRotationYaw -= Math.PI * 2; } + + if(usesCasings() && this.casingDelay() > 0) { + if(casingDelay > 0) { + casingDelay--; + } else { + spawnCasing(); + } + } } } @@ -298,6 +310,9 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple public abstract void updateFiringTick(); + public boolean usesCasings() { return false; } + public int casingDelay() { return 0; } + public BulletConfiguration getFirstConfigLoaded() { List list = getAmmoList(); @@ -336,6 +351,13 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple proj.setThrowableHeading(vec.xCoord, vec.yCoord, vec.zCoord, bullet.velocity, bullet.spread); worldObj.spawnEntityInWorld(proj); + + if(usesCasings()) { + if(this.casingDelay() == 0) + spawnCasing(); + else + casingDelay = this.casingDelay(); + } } public void conusmeAmmo(ComparableStack ammo) { @@ -819,4 +841,25 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple public void closeInventory() { this.worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "hbm:block.closeC", 1.0F, 1.0F); } + + protected Vec3 getCasingSpawnPos() { + return this.getTurretPos(); + } + + protected void spawnCasing() { + + if(cachedCasingConfig == null) return; + + Vec3 spawn = this.getCasingSpawnPos(); + final NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "casing"); + data.setDouble("posX", spawn.xCoord); + data.setDouble("posY", spawn.yCoord); + data.setDouble("posZ", spawn.zCoord); + data.setFloat("pitch", (float) rotationPitch); + data.setFloat("yaw", (float) rotationYaw); + data.setBoolean("crouched", false); + data.setString("name", cachedCasingConfig.getName()); + MainRegistry.proxy.effectNT(data); + } } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 08a806606..63d2dc848 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -830,6 +830,7 @@ desc.item.ammo.con_no_explode2=- No block damage desc.item.ammo.con_no_explode3=- No splash damage desc.item.ammo.con_no_fire=- Not incendiary desc.item.ammo.con_no_mirv=- Not recommended for the Proto MIRV +desc.item.ammo.con_no_projectile=- No projectile desc.item.ammo.con_penetration=- Not penetrating desc.item.ammo.con_radius=- Decreased blast radius desc.item.ammo.con_range2=- Highly decreased range @@ -882,6 +883,7 @@ desc.item.ammo.pro_mining=+ Explosion drops all blocks desc.item.ammo.pro_no_gravity=+ Not affected by gravity desc.item.ammo.pro_nuclear=+ Nuclear desc.item.ammo.pro_penetration=+ Penetrating +desc.item.ammo.pro_percussion=+ Percussive blast desc.item.ammo.pro_phosphorus=+ Induces phosphorus burns desc.item.ammo.pro_phosphorus_splash=+ Phosphorus splash desc.item.ammo.pro_poison_gas=+ Poison splash diff --git a/src/main/resources/assets/hbm/textures/items/ammo_12gauge_percussion.png b/src/main/resources/assets/hbm/textures/items/ammo_12gauge_percussion.png new file mode 100644 index 0000000000000000000000000000000000000000..f010e6675197b6a28c64294a335cf77c41e16099 GIT binary patch literal 342 zcmV-c0jd6pP)ZrE5Jev-1zN4>tTe9BHm*&-lw5!V(B=p^K#t%(Wlj)E zd=EsG#)1+dcasXTz+x%Mm(T(`^XAWo2NDq9w}4FVPmch53Lx+e0N|pvT(q7q+^Ie{ zq5Ja{BvOh-R7g#06ZTKGbDh(ZEzt1vT!iz)^!`mIs@lfu5i?vNU7P$ zt?RgtBQL|SsC8gV{T8xW;SGYXVcU5FBz=BzJC7oNxuAfQl0z;1N6^AGzv2;s@{u@&orM z-9Et0iqa_}M}W;qx#mW4Y^xoFadzmy9Q0uz!-zNt^ojI zUF`e*aI9&XG5{Ec0pmD=h_IO;h@ErM`ORGH#n#$vPiouNE2WYqn+VK|s;VLqGeaqr zj3)LM%d$iyDP>apGH}j8DTO@GU&~r!9WiOZ%m9F+oIxCT$q1?98b@^jJabDa!OWQF zIf@V#o7#^603yn?)?P}Pe1#w;qU?UV`LD|bpC4yfYq9C3wLbibM6}_4U$6ehm}uI! Z@c?eRduXtUx8MK(002ovPDHLkV1i)yit_*f literal 0 HcmV?d00001