forked from External/mage
Remove use of card classes for duplicate cards. Remove set related information from being tied to card classes.
This commit is contained in:
parent
3c2189e7a1
commit
e8230946af
32 changed files with 356 additions and 155 deletions
|
|
@ -72,6 +72,7 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
|
|||
protected String tokenDescriptor;
|
||||
protected Rarity rarity;
|
||||
protected boolean transformable;
|
||||
protected Class<?> secondSideCardClazz;
|
||||
protected Card secondSideCard;
|
||||
protected boolean nightCard;
|
||||
protected SpellAbility spellAbility;
|
||||
|
|
@ -81,18 +82,15 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
|
|||
protected boolean splitCard;
|
||||
protected boolean morphCard;
|
||||
|
||||
public CardImpl(UUID ownerId, int cardNumber, String name, Rarity rarity, CardType[] cardTypes, String costs) {
|
||||
this(ownerId, String.valueOf(cardNumber), name, rarity, cardTypes, costs, SpellAbilityType.BASE);
|
||||
public CardImpl(UUID ownerId, CardSetInfo setInfo, CardType[] cardTypes, String costs) {
|
||||
this(ownerId, setInfo, cardTypes, costs, SpellAbilityType.BASE);
|
||||
}
|
||||
|
||||
public CardImpl(UUID ownerId, String cardNumber, String name, Rarity rarity, CardType[] cardTypes, String costs) {
|
||||
this(ownerId, cardNumber, name, rarity, cardTypes, costs, SpellAbilityType.BASE);
|
||||
}
|
||||
|
||||
public CardImpl(UUID ownerId, String cardNumber, String name, Rarity rarity, CardType[] cardTypes, String costs, SpellAbilityType spellAbilityType) {
|
||||
this(ownerId, name);
|
||||
this.rarity = rarity;
|
||||
this.cardNumber = cardNumber;
|
||||
public CardImpl(UUID ownerId, CardSetInfo setInfo, CardType[] cardTypes, String costs, SpellAbilityType spellAbilityType) {
|
||||
this(ownerId, setInfo.getName());
|
||||
this.rarity = setInfo.getRarity();
|
||||
this.cardNumber = setInfo.getCardNumber();
|
||||
this.expansionSetCode = setInfo.getExpansionSetCode();
|
||||
this.cardType.addAll(Arrays.asList(cardTypes));
|
||||
this.manaCost.load(costs);
|
||||
setDefaultColor();
|
||||
|
|
@ -108,7 +106,18 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
|
|||
ability.setSourceId(this.getId());
|
||||
abilities.add(ability);
|
||||
}
|
||||
this.usesVariousArt = Character.isDigit(this.getClass().getName().charAt(this.getClass().getName().length() - 1));
|
||||
|
||||
CardGraphicInfo graphicInfo = setInfo.getGraphicInfo();
|
||||
if (graphicInfo != null) {
|
||||
this.usesVariousArt = graphicInfo.getUsesVariousArt();
|
||||
if (graphicInfo.getFrameColor() != null) {
|
||||
this.frameColor = graphicInfo.getFrameColor().copy();
|
||||
}
|
||||
if (graphicInfo.getFrameStyle() != null) {
|
||||
this.frameStyle = graphicInfo.getFrameStyle();
|
||||
}
|
||||
}
|
||||
|
||||
this.morphCard = false;
|
||||
}
|
||||
|
||||
|
|
@ -141,7 +150,7 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
|
|||
|
||||
transformable = card.transformable;
|
||||
if (transformable) {
|
||||
secondSideCard = card.secondSideCard;
|
||||
secondSideCardClazz = card.secondSideCardClazz;
|
||||
nightCard = card.nightCard;
|
||||
}
|
||||
flipCard = card.flipCard;
|
||||
|
|
@ -157,12 +166,12 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
|
|||
this.abilities.setSourceId(objectId);
|
||||
}
|
||||
|
||||
public static Card createCard(String name) {
|
||||
public static Card createCard(String name, CardSetInfo setInfo) {
|
||||
try {
|
||||
return createCard(Class.forName(name));
|
||||
return createCard(Class.forName(name), setInfo);
|
||||
} catch (ClassNotFoundException ex) {
|
||||
try {
|
||||
return createCard(PluginClassloaderRegistery.forName(name));
|
||||
return createCard(PluginClassloaderRegistery.forName(name), setInfo);
|
||||
} catch (ClassNotFoundException ex2) {
|
||||
// ignored
|
||||
}
|
||||
|
|
@ -171,10 +180,17 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
|
|||
}
|
||||
}
|
||||
|
||||
public static Card createCard(Class<?> clazz) {
|
||||
public static Card createCard(Class<?> clazz, CardSetInfo setInfo) {
|
||||
try {
|
||||
Constructor<?> con = clazz.getConstructor(new Class[]{UUID.class});
|
||||
Card card = (Card) con.newInstance(new Object[]{null});
|
||||
Card card;
|
||||
if (setInfo == null) {
|
||||
Constructor<?> con = clazz.getConstructor(UUID.class);
|
||||
card = (Card) con.newInstance(new Object[]{null});
|
||||
}
|
||||
else {
|
||||
Constructor<?> con = clazz.getConstructor(UUID.class, CardSetInfo.class);
|
||||
card = (Card) con.newInstance(null, setInfo);
|
||||
}
|
||||
card.build();
|
||||
return card;
|
||||
} catch (Exception e) {
|
||||
|
|
@ -542,8 +558,24 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Card getSecondCardFace() {
|
||||
return this.secondSideCard;
|
||||
public final Card getSecondCardFace() {
|
||||
if (secondSideCardClazz == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (secondSideCard != null) {
|
||||
return secondSideCard;
|
||||
}
|
||||
|
||||
List<ExpansionSet.SetCardInfo> cardInfo = Sets.findSet(expansionSetCode).findCardInfoByClass(secondSideCardClazz);
|
||||
assert cardInfo.size() == 1; // should find 1 second side card
|
||||
if (cardInfo.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
ExpansionSet.SetCardInfo info = cardInfo.get(0);
|
||||
return secondSideCard = createCard(secondSideCardClazz,
|
||||
new CardSetInfo(info.getName(), expansionSetCode, info.getCardNumber(), info.getRarity(), info.getGraphicInfo()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue