mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
black powder effects
This commit is contained in:
parent
b9787fa08e
commit
7d88f73dc6
@ -9,6 +9,7 @@ import com.hbm.inventory.material.Mats;
|
||||
import static com.hbm.inventory.OreDictManager.*;
|
||||
|
||||
import com.hbm.items.ItemAmmoEnums.*;
|
||||
import com.hbm.items.ItemEnums.EnumCasingType;
|
||||
import com.hbm.items.food.ItemConserve.EnumFoodType;
|
||||
import com.hbm.items.machine.ItemCircuit.EnumCircuitType;
|
||||
import com.hbm.items.ModItems;
|
||||
@ -32,6 +33,10 @@ public class WeaponRecipes {
|
||||
//SEDNA Parts
|
||||
CraftingManager.addRecipeAuto(new ItemStack(ModItems.part_stock, 1, Mats.MAT_WOOD.id), new Object[] { "WWW", " W", 'W', KEY_PLANKS });
|
||||
CraftingManager.addRecipeAuto(new ItemStack(ModItems.part_grip, 1, Mats.MAT_WOOD.id), new Object[] { "W ", " W", " W", 'W', KEY_PLANKS });
|
||||
|
||||
CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.casing, EnumCasingType.SHOTSHELL, 2), new Object[] { "P", "C", 'P', GUNMETAL.plate(), 'C', DictFrame.fromOne(ModItems.casing, EnumCasingType.LARGE) });
|
||||
CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.casing, EnumCasingType.BUCKSHOT, 2), new Object[] { "P", "C", 'P', ANY_PLASTIC.ingot(), 'C', DictFrame.fromOne(ModItems.casing, EnumCasingType.LARGE) });
|
||||
CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.casing, EnumCasingType.BUCKSHOT_ADVANCED, 2), new Object[] { "P", "C", 'P', ANY_PLASTIC.ingot(), 'C', DictFrame.fromOne(ModItems.casing, EnumCasingType.LARGE_STEEL) });
|
||||
|
||||
//SEDNA Guns
|
||||
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_pepperbox, 1), new Object[] { "IIW", " C", 'I', IRON.ingot(), 'W', KEY_PLANKS, 'C', CU.ingot() });
|
||||
|
||||
@ -29,6 +29,7 @@ public class AmmoPressRecipes extends SerializableRecipe {
|
||||
public void registerDefaults() {
|
||||
|
||||
OreDictStack lead = new OreDictStack(PB.ingot());
|
||||
OreDictStack nugget = new OreDictStack(PB.nugget());
|
||||
OreDictStack steel = new OreDictStack(STEEL.ingot());
|
||||
OreDictStack wSteel = new OreDictStack(WEAPONSTEEL.ingot());
|
||||
OreDictStack copper = new OreDictStack(CU.ingot());
|
||||
@ -177,6 +178,19 @@ public class AmmoPressRecipes extends SerializableRecipe {
|
||||
null, uranium.copy(2), null,
|
||||
null, smokeless.copy(6), null,
|
||||
null, sBig, null));
|
||||
|
||||
recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G12_BP, 6),
|
||||
null, nugget.copy(6), null,
|
||||
null, smokeless, null,
|
||||
null, bpShell, null));
|
||||
recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G12_MAGNUM, 6),
|
||||
null, nugget.copy(8), null,
|
||||
null, smokeless, null,
|
||||
null, bpShell, null));
|
||||
recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G12_SLUG, 6),
|
||||
null, lead, null,
|
||||
null, smokeless, null,
|
||||
null, bpShell, null));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -72,6 +72,7 @@ public class BulletConfig implements Cloneable {
|
||||
public boolean isSpectral = false;
|
||||
public int selfDamageDelay = 2;
|
||||
|
||||
public boolean blackPowder = false;
|
||||
public boolean renderRotations = true;
|
||||
public SpentCasing casing;
|
||||
public BiConsumer<EntityBulletBaseMK4, Float> renderer;
|
||||
@ -111,6 +112,7 @@ public class BulletConfig implements Cloneable {
|
||||
public BulletConfig setDoesPenetrate(boolean pen) { this.doesPenetrate = pen; return this; }
|
||||
public BulletConfig setSpectral(boolean spectral) { this.isSpectral = spectral; return this; }
|
||||
public BulletConfig setSelfDamageDelay(int delay) { this.selfDamageDelay = delay; return this; }
|
||||
public BulletConfig setBlackPowder(boolean bp) { this.blackPowder = bp; return this; }
|
||||
public BulletConfig setRenderRotations(boolean rot) { this.renderRotations = rot; return this; }
|
||||
public BulletConfig setCasing(SpentCasing casing) { this.casing = casing; return this; }
|
||||
|
||||
|
||||
@ -20,6 +20,7 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
|
||||
import com.hbm.items.weapon.sedna.ItemGunBaseNT.SmokeNode;
|
||||
import com.hbm.items.weapon.sedna.Receiver;
|
||||
import com.hbm.items.weapon.sedna.mags.IMagazine;
|
||||
import com.hbm.particle.helper.BlackPowderHelper;
|
||||
import com.hbm.render.anim.BusAnimation;
|
||||
import com.hbm.render.anim.BusAnimationSequence;
|
||||
import com.hbm.render.anim.HbmAnimations.AnimType;
|
||||
@ -221,6 +222,7 @@ public class Lego {
|
||||
float spread = calcSpread(ctx, stack, primary, calcWear, index, aim);
|
||||
EntityBulletBaseMK4 mk4 = new EntityBulletBaseMK4(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);
|
||||
}
|
||||
|
||||
|
||||
@ -50,9 +50,9 @@ public class XFactory12ga {
|
||||
|
||||
public static void init() {
|
||||
|
||||
g12_bp = new BulletConfig().setItem(EnumAmmo.G12_BP).setProjectiles(8).setSpread(0.05F).setRicochetAngle(15).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(SpentCasing.COLOR_CASE_BRASS, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_BP"));
|
||||
g12_bp_magnum = new BulletConfig().setItem(EnumAmmo.G12_BP_MAGNUM).setProjectiles(4).setSpread(0.05F).setRicochetAngle(25).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(SpentCasing.COLOR_CASE_BRASS, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_BP_MAGNUM"));
|
||||
g12_bp_slug = new BulletConfig().setItem(EnumAmmo.G12_BP_SLUG).setSpread(0.01F).setRicochetAngle(5).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(SpentCasing.COLOR_CASE_BRASS, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_BP_SLUG"));
|
||||
g12_bp = new BulletConfig().setItem(EnumAmmo.G12_BP).setBlackPowder(true).setProjectiles(8).setSpread(0.05F).setRicochetAngle(15).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(SpentCasing.COLOR_CASE_BRASS, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_BP"));
|
||||
g12_bp_magnum = new BulletConfig().setItem(EnumAmmo.G12_BP_MAGNUM).setBlackPowder(true).setProjectiles(4).setSpread(0.05F).setRicochetAngle(25).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(SpentCasing.COLOR_CASE_BRASS, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_BP_MAGNUM"));
|
||||
g12_bp_slug = new BulletConfig().setItem(EnumAmmo.G12_BP_SLUG).setBlackPowder(true).setSpread(0.01F).setRicochetAngle(5).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(SpentCasing.COLOR_CASE_BRASS, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_BP_SLUG"));
|
||||
g12 = new BulletConfig().setItem(EnumAmmo.G12).setProjectiles(8).setSpread(0.05F).setRicochetAngle(15).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0xB52B2B, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA"));
|
||||
g12_slug = new BulletConfig().setItem(EnumAmmo.G12_SLUG).setSpread(0.0F).setRicochetAngle(25).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x393939, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_SLUG"));
|
||||
g12_flechette = new BulletConfig().setItem(EnumAmmo.G12_FLECHETTE).setProjectiles(8).setSpread(0.025F).setRicochetAngle(5).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x3C80F0, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_FLECHETTE"));
|
||||
|
||||
@ -20,10 +20,10 @@ import net.minecraft.item.ItemStack;
|
||||
|
||||
public class XFactoryBlackPowder {
|
||||
|
||||
public static BulletConfig stone = new BulletConfig().setItem(EnumAmmo.STONE).setSpread(0.025F).setRicochetAngle(15);
|
||||
public static BulletConfig flint = new BulletConfig().setItem(EnumAmmo.STONE_AP).setSpread(0.01F).setRicochetAngle(5).setDoesPenetrate(true).setDamage(1.75F);
|
||||
public static BulletConfig iron = new BulletConfig().setItem(EnumAmmo.STONE_IRON).setSpread(0F).setRicochetAngle(90).setRicochetCount(5).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(2F);
|
||||
public static BulletConfig shot = new BulletConfig().setItem(EnumAmmo.STONE_SHOT).setSpread(0.1F).setRicochetAngle(45).setProjectiles(6, 6).setDamage(0.5F);
|
||||
public static BulletConfig stone = new BulletConfig().setItem(EnumAmmo.STONE).setBlackPowder(true).setSpread(0.025F).setRicochetAngle(15);
|
||||
public static BulletConfig flint = new BulletConfig().setItem(EnumAmmo.STONE_AP).setBlackPowder(true).setSpread(0.01F).setRicochetAngle(5).setDoesPenetrate(true).setDamage(1.75F);
|
||||
public static BulletConfig iron = new BulletConfig().setItem(EnumAmmo.STONE_IRON).setBlackPowder(true).setSpread(0F).setRicochetAngle(90).setRicochetCount(5).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(2F);
|
||||
public static BulletConfig shot = new BulletConfig().setItem(EnumAmmo.STONE_SHOT).setBlackPowder(true).setSpread(0.1F).setRicochetAngle(45).setProjectiles(6, 6).setDamage(0.5F);
|
||||
|
||||
public static void init() {
|
||||
|
||||
|
||||
78
src/main/java/com/hbm/particle/ParticleBlackPowderSmoke.java
Normal file
78
src/main/java/com/hbm/particle/ParticleBlackPowderSmoke.java
Normal file
@ -0,0 +1,78 @@
|
||||
package com.hbm.particle;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
import com.hbm.main.ModEventHandlerClient;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class ParticleBlackPowderSmoke extends EntityFXRotating {
|
||||
|
||||
public float hue;
|
||||
|
||||
public ParticleBlackPowderSmoke(World world, double x, double y, double z, float scale) {
|
||||
super(world, x, y, z);
|
||||
particleIcon = ModEventHandlerClient.particleBase;
|
||||
this.particleMaxAge = 30 + rand.nextInt(15);
|
||||
this.particleScale = scale * 0.9F + rand.nextFloat() * 0.2F;
|
||||
|
||||
this.particleGravity = 0F;
|
||||
|
||||
this.hue = 20F + rand.nextFloat() * 20F;
|
||||
Color color = Color.getHSBColor(hue / 255F, 1F, 1F);
|
||||
this.particleRed = color.getRed() / 255F;
|
||||
this.particleGreen = color.getGreen() / 255F;
|
||||
this.particleBlue = color.getBlue() / 255F;
|
||||
|
||||
this.noClip = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate() {
|
||||
this.prevPosX = this.posX;
|
||||
this.prevPosY = this.posY;
|
||||
this.prevPosZ = this.posZ;
|
||||
|
||||
this.particleAge++;
|
||||
|
||||
if(this.particleAge >= this.particleMaxAge) {
|
||||
this.setDead();
|
||||
}
|
||||
|
||||
this.motionY -= particleGravity;
|
||||
this.prevRotationPitch = this.rotationPitch;
|
||||
|
||||
float ageScaled = (float) this.particleAge / (float) this.particleMaxAge;
|
||||
this.rotationPitch += (1 - ageScaled) * 2 * ((this.getEntityId() % 2) - 0.5);
|
||||
|
||||
this.motionX *= 0.65D;
|
||||
this.motionY *= 0.65D;
|
||||
this.motionZ *= 0.65D;
|
||||
|
||||
this.moveEntity(this.motionX, this.motionY, this.motionZ);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderParticle(Tessellator tess, float interp, float sX, float sY, float sZ, float dX, float dZ) {
|
||||
|
||||
double ageScaled = (double) (this.particleAge + interp) / (double) this.particleMaxAge;
|
||||
|
||||
Color color = Color.getHSBColor(hue / 255F, Math.max(1F - (float) ageScaled * 2F, 0), MathHelper.clamp_float(1.25F - (float) ageScaled * 2F, 0.7F, 1F));
|
||||
this.particleRed = color.getRed() / 255F;
|
||||
this.particleGreen = color.getGreen() / 255F;
|
||||
this.particleBlue = color.getBlue() / 255F;
|
||||
|
||||
this.particleAlpha = (float) Math.pow(1 - Math.min(ageScaled, 1), 0.25);
|
||||
|
||||
tess.setColorRGBA_F(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha * 0.25F);
|
||||
tess.setNormal(0.0F, 1.0F, 0.0F);
|
||||
|
||||
double scale = (0.25 + ageScaled + (this.particleAge + interp) * 0.025) * this.particleScale;
|
||||
renderParticleRotated(tess, interp, sX, sY, sZ, dX, dZ, scale);
|
||||
}
|
||||
}
|
||||
51
src/main/java/com/hbm/particle/ParticleBlackPowderSpark.java
Normal file
51
src/main/java/com/hbm/particle/ParticleBlackPowderSpark.java
Normal file
@ -0,0 +1,51 @@
|
||||
package com.hbm.particle;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.particle.EntityFX;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class ParticleBlackPowderSpark extends EntityFX {
|
||||
|
||||
public ParticleBlackPowderSpark(World world, double x, double y, double z, double mX, double mY, double mZ) {
|
||||
super(world, x, y, z, mX, mY, mZ);
|
||||
|
||||
this.motionX = mX;
|
||||
this.motionY = mY;
|
||||
this.motionZ = mZ;
|
||||
|
||||
float f = this.rand.nextFloat() * 0.1F + 0.2F;
|
||||
this.particleRed = f + 0.7F;
|
||||
this.particleGreen = f + 0.5F;
|
||||
this.particleBlue = f;
|
||||
this.setParticleTextureIndex(0);
|
||||
this.setSize(0.02F, 0.02F);
|
||||
this.particleScale *= this.rand.nextFloat() * 0.6F + 0.5F;
|
||||
this.particleMaxAge = 15 + this.rand.nextInt(5);
|
||||
|
||||
this.particleGravity = 0.01F;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate() {
|
||||
this.prevPosX = this.posX;
|
||||
this.prevPosY = this.posY;
|
||||
this.prevPosZ = this.posZ;
|
||||
this.motionY -= particleGravity;
|
||||
this.moveEntity(this.motionX, this.motionY, this.motionZ);
|
||||
this.motionX *= 0.95D;
|
||||
this.motionY *= 0.95D;
|
||||
this.motionZ *= 0.95D;
|
||||
|
||||
if(this.particleMaxAge-- <= 0) {
|
||||
this.setDead();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int getBrightnessForRender(float interp) {
|
||||
return 15728880;
|
||||
}
|
||||
}
|
||||
67
src/main/java/com/hbm/particle/helper/BlackPowderHelper.java
Normal file
67
src/main/java/com/hbm/particle/helper/BlackPowderHelper.java
Normal file
@ -0,0 +1,67 @@
|
||||
package com.hbm.particle.helper;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import com.hbm.particle.ParticleBlackPowderSmoke;
|
||||
import com.hbm.particle.ParticleBlackPowderSpark;
|
||||
import com.hbm.util.Vec3NT;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.texture.TextureManager;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BlackPowderHelper implements IParticleCreator {
|
||||
|
||||
public static void composeEffect(World world, double x, double y, double z, double headingX, double headingY, double headingZ, int cloudCount, float cloudScale, float cloudSpeedMult, int sparkCount, float sparkSpeedMult) {
|
||||
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setString("type", "blackPowder");
|
||||
data.setInteger("cloudCount", cloudCount);
|
||||
data.setFloat("cloudScale", cloudScale);
|
||||
data.setFloat("cloudSpeedMult", cloudSpeedMult);
|
||||
data.setInteger("sparkCount", sparkCount);
|
||||
data.setFloat("sparkSpeedMult", sparkSpeedMult);
|
||||
data.setDouble("hX", headingX);
|
||||
data.setDouble("hY", headingY);
|
||||
data.setDouble("hZ", headingZ);
|
||||
IParticleCreator.sendPacket(world, x, y, z, 200, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void makeParticle(World world, EntityPlayer player, TextureManager texman, Random rand, double x, double y, double z, NBTTagCompound data) {
|
||||
|
||||
double headingX = data.getDouble("hX");
|
||||
double headingY = data.getDouble("hY");
|
||||
double headingZ = data.getDouble("hZ");
|
||||
int cloudCount = data.getInteger("cloudCount");
|
||||
float cloudScale = data.getFloat("cloudScale");
|
||||
float cloudSpeedMult = data.getFloat("cloudSpeedMult");
|
||||
int sparkCount = data.getInteger("sparkCount");
|
||||
float sparkSpeedMult = data.getFloat("sparkSpeedMult");
|
||||
|
||||
Vec3NT heading = new Vec3NT(headingX, headingY, headingZ).normalizeSelf();
|
||||
|
||||
for(int i = 0; i < cloudCount; i++) {
|
||||
ParticleBlackPowderSmoke particle = new ParticleBlackPowderSmoke(world, x, y, z, cloudScale);
|
||||
double speedMult = 0.85 + rand.nextDouble() * 0.3;
|
||||
particle.motionX = heading.xCoord * cloudSpeedMult * speedMult + rand.nextGaussian() * 0.05;
|
||||
particle.motionY = heading.yCoord * cloudSpeedMult * speedMult + rand.nextGaussian() * 0.05;
|
||||
particle.motionZ = heading.zCoord * cloudSpeedMult * speedMult + rand.nextGaussian() * 0.05;
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(particle);
|
||||
}
|
||||
|
||||
for(int i = 0; i < sparkCount; i++) {
|
||||
double speedMult = 0.85 + rand.nextDouble() * 0.3;
|
||||
ParticleBlackPowderSpark particle = new ParticleBlackPowderSpark(world, x, y, z,
|
||||
heading.xCoord * sparkSpeedMult * speedMult + rand.nextGaussian() * 0.02,
|
||||
heading.yCoord * sparkSpeedMult * speedMult + rand.nextGaussian() * 0.02,
|
||||
heading.zCoord * sparkSpeedMult * speedMult + rand.nextGaussian() * 0.02);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(particle);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -13,6 +13,13 @@ import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
/**
|
||||
* Does two cool things:
|
||||
* <br>- requires no more additions to ClientProxy which is already bloated, full of other stuff and cumbersome to work with
|
||||
* <br>- being a separate class, we can get as messy as we want without affecting other particles, so effects can overall have more logic behind them without turning into a big ugly clump
|
||||
* @author hbm
|
||||
*
|
||||
*/
|
||||
public interface IParticleCreator {
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
|
||||
@ -11,5 +11,6 @@ public class ParticleCreators {
|
||||
particleCreators.put("casingNT", new CasingCreator());
|
||||
particleCreators.put("flamethrower", new FlameCreator());
|
||||
particleCreators.put("explosionSmall", new ExplosionSmallCreator());
|
||||
particleCreators.put("blackPowder", new BlackPowderHelper());
|
||||
}
|
||||
}
|
||||
|
||||
BIN
src/main/resources/assets/hbm/sounds/block/warnAPUFire.ogg
Normal file
BIN
src/main/resources/assets/hbm/sounds/block/warnAPUFire.ogg
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user