mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
159 lines
4.9 KiB
Java
159 lines
4.9 KiB
Java
package com.hbm.items.weapon;
|
|
|
|
import com.hbm.entity.projectile.EntityBulletBase;
|
|
import com.hbm.handler.GunConfiguration;
|
|
import com.hbm.items.ModItems;
|
|
import com.hbm.lib.ModDamageSource;
|
|
import com.hbm.main.MainRegistry;
|
|
import com.hbm.packet.GunAnimationPacket;
|
|
import com.hbm.packet.PacketDispatcher;
|
|
import com.hbm.render.anim.HbmAnimations.AnimType;
|
|
import com.hbm.sound.AudioWrapper;
|
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.entity.player.EntityPlayerMP;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.world.World;
|
|
|
|
public class ItemGunGauss extends ItemGunBase {
|
|
|
|
private AudioWrapper chargeLoop;
|
|
|
|
public ItemGunGauss(GunConfiguration config, GunConfiguration alt) {
|
|
super(config, alt);
|
|
}
|
|
|
|
public void endAction(ItemStack stack, World world, EntityPlayer player, boolean main) {
|
|
|
|
if(getHasShot(stack)) {
|
|
world.playSoundAtEntity(player, "hbm:weapon.sparkShoot", 2.0F, 1.0F);
|
|
setHasShot(stack, false);
|
|
}
|
|
|
|
if(!main && getStored(stack) > 0) {
|
|
EntityBulletBase bullet = new EntityBulletBase(world, altConfig.config.get(0), player);
|
|
bullet.overrideDamage = Math.max(getStored(stack), 1) * 10F;
|
|
world.spawnEntityInWorld(bullet);
|
|
world.playSoundAtEntity(player, "hbm:weapon.tauShoot", 0.5F, 0.75F);
|
|
setItemWear(stack, getItemWear(stack) + (getCharge(stack)) * 2);
|
|
setCharge(stack, 0);
|
|
|
|
if(player instanceof EntityPlayerMP)
|
|
PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(AnimType.CYCLE.ordinal()), (EntityPlayerMP) player);
|
|
}
|
|
}
|
|
|
|
public void endActionClient(ItemStack stack, World world, EntityPlayer player, boolean main) {
|
|
|
|
if(chargeLoop != null) {
|
|
chargeLoop.stopSound();
|
|
chargeLoop = null;
|
|
}
|
|
}
|
|
|
|
protected void altFire(ItemStack stack, World world, EntityPlayer player) {
|
|
setCharge(stack, 1);
|
|
}
|
|
|
|
@Override
|
|
public void startActionClient(ItemStack stack, World world, EntityPlayer player, boolean main) {
|
|
|
|
if(!main && getItemWear(stack) < mainConfig.durability && player.inventory.hasItem(ModItems.gun_xvl1456_ammo)) {
|
|
chargeLoop = MainRegistry.proxy.getLoopedSound("hbm:weapon.tauChargeLoop2", (float)player.posX, (float)player.posY, (float)player.posZ, 1.0F, 0.75F);
|
|
world.playSoundAtEntity(player, "hbm:weapon.tauChargeLoop2", 1.0F, 0.75F);
|
|
|
|
if(chargeLoop != null) {
|
|
chargeLoop.startSound();
|
|
}
|
|
}
|
|
}
|
|
|
|
protected void updateServer(ItemStack stack, World world, EntityPlayer player, int slot, boolean isCurrentItem) {
|
|
|
|
super.updateServer(stack, world, player, slot, isCurrentItem);
|
|
|
|
if(getIsAltDown(stack) && getItemWear(stack) < mainConfig.durability) {
|
|
|
|
int c = getCharge(stack);
|
|
|
|
if(c > 200) {
|
|
setCharge(stack, 0);
|
|
setItemWear(stack, mainConfig.durability);
|
|
player.attackEntityFrom(ModDamageSource.tauBlast, 1000);
|
|
world.newExplosion(player, player.posX, player.posY + player.eyeHeight, player.posZ, 5.0F, true, true);
|
|
return;
|
|
}
|
|
|
|
if(c > 0) {
|
|
setCharge(stack, c + 1);
|
|
|
|
if(c % 10 == 1 && c < 140 && c > 2) {
|
|
|
|
if(player.inventory.hasItem(ModItems.gun_xvl1456_ammo)) {
|
|
player.inventory.consumeInventoryItem(ModItems.gun_xvl1456_ammo);
|
|
setStored(stack, getStored(stack) + 1);
|
|
} else {
|
|
setCharge(stack, 0);
|
|
setStored(stack, 0);
|
|
}
|
|
}
|
|
} else {
|
|
setStored(stack, 0);
|
|
}
|
|
} else {
|
|
setCharge(stack, 0);
|
|
setStored(stack, 0);
|
|
}
|
|
}
|
|
|
|
protected void updateClient(ItemStack stack, World world, EntityPlayer player, int slot, boolean isCurrentItem) {
|
|
super.updateClient(stack, world, player, slot, isCurrentItem);
|
|
|
|
if(chargeLoop != null) {
|
|
if(!chargeLoop.isPlaying()) {
|
|
chargeLoop = rebootAudio(chargeLoop, player);
|
|
}
|
|
chargeLoop.updatePosition((float)player.posX, (float)player.posY, (float)player.posZ);
|
|
chargeLoop.updatePitch(1 + (getCharge(stack)) * 0.01F);
|
|
}
|
|
}
|
|
|
|
public AudioWrapper rebootAudio(AudioWrapper wrapper, EntityPlayer player) {
|
|
wrapper.stopSound();
|
|
AudioWrapper audio = MainRegistry.proxy.getLoopedSound("hbm:weapon.tauChargeLoop2", (float)player.posX, (float)player.posY, (float)player.posZ, wrapper.getVolume(), wrapper.getPitch());
|
|
audio.startSound();
|
|
return audio;
|
|
}
|
|
|
|
protected void spawnProjectile(World world, EntityPlayer player, ItemStack stack, int config) {
|
|
|
|
super.spawnProjectile(world, player, stack, config);
|
|
setHasShot(stack, true);
|
|
}
|
|
|
|
public static void setHasShot(ItemStack stack, boolean b) {
|
|
writeNBT(stack, "hasShot", b ? 1 : 0);
|
|
}
|
|
|
|
public static boolean getHasShot(ItemStack stack) {
|
|
return readNBT(stack, "hasShot") == 1;
|
|
}
|
|
|
|
/// gauss charge state ///
|
|
public static void setCharge(ItemStack stack, int i) {
|
|
writeNBT(stack, "gauss_charge", i);
|
|
}
|
|
|
|
public static int getCharge(ItemStack stack) {
|
|
return readNBT(stack, "gauss_charge");
|
|
}
|
|
|
|
public static void setStored(ItemStack stack, int i) {
|
|
writeNBT(stack, "gauss_stored", i);
|
|
}
|
|
|
|
public static int getStored(ItemStack stack) {
|
|
return readNBT(stack, "gauss_stored");
|
|
}
|
|
}
|