diff --git a/src/main/java/assets/hbm/sounds.json b/src/main/java/assets/hbm/sounds.json index 610cc1189..db82bb773 100644 --- a/src/main/java/assets/hbm/sounds.json +++ b/src/main/java/assets/hbm/sounds.json @@ -141,6 +141,7 @@ "weapon.rocketFlame": {"category": "block", "sounds": [{"name": "weapon/rocketFlame", "stream": false}]}, "weapon.ballsLaser": {"category": "hostile", "sounds": [{"name": "weapon/ballsLaser", "stream": false}]}, "weapon.dartShoot": {"category": "player", "sounds": [{"name": "weapon/dartShoot", "stream": false}]}, + "weapon.mukeExplosion": {"category": "player", "sounds": [{"name": "weapon/mukeExplosion", "stream": false}]}, "weapon.reloadTurret": {"category": "player", "sounds": [{"name": "weapon/reloadTurret", "stream": false}]}, "weapon.switchmode1": {"category": "player", "sounds": [{"name": "weapon/switchmode1", "stream": false}]}, diff --git a/src/main/java/assets/hbm/sounds/weapon/mukeExplosion.ogg b/src/main/java/assets/hbm/sounds/weapon/mukeExplosion.ogg new file mode 100644 index 000000000..b59f04739 Binary files /dev/null and b/src/main/java/assets/hbm/sounds/weapon/mukeExplosion.ogg differ diff --git a/src/main/java/assets/hbm/textures/particle/shockwave.png b/src/main/java/assets/hbm/textures/particle/shockwave.png index 3448b65f1..22698e194 100644 Binary files a/src/main/java/assets/hbm/textures/particle/shockwave.png and b/src/main/java/assets/hbm/textures/particle/shockwave.png differ diff --git a/src/main/java/com/hbm/handler/guncfg/GunFatmanFactory.java b/src/main/java/com/hbm/handler/guncfg/GunFatmanFactory.java index 5eb887599..a513099b1 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunFatmanFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunFatmanFactory.java @@ -122,6 +122,7 @@ public class GunFatmanFactory { NBTTagCompound data = new NBTTagCompound(); data.setString("type", "muke"); PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, bullet.posX, bullet.posY + 0.5, bullet.posZ), new TargetPoint(bullet.dimension, bullet.posX, bullet.posY, bullet.posZ, 250)); + bullet.worldObj.playSoundEffect(x, y, z, "hbm:weapon.mukeExplosion", 15.0F, 1.0F); } } }; diff --git a/src/main/java/com/hbm/items/weapon/ItemGunBase.java b/src/main/java/com/hbm/items/weapon/ItemGunBase.java index 1c191ec67..364f67d5e 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunBase.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunBase.java @@ -12,6 +12,7 @@ import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.interfaces.IHoldableWeapon; import com.hbm.interfaces.IItemHUD; +import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.GunAnimationPacket; import com.hbm.packet.GunButtonPacket; import com.hbm.packet.PacketDispatcher; @@ -188,6 +189,13 @@ public class ItemGunBase extends Item implements IHoldableWeapon, IItemHUD { setItemWear(stack, getItemWear(stack) + wear); } world.playSoundAtEntity(player, mainConfig.firingSound, 1.0F, mainConfig.firingPitch); + + if(player.getDisplayName().equals("Vic4Games")) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("type", "justTilt"); + nbt.setInteger("time", mainConfig.rateOfFire + 1); + PacketDispatcher.wrapper.sendTo(new AuxParticlePacketNT(nbt, player.posX, player.posY, player.posZ), (EntityPlayerMP) player); + } } //unlike fire(), being called does not automatically imply success, some things may still have to be handled before spawning the projectile diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 1e371f62c..392ec52c8 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -3,6 +3,7 @@ import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelChicken; +import net.minecraft.client.particle.EntityBlockDustFX; import net.minecraft.client.particle.EntityCloudFX; import net.minecraft.client.particle.EntityFX; import net.minecraft.client.particle.EntityFireworkSparkFX; @@ -15,12 +16,15 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.ResourceLocation; import net.minecraft.util.Vec3; +import net.minecraft.util.MovingObjectPosition.MovingObjectType; import net.minecraft.world.World; import net.minecraftforge.client.MinecraftForgeClient; import net.minecraftforge.client.model.AdvancedModelLoader; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.ForgeDirection; import java.util.Iterator; import java.util.Map; @@ -43,6 +47,7 @@ import com.hbm.entity.particle.*; import com.hbm.entity.projectile.*; import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.items.ModItems; +import com.hbm.lib.Library; import com.hbm.particle.*; import com.hbm.render.block.*; import com.hbm.render.entity.*; @@ -914,6 +919,26 @@ public class ClientProxy extends ServerProxy { moZ -= look.zCoord * 0.1D; } + Vec3 pos = Vec3.createVectorHelper(ix, iy, iz); + Vec3 thrust = Vec3.createVectorHelper(moX, moY, moZ); + thrust = thrust.normalize(); + Vec3 target = pos.addVector(thrust.xCoord * 10, thrust.yCoord * 10, thrust.zCoord * 10); + MovingObjectPosition mop = player.worldObj.func_147447_a(pos, target, false, false, true); + + if(mop != null && mop.typeOfHit == MovingObjectType.BLOCK && mop.sideHit == 1) { + + Block b = world.getBlock(mop.blockX, mop.blockY, mop.blockZ); + int meta = world.getBlockMetadata(mop.blockX, mop.blockY, mop.blockZ); + + Vec3 delta = Vec3.createVectorHelper(ix - mop.hitVec.xCoord, iy - mop.hitVec.yCoord, iz - mop.hitVec.zCoord); + Vec3 vel = Vec3.createVectorHelper(0.75 - delta.lengthVector() * 0.075, 0, 0); + + for(int i = 0; i < (10 - delta.lengthVector()); i++) { + vel.rotateAroundY(world.rand.nextFloat() * (float)Math.PI * 2F); + Minecraft.getMinecraft().effectRenderer.addEffect(new EntityBlockDustFX(world, mop.hitVec.xCoord, mop.hitVec.yCoord + 0.1, mop.hitVec.zCoord, vel.xCoord, 0.1, vel.zCoord, b, meta)); + } + } + Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFlameFX(world, ix + ox, iy, iz + oz, p.motionX + moX * 2, p.motionY + moY * 2, p.motionZ + moZ * 2)); Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFlameFX(world, ix - ox, iy, iz - oz, p.motionX + moX * 2, p.motionY + moY * 2, p.motionZ + moZ * 2)); Minecraft.getMinecraft().effectRenderer.addEffect(new net.minecraft.client.particle.EntitySmokeFX(world, ix + ox, iy, iz + oz, p.motionX + moX * 3, p.motionY + moY * 3, p.motionZ + moZ * 3)); @@ -928,6 +953,25 @@ public class ClientProxy extends ServerProxy { Minecraft.getMinecraft().effectRenderer.addEffect(wave); Minecraft.getMinecraft().effectRenderer.addEffect(flash); + + //single swing: HT 15, MHT 15 + //double swing: HT 60, MHT 50 + //vic's immersive swing: HT 100, MHT 50 + + if(player.getDisplayName().equals("Vic4Games")) { + player.hurtTime = 100; + player.maxHurtTime = 50; + } else { + player.hurtTime = 15; + player.maxHurtTime = 15; + } + player.attackedAtYaw = 0F; + } + + if("justTilt".equals(type)) { + + player.hurtTime = player.maxHurtTime = data.getInteger("time"); + player.attackedAtYaw = 0F; } if("hadron".equals(type)) { diff --git a/src/main/java/com/hbm/particle/ParticleMukeCloud.java b/src/main/java/com/hbm/particle/ParticleMukeCloud.java index ea0f51b11..4f20c0781 100644 --- a/src/main/java/com/hbm/particle/ParticleMukeCloud.java +++ b/src/main/java/com/hbm/particle/ParticleMukeCloud.java @@ -1,14 +1,24 @@ package com.hbm.particle; +import com.hbm.lib.RefStrings; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.particle.EntityFX; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; @SideOnly(Side.CLIENT) public class ParticleMukeCloud extends EntityFX { - public ParticleMukeCloud(World world, double x, double y, double z, double mx, double my, double mz) { + private static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/particle/explosion.png"); + + public ParticleMukeCloud(TextureManager texman, World world, double x, double y, double z, double mx, double my, double mz) { super(world, x, y, z, mx, my, mz); } + + public int getFXLayer() { + return 3; + } } diff --git a/src/main/java/com/hbm/particle/ParticleMukeFlash.java b/src/main/java/com/hbm/particle/ParticleMukeFlash.java index 37a7e4e60..5c33b7683 100644 --- a/src/main/java/com/hbm/particle/ParticleMukeFlash.java +++ b/src/main/java/com/hbm/particle/ParticleMukeFlash.java @@ -32,10 +32,6 @@ public class ParticleMukeFlash extends EntityFX { return 3; } - public void onUpdate() { - super.onUpdate(); - } - public void renderParticle(Tessellator tess, float interp, float x, float y, float z, float tx, float tz) { this.theRenderEngine.bindTexture(texture); @@ -64,13 +60,13 @@ public class ParticleMukeFlash extends EntityFX { Random rand = new Random(); - for(int i = 0; i < 16; i++) { + for(int i = 0; i < 24; i++) { rand.setSeed(i * 31 + 1); - float pX = (float) (dX + rand.nextDouble() * 5 - 2.5); - float pY = (float) (dY + rand.nextDouble() * 3 - 1.5); - float pZ = (float) (dZ + rand.nextDouble() * 5 - 2.5); + float pX = (float) (dX + rand.nextDouble() * 10 - 5); + float pY = (float) (dY + rand.nextDouble() * 5 - 2.5); + float pZ = (float) (dZ + rand.nextDouble() * 10 - 5); tess.addVertexWithUV((double) (pX - x * scale - tx * scale), (double) (pY - y * scale), (double) (pZ - z * scale - tz * scale), 1, 1); tess.addVertexWithUV((double) (pX - x * scale + tx * scale), (double) (pY + y * scale), (double) (pZ - z * scale + tz * scale), 1, 0); diff --git a/src/main/java/com/hbm/particle/ParticleMukeWave.java b/src/main/java/com/hbm/particle/ParticleMukeWave.java index b21ed1e5a..209c59bfd 100644 --- a/src/main/java/com/hbm/particle/ParticleMukeWave.java +++ b/src/main/java/com/hbm/particle/ParticleMukeWave.java @@ -48,7 +48,7 @@ public class ParticleMukeWave extends EntityFX { tess.setBrightness(240); this.particleAlpha = 1 - (((float)this.particleAge + interp) / (float)this.particleMaxAge); - float scale = (this.particleAge + interp) * 2F; + float scale = (1 - (float)Math.pow(Math.E, (this.particleAge + interp) * -0.125)) * 45; tess.setColorRGBA_F(1.0F, 1.0F, 1.0F, this.particleAlpha);