package com.arkcraft.module.weapon.common.entity.dispense; import java.util.Random; import net.minecraft.block.BlockDispenser; import net.minecraft.dispenser.BehaviorDefaultDispenseItem; import net.minecraft.dispenser.IBlockSource; import net.minecraft.dispenser.IPosition; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityDispenser; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumParticleTypes; import com.arkcraft.module.weapon.WeaponModule; import com.arkcraft.module.weapon.common.entity.EntityBallistaBolt; public class DispenseBallistaBolt extends BehaviorDefaultDispenseItem { private Random rand; private boolean normalDispense; public DispenseBallistaBolt() { super(); rand = new Random(); normalDispense = false; } @Override public ItemStack dispenseStack(IBlockSource blocksource, ItemStack itemstack) { BlockPos blockpos = blocksource.getBlockPos(); boolean canfire = false; normalDispense = false; // / double x = MathHelper.floor_double(blockpos.getX()); // double y = MathHelper.floor_double(blockpos.getY()); // double z = MathHelper.floor_double(blockpos.getZ()); TileEntity tileentity = blocksource.getWorld().getTileEntity(blockpos); if (tileentity instanceof TileEntityDispenser) { TileEntityDispenser dispenser = ((TileEntityDispenser) tileentity); Item itemtocheck = null; if (itemstack.getItem() == Items.gunpowder) { itemtocheck = WeaponModule.items.ballista_bolt; } else if (itemstack.getItem() == WeaponModule.items.ballista_bolt) { itemtocheck = Items.gunpowder; } for (int i = 0; i < dispenser.getSizeInventory(); i++) { ItemStack itemstack1 = dispenser.getStackInSlot(i); if (itemstack1 != null && itemstack1.getItem() == itemtocheck) { dispenser.decrStackSize(i, 1); canfire = true; break; } } } if (!canfire) { normalDispense = true; return super.dispenseStack(blocksource, itemstack); } EnumFacing face = BlockDispenser.getFacing(blocksource.getBlockMetadata()); double xvel = face.getFrontOffsetX() * 1.5D; double yvel = face.getFrontOffsetY() * 1.5D; double zvel = face.getFrontOffsetZ() * 1.5D; IPosition pos = BlockDispenser.getDispensePosition(blocksource); EntityBallistaBolt entityballistabolt = new EntityBallistaBolt(blocksource.getWorld(), pos.getX() + xvel, pos.getY() + yvel, pos.getZ() + zvel); entityballistabolt.setThrowableHeading(xvel, yvel + 0.15D, zvel, 2.0F, 2.0F); blocksource.getWorld().spawnEntityInWorld(entityballistabolt); itemstack.splitStack(1); return itemstack; } @Override protected void playDispenseSound(IBlockSource blocksource) { if (normalDispense) { super.playDispenseSound(blocksource); return; } blocksource.getWorld() .playSoundEffect(blocksource.getX(), blocksource.getY(), blocksource.getZ(), "random.explode", 8.0F, 1.0F / (rand.nextFloat() * 0.8F + 0.9F)); blocksource.getWorld().playSoundEffect(blocksource.getX(), blocksource.getY(), blocksource.getZ(), "ambient.weather.thunder", 8.0F, 1.0F / (rand.nextFloat() * 0.4F + 0.6F)); } @Override protected void spawnDispenseParticles(IBlockSource blocksource, EnumFacing face) { super.spawnDispenseParticles(blocksource, face); if (!normalDispense) { IPosition pos = BlockDispenser.getDispensePosition(blocksource); blocksource.getWorld().spawnParticle(EnumParticleTypes.FLAME, pos.getX() + face.getFrontOffsetX(), pos.getY(), pos.getZ() + face.getFrontOffsetZ(), 0.0D, 0.0D, 0.0D); } } }