package com.hearthsim.event.effect; import com.hearthsim.card.Card; import com.hearthsim.model.PlayerSide; import com.hearthsim.util.tree.HearthTreeNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class EffectHeroAddCardHand<T extends Card> implements EffectHero<T> { private static final Logger logger = LoggerFactory.getLogger(EffectHeroAddCardHand.class); private Class<? extends Card> cardClass; public EffectHeroAddCardHand(Class<? extends Card> cardClass) { this.cardClass = cardClass; } @Override public HearthTreeNode applyEffect(PlayerSide targetSide, HearthTreeNode boardState) { if (boardState.data_.modelForSide(targetSide).isHandFull()) { return boardState; } try { Card newCard = this.cardClass.newInstance(); boardState.data_.placeCardHand(targetSide, newCard); } catch (InstantiationException | IllegalAccessException e) { logger.error("Cannot instantiate the card: ", e); } return boardState; } }