package minefantasy.mf2.mechanics; import minefantasy.mf2.entity.EntityArrowMF; import minefantasy.mf2.item.archery.ItemArrowMF; import net.minecraft.block.BlockDispenser; import net.minecraft.dispenser.BehaviorDefaultDispenseItem; import net.minecraft.dispenser.IBlockSource; import net.minecraft.dispenser.IPosition; import net.minecraft.entity.Entity; import net.minecraft.entity.IProjectile; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; public class MFArrowDispenser extends BehaviorDefaultDispenseItem { /** * Dispense the specified stack, play the dispense sound and spawn particles. */ public ItemStack dispenseStack(IBlockSource dispenser, ItemStack item) { World world = dispenser.getWorld(); IPosition iposition = BlockDispenser.func_149939_a(dispenser); EnumFacing direction = BlockDispenser.func_149937_b(dispenser.getBlockMetadata()); double posX = dispenser.getX() + ((float)direction.getFrontOffsetX()); double posY = dispenser.getY() + ((float)direction.getFrontOffsetY()); double posZ = dispenser.getZ() + ((float)direction.getFrontOffsetZ()); if(item.getItem() instanceof ItemArrowMF) { ItemArrowMF arrowitem = (ItemArrowMF)item.getItem(); EntityArrowMF arrow = arrowitem.getFiredArrow(new EntityArrowMF(world, posX, posY, posZ), item); arrow.setThrowableHeading((double)direction.getFrontOffsetX(), (double)((float)direction.getFrontOffsetY() + 0.1F), (double)direction.getFrontOffsetZ(), this.func_82500_b(), this.func_82498_a()); world.spawnEntityInWorld((Entity)arrow); arrow.canBePickedUp = 1; item.splitStack(1); } return item; } /** * Play the dispense sound from the specified block. */ protected void playDispenseSound(IBlockSource p_82485_1_) { p_82485_1_.getWorld().playAuxSFX(1002, p_82485_1_.getXInt(), p_82485_1_.getYInt(), p_82485_1_.getZInt(), 0); } protected float func_82498_a() { return 6.0F; } protected float func_82500_b() { return 1.1F; } }