2025-09-16 09:52:52 +10:00

136 lines
4.5 KiB
Java

package com.hbm.items.tool;
import com.hbm.handler.threading.PacketThreading;
import com.hbm.inventory.material.Mats;
import com.hbm.items.IAnimatedItem;
import com.hbm.items.ModItems;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.packet.toclient.AuxParticlePacketNT;
import com.hbm.render.anim.AnimationEnums.ToolAnimation;
import com.hbm.render.anim.BusAnimation;
import com.hbm.render.anim.BusAnimationSequence;
import com.hbm.util.EntityDamageUtil;
import api.hbm.block.IToolable;
import api.hbm.block.IToolable.ToolType;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class ItemBoltgun extends Item implements IAnimatedItem<ToolAnimation> {
public ItemBoltgun() {
this.setMaxStackSize(1);
this.setCreativeTab(MainRegistry.controlTab);
ToolType.BOLT.register(new ItemStack(this));
}
@Override
public Item setUnlocalizedName(String unlocalizedName) {
super.setUnlocalizedName(unlocalizedName);
this.setTextureName(RefStrings.MODID + ":"+ unlocalizedName);
return this;
}
@Override
public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) {
World world = player.worldObj;
if(!entity.isEntityAlive()) return false;
ItemStack[] bolts = new ItemStack[] { new ItemStack(ModItems.bolt_spike), Mats.MAT_STEEL.make(ModItems.bolt), Mats.MAT_TUNGSTEN.make(ModItems.bolt), Mats.MAT_DURA.make(ModItems.bolt)};
for(ItemStack bolt : bolts) {
for(int i = 0; i < player.inventory.getSizeInventory(); i++) {
ItemStack slot = player.inventory.getStackInSlot(i);
if(slot != null) {
if(slot.getItem() == bolt.getItem() && slot.getItemDamage() == bolt.getItemDamage()) {
if(!world.isRemote) {
world.playSoundAtEntity(entity, "hbm:item.boltgun", 1.0F, 1.0F);
player.inventory.decrStackSize(i, 1);
player.inventoryContainer.detectAndSendChanges();
EntityDamageUtil.attackEntityFromIgnoreIFrame(entity, DamageSource.causePlayerDamage(player).setDamageBypassesArmor(), 10F);
if(!entity.isEntityAlive() && entity instanceof EntityPlayer) {
((EntityPlayer) entity).triggerAchievement(MainRegistry.achGoFish);
}
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaExt");
data.setString("mode", "largeexplode");
data.setFloat("size", 1F);
data.setByte("count", (byte)1);
PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, entity.posX, entity.posY + entity.height / 2 - entity.yOffset, entity.posZ), new TargetPoint(world.provider.dimensionId, entity.posX, entity.posY, entity.posZ, 50));
playAnimation(player, ToolAnimation.SWING);
}
return true;
}
}
}
}
return false;
}
@Override
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fX, float fY, float fZ) {
Block b = world.getBlock(x, y, z);
if(b instanceof IToolable && ((IToolable)b).onScrew(world, player, x, y, z, side, fX, fY, fZ, ToolType.BOLT)) {
if(!world.isRemote) {
world.playSoundAtEntity(player, "hbm:item.boltgun", 1.0F, 1.0F);
player.inventoryContainer.detectAndSendChanges();
ForgeDirection dir = ForgeDirection.getOrientation(side);
double off = 0.25;
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaExt");
data.setString("mode", "largeexplode");
data.setFloat("size", 1F);
data.setByte("count", (byte)1);
PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, x + fX + dir.offsetX * off, y + fY + dir.offsetY * off, z + fZ + dir.offsetZ * off), new TargetPoint(world.provider.dimensionId, x, y, z, 50));
playAnimation(player, ToolAnimation.SWING);
}
return false;
}
return false;
}
@Override
public Class<ToolAnimation> getEnum() {
return ToolAnimation.class;
}
@Override
public BusAnimation getAnimation(ToolAnimation type, ItemStack stack) {
return new BusAnimation()
.addBus("RECOIL", new BusAnimationSequence()
.addPos(1, 0, 1, 50)
.addPos(0, 0, 1, 100));
}
@Override
public boolean shouldPlayerModelAim(ItemStack stack) {
return false;
}
}