public void killOf(Card c) { printDebugMessage("Card is killed of: " + c.getReadableName(), OutputPriority.DAMAGES); BoardSide current = p1Board.Contains(c) ? p1Board : p2Board; if (!p2Board.Contains(c) && !p1Board.Contains(c)) { throw new CardDoesNotExistException("killOf failed: card does not exist: " + c.ID); } List <Card> alreadyInformed = new List <Card>(); for (int i = 0; i < current.Count; i++) { if (!alreadyInformed.Contains(current[i])) { alreadyInformed.Add(current[i]); current[i].performedAction(new CardKilledAction(c), this); } } current.Remove(c); current.graveyard.Add(new BoardSide.DeadCard(c.cardID, c.golden, c.getCardType())); printDebugMessage("Card killed: count is now: " + current.Count, OutputPriority.INTENSEDEBUG); printDebugMessage("Card killed: count is now on p2: " + p2Board.Count, OutputPriority.INTENSEDEBUG); }