package com.cardshifter.modapi.cards; import com.cardshifter.modapi.base.Component; import com.cardshifter.modapi.base.Entity; import java.util.Objects; public class CardComponent extends Component { private ZoneComponent currentZone; public CardComponent(ZoneComponent zoneComponent) { this.currentZone = zoneComponent; } public Entity getOwner() { ZoneComponent zone = getCurrentZone(); // Objects.requireNonNull(getCurrentZone(), "Card is not on any zone: " + Entity.debugInfo(getEntity())); return zone == null ? null : zone.getOwner(); } public ZoneComponent getCurrentZone() { return currentZone; } public void moveToTop(ZoneComponent target) { moveTo(target, true); } public void moveToBottom(ZoneComponent target) { moveTo(target, false); } private void moveTo(ZoneComponent target, boolean top) { Entity card = getEntity(); ZoneChangeEvent event = new ZoneChangeEvent(currentZone, target, card); executeEvent(event, () -> { if (event.getSource() != null) { event.getSource().cardMoveFrom(card); } ZoneComponent dest = event.getDestination(); if (dest != null) { if (top) { dest.cardMoveAtTop(card); } else { dest.cardMoveAtBottom(card); } } this.currentZone = dest; }); } @Override public String toString() { return "CardOnZone " + currentZone; } }