@Override public boolean addCounters(Counter counter, Ability source, Game game, List<UUID> appliedEffects) { if (this.isMelded()) { return super.addCounters(counter, source, game, appliedEffects); } else { // can this really happen? boolean returnState = true; if (hasTopHalf(game)) { returnState |= topHalfCard.addCounters(counter, source, game, appliedEffects); } if (hasBottomHalf(game)) { returnState |= bottomHalfCard.addCounters(counter, source, game, appliedEffects); } return returnState; } }
@Override public boolean removeFromZone(Game game, Zone fromZone, UUID sourceId) { if (isCopy()) { return super.removeFromZone(game, fromZone, sourceId); } if (isMelded() && fromZone == Zone.BATTLEFIELD) { Permanent permanent = game.getPermanent(objectId); return permanent != null && permanent.removeFromZone(game, fromZone, sourceId); } boolean topRemoved = hasTopHalf(game) && topHalfCard.removeFromZone(game, fromZone, sourceId); if (!topRemoved) { // The top half isn't being moved with the pair anymore. halves.remove(topHalfCard); } boolean bottomRemoved = hasBottomHalf(game) && bottomHalfCard.removeFromZone(game, fromZone, sourceId); if (!bottomRemoved) { // The bottom half isn't being moved with the pair anymore. halves.remove(bottomHalfCard); } return topRemoved || bottomRemoved; }
public Unmelded(ZoneChangeInfo info, Game game) { super(info.event); MeldCard meld = game.getMeldCard(info.event.getTargetId()); if (meld != null) { if (meld.hasTopHalf(game)) { ZoneChangeEvent topEvent = new ZoneChangeEvent(meld.getTopHalfCard().getId(), event.getSourceId(), event.getPlayerId(), event.getFromZone(), event.getToZone(), event.getAppliedEffects()); ZoneChangeInfo topInfo = info.copy(); topInfo.event = topEvent; subInfo.add(topInfo); } if (meld.hasBottomHalf(game)) { ZoneChangeEvent bottomEvent = new ZoneChangeEvent(meld.getBottomHalfCard().getId(), event.getSourceId(), event.getPlayerId(), event.getFromZone(), event.getToZone(), event.getAppliedEffects()); ZoneChangeInfo bottomInfo = info.copy(); bottomInfo.event = bottomEvent; subInfo.add(bottomInfo); } } } }