package com.hbm.handler.guncfg; import java.util.ArrayList; import com.hbm.entity.projectile.EntityBulletBase; import com.hbm.explosion.ExplosionLarge; import com.hbm.explosion.ExplosionNT; import com.hbm.explosion.ExplosionNT.ExAttrib; import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.interfaces.IBulletImpactBehavior; import com.hbm.interfaces.IBulletUpdateBehavior; import com.hbm.items.ModItems; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.render.util.RenderScreenOverlay.Crosshair; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.nbt.NBTTagCompound; public class GunFatmanFactory { public static GunConfiguration getFatmanConfig() { GunConfiguration config = new GunConfiguration(); config.rateOfFire = 20; config.roundsPerCycle = 1; config.gunMode = GunConfiguration.MODE_NORMAL; config.firingMode = GunConfiguration.FIRE_MANUAL; config.reloadDuration = 120; config.firingDuration = 0; config.ammoCap = 1; config.reloadType = GunConfiguration.RELOAD_FULL; config.allowsInfinity = true; config.crosshair = Crosshair.L_CIRCUMFLEX; config.firingSound = "hbm:weapon.fatmanShoot"; config.reloadSound = GunConfiguration.RSOUND_FATMAN; config.reloadSoundEnd = false; config.name = "M-42 Tactical Nuclear Catapult"; config.manufacturer = "Fort Strong"; config.config = new ArrayList(); config.config.add(BulletConfigSyncingUtil.NUKE_NORMAL); config.config.add(BulletConfigSyncingUtil.NUKE_LOW); config.config.add(BulletConfigSyncingUtil.NUKE_HIGH); config.config.add(BulletConfigSyncingUtil.NUKE_TOTS); config.config.add(BulletConfigSyncingUtil.NUKE_SAFE); config.config.add(BulletConfigSyncingUtil.NUKE_PUMPKIN); config.durability = 1000; return config; } public static GunConfiguration getMIRVConfig() { GunConfiguration config = getFatmanConfig(); config.name = "M-42 Experimental MIRV"; config.manufacturer = "Fort Strong"; config.config = new ArrayList(); config.config.add(BulletConfigSyncingUtil.NUKE_MIRV_NORMAL); config.config.add(BulletConfigSyncingUtil.NUKE_MIRV_LOW); config.config.add(BulletConfigSyncingUtil.NUKE_MIRV_HIGH); config.config.add(BulletConfigSyncingUtil.NUKE_MIRV_SAFE); config.config.add(BulletConfigSyncingUtil.NUKE_MIRV_SPECIAL); config.durability = 1000; return config; } public static GunConfiguration getBELConfig() { GunConfiguration config = getFatmanConfig(); config.name = "Balefire Egg Launcher"; config.manufacturer = "Fort Strong"; config.config = new ArrayList(); config.config.add(BulletConfigSyncingUtil.NUKE_AMAT); return config; } public static GunConfiguration getProtoConfig() { GunConfiguration config = new GunConfiguration(); config.rateOfFire = 20; config.roundsPerCycle = 8; config.gunMode = GunConfiguration.MODE_NORMAL; config.firingMode = GunConfiguration.FIRE_MANUAL; config.reloadDuration = 120; config.firingDuration = 0; config.ammoCap = 8; config.reloadType = GunConfiguration.RELOAD_FULL; config.allowsInfinity = true; config.crosshair = Crosshair.L_CIRCUMFLEX; config.firingSound = "hbm:weapon.fatmanShoot"; config.reloadSound = GunConfiguration.RSOUND_FATMAN; config.reloadSoundEnd = false; config.name = "M-42 Tactical Nuclear Catapult"; config.manufacturer = "Fort Strong"; config.config = new ArrayList(); config.config.add(BulletConfigSyncingUtil.NUKE_PROTO_NORMAL); config.config.add(BulletConfigSyncingUtil.NUKE_PROTO_LOW); config.config.add(BulletConfigSyncingUtil.NUKE_PROTO_HIGH); config.config.add(BulletConfigSyncingUtil.NUKE_PROTO_TOTS); config.config.add(BulletConfigSyncingUtil.NUKE_PROTO_SAFE); config.config.add(BulletConfigSyncingUtil.NUKE_PROTO_PUMPKIN); config.durability = 1000; return config; } public static BulletConfiguration getNukeConfig() { BulletConfiguration bullet = BulletConfigFactory.standardNukeConfig(); bullet.ammo = ModItems.ammo_nuke; bullet.bImpact = new IBulletImpactBehavior() { @Override public void behaveBlockHit(EntityBulletBase bullet, int x, int y, int z) { BulletConfigFactory.nuclearExplosion(bullet, x, y, z, 3); } }; return bullet; } public static BulletConfiguration getNukeLowConfig() { BulletConfiguration bullet = BulletConfigFactory.standardNukeConfig(); bullet.ammo = ModItems.ammo_nuke_low; bullet.bImpact = new IBulletImpactBehavior() { @Override public void behaveBlockHit(EntityBulletBase bullet, int x, int y, int z) { BulletConfigFactory.nuclearExplosion(bullet, x, y, z, 2); } }; return bullet; } public static BulletConfiguration getNukeHighConfig() { BulletConfiguration bullet = BulletConfigFactory.standardNukeConfig(); bullet.ammo = ModItems.ammo_nuke_high; bullet.bImpact = new IBulletImpactBehavior() { @Override public void behaveBlockHit(EntityBulletBase bullet, int x, int y, int z) { BulletConfigFactory.nuclearExplosion(bullet, x, y, z, 4); } }; return bullet; } public static BulletConfiguration getNukeTotsConfig() { BulletConfiguration bullet = BulletConfigFactory.standardNukeConfig(); bullet.ammo = ModItems.ammo_nuke_tots; bullet.bulletsMin = 8; bullet.bulletsMax = 8; bullet.spread = 0.1F; bullet.style = bullet.STYLE_GRENADE; bullet.bImpact = new IBulletImpactBehavior() { @Override public void behaveBlockHit(EntityBulletBase bullet, int x, int y, int z) { BulletConfigFactory.nuclearExplosion(bullet, x, y, z, 1); } }; return bullet; } public static BulletConfiguration getNukeSafeConfig() { BulletConfiguration bullet = BulletConfigFactory.standardNukeConfig(); bullet.ammo = ModItems.ammo_nuke_safe; bullet.bImpact = new IBulletImpactBehavior() { @Override public void behaveBlockHit(EntityBulletBase bullet, int x, int y, int z) { BulletConfigFactory.nuclearExplosion(bullet, x, y, z, 0); } }; return bullet; } public static BulletConfiguration getNukePumpkinConfig() { BulletConfiguration bullet = BulletConfigFactory.standardNukeConfig(); bullet.ammo = ModItems.ammo_nuke_pumpkin; bullet.explosive = 10F; bullet.bImpact = new IBulletImpactBehavior() { @Override public void behaveBlockHit(EntityBulletBase bullet, int x, int y, int z) { if(bullet.worldObj.isRemote) { double posX = bullet.posX; double posY = bullet.posY + 0.5; double posZ = bullet.posZ; if(y >= 0) { posX = x + 0.5; posY = y + 1.5; posZ = z + 0.5; } ExplosionLarge.spawnParticles(bullet.worldObj, posX, posY, posZ, 45); } } }; return bullet; } public static BulletConfiguration getMirvConfig() { BulletConfiguration bullet = getNukeConfig(); bullet.ammo = ModItems.ammo_mirv; bullet.style = BulletConfiguration.STYLE_MIRV; bullet.velocity *= 3; bullet.bUpdate = new IBulletUpdateBehavior() { @Override public void behaveUpdate(EntityBulletBase bullet) { if(bullet.worldObj.isRemote) return; if(bullet.ticksExisted == 15) { bullet.setDead(); for(int i = 0; i < 6; i++) { EntityBulletBase nuke = new EntityBulletBase(bullet.worldObj, BulletConfigSyncingUtil.NUKE_NORMAL); nuke.setPosition(bullet.posX, bullet.posY, bullet.posZ); double mod = 0.1D; nuke.motionX = bullet.worldObj.rand.nextGaussian() * mod; nuke.motionY = -0.1D; nuke.motionZ = bullet.worldObj.rand.nextGaussian() * mod; bullet.worldObj.spawnEntityInWorld(nuke); } } } }; return bullet; } public static BulletConfiguration getMirvLowConfig() { BulletConfiguration bullet = getNukeLowConfig(); bullet.ammo = ModItems.ammo_mirv_low; bullet.style = BulletConfiguration.STYLE_MIRV; bullet.velocity *= 3; bullet.bUpdate = new IBulletUpdateBehavior() { @Override public void behaveUpdate(EntityBulletBase bullet) { if(bullet.worldObj.isRemote) return; if(bullet.ticksExisted == 15) { bullet.setDead(); for(int i = 0; i < 6; i++) { EntityBulletBase nuke = new EntityBulletBase(bullet.worldObj, BulletConfigSyncingUtil.NUKE_LOW); nuke.setPosition(bullet.posX, bullet.posY, bullet.posZ); double mod = 0.1D; nuke.motionX = bullet.worldObj.rand.nextGaussian() * mod; nuke.motionY = -0.1D; nuke.motionZ = bullet.worldObj.rand.nextGaussian() * mod; bullet.worldObj.spawnEntityInWorld(nuke); } } } }; return bullet; } public static BulletConfiguration getMirvHighConfig() { BulletConfiguration bullet = getNukeHighConfig(); bullet.ammo = ModItems.ammo_mirv_high; bullet.style = BulletConfiguration.STYLE_MIRV; bullet.velocity *= 3; bullet.bUpdate = new IBulletUpdateBehavior() { @Override public void behaveUpdate(EntityBulletBase bullet) { if(bullet.worldObj.isRemote) return; if(bullet.ticksExisted == 15) { bullet.setDead(); for(int i = 0; i < 6; i++) { EntityBulletBase nuke = new EntityBulletBase(bullet.worldObj, BulletConfigSyncingUtil.NUKE_HIGH); nuke.setPosition(bullet.posX, bullet.posY, bullet.posZ); double mod = 0.1D; nuke.motionX = bullet.worldObj.rand.nextGaussian() * mod; nuke.motionY = -0.1D; nuke.motionZ = bullet.worldObj.rand.nextGaussian() * mod; bullet.worldObj.spawnEntityInWorld(nuke); } } } }; return bullet; } public static BulletConfiguration getMirvSafeConfig() { BulletConfiguration bullet = getNukeSafeConfig(); bullet.ammo = ModItems.ammo_mirv_safe; bullet.style = BulletConfiguration.STYLE_MIRV; bullet.velocity *= 3; bullet.bUpdate = new IBulletUpdateBehavior() { @Override public void behaveUpdate(EntityBulletBase bullet) { if(bullet.worldObj.isRemote) return; if(bullet.ticksExisted == 15) { bullet.setDead(); for(int i = 0; i < 6; i++) { EntityBulletBase nuke = new EntityBulletBase(bullet.worldObj, BulletConfigSyncingUtil.NUKE_SAFE); nuke.setPosition(bullet.posX, bullet.posY, bullet.posZ); double mod = 0.1D; nuke.motionX = bullet.worldObj.rand.nextGaussian() * mod; nuke.motionY = -0.1D; nuke.motionZ = bullet.worldObj.rand.nextGaussian() * mod; bullet.worldObj.spawnEntityInWorld(nuke); } } } }; return bullet; } public static BulletConfiguration getMirvSpecialConfig() { BulletConfiguration bullet = getNukeConfig(); bullet.ammo = ModItems.ammo_mirv_special; bullet.style = BulletConfiguration.STYLE_MIRV; bullet.velocity *= 3; bullet.bUpdate = new IBulletUpdateBehavior() { @Override public void behaveUpdate(EntityBulletBase bullet) { if(bullet.worldObj.isRemote) return; if(bullet.ticksExisted == 15) { bullet.setDead(); for(int i = 0; i < 24; i++) { EntityBulletBase nuke = null; if(i < 6) nuke = new EntityBulletBase(bullet.worldObj, BulletConfigSyncingUtil.NUKE_LOW); else if(i < 12) nuke = new EntityBulletBase(bullet.worldObj, BulletConfigSyncingUtil.NUKE_TOTS); else if(i < 18) nuke = new EntityBulletBase(bullet.worldObj, BulletConfigSyncingUtil.NUKE_NORMAL); else nuke = new EntityBulletBase(bullet.worldObj, BulletConfigSyncingUtil.NUKE_AMAT); nuke.setPosition(bullet.posX, bullet.posY, bullet.posZ); double mod = 0.25D; nuke.motionX = bullet.worldObj.rand.nextGaussian() * mod; nuke.motionY = -0.1D; nuke.motionZ = bullet.worldObj.rand.nextGaussian() * mod; bullet.worldObj.spawnEntityInWorld(nuke); } } } }; return bullet; } public static BulletConfiguration getBalefireConfig() { BulletConfiguration bullet = BulletConfigFactory.standardNukeConfig(); bullet.ammo = ModItems.gun_bf_ammo; bullet.style = BulletConfiguration.STYLE_BF; bullet.bImpact = new IBulletImpactBehavior() { public void behaveBlockHit(EntityBulletBase bullet, int x, int y, int z) { if(!bullet.worldObj.isRemote) { double posX = bullet.posX; double posY = bullet.posY + 0.5; double posZ = bullet.posZ; if(y >= 0) { posX = x + 0.5; posY = y + 1.5; posZ = z + 0.5; } bullet.worldObj.playSoundEffect(x, y, z, "hbm:weapon.mukeExplosion", 15.0F, 1.0F); ExplosionLarge.spawnShrapnels(bullet.worldObj, posX, posY, posZ, 25); ExplosionNT exp = new ExplosionNT(bullet.worldObj, null, posX, posY, posZ, 15F) .addAttrib(ExAttrib.BALEFIRE) .addAttrib(ExAttrib.NOPARTICLE) .addAttrib(ExAttrib.NOSOUND) .addAttrib(ExAttrib.NODROP) .addAttrib(ExAttrib.NOHURT); exp.doExplosionA(); exp.doExplosionB(false); NBTTagCompound data = new NBTTagCompound(); data.setString("type", "muke"); data.setBoolean("balefire", true); PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x, y + 0.5, z), new TargetPoint(bullet.dimension, bullet.posX, bullet.posY, bullet.posZ, 250)); } } }; return bullet; } }