package com.hbm.handler.guncfg; import java.util.ArrayList; import com.hbm.entity.effect.EntitySpear; import com.hbm.entity.projectile.EntityBulletBase; import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.interfaces.IBulletImpactBehavior; import com.hbm.interfaces.IBulletRicochetBehavior; import com.hbm.interfaces.IBulletUpdateBehavior; import com.hbm.items.ModItems; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationKeyframe; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay.Crosshair; import net.minecraft.block.material.Material; import net.minecraft.world.World; public class GunRocketFactory { public static GunConfiguration getGustavConfig() { GunConfiguration config = new GunConfiguration(); config.rateOfFire = 30; config.roundsPerCycle = 1; config.gunMode = GunConfiguration.MODE_NORMAL; config.firingMode = GunConfiguration.FIRE_MANUAL; config.reloadDuration = 30; config.firingDuration = 0; config.ammoCap = 1; config.reloadType = GunConfiguration.RELOAD_SINGLE; config.allowsInfinity = true; config.crosshair = Crosshair.L_CIRCUMFLEX; config.firingSound = "hbm:weapon.rpgShoot"; config.reloadSound = GunConfiguration.RSOUND_LAUNCHER; config.reloadSoundEnd = false; config.name = "Carl Gustav Recoilless Rifle M1"; config.manufacturer = "Saab Bofors Dynamics"; config.comment.add("Fun fact of the day: Recoilless"); config.comment.add("rifles don't actually fire rockets."); config.config = new ArrayList(); config.config.add(BulletConfigSyncingUtil.ROCKET_NORMAL); config.config.add(BulletConfigSyncingUtil.ROCKET_HE); config.config.add(BulletConfigSyncingUtil.ROCKET_INCENDIARY); config.config.add(BulletConfigSyncingUtil.ROCKET_PHOSPHORUS); config.config.add(BulletConfigSyncingUtil.ROCKET_SHRAPNEL); config.config.add(BulletConfigSyncingUtil.ROCKET_EMP); config.config.add(BulletConfigSyncingUtil.ROCKET_GLARE); config.config.add(BulletConfigSyncingUtil.ROCKET_TOXIC); config.config.add(BulletConfigSyncingUtil.ROCKET_CANISTER); config.config.add(BulletConfigSyncingUtil.ROCKET_SLEEK); config.config.add(BulletConfigSyncingUtil.ROCKET_NUKE); config.config.add(BulletConfigSyncingUtil.ROCKET_CHAINSAW); config.durability = 140; return config; } public static GunConfiguration getQuadroConfig() { GunConfiguration config = new GunConfiguration(); config.rateOfFire = 5; config.roundsPerCycle = 1; config.gunMode = GunConfiguration.MODE_NORMAL; config.firingMode = GunConfiguration.FIRE_MANUAL; config.reloadDuration = 100; config.firingDuration = 0; config.ammoCap = 4; config.reloadType = GunConfiguration.RELOAD_FULL; config.allowsInfinity = true; config.crosshair = Crosshair.L_CIRCUMFLEX; config.firingSound = "hbm:weapon.rpgShoot"; config.reloadSound = "hbm:weapon.quadroReload"; config.reloadSoundEnd = false; config.animations.put(AnimType.CYCLE, new BusAnimation() .addBus("QUADRO_RECOIL", new BusAnimationSequence() .addKeyframe(new BusAnimationKeyframe(0, 0, -0.5, 50)) .addKeyframe(new BusAnimationKeyframe(0, 0, 0, 50)) ) ); config.animations.put(AnimType.RELOAD, new BusAnimation() .addBus("QUADRO_RELOAD_ROTATE", new BusAnimationSequence() .addKeyframe(new BusAnimationKeyframe(0, 0, 60, 750)) .addKeyframe(new BusAnimationKeyframe(0, 0, 60, 3500)) .addKeyframe(new BusAnimationKeyframe(0, 0, 0, 750)) ) .addBus("QUADRO_RELOAD_PUSH", new BusAnimationSequence() .addKeyframe(new BusAnimationKeyframe(-1, -1, 0, 0)) .addKeyframe(new BusAnimationKeyframe(-1, -1, 0, 750)) .addKeyframe(new BusAnimationKeyframe(-1, 0, 0, 500)) .addKeyframe(new BusAnimationKeyframe(0, 0, 0, 3000)) .addKeyframe(new BusAnimationKeyframe(0, 0, 0, 750)) ) ); config.name = "OpenQuadro Guided Man-Portable Missile Launcher"; config.manufacturer = "Open Mann Co."; config.comment.add("For the next three hundred years, people who needed to get to the second"); config.comment.add("floor used the only method available to them, which was rocket jumping."); config.comment.add("This persisted until 1857, when the young bearded inventor named"); config.comment.add("President Abraham Lincoln invented stairs."); config.config = new ArrayList(); config.config.add(BulletConfigSyncingUtil.ROCKET_NORMAL_LASER); config.config.add(BulletConfigSyncingUtil.ROCKET_HE_LASER); config.config.add(BulletConfigSyncingUtil.ROCKET_INCENDIARY_LASER); config.config.add(BulletConfigSyncingUtil.ROCKET_PHOSPHORUS_LASER); config.config.add(BulletConfigSyncingUtil.ROCKET_SHRAPNEL_LASER); config.config.add(BulletConfigSyncingUtil.ROCKET_EMP_LASER); config.config.add(BulletConfigSyncingUtil.ROCKET_GLARE_LASER); config.config.add(BulletConfigSyncingUtil.ROCKET_TOXIC_LASER); config.config.add(BulletConfigSyncingUtil.ROCKET_CANISTER); config.config.add(BulletConfigSyncingUtil.ROCKET_SLEEK_LASER); config.config.add(BulletConfigSyncingUtil.ROCKET_NUKE_LASER); config.config.add(BulletConfigSyncingUtil.ROCKET_CHAINSAW_LASER); config.durability = 500; return config; } public static GunConfiguration getKarlConfig() { GunConfiguration config = getGustavConfig(); config.reloadDuration = 20; config.name = "M1 Karl-Gerät"; config.manufacturer = "???"; config.comment.clear(); config.config = new ArrayList(); config.config.add(BulletConfigSyncingUtil.ROCKET_HE); config.config.add(BulletConfigSyncingUtil.ROCKET_EMP); config.config.add(BulletConfigSyncingUtil.ROCKET_SLEEK); config.config.add(BulletConfigSyncingUtil.ROCKET_TOXIC); config.config.add(BulletConfigSyncingUtil.ROCKET_CANISTER); config.config.add(BulletConfigSyncingUtil.ROCKET_NUKE); config.config.add(BulletConfigSyncingUtil.ROCKET_CHAINSAW); config.config.add(BulletConfigSyncingUtil.ROCKET_ERROR); config.durability = 500; return config; } public static GunConfiguration getPanzConfig() { GunConfiguration config = getGustavConfig(); config.reloadDuration = 25; config.hasSights = true; config.name = "Raketenpanzerbüchse 54"; config.manufacturer = "Enzinger Union"; config.comment.clear(); config.comment.add("Panzer-Shrek"); config.durability = 260; return config; } public static BulletConfiguration getRocketConfig() { BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); bullet.ammo = ModItems.ammo_rocket; bullet.dmgMin = 10; bullet.dmgMax = 15; bullet.explosive = 4F; bullet.trail = 0; return bullet; } public static BulletConfiguration getRocketHEConfig() { BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); bullet.ammo = ModItems.ammo_rocket_he; bullet.dmgMin = 10; bullet.dmgMax = 15; bullet.wear = 15; bullet.explosive = 6.5F; bullet.trail = 1; return bullet; } public static BulletConfiguration getRocketIncendiaryConfig() { BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); bullet.ammo = ModItems.ammo_rocket_incendiary; bullet.dmgMin = 10; bullet.dmgMax = 15; bullet.wear = 15; bullet.explosive = 4F; bullet.incendiary = 5; bullet.trail = 2; return bullet; } public static BulletConfiguration getRocketEMPConfig() { BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); bullet.ammo = ModItems.ammo_rocket_emp; bullet.dmgMin = 10; bullet.dmgMax = 15; bullet.explosive = 2.5F; bullet.emp = 10; bullet.trail = 4; return bullet; } public static BulletConfiguration getRocketSleekConfig() { BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); bullet.ammo = ModItems.ammo_rocket_sleek; bullet.dmgMin = 10; bullet.dmgMax = 15; bullet.explosive = 10F; bullet.trail = 6; bullet.gravity = 0; bullet.jolt = 6.5D; return bullet; } public static BulletConfiguration getRocketShrapnelConfig() { BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); bullet.ammo = ModItems.ammo_rocket_shrapnel; bullet.dmgMin = 10; bullet.dmgMax = 15; bullet.explosive = 4F; bullet.shrapnel = 25; bullet.trail = 3; return bullet; } public static BulletConfiguration getRocketGlareConfig() { BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); bullet.ammo = ModItems.ammo_rocket_glare; bullet.velocity = 5.0F; bullet.dmgMin = 10; bullet.dmgMax = 15; bullet.wear = 20; bullet.explosive = 4F; bullet.incendiary = 5; bullet.trail = 5; return bullet; } public static BulletConfiguration getRocketNukeConfig() { BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); bullet.ammo = ModItems.ammo_rocket_nuclear; bullet.velocity = 1.5F; bullet.dmgMin = 10; bullet.dmgMax = 15; bullet.wear = 35; bullet.explosive = 0; bullet.incendiary = 0; bullet.trail = 7; 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 getRocketChlorineConfig() { BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); bullet.ammo = ModItems.ammo_rocket_toxic; bullet.velocity = 1.5F; bullet.dmgMin = 10; bullet.dmgMax = 15; bullet.wear = 10; bullet.explosive = 0; bullet.chlorine = 50; bullet.trail = 7; return bullet; } public static BulletConfiguration getRocketRPCConfig() { BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); bullet.ammo = ModItems.ammo_rocket_rpc; bullet.velocity = 3.0F; bullet.dmgMin = 20; bullet.dmgMax = 25; bullet.wear = 15; bullet.explosive = 0; bullet.incendiary = 0; bullet.trail = 8; bullet.gravity = 0.000D; bullet.ricochetAngle = 90; bullet.LBRC = 100; bullet.doesPenetrate = true; bullet.bRicochet = new IBulletRicochetBehavior() { public void behaveBlockRicochet(EntityBulletBase bullet, int bX, int bY, int bZ) { World worldObj = bullet.worldObj; if(!worldObj.isRemote && (worldObj.getBlock(bX, bY, bZ).getMaterial() == Material.wood || worldObj.getBlock(bX, bY, bZ).getMaterial() == Material.plants || worldObj.getBlock(bX, bY, bZ).getMaterial() == Material.glass || worldObj.getBlock(bX, bY, bZ).getMaterial() == Material.leaves)) worldObj.func_147480_a(bX, bY, bZ, false);} }; return bullet; } public static BulletConfiguration getRocketPhosphorusConfig() { BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); bullet.ammo = ModItems.ammo_rocket_phosphorus; bullet.dmgMin = 10; bullet.dmgMax = 15; bullet.wear = 15; bullet.explosive = 4F; bullet.incendiary = 5; bullet.trail = 9; bullet.bImpact = BulletConfigFactory.getPhosphorousEffect(10, 60 * 20, 100, 0.5D, 1F); return bullet; } public static BulletConfiguration getRocketCanisterConfig() { BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); bullet.ammo = ModItems.ammo_rocket_canister; bullet.dmgMin = 10; bullet.dmgMax = 15; bullet.explosive = 2F; bullet.trail = 0; bullet.bUpdate = new IBulletUpdateBehavior() { @Override public void behaveUpdate(EntityBulletBase bullet) { if(!bullet.worldObj.isRemote) { if(bullet.ticksExisted > 10) { bullet.setDead(); for(int i = 0; i < 50; i++) { EntityBulletBase bolt = new EntityBulletBase(bullet.worldObj, BulletConfigSyncingUtil.M44_AP); bolt.setPosition(bullet.posX, bullet.posY, bullet.posZ); bolt.setThrowableHeading(bullet.motionX, bullet.motionY, bullet.motionZ, 0.25F, 0.1F); bullet.worldObj.spawnEntityInWorld(bolt); } } } } }; return bullet; } public static BulletConfiguration getRocketErrorConfig() { BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); bullet.ammo = ModItems.ammo_rocket_digamma; bullet.velocity = 0.5F; bullet.dmgMin = 10; bullet.dmgMax = 15; bullet.wear = 35; bullet.explosive = 0; bullet.incendiary = 0; bullet.trail = 7; bullet.bImpact = new IBulletImpactBehavior() { @Override public void behaveBlockHit(EntityBulletBase bullet, int x, int y, int z) { if(bullet.worldObj.isRemote) return; EntitySpear spear = new EntitySpear(bullet.worldObj); spear.posX = bullet.posX; spear.posZ = bullet.posZ; spear.posY = bullet.posY + 100; bullet.worldObj.spawnEntityInWorld(spear); /*for(int i = 0; i < 250; i++) { double ix = bullet.posX + bullet.worldObj.rand.nextGaussian() * 15; double iy = bullet.posY + bullet.worldObj.rand.nextGaussian() * 2; double iz = bullet.posZ + bullet.worldObj.rand.nextGaussian() * 15; ExAttrib at = Vec3.createVectorHelper(ix - bullet.posX, 0, iz - bullet.posZ).lengthVector() < 20 ? ExAttrib.DIGAMMA_CIRCUIT : ExAttrib.DIGAMMA; new ExplosionNT(bullet.worldObj, bullet, ix, iy, iz, 7.5F) .addAttrib(ExAttrib.NOHURT) .addAttrib(ExAttrib.NOPARTICLE) .addAttrib(ExAttrib.NODROP) .addAttrib(ExAttrib.NOSOUND) .addAttrib(at).explode(); }*/ } }; return bullet; } }