public boolean gainLife(final int toGain, final Card source) {
        boolean newLifeSet = false;
        if (!canGainLife()) return false;
        int lifeGain = toGain;

        if (AllZoneUtil.isCardInPlay("Boon Reflection", this)) {
            int amount = AllZoneUtil.getCardsInPlay("Boon Reflection").size();
            for (int i = 0; i < amount; i++)
                lifeGain += lifeGain;
        }

        if (lifeGain > 0) {
            if (AllZoneUtil.isCardInPlay("Lich", this)) {
                //draw cards instead of gain life
                drawCards(lifeGain);
                newLifeSet = false;
            } else {
                addLife(lifeGain);
                newLifeSet = true;
                this.updateObservers();

                //Run triggers
                HashMap<String, Object> runParams = new HashMap<String, Object>();
                runParams.put("Player", this);
                runParams.put("LifeAmount", lifeGain);
                AllZone.getTriggerHandler().runTrigger("LifeGained", runParams);
            }
        } else System.out.println("Player - trying to gain negative or 0 life");

        return newLifeSet;
    }