merge myk-separate-writable-data branch

This commit is contained in:
myk
2013-03-17 05:34:13 +00:00
358 changed files with 5892 additions and 23447 deletions

View File

@@ -43,8 +43,8 @@ import forge.card.ability.AbilityUtils;
import forge.card.ability.ApiType;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.Cost;
import forge.card.mana.ManaCostBeingPaid;
import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostBeingPaid;
import forge.card.replacement.ReplaceMoved;
import forge.card.replacement.ReplacementEffect;
import forge.card.replacement.ReplacementResult;
@@ -59,8 +59,8 @@ import forge.card.trigger.TriggerType;
import forge.card.trigger.ZCTrigger;
import forge.game.GameActionUtil;
import forge.game.GlobalRuleChange;
import forge.game.event.CounterAddedEvent;
import forge.game.event.CardEquippedEvent;
import forge.game.event.CounterAddedEvent;
import forge.game.event.CounterRemovedEvent;
import forge.game.event.SetTappedEvent;
import forge.game.phase.Combat;
@@ -189,7 +189,6 @@ public class Card extends GameEntity implements Comparable<Card> {
private int semiPermanentAttackBoost = 0;
private int semiPermanentDefenseBoost = 0;
private int randomPicture = 0;
private int xManaCostPaid = 0;
private int multiKickerMagnitude = 0;
@@ -255,9 +254,6 @@ public class Card extends GameEntity implements Comparable<Card> {
this.characteristicsMap.put(CardCharacteristicName.FaceDown, CardUtil.getFaceDownCharacteristic());
}
/**
* TODO: Write javadoc for this method.
*/
public void refreshUniqueNumber() {
this.setUniqueNumber(Card.nextUniqueNumber++);
}
@@ -4539,29 +4535,6 @@ public class Card extends GameEntity implements Comparable<Card> {
return this.getNetAttack();
}
/**
* <p>
* Setter for the field <code>randomPicture</code>.
* </p>
*
* @param n
* a int.
*/
public final void setRandomPicture(final int n) {
this.randomPicture = n;
}
/**
* <p>
* Getter for the field <code>randomPicture</code>.
* </p>
*
* @return a int.
*/
public final int getRandomPicture() {
return this.randomPicture;
}
/**
* <p>
* addMultiKickerMagnitude.
@@ -8495,27 +8468,12 @@ public class Card extends GameEntity implements Comparable<Card> {
return CardDb.instance().getCard(this.getName()).getEdition();
}
/**
* <p>
* setImageFilename.
* </p>
*
* @param iFN
* a {@link java.lang.String} object.
*/
public final void setImageFilename(final String iFN) {
this.getCharacteristics().setImageFilename(iFN);
public final void setImageKey(final String iFN) {
this.getCharacteristics().setImageKey(iFN);
}
/**
* <p>
* getImageFilename.
* </p>
*
* @return a {@link java.lang.String} object.
*/
public final String getImageFilename() {
return this.getCharacteristics().getImageFilename();
public final String getImageKey() {
return this.getCharacteristics().getImageKey();
}
/**

View File

@@ -17,19 +17,13 @@
*/
package forge;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import forge.card.CardCharacteristics;
import forge.card.CardInSet;
import forge.card.CardRules;
import forge.card.CardSplitType;
import forge.card.MagicColor;
import forge.card.ability.AbilityUtils;
import forge.card.ability.ApiType;
@@ -38,76 +32,35 @@ import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiDisplayUtil;
import forge.item.IPaperCard;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
/**
* <p>
* CardUtil class.
* </p>
*
* @author Forge
* @version $Id$
*/
public final class CardUtil {
/**
* Do not instantiate.
*/
private CardUtil() {
// This space intentionally left blank.
// disable instantiation
private CardUtil() { }
static final Map<String, String> colorMap;
static {
colorMap = new HashMap<String, String>();
colorMap.put(Constant.Color.BLACK.toString(), "B");
colorMap.put(Constant.Color.BLUE.toString(), "U");
colorMap.put(Constant.Color.GREEN.toString(), "G");
colorMap.put(Constant.Color.RED.toString(), "R");
colorMap.put(Constant.Color.WHITE.toString(), "W");
colorMap.put(Constant.Color.COLORLESS.toString(), "C");
}
// returns "G", longColor is Constant.Color.Green and the like
/**
* <p>
* getShortColor.
* </p>
*
* @param longColor
* a {@link java.lang.String} object.
* @return a {@link java.lang.String} object.
*/
public static String getShortColor(final String longColor) {
final Map<String, String> map = new HashMap<String, String>();
map.put(Constant.Color.BLACK.toString(), "B");
map.put(Constant.Color.BLUE.toString(), "U");
map.put(Constant.Color.GREEN.toString(), "G");
map.put(Constant.Color.RED.toString(), "R");
map.put(Constant.Color.WHITE.toString(), "W");
final Object o = map.get(longColor);
if (o == null) {
if (!colorMap.containsKey(longColor)) {
throw new RuntimeException("CardUtil : getShortColor() invalid argument - " + longColor);
}
return (String) o;
return colorMap.get(longColor);
}
/**
* <p>
* getColors.
* </p>
*
* @param c
* a {@link forge.Card} object.
* @return a {@link java.util.ArrayList} object.
*/
public static List<String> getColors(final Card c) {
return c.determineColor().toStringList();
}
/**
* <p>
* isStackingKeyword.
* </p>
*
* @param keyword
* a {@link java.lang.String} object.
* @return a boolean.
*/
public static boolean isStackingKeyword(final String keyword) {
String kw = new String(keyword);
if (kw.startsWith("HIDDEN")) {
@@ -117,147 +70,21 @@ public final class CardUtil {
return !kw.startsWith("Protection") && !Constant.Keywords.NON_STACKING_LIST.contains(kw);
}
/**
* <p>
* buildFilename.
* </p>
*
* @param card
* a {@link forge.Card} object.
* @return a {@link java.lang.String} object.
*/
public static String buildFilename(final Card card) {
final boolean token = card.isToken() && !card.isCopiedToken();
final String set = card.getCurSetCode();
CardInSet neededSet = card.getRules().getEditionInfo(set);
final int cntPictures = neededSet == null ? 1 : neededSet.getCopiesCount();
return CardUtil.buildFilename(card.getName(), card.getCurSetCode(), card.getRandomPicture(), cntPictures, token);
}
/**
* buildFilename for lightweight card. Searches for a matching file on disk,
*
* @param card
* the card
* @return the string
*/
public static String buildFilename(final IPaperCard card) {
CardRules cr = card.getRules();
final int maxIndex = cr.getEditionInfo(card.getEdition()).getCopiesCount();
// picture is named AssaultBattery.full.jpg
String imageName = cr.getSplitType() != CardSplitType.Split ? card.getName() : buildSplitCardFilename(cr);
return CardUtil.buildFilename(imageName, card.getEdition(), card.getArtIndex(), maxIndex, false);
}
public static String buildSplitCardFilename(CardRules cr) {
return cr.getMainPart().getName() + cr.getOtherPart().getName();
}
/**
* Builds the filename.
*
* @param card
* the card
* @param nameToUse
* the name to use
* @return the string
*/
public static String buildFilename(final IPaperCard card, final String nameToUse) {
final int maxIndex = card.getRules().getEditionInfo(card.getEdition()).getCopiesCount();
return CardUtil.buildFilename(nameToUse, card.getEdition(), card.getArtIndex(), maxIndex, false);
}
private static String buildFilename(final String cardName, final String setName, final int artIndex,
final int artIndexMax, final boolean isToken) {
final File path = ForgeProps.getFile(isToken ? NewConstants.IMAGE_TOKEN : NewConstants.IMAGE_BASE);
final String nn = artIndexMax > 1 ? Integer.toString(artIndex + 1) : "";
final String cleanCardName = GuiDisplayUtil.cleanString(cardName);
File f = null;
if (StringUtils.isNotBlank(setName)) {
final String mwsCardName = GuiDisplayUtil.cleanStringMWS(cardName);
// First, try 3 letter set code with MWS filename format
final String mwsSet3 = String.format("%s/%s%s.full", setName, mwsCardName, nn);
f = new File(path, mwsSet3 + ".jpg");
if (f.exists()) {
return mwsSet3;
}
// Second, try 2 letter set code with MWS filename format
final String mwsSet2 = String.format("%s/%s%s.full", Singletons.getModel().getEditions().getCode2ByCode(setName), mwsCardName, nn);
f = new File(path, mwsSet2 + ".jpg");
if (f.exists()) {
return mwsSet2;
}
// Third, try 3 letter set code with Forge filename format
final String forgeSet3 = String.format("%s/%s%s", setName, cleanCardName, nn);
f = new File(path, forgeSet3 + ".jpg");
if (f.exists()) {
return forgeSet3;
}
}
// Last, give up with set images, go with the old picture type
final String forgePlain = String.format("%s%s", cleanCardName, nn);
f = new File(path, forgePlain + ".jpg");
if (f.exists()) {
return forgePlain;
}
// give up with art index
f = new File(path, cleanCardName + ".jpg");
if (f.exists()) {
return cleanCardName;
}
// if still no file, download if option enabled?
return "none";
}
/**
* <p>
* getShortColorsString.
* </p>
*
* @param colors
* a {@link java.util.ArrayList} object.
* @return a {@link java.lang.String} object.
*/
public static String getShortColorsString(final Iterable<String> colors) {
String colorDesc = "";
StringBuilder colorDesc = new StringBuilder();
for (final String col : colors) {
if (col.equalsIgnoreCase("White")) {
colorDesc += "W";
} else if (col.equalsIgnoreCase("Blue")) {
colorDesc += "U";
} else if (col.equalsIgnoreCase("Black")) {
colorDesc += "B";
} else if (col.equalsIgnoreCase("Red")) {
colorDesc += "R";
} else if (col.equalsIgnoreCase("Green")) {
colorDesc += "G";
} else if (col.equalsIgnoreCase("Colorless")) {
colorDesc = "C";
}
colorDesc.append(getShortColor(col));
}
return colorDesc;
return colorDesc.toString();
}
/**
* getThisTurnEntered.
*
* @param to
* zone going to
* @param from
* zone coming from
* @param valid
* a isValid expression
* @param src
* a Card object
* @param to zone going to
* @param from zone coming from
* @param valid a isValid expression
* @param src a Card object
* @return a List<Card> that matches the given criteria
*/
public static List<Card> getThisTurnEntered(final ZoneType to, final ZoneType from, final String valid,
@@ -276,15 +103,6 @@ public final class CardUtil {
return res;
}
/**
* getThisTurnCast.
*
* @param valid
* a String object
* @param src
* a Card object
* @return a List<Card> that matches the given criteria
*/
public static List<Card> getThisTurnCast(final String valid, final Card src) {
List<Card> res = new ArrayList<Card>();
@@ -295,15 +113,6 @@ public final class CardUtil {
return res;
}
/**
* getLastTurnCast.
*
* @param valid
* a String object
* @param src
* a Card object
* @return a List<Card> that matches the given criteria
*/
public static List<Card> getLastTurnCast(final String valid, final Card src) {
List<Card> res = new ArrayList<Card>();
@@ -315,10 +124,7 @@ public final class CardUtil {
}
/**
* getLKICopy.
*
* @param in
* a Card to copy.
* @param in a Card to copy.
* @return a copy of C with LastKnownInfo stuff retained.
*/
public static Card getLKICopy(final Card in) {
@@ -367,17 +173,6 @@ public final class CardUtil {
return newCopy;
}
/**
* Gets the radiance.
*
* @param source
* the source
* @param origin
* the origin
* @param valid
* the valid
* @return the radiance
*/
public static List<Card> getRadiance(final Card source, final Card origin, final String[] valid) {
final List<Card> res = new ArrayList<Card>();
@@ -397,11 +192,6 @@ public final class CardUtil {
return res;
}
/**
* Gets the face down characteristic.
*
* @return the face down characteristic
*/
public static CardCharacteristics getFaceDownCharacteristic() {
final ArrayList<String> types = new ArrayList<String>();
types.add("Creature");
@@ -413,27 +203,11 @@ public final class CardUtil {
ret.setName("");
ret.setType(types);
ret.setImageFilename(NewConstants.MORPH_IMAGE_FILE_NAME);
ret.setImageKey(NewConstants.CACHE_MORPH_IMAGE_FILE);
return ret;
}
// add Colors and
/**
* <p>
* reflectableMana.
* </p>
*
* @param abMana
* a {@link forge.card.spellability.AbilityMana} object.
* @param af
* a {@link forge.card.ability.AbilityFactory} object.
* @param colors
* a {@link java.util.ArrayList} object.
* @param parents
* a {@link java.util.ArrayList} object.
* @return a {@link java.util.ArrayList} object.
*/
public static Set<String> getReflectableManaColors(final SpellAbility abMana, final SpellAbility sa,
Set<String> colors, final List<Card> parents) {
// Here's the problem with reflectable Mana. If more than one is out,
@@ -561,8 +335,4 @@ public final class CardUtil {
return colors;
}
} // end class CardUtil
}

View File

@@ -24,9 +24,6 @@ import java.util.List;
import com.google.common.collect.ImmutableList;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
/**
* <p>
* Constant interface.
@@ -36,9 +33,6 @@ import forge.properties.NewConstants;
* @version $Id$
*/
public final class Constant {
/** Constant <code>ProgramName="Forge - http://cardforge.org"</code>. */
public static final String PROGRAM_NAME = "Forge - " + ForgeProps.getProperty(NewConstants.CARDFORGE_URL);
// used to pass information between the GUI screens
/**
* The Class Runtime.

View File

@@ -19,14 +19,21 @@ package forge;
import java.awt.image.BufferedImage;
import java.util.concurrent.ExecutionException;
import javax.swing.ImageIcon;
import org.apache.commons.lang3.StringUtils;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader.InvalidCacheLoadException;
import com.google.common.cache.LoadingCache;
import com.mortennobel.imagescaling.ResampleOp;
import forge.gui.GuiDisplayUtil;
import forge.game.player.IHasIcon;
import forge.gui.toolbox.FSkin;
import forge.item.InventoryItem;
import forge.properties.ForgePreferences.FPref;
import forge.properties.NewConstants;
/**
* This class stores ALL card images in a cache with soft values. this means
@@ -43,42 +50,53 @@ import forge.properties.ForgePreferences.FPref;
* @version $Id$
*/
public class ImageCache {
/** Constant <code>imageCache</code>. */
static final LoadingCache<String, BufferedImage> CACHE = CacheBuilder.newBuilder().softValues().build(new ImageLoader());
/** Constant <code>FULL_SIZE</code>. */
// short prefixes to save memory
public static final String TOKEN_PREFIX = "t:";
public static final String ICON_PREFIX = "i:";
public static final String BOOSTER_PREFIX = "b:";
public static final String FATPACK_PREFIX = "f:";
public static final String PRECON_PREFIX = "p:";
public static final String TOURNAMENTPACK_PREFIX = "o:";
static private final LoadingCache<String, BufferedImage> CACHE = CacheBuilder.newBuilder().softValues().build(new ImageLoader());
public static final String SEALED_PRODUCT = "sealed://";
public static final String TOKEN = "token://";
public static BufferedImage getImage(final Card card, final int width, final int height) {
//SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
//System.out.printf("%s - load '%s' (%d x %d)\n", sdf.format(new Date()), card.getImageFilename(), width, height );
final String key = card.canBeShownTo(Singletons.getControl().getPlayer()) ? ImageCache.getKey(card) : "Morph";
/**
* retrieve an image from the cache. returns null if the image is not found in the cache
* and cannot be loaded from disk. pass -1 for width and/or height to avoid resizing in that dimension.
*/
public static BufferedImage getImage(Card card, int width, int height) {
final String key;
if (!card.canBeShownTo(Singletons.getControl().getPlayer()) || card.isFaceDown()) {
key = TOKEN_PREFIX + NewConstants.CACHE_MORPH_IMAGE_FILE;
} else {
key = card.getImageKey();
}
return scaleImage(key, width, height);
}
public static BufferedImage getImage(final InventoryItem ii, final int width, final int height) {
// TODO: move all the path-building logics here from the very objects. They don't have to know where their picture is
String key = getKey(ii);
return scaleImage(key, width, height);
}
public static BufferedImage getImage(final String key, final int width, final int height) {
return scaleImage(key, width, height);
/**
* retrieve an image from the cache. returns null if the image is not found in the cache
* and cannot be loaded from disk. pass -1 for width and/or height to avoid resizing in that dimension.
*/
public static BufferedImage getImage(InventoryItem ii, int width, int height) {
return scaleImage(ii.getImageKey(), width, height);
}
/**
* TODO: Write javadoc for this method.
* @param original
* @param scale
* @return
* retrieve an icon from the cache. returns the current skin's ICO_UNKNOWN if the icon image is not found
* in the cache and cannot be loaded from disk.
*/
public static ImageIcon getIcon(IHasIcon ihi) {
BufferedImage i = scaleImage(ihi.getIconImageKey(), -1, -1);
if (null == i) {
return FSkin.getIcon(FSkin.InterfaceIcons.ICO_UNKNOWN);
}
return new ImageIcon(i);
}
private static BufferedImage scaleImage(String key, final int width, final int height) {
if (3 > width || 3 > height) {
// picture too small; return a blank
if (StringUtils.isEmpty(key) || (3 > width && -1 != width) || (3 > height && -1 != height)) {
// picture too small or key not defined; return a blank
return null;
}
@@ -93,35 +111,34 @@ public class ImageCache {
boolean mayEnlarge = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_SCALE_LARGER);
BufferedImage original = getImage(key);
if ( null == original )
if (null == original) {
return null;
}
double scale = Math.min((double) width / original.getWidth(), (double) height / original.getHeight());
// here would be the place to limit the scaling option in menu ?
double scale = Math.min(
-1 == width ? 1 : (double)width / original.getWidth(),
-1 == height? 1 : (double)height / original.getHeight());
if ((scale > 1) && !mayEnlarge) {
scale = 1;
}
BufferedImage result;
if ( 1 == scale ) {
if (1 == scale) {
result = original;
} else {
int destWidth = (int) (original.getWidth() * scale);
int destHeight = (int) (original.getHeight() * scale);
int destWidth = (int)(original.getWidth() * scale);
int destHeight = (int)(original.getHeight() * scale);
ResampleOp resampler = new ResampleOp(destWidth, destHeight);
result = resampler.filter(original, null);
CACHE.put(resizedKey, result);
}
return result;
}
/**
* Returns the Image corresponding to the key.
*
* @param key
* a {@link java.lang.String} object.
* @return a {@link java.awt.image.BufferedImage} object.
*/
private static BufferedImage getImage(final String key) {
try {
@@ -137,23 +154,4 @@ public class ImageCache {
return null;
}
}
/**
* Returns the map key for a card, without any suffixes for the image size.
*
* @param card
* a {@link forge.Card} object.
* @return a {@link java.lang.String} object.
*/
public static String getKey(final Card card) {
if ((card.isToken() && !card.isCopiedToken()) || card.isFaceDown()) {
return ImageCache.TOKEN + GuiDisplayUtil.cleanString(card.getImageFilename());
}
return card.getImageFilename(); // key;
}
public static String getKey(final InventoryItem ii) {
return ii.getImageFilename();
}
}

View File

@@ -3,82 +3,93 @@ package forge;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.apache.commons.lang3.StringUtils;
import com.google.common.cache.CacheLoader;
import forge.error.BugReporter;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
/**
* TODO: Write javadoc for this type.
*
*/
final class ImageLoader extends CacheLoader<String, BufferedImage> {
// image file extensions for various formats in order of likelihood
// the last, empty, string is for keys that come in with an extension already in place
private static final String[] _FILE_EXTENSIONS = { ".jpg", ".png", "" };
@Override
public BufferedImage load(String key) {
// original
File path;
String filename;
if (key.startsWith(ImageCache.TOKEN)) {
filename = key.substring(ImageCache.TOKEN.length());
path = ForgeProps.getFile(NewConstants.IMAGE_TOKEN);
} else if (key.startsWith(ImageCache.SEALED_PRODUCT)) {
filename = key.substring(ImageCache.SEALED_PRODUCT.length());
path = ForgeProps.getFile(NewConstants.IMAGE_SEALED_PRODUCT);
if (StringUtils.isEmpty(key)) {
return null;
}
final String path;
final String filename;
if (key.startsWith(ImageCache.TOKEN_PREFIX)) {
filename = key.substring(ImageCache.TOKEN_PREFIX.length());
path = NewConstants.CACHE_TOKEN_PICS_DIR;
} else if (key.startsWith(ImageCache.ICON_PREFIX)) {
filename = key.substring(ImageCache.ICON_PREFIX.length());
path = NewConstants.CACHE_ICON_PICS_DIR;
} else if (key.startsWith(ImageCache.BOOSTER_PREFIX)) {
filename = key.substring(ImageCache.BOOSTER_PREFIX.length());
path = NewConstants.CACHE_BOOSTER_PICS_DIR;
} else if (key.startsWith(ImageCache.FATPACK_PREFIX)) {
filename = key.substring(ImageCache.FATPACK_PREFIX.length());
path = NewConstants.CACHE_FATPACK_PICS_DIR;
} else if (key.startsWith(ImageCache.PRECON_PREFIX)) {
filename = key.substring(ImageCache.PRECON_PREFIX.length());
path = NewConstants.CACHE_PRECON_PICS_DIR;
} else if (key.startsWith(ImageCache.TOURNAMENTPACK_PREFIX)) {
filename = key.substring(ImageCache.TOURNAMENTPACK_PREFIX.length());
path = NewConstants.CACHE_TOURNAMENTPACK_PICS_DIR;
} else {
filename = key;
path = ForgeProps.getFile(NewConstants.IMAGE_BASE);
path = NewConstants.CACHE_CARD_PICS_DIR;
}
File file = makeImageFile(path, filename);
boolean fileExists = file.exists();
if (!fileExists && filename.startsWith("S00") ) {
file = makeImageFile(path, filename.replace("S00", "6ED"));
fileExists = file.exists();
}
if (!fileExists ) {
//System.out.println("File not found, no image created: " + file);
return null;
}
final BufferedImage image = getImage(file);
//ImageCache.IMAGE_CACHE.put(key, image);
return image;
}
/**
* TODO: Write javadoc for this method.
* @param path
* @param filename
* @return
*/
private File makeImageFile(File path, String filename) {
boolean isPng = filename.endsWith(".png");
final String fName = isPng || filename.endsWith(".jpg") ? filename : filename + ".jpg";
return new File(path, fName);
}
/**
* <p>
* getImage.
* </p>
*
* @param file a {@link java.io.File} object.
* @return a {@link java.awt.image.BufferedImage} object.
* @throws IOException Signals that an I/O exception has occurred.
*/
public static BufferedImage getImage(final File file) {
//System.out.printf("Loading from disk: %s\n", file.toString());
BufferedImage ret = _findFile(key, path, filename);
BufferedImage image;
//int format = useAlpha ? BufferedImage.TYPE_INT_ARGB : BufferedImage.TYPE_INT_RGB;
try {
image = ImageIO.read(file);
} catch (IOException ex) {
BugReporter.reportException(ex, "Could not read image file " + file.getAbsolutePath() + " ");
return null;
// some S00/S2K cards are really part of 6ED/6E
if (null == ret && filename.startsWith("S2K") ) {
ret = _findFile(key, path, filename.replace("S2K", "6E"));
}
return image;
// try without set prefix
String setlessFilename = null;
if (null == ret && filename.contains("/")) {
setlessFilename = filename.substring(filename.indexOf('/') + 1);
ret = _findFile(key, path, setlessFilename);
}
// try lowering the art index to the minimum for regular cards
if (null == ret && null != setlessFilename && setlessFilename.contains(".full")) {
ret = _findFile(key, path, setlessFilename.replaceAll("[0-9]*[.]full", "1.full"));
}
if (null == ret) {
System.out.println("File not found, no image created: " + key);
}
return ret;
}
}
private static BufferedImage _findFile(String key, String path, String filename) {
for (String ext : _FILE_EXTENSIONS) {
File file = new File(path, filename + ext);
//System.out.println(String.format("Searching for %s at: %s", key, file.getAbsolutePath()));
if (file.exists()) {
//System.out.println(String.format("Found %s at: %s", key, file.getAbsolutePath()));
try {
return ImageIO.read(file);
} catch (IOException ex) {
BugReporter.reportException(ex, "Could not read image file " + file.getAbsolutePath() + " ");
break;
}
}
}
return null;
}
}

View File

@@ -25,50 +25,22 @@ import forge.view.FView;
* Provides global/static access to singleton instances.
*/
public final class Singletons {
private static FModel model = null;
private static FView view = null;
private static FModel model = null;
private static FView view = null;
private static FControl control = null;
/**
* Do not instantiate.
*/
private Singletons() {
// This line intentionally left blank.
}
/** @return {@link forge.model.FModel} */
public static FModel getModel() {
return Singletons.model;
}
/** @param model0 &emsp; {@link forge.model.FModel} */
public static void setModel(final FModel model0) {
Singletons.model = model0;
}
/**
* IMPORTANT - does not return view frame! Must call
* getFrame() from FView for that.
* @return {@link forge.model.JFrame} */
public static FView getView() {
return Singletons.view;
}
*/
public static FView getView() { return view; }
public static FControl getControl() { return control; }
public static FModel getModel() { return model; }
/** @param view0 &emsp; {@link forge.model.FView} */
public static void setView(final FView view0) {
Singletons.view = view0;
}
public static void setModel (FModel model0) { model = model0; }
public static void setView (FView view0) { view = view0; }
public static void setControl(FControl control0) { control = control0; }
/** @return {@link forge.control.FControl} */
public static FControl getControl() {
return Singletons.control;
}
/** @param control0 &emsp; {@link forge.control.FControl} */
public static void setControl(final FControl control0) {
Singletons.control = control0;
}
// disallow instantiation
private Singletons() { }
}

View File

@@ -29,9 +29,9 @@ import forge.card.TriggerReplacementBase;
import forge.card.replacement.ReplacementEffect;
import forge.card.spellability.SpellAbility;
import forge.card.staticability.StaticAbility;
import forge.game.GlobalRuleChange;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.game.GlobalRuleChange;
/**
* <p>

View File

@@ -50,7 +50,7 @@ public class CardCharacteristics {
private ArrayList<ReplacementEffect> replacementEffects = new ArrayList<ReplacementEffect>();
private ArrayList<StaticAbility> staticAbilities = new ArrayList<StaticAbility>();
private ArrayList<String> staticAbilityStrings = new ArrayList<String>();
private String imageFilename = "";
private String imageKey = "";
private Map<String, String> sVars = new TreeMap<String, String>();
private CardRarity rarity = CardRarity.Unknown;
@@ -279,8 +279,8 @@ public class CardCharacteristics {
*
* @return the imageFilename
*/
public final String getImageFilename() {
return this.imageFilename;
public final String getImageKey() {
return this.imageKey;
}
/**
@@ -289,8 +289,8 @@ public class CardCharacteristics {
* @param imageFilename0
* the imageFilename to set
*/
public final void setImageFilename(final String imageFilename0) {
this.imageFilename = imageFilename0;
public final void setImageKey(final String imageFilename0) {
this.imageKey = imageFilename0;
}
/**
@@ -410,7 +410,7 @@ public class CardCharacteristics {
// ArrayList<String> staticAbilityStrings : list of String objects so use copy constructor
this.staticAbilityStrings = new ArrayList<String>(source.getStaticAbilityStrings());
// String imageFilename = copy reference
this.imageFilename = source.getImageFilename();
this.imageKey = source.getImageKey();
this.rarity = source.rarity;
this.curSetCode = source.curSetCode;
// Map<String, String> sVars

View File

@@ -17,35 +17,13 @@
*/
package forge.card;
/**
* <p>
* CardRarity class.
* </p>
*
* @author Forge
* @version $Id: CardRarity.java 9708 2011-08-09 19:34:12Z jendave $
*/
public enum CardRarity {
/** The Basic land. */
BasicLand("L"),
/** The Common. */
Common("C"),
/** The Uncommon. */
Uncommon("U"),
/** The Rare. */
Rare("R"),
/** The Mythic rare. */
MythicRare("M"),
/** The Special. */
Special("S"), // Timeshifted
/** The Unknown. */
Unknown("?"); // In development
private final String strValue;
@@ -54,14 +32,8 @@ public enum CardRarity {
this.strValue = sValue;
}
/*
* (non-Javadoc)
*
* @see java.lang.Enum#toString()
*/
@Override
public String toString() {
return this.strValue;
}
}

View File

@@ -38,12 +38,9 @@ public final class CardRules implements ICardCharacteristics {
private final CardSplitType splitType;
private final ICardFace mainPart;
private final ICardFace otherPart;
private CardAiHints aiHints;
private final Map<String, CardInSet> setsPrinted = new TreeMap<String, CardInSet>(String.CASE_INSENSITIVE_ORDER);
private CardAiHints aiHints;
public CardRules(ICardFace[] faces, CardSplitType altMode, CardAiHints cah, Map<String, CardInSet> sets) {
splitType = altMode;
@@ -68,25 +65,18 @@ public final class CardRules implements ICardCharacteristics {
return !(getType().isVanguard() || getType().isScheme() || getType().isPlane() || getType().isPhenomenon());
}
/**
* @return the splitType
*/
public CardSplitType getSplitType() {
return splitType;
}
public ICardFace getMainPart() {
// TODO Auto-generated method stub
return mainPart;
}
public ICardFace getOtherPart() {
return otherPart;
}
public String getName() {
switch(splitType.getAggregationMethod()) {
case AGGREGATE:
@@ -121,7 +111,6 @@ public final class CardRules implements ICardCharacteristics {
}
}
@Override
public ColorSet getColor() {
switch(splitType.getAggregationMethod()) {
@@ -132,13 +121,11 @@ public final class CardRules implements ICardCharacteristics {
}
}
@Override public int getIntPower() { return mainPart.getIntPower(); }
@Override public int getIntToughness() { return mainPart.getIntToughness(); }
@Override public String getPower() { return mainPart.getPower(); }
@Override public String getToughness() { return mainPart.getToughness(); }
@Override public int getInitialLoyalty() { return mainPart.getInitialLoyalty(); }
@Override public int getIntPower() { return mainPart.getIntPower(); }
@Override public int getIntToughness() { return mainPart.getIntToughness(); }
@Override public String getPower() { return mainPart.getPower(); }
@Override public String getToughness() { return mainPart.getToughness(); }
@Override public int getInitialLoyalty() { return mainPart.getInitialLoyalty(); }
@Override
public String getOracleText() {
@@ -150,14 +137,12 @@ public final class CardRules implements ICardCharacteristics {
}
}
public Set<String> getSets() { return this.setsPrinted.keySet(); }
public CardInSet getEditionInfo(final String setCode) {
final CardInSet result = this.setsPrinted.get(setCode);
return result; // if returns null, String.format("Card '%s' was never printed in set '%s'", this.getName(), setCode);
}
// vanguard card fields, they don't use sides.
private int deltaHand;
private int deltaLife;
@@ -180,38 +165,19 @@ public final class CardRules implements ICardCharacteristics {
public String getPictureOtherSideUrl() { return dlUrlOtherSide; }
public void setDlUrls(String[] dlUrls) { this.dlUrl = dlUrls[0]; this.dlUrlOtherSide = dlUrls[1]; }
/* (non-Javadoc)
* @see forge.card.ICardCharacteristics#getReplacements()
*/
public final List<String> getReplacements() {
return null;
}
/* (non-Javadoc)
* @see forge.card.ICardCharacteristics#getTriggers()
*/
public final List<String> getTriggers() {
return null;
}
/* (non-Javadoc)
* @see forge.card.ICardCharacteristics#getStaticAbilities()
*/
public final List<String> getStaticAbilities() {
return null;
}
/* (non-Javadoc)
* @see forge.card.ICardCharacteristics#getAbilities()
*/
public final List<String> getAbilities() {
return null;
}
}

View File

@@ -2,6 +2,7 @@ package forge.card;
import java.util.ArrayList;
import java.util.List;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;

View File

@@ -23,9 +23,9 @@ import java.util.TreeMap;
import org.apache.commons.lang3.StringUtils;
import forge.card.mana.ManaCostShard;
import forge.card.mana.IParserManaCost;
import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostShard;
/**
@@ -87,10 +87,10 @@ public class CardRulesReader {
public final CardRules getCard() {
CardAiHints cah = new CardAiHints(removedFromAIDecks, removedFromRandomDecks, hints, needs );
faces[0].assignMissingFields();
if ( null != faces[1] ) faces[1].assignMissingFields();
if (null != faces[1]) faces[1].assignMissingFields();
final CardRules result = new CardRules(faces, altMode, cah, sets);
result.setDlUrls(pictureUrl);
if ( StringUtils.isNotBlank(handLife))
if (StringUtils.isNotBlank(handLife))
result.setVanguardProperties(handLife);
return result;
}
@@ -114,13 +114,10 @@ public class CardRulesReader {
* the line
*/
public final void parseLine(final String line) {
int colonPos = line.indexOf(':');
String key = colonPos > 0 ? line.substring(0, colonPos) : line;
String value = colonPos > 0 ? line.substring(1+colonPos).trim() : null;
switch(key.charAt(0)) {
case 'A':
if ("A".equals(key))

View File

@@ -2,10 +2,6 @@ package forge.card;
import forge.CardCharacteristicName;
/**
* TODO: Write javadoc for this type.
*
*/
public enum CardSplitType
{
None(AggregationMethod.USE_PRIMARY_FACE, null),
@@ -14,19 +10,12 @@ public enum CardSplitType
Flip(AggregationMethod.USE_PRIMARY_FACE, CardCharacteristicName.Flipped),
// used by 12 licid creatures to switch type into enchantment aura
Licid(AggregationMethod.USE_PRIMARY_FACE, CardCharacteristicName.Licid);
private CardSplitType(AggregationMethod calcMode, CardCharacteristicName stateName) {
method = calcMode;
this.changedStateName = stateName;
}
/**
* @return the calculationMode
*/
public AggregationMethod getAggregationMethod() {
return method;
}
@@ -45,4 +34,3 @@ public enum CardSplitType
return changedStateName;
}
}

View File

@@ -54,20 +54,12 @@ public final class CardType implements Comparable<CardType> {
}
}
private CardType() {
} // use static ctors!
private CardType() { }
// TODO: Debug this code
/**
* Parses the.
*
* @param typeText
* the type text
* @return the card type
*/
public static CardType parse(final String typeText) {
// Most types and subtypes, except "Serra<EFBFBD>s Realm" and
// "Bolas<EFBFBD>s Meditation Realm" consist of only one word
// Most types and subtypes, except "Serra's Realm" and
// "Bolas's Meditation Realm" consist of only one word
final char space = ' ';
final CardType result = new CardType();
@@ -130,152 +122,66 @@ public final class CardType implements Comparable<CardType> {
this.subType.add(type);
}
/**
* Sub type contains.
*
* @param operand
* the operand
* @return true, if successful
*/
public boolean subTypeContains(final String operand) {
return this.subType.contains(operand);
}
/**
* Type contains.
*
* @param operand
* the operand
* @return true, if successful
*/
public boolean typeContains(final CardCoreType operand) {
return this.coreType.contains(operand);
}
/**
* Super type contains.
*
* @param operand
* the operand
* @return true, if successful
*/
public boolean superTypeContains(final CardSuperType operand) {
return this.superType.contains(operand);
}
/**
* Checks if is creature.
*
* @return true, if is creature
*/
public boolean isCreature() {
return this.coreType.contains(CardCoreType.Creature);
}
/**
* Checks if is planeswalker.
*
* @return true, if is planeswalker
*/
public boolean isPlaneswalker() {
return this.coreType.contains(CardCoreType.Planeswalker);
}
/**
* Checks if is land.
*
* @return true, if is land
*/
public boolean isLand() {
return this.coreType.contains(CardCoreType.Land);
}
/**
* Checks if is artifact.
*
* @return true, if is artifact
*/
public boolean isArtifact() {
return this.coreType.contains(CardCoreType.Artifact);
}
/**
* Checks if is instant.
*
* @return true, if is instant
*/
public boolean isInstant() {
return this.coreType.contains(CardCoreType.Instant);
}
/**
* Checks if is sorcery.
*
* @return true, if is sorcery
*/
public boolean isSorcery() {
return this.coreType.contains(CardCoreType.Sorcery);
}
/**
* Checks if is vanguard.
*
* @return true if vanguard
*/
public boolean isVanguard() {
return this.coreType.contains(CardCoreType.Vanguard);
}
/**
* Checks if is scheme.
*
* @return true if scheme
*/
public boolean isScheme() {
return this.coreType.contains(CardCoreType.Scheme);
}
/**
* Checks if is enchantment.
*
* @return true, if is enchantment
*/
public boolean isEnchantment() {
return this.coreType.contains(CardCoreType.Enchantment);
}
/**
* Checks if is basic.
*
* @return true, if is basic
*/
public boolean isBasic() {
return this.superType.contains(CardSuperType.Basic);
}
/**
* Checks if is legendary.
*
* @return true, if is legendary
*/
public boolean isLegendary() {
return this.superType.contains(CardSuperType.Legendary);
}
/**
* Checks if is basic land.
*
* @return true, if is basic land
*/
public boolean isBasicLand() {
return this.isBasic() && this.isLand();
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
if (null == this.calculatedType) {
@@ -292,11 +198,6 @@ public final class CardType implements Comparable<CardType> {
}
}
/**
* Gets the types before dash.
*
* @return the types before dash
*/
public List<String> getTypesBeforeDash() {
final ArrayList<String> types = new ArrayList<String>();
for (final CardSuperType st : this.superType) {
@@ -308,31 +209,15 @@ public final class CardType implements Comparable<CardType> {
return types;
}
/*
* (non-Javadoc)
*
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
@Override
public int compareTo(final CardType o) {
return this.toString().compareTo(o.toString());
}
/**
* Gets the sub types.
*
* @return the sub types
*/
public List<String> getSubTypes() {
return this.subType;
}
/**
* Shares sub type with.
*
* @param ctOther the ct other
* @return true, if successful
*/
public boolean sharesSubTypeWith(CardType ctOther) {
for (String t : ctOther.getSubTypes()) {
if (this.subTypeContains(t)) {
@@ -343,43 +228,19 @@ public final class CardType implements Comparable<CardType> {
return false;
}
/**
* Returns wether or not this card is a Plane.
* @return a boolean
*/
public boolean isPlane() {
return this.coreType.contains(CardCoreType.Plane);
}
/**
* Returns wether or not this card is a Phenomenon.
* @return a boolean
*/
public boolean isPhenomenon() {
return this.coreType.contains(CardCoreType.Phenomenon);
}
///////// THIS ARRIVED FROM CardUtil
/**
* <p>
* isACardType.
* </p>
*
* @param cardType
* a {@link java.lang.String} object.
* @return a boolean.
*/
///////// Utility methods
public static boolean isACardType(final String cardType) {
return CardType.getAllCardTypes().contains(cardType);
}
/**
* <p>
* getAllCardTypes.
* </p>
*
* @return a {@link java.util.ArrayList} object.
*/
public static ArrayList<String> getAllCardTypes() {
final ArrayList<String> types = new ArrayList<String>();
@@ -394,14 +255,6 @@ public final class CardType implements Comparable<CardType> {
return types;
}
/**
* <p>
* getBasicTypes.
* </p>
*
* @return a {@link java.util.ArrayList} object.
* @since 1.1.3
*/
public static ArrayList<String> getBasicTypes() {
final ArrayList<String> types = new ArrayList<String>();
@@ -410,11 +263,6 @@ public final class CardType implements Comparable<CardType> {
return types;
}
/**
* Gets the land types.
*
* @return the land types
*/
public static ArrayList<String> getLandTypes() {
final ArrayList<String> types = new ArrayList<String>();
@@ -424,14 +272,6 @@ public final class CardType implements Comparable<CardType> {
return types;
}
/**
* <p>
* getCreatureTypes.
* </p>
*
* @return a {@link java.util.ArrayList} object.
* @since 1.1.6
*/
public static ArrayList<String> getCreatureTypes() {
final ArrayList<String> types = new ArrayList<String>();
@@ -440,79 +280,26 @@ public final class CardType implements Comparable<CardType> {
return types;
}
/**
* <p>
* isASuperType.
* </p>
*
* @param cardType
* a {@link java.lang.String} object.
* @return a boolean.
*/
public static boolean isASuperType(final String cardType) {
return (Constant.CardTypes.SUPER_TYPES.contains(cardType));
}
/**
* <p>
* isASubType.
* </p>
*
* @param cardType
* a {@link java.lang.String} object.
* @return a boolean.
*/
public static boolean isASubType(final String cardType) {
return (!CardType.isASuperType(cardType) && !CardType.isACardType(cardType));
}
/**
* <p>
* isACreatureType.
* </p>
*
* @param cardType
* a {@link java.lang.String} object.
* @return a boolean.
*/
public static boolean isACreatureType(final String cardType) {
return (Constant.CardTypes.CREATURE_TYPES.contains(cardType));
}
/**
* <p>
* isALandType.
* </p>
*
* @param cardType
* a {@link java.lang.String} object.
* @return a boolean.
*/
public static boolean isALandType(final String cardType) {
return (Constant.CardTypes.LAND_TYPES.contains(cardType));
}
/**
* Checks if is a planeswalker type.
*
* @param cardType
* the card type
* @return true, if is a planeswalker type
*/
public static boolean isAPlaneswalkerType(final String cardType) {
return (Constant.CardTypes.WALKER_TYPES.contains(cardType));
}
/**
* <p>
* isABasicLandType.
* </p>
*
* @param cardType
* a {@link java.lang.String} object.
* @return a boolean.
*/
public static boolean isABasicLandType(final String cardType) {
return (Constant.CardTypes.BASIC_TYPES.contains(cardType));
}

View File

@@ -32,16 +32,16 @@ public final class EditionCollection extends StorageView<CardEdition> {
super(new CardEdition.Reader("res/blockdata/setdata.txt"));
for (CardEdition ee : this) {
String alias = ee.getAlias();
if (null != alias) {
aliasToEdition.put(alias, ee);
}
aliasToEdition.put(ee.getCode2(), ee);
}
}
/**
* Gets the sets the by code.
* Gets a sets by code. It will search first by three letter codes, then by aliases and two-letter codes.
*
* @param code
* the code

View File

@@ -20,6 +20,7 @@ package forge.card;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import forge.game.GameFormat;
import forge.util.FileSection;
import forge.util.storage.StorageReaderFile;

View File

@@ -2,22 +2,17 @@ package forge.card;
import forge.card.mana.ManaCost;
/**
* TODO: Write javadoc for this type.
*
*/
public interface ICardCharacteristics {
String getName();
CardType getType();
ManaCost getManaCost();
ColorSet getColor();
public abstract String getName();
public abstract CardType getType();
public abstract ManaCost getManaCost();
public abstract ColorSet getColor();
int getIntPower();
int getIntToughness();
String getPower();
String getToughness();
int getInitialLoyalty();
public abstract int getIntPower();
public abstract int getIntToughness();
public abstract String getPower();
public abstract String getToughness();
public abstract int getInitialLoyalty();
public abstract String getOracleText();
}
String getOracleText();
}

View File

@@ -4,12 +4,13 @@ import java.util.Map.Entry;
public interface ICardRawAbilites
{
public abstract Iterable<String> getKeywords();
public abstract Iterable<String> getReplacements();
public abstract Iterable<String> getTriggers();
public abstract Iterable<String> getStaticAbilities();
public abstract Iterable<String> getAbilities();
public abstract String getNonAbilityText();
public abstract Iterable<Entry<String, String>> getVariables();
}
Iterable<String> getKeywords();
Iterable<String> getReplacements();
Iterable<String> getTriggers();
Iterable<String> getStaticAbilities();
Iterable<String> getAbilities();
String getNonAbilityText();
Iterable<Entry<String, String>> getVariables();
}

View File

@@ -21,9 +21,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import forge.Card;
import forge.card.cost.Cost;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;

View File

@@ -4,7 +4,99 @@ package forge.card.ability;
import java.util.Map;
import java.util.TreeMap;
import forge.card.ability.ai.*;
import forge.card.ability.ai.AddPhaseAi;
import forge.card.ability.ai.AddTurnAi;
import forge.card.ability.ai.AlwaysPlayAi;
import forge.card.ability.ai.AnimateAi;
import forge.card.ability.ai.AnimateAllAi;
import forge.card.ability.ai.AttachAi;
import forge.card.ability.ai.BondAi;
import forge.card.ability.ai.CanPlayAsDrawbackAi;
import forge.card.ability.ai.CannotPlayAi;
import forge.card.ability.ai.ChangeZoneAi;
import forge.card.ability.ai.ChangeZoneAllAi;
import forge.card.ability.ai.CharmAi;
import forge.card.ability.ai.ChooseCardAi;
import forge.card.ability.ai.ChooseCardNameAi;
import forge.card.ability.ai.ChooseColorAi;
import forge.card.ability.ai.ChoosePlayerAi;
import forge.card.ability.ai.ChooseSourceAi;
import forge.card.ability.ai.ChooseTypeAi;
import forge.card.ability.ai.ClashAi;
import forge.card.ability.ai.CloneAi;
import forge.card.ability.ai.ControlExchangeAi;
import forge.card.ability.ai.ControlGainAi;
import forge.card.ability.ai.CopyPermanentAi;
import forge.card.ability.ai.CounterAi;
import forge.card.ability.ai.CountersMoveAi;
import forge.card.ability.ai.CountersProliferateAi;
import forge.card.ability.ai.CountersPutAi;
import forge.card.ability.ai.CountersPutAllAi;
import forge.card.ability.ai.CountersRemoveAi;
import forge.card.ability.ai.DamageAllAi;
import forge.card.ability.ai.DamageDealAi;
import forge.card.ability.ai.DamageEachAi;
import forge.card.ability.ai.DamagePreventAi;
import forge.card.ability.ai.DamagePreventAllAi;
import forge.card.ability.ai.DebuffAi;
import forge.card.ability.ai.DebuffAllAi;
import forge.card.ability.ai.DelayedTriggerAi;
import forge.card.ability.ai.DestroyAi;
import forge.card.ability.ai.DestroyAllAi;
import forge.card.ability.ai.DigAi;
import forge.card.ability.ai.DigUntilAi;
import forge.card.ability.ai.DiscardAi;
import forge.card.ability.ai.DrainManaAi;
import forge.card.ability.ai.DrawAi;
import forge.card.ability.ai.EffectAi;
import forge.card.ability.ai.EncodeAi;
import forge.card.ability.ai.EndTurnAi;
import forge.card.ability.ai.FightAi;
import forge.card.ability.ai.FogAi;
import forge.card.ability.ai.GameLossAi;
import forge.card.ability.ai.GameWinAi;
import forge.card.ability.ai.LifeExchangeAi;
import forge.card.ability.ai.LifeGainAi;
import forge.card.ability.ai.LifeLoseAi;
import forge.card.ability.ai.LifeSetAi;
import forge.card.ability.ai.MillAi;
import forge.card.ability.ai.MustAttackAi;
import forge.card.ability.ai.MustBlockAi;
import forge.card.ability.ai.PeekAndRevealAi;
import forge.card.ability.ai.PermanentCreatureAi;
import forge.card.ability.ai.PermanentNoncreatureAi;
import forge.card.ability.ai.PhasesAi;
import forge.card.ability.ai.PlayAi;
import forge.card.ability.ai.PoisonAi;
import forge.card.ability.ai.ProtectAi;
import forge.card.ability.ai.ProtectAllAi;
import forge.card.ability.ai.PumpAi;
import forge.card.ability.ai.PumpAllAi;
import forge.card.ability.ai.RearrangeTopOfLibraryAi;
import forge.card.ability.ai.RegenerateAi;
import forge.card.ability.ai.RegenerateAllAi;
import forge.card.ability.ai.RemoveFromCombatAi;
import forge.card.ability.ai.RepeatAi;
import forge.card.ability.ai.RepeatEachAi;
import forge.card.ability.ai.RestartGameAi;
import forge.card.ability.ai.RevealAi;
import forge.card.ability.ai.RevealHandAi;
import forge.card.ability.ai.SacrificeAi;
import forge.card.ability.ai.SacrificeAllAi;
import forge.card.ability.ai.ScryAi;
import forge.card.ability.ai.SetStateAi;
import forge.card.ability.ai.SetStateAllAi;
import forge.card.ability.ai.ShuffleAi;
import forge.card.ability.ai.StoreSVarAi;
import forge.card.ability.ai.TapAi;
import forge.card.ability.ai.TapAllAi;
import forge.card.ability.ai.TapOrUntapAi;
import forge.card.ability.ai.TapOrUntapAllAi;
import forge.card.ability.ai.TokenAi;
import forge.card.ability.ai.TwoPilesAi;
import forge.card.ability.ai.UnattachAllAi;
import forge.card.ability.ai.UntapAi;
import forge.card.ability.ai.UntapAllAi;
import forge.card.ability.effects.*;
import forge.util.ReflectionUtil;

View File

@@ -19,10 +19,10 @@ package forge.card.ability.ai;
import java.util.List;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.card.ability.AbilityUtils;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.AIPlayer;
import forge.game.player.Player;

View File

@@ -17,8 +17,8 @@
*/
package forge.card.ability.ai;
import forge.card.spellability.SpellAbility;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.game.player.AIPlayer;
/**

View File

@@ -12,10 +12,10 @@ import forge.Card;
import forge.CardCharacteristicName;
import forge.CardLists;
import forge.CardPredicates;
import forge.CardPredicates.Presets;
import forge.Constant;
import forge.GameEntity;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.card.ability.AbilityUtils;
import forge.card.ability.ApiType;
import forge.card.ability.SpellAbilityAi;
@@ -28,10 +28,10 @@ import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellPermanent;
import forge.card.spellability.Target;
import forge.game.GlobalRuleChange;
import forge.game.ai.ComputerUtilCard;
import forge.game.ai.ComputerUtilCombat;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilBlock;
import forge.game.ai.ComputerUtilCard;
import forge.game.ai.ComputerUtilCombat;
import forge.game.ai.ComputerUtilCost;
import forge.game.ai.ComputerUtilMana;
import forge.game.phase.Combat;

View File

@@ -5,7 +5,9 @@ import java.util.List;
import java.util.Random;
import org.apache.commons.lang.math.RandomUtils;
import forge.card.ability.SpellAbilityAi;import forge.card.ability.effects.CharmEffect;
import forge.card.ability.SpellAbilityAi;
import forge.card.ability.effects.CharmEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.game.player.AIPlayer;

View File

@@ -24,7 +24,6 @@ import java.util.Map;
import com.google.common.base.Predicate;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.card.ability.AbilityUtils;

View File

@@ -8,8 +8,8 @@ import com.google.common.base.Predicate;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.Singletons;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;

View File

@@ -22,7 +22,6 @@ import java.util.List;
import com.google.common.base.Predicate;
import forge.Card;
import forge.CardLists;
import forge.CounterType;
import forge.game.ai.ComputerUtilCard;

View File

@@ -22,9 +22,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import forge.Card;
import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.ability.SpellAbilityAi;

View File

@@ -17,8 +17,8 @@
*/
package forge.card.ability.ai;
import forge.card.spellability.SpellAbility;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.game.player.AIPlayer;
/**

View File

@@ -10,8 +10,8 @@ import forge.card.cost.Cost;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.ai.ComputerUtilCombat;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilCombat;
import forge.game.ai.ComputerUtilCost;
import forge.game.ai.ComputerUtilMana;
import forge.game.phase.PhaseType;

View File

@@ -2,6 +2,7 @@ package forge.card.ability.ai;
import java.util.ArrayList;
import java.util.List;
import com.google.common.base.Predicate;
import forge.Card;

View File

@@ -3,12 +3,13 @@ package forge.card.ability.ai;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.google.common.base.Predicate;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.ability.SpellAbilityAi;
import forge.card.cost.Cost;

View File

@@ -12,9 +12,9 @@ import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilCard;
import forge.game.ai.ComputerUtilCombat;
import forge.game.ai.ComputerUtil;
import forge.game.phase.CombatUtil;
import forge.game.phase.PhaseType;
import forge.game.player.AIPlayer;

View File

@@ -21,7 +21,6 @@ import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates;
import forge.Singletons;

View File

@@ -7,8 +7,8 @@ import com.google.common.base.Predicate;
import forge.Card;
import forge.CardLists;
import forge.CounterType;
import forge.CardPredicates.Presets;
import forge.CounterType;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;

View File

@@ -1,6 +1,7 @@
package forge.card.ability.ai;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates;

View File

@@ -4,8 +4,8 @@ import forge.Card;
import forge.Singletons;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.game.ai.ComputerUtilCombat;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilCombat;
import forge.game.player.AIPlayer;
public class StoreSVarAi extends SpellAbilityAi {

View File

@@ -8,8 +8,8 @@ import com.google.common.collect.Iterables;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.Singletons;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;

View File

@@ -8,8 +8,8 @@ import com.google.common.collect.Iterables;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.Singletons;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;

View File

@@ -5,8 +5,8 @@ import java.util.Random;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.ability.SpellAbilityAi;
import forge.card.cost.Cost;

View File

@@ -18,8 +18,8 @@
package forge.card.ability.effects;
import java.util.ArrayList;
import forge.Card;
import forge.Card;
import forge.card.ability.SpellAbilityEffect;
import forge.card.spellability.SpellAbility;
import forge.card.staticability.StaticAbility;

View File

@@ -2,6 +2,7 @@ package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.Command;

View File

@@ -2,6 +2,7 @@ package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.List;
import com.google.common.base.Predicates;
import forge.Card;

View File

@@ -2,6 +2,7 @@ package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.card.ability.AbilityFactory;
import forge.card.ability.SpellAbilityEffect;

View File

@@ -5,8 +5,8 @@ import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.Singletons;
import forge.card.CardType;
import forge.card.ability.SpellAbilityEffect;
import forge.card.cardfactory.CardFactoryUtil;

View File

@@ -12,8 +12,8 @@ import com.google.common.collect.Lists;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.Singletons;
import forge.card.CardRulesPredicates;
import forge.card.ability.SpellAbilityEffect;
import forge.card.spellability.SpellAbility;

View File

@@ -6,6 +6,7 @@ import java.util.Map;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import forge.Card;
import forge.card.ability.AbilityFactory;
import forge.card.ability.AbilityUtils;

View File

@@ -4,6 +4,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import com.google.common.base.Predicate;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
@@ -20,8 +22,6 @@ import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
import com.google.common.base.Predicate;
public class ChooseSourceEffect extends SpellAbilityEffect {
@Override
protected String getStackDescription(SpellAbility sa) {

View File

@@ -86,7 +86,7 @@ public class CloneEffect extends SpellAbilityEffect {
tgtCard = cloneTargets.get(0);
}
String imageFileName = host.getImageFilename();
String imageFileName = host.getImageKey();
boolean keepName = sa.hasParam("KeepName");
String originalName = tgtCard.getName();
@@ -152,7 +152,7 @@ public class CloneEffect extends SpellAbilityEffect {
}
tgtCard.setFlipCard(true);
//keep the Clone card image for the cloned card
tgtCard.setImageFilename(imageFileName);
tgtCard.setImageKey(imageFileName);
if (!tgtCard.isFlipped()) {
tgtCard.setState(CardCharacteristicName.Original);
@@ -171,7 +171,7 @@ public class CloneEffect extends SpellAbilityEffect {
tgtCard.clearImprinted();
//keep the Clone card image for the cloned card
tgtCard.setImageFilename(imageFileName);
tgtCard.setImageKey(imageFileName);
// check if clone is now an Aura that needs to be attached
if (tgtCard.isAura()) {

View File

@@ -94,7 +94,7 @@ public class CopyPermanentEffect extends SpellAbilityEffect {
copy = CardFactory.copyStats(c);
copy.setName(c.getName());
copy.setImageFilename(c.getImageFilename());
copy.setImageKey(c.getImageKey());
copy.setOwner(controller);
copy.setController(controller, 0);
@@ -126,7 +126,7 @@ public class CopyPermanentEffect extends SpellAbilityEffect {
if (c.isFlipCard()) { // Cloned Flips CAN flip.
copy.setState(CardCharacteristicName.Original);
c.setState(CardCharacteristicName.Original);
copy.setImageFilename(c.getImageFilename());
copy.setImageKey(c.getImageKey());
if (!c.isInAlternateState()) {
copy.setState(CardCharacteristicName.Flipped);
}

View File

@@ -2,6 +2,7 @@ package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.Singletons;
import forge.card.ability.SpellAbilityEffect;

View File

@@ -102,7 +102,7 @@ public class EffectEffect extends SpellAbilityEffect {
eff.addType("Effect"); // Or Emblem
eff.setToken(true); // Set token to true, so when leaving play it gets nuked
eff.setOwner(controller);
eff.setImageFilename(sa.hasParam("Image") ? sa.getParam("Image") : hostCard.getImageFilename());
eff.setImageKey(sa.hasParam("Image") ? sa.getParam("Image") : hostCard.getImageKey());
eff.setColor(hostCard.getColor());
eff.setImmutable(true);
eff.setEffectSource(hostCard);

View File

@@ -14,8 +14,8 @@ import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.ability.SpellAbilityEffect;
import forge.card.cost.Cost;
import forge.card.cost.CostPartMana;
import forge.card.cost.CostPart;
import forge.card.cost.CostPartMana;
import forge.card.mana.ManaCost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;

View File

@@ -3,6 +3,7 @@ package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import forge.Card;
import forge.CardUtil;
import forge.Command;

View File

@@ -2,6 +2,7 @@ package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.Singletons;

View File

@@ -20,9 +20,7 @@ package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.card.ability.SpellAbilityEffect;
import forge.game.player.Player;
import forge.gui.GuiChoose;

View File

@@ -19,8 +19,8 @@ package forge.card.ability.effects;
import java.util.Arrays;
import java.util.List;
import forge.Card;
import forge.Card;
import forge.Singletons;
import forge.card.ability.AbilityFactory;
import forge.card.ability.AbilityUtils;
@@ -30,6 +30,7 @@ import forge.card.spellability.SpellAbility;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerHandler;
import forge.game.player.Player;
import forge.item.CardToken;
public class TokenEffect extends SpellAbilityEffect {
@@ -66,7 +67,7 @@ public class TokenEffect extends SpellAbilityEffect {
}
if (mapParams.hasParam("TokenImage")) {
image = mapParams.getParam("TokenImage");
image = CardToken.makeTokenFileName(mapParams.getParam("TokenImage"));
} else {
image = "";
}
@@ -144,7 +145,6 @@ public class TokenEffect extends SpellAbilityEffect {
final Card host = sa.getSourceCard();
readParameters(sa);
String imageName = "";
String cost = "";
// Construct colors
final String[] substitutedColors = Arrays.copyOf(this.tokenColors, this.tokenColors.length);
@@ -170,8 +170,10 @@ public class TokenEffect extends SpellAbilityEffect {
colorDesc = "C";
}
}
final String imageName;
if (this.tokenImage.equals("")) {
imageName += colorDesc.replace(" ", "") + " " + this.tokenPower + " " + this.tokenToughness + " " + this.tokenName;
imageName = CardToken.makeTokenFileName(colorDesc.replace(" ", ""), tokenPower, tokenToughness, tokenName);
} else {
imageName = this.tokenImage;
}

View File

@@ -2,6 +2,7 @@ package forge.card.ability.effects;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import forge.Card;

View File

@@ -1,12 +1,13 @@
package forge.card.ability.effects;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.ability.SpellAbilityEffect;
import forge.card.cardfactory.CardFactoryUtil;

View File

@@ -42,6 +42,7 @@ import forge.card.spellability.Target;
import forge.card.trigger.TriggerHandler;
import forge.game.player.Player;
import forge.item.CardDb;
import forge.item.CardPrinted;
import forge.item.IPaperCard;
/**
@@ -223,40 +224,35 @@ public class CardFactory {
c.setCurSetCode(cp.getEdition());
c.setRarity(cp.getRarity());
c.setRandomPicture(cp.getArtIndex() + 1);
String originalPicture = cp.getImageFilename();
String originalPicture = cp.getImageKey();
//System.out.println(c.getName() + " -> " + originalPicture);
c.setImageFilename(originalPicture);
c.setImageKey(originalPicture);
c.setToken(cp.isToken());
if (c.hasAlternateState()) {
if (c.isFlipCard()) {
c.setState(CardCharacteristicName.Flipped);
c.setImageFilename(originalPicture); // should assign a 180 degrees rotated picture here?
c.setImageKey(originalPicture); // should assign a 180 degrees rotated picture here?
}
else if (c.isDoubleFaced()) {
else if (c.isDoubleFaced() && cp instanceof CardPrinted) {
c.setState(CardCharacteristicName.Transformed);
c.setImageFilename(CardUtil.buildFilename(cp, cp.getRules().getOtherPart().getName()));
c.setImageKey(((CardPrinted)cp).getImageKey(true));
}
else if (c.getRules().getSplitType() == CardSplitType.Split) {
c.setState(CardCharacteristicName.LeftSplit);
c.setImageFilename(originalPicture);
c.setImageKey(originalPicture);
c.setCurSetCode(cp.getEdition());
c.setRarity(cp.getRarity());
c.setState(CardCharacteristicName.RightSplit);
c.setImageFilename(originalPicture);
} else {
c.setImageFilename(CardUtil.buildFilename(c));
c.setImageKey(originalPicture);
}
c.setCurSetCode(cp.getEdition());
c.setRarity(cp.getRarity());
c.setState(CardCharacteristicName.Original);
}
return c;
}
private static void buildAbilities(final Card card) {
@@ -460,7 +456,7 @@ public class CardFactory {
to.setSVars(from.getSVars());
to.setIntrinsicAbilities(from.getIntrinsicAbilities());
to.setImageFilename(from.getImageFilename());
to.setImageKey(from.getImageKey());
to.setTriggers(from.getTriggers());
to.setReplacementEffects(from.getReplacementEffects());
to.setStaticAbilityStrings(from.getStaticAbilityStrings());

View File

@@ -7,7 +7,6 @@ import javax.swing.JOptionPane;
import forge.Card;
import forge.Command;
import forge.Singletons;
import forge.card.cost.Cost;
import forge.card.mana.ManaCost;

View File

@@ -19,6 +19,7 @@ package forge.card.cardfactory;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import com.google.common.base.Predicate;
@@ -27,7 +28,6 @@ import com.google.common.collect.Iterables;
import forge.Card;
import forge.CardCharacteristicName;
import forge.CardLists;
import forge.CardPredicates;
import forge.CardPredicates.Presets;
@@ -57,6 +57,7 @@ import forge.game.zone.PlayerZone;
import forge.game.zone.Zone;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
import forge.item.CardToken;
import forge.util.Aggregates;
/**
@@ -73,7 +74,8 @@ public class CardFactoryCreatures {
final Ability ability = new Ability(card, ManaCost.ZERO) {
@Override
public void resolve() {
final List<Card> cl = CardFactoryUtil.makeToken("Stangg Twin", "RG 3 4 Stangg Twin",
final List<Card> cl = CardFactoryUtil.makeToken("Stangg Twin",
CardToken.makeTokenFileName("RG", 3, 4, "Stangg Twin"),
card.getController(), "R G", new String[] { "Legendary", "Creature", "Human", "Warrior" },
3, 4, new String[] { "" });
@@ -373,8 +375,8 @@ public class CardFactoryCreatures {
} // resolve()
public void makeToken() {
CardFactoryUtil.makeToken("Kithkin Soldier", "W 1 1 Kithkin Soldier", card.getController(), "W",
new String[] { "Creature", "Kithkin", "Soldier" }, 1, 1, new String[] { "" });
CardFactoryUtil.makeToken("Kithkin Soldier", CardToken.makeTokenFileName("W", 1, 1, "Kithkin Soldier"),
card.getController(), "W", new String[] { "Creature", "Kithkin", "Soldier" }, 1, 1, new String[] { "" });
}
};

View File

@@ -22,7 +22,6 @@ import java.util.List;
import javax.swing.JOptionPane;
import forge.Card;
import forge.CardLists;
import forge.Command;
import forge.Singletons;

View File

@@ -42,8 +42,8 @@ import forge.card.cost.Cost;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;
import forge.control.input.InputPayManaSimple;
import forge.control.input.InputPayManaExecuteCommands;
import forge.control.input.InputPayManaSimple;
import forge.game.GameState;
import forge.game.ai.ComputerUtil;
import forge.game.player.Player;

View File

@@ -31,7 +31,6 @@ import com.google.common.collect.Lists;
import forge.Card;
import forge.CardCharacteristicName;
import forge.CardLists;
import forge.CardPredicates;
import forge.CardPredicates.Presets;
@@ -45,9 +44,9 @@ import forge.card.ability.AbilityFactory;
import forge.card.ability.AbilityUtils;
import forge.card.ability.ApiType;
import forge.card.cost.Cost;
import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostParser;
import forge.card.mana.ManaCostShard;
import forge.card.mana.ManaCost;
import forge.card.replacement.ReplacementEffect;
import forge.card.replacement.ReplacementHandler;
import forge.card.replacement.ReplacementLayer;
@@ -80,7 +79,6 @@ import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
import forge.gui.match.CMatchUI;
import forge.util.Aggregates;
import forge.view.ButtonUtil;
/**
@@ -2438,36 +2436,13 @@ public class CardFactoryUtil {
return true;
}
/**
* <p>
* makeToken.
* </p>
*
* @param name
* a {@link java.lang.String} object.
* @param imageName
* a {@link java.lang.String} object.
* @param controller
* a {@link forge.game.player.Player} object.
* @param manaCost
* a {@link java.lang.String} object.
* @param types
* an array of {@link java.lang.String} objects.
* @param baseAttack
* a int.
* @param baseDefense
* a int.
* @param intrinsicKeywords
* an array of {@link java.lang.String} objects.
* @return a {@link forge.CardList} object.
*/
public static List<Card> makeToken(final String name, final String imageName, final Player controller,
final String manaCost, final String[] types, final int baseAttack, final int baseDefense,
final String[] intrinsicKeywords) {
final List<Card> list = new ArrayList<Card>();
final Card c = new Card();
c.setName(name);
c.setImageFilename(imageName);
c.setImageKey(imageName);
// TODO - most tokens mana cost is 0, this needs to be fixed
// c.setManaCost(manaCost);
@@ -2528,7 +2503,7 @@ public class CardFactoryUtil {
final List<String> kal = thisToken.getIntrinsicKeyword();
final String[] tokenKeywords = new String[kal.size()];
kal.toArray(tokenKeywords);
final List<Card> tokens = CardFactoryUtil.makeToken(thisToken.getName(), thisToken.getImageFilename(),
final List<Card> tokens = CardFactoryUtil.makeToken(thisToken.getName(), thisToken.getImageKey(),
thisToken.getController(), thisToken.getManaCost().toString(), tokenTypes, thisToken.getBaseAttack(),
thisToken.getBaseDefense(), tokenKeywords);

View File

@@ -82,10 +82,12 @@ public class CardStorageReader {
* if true, attempts to load cards from a zip file, if one
* exists.
*/
public CardStorageReader(final File theCardsFolder, final boolean useZip) {
public CardStorageReader(String cardDataDir, final boolean useZip) {
// These read data for lightweight classes.
this.rulesReader = new CardRulesReader();
File theCardsFolder = new File(cardDataDir);
if (!theCardsFolder.exists()) {
throw new RuntimeException("CardReader : constructor error -- file not found -- filename is "

View File

@@ -24,9 +24,9 @@ import java.util.regex.Pattern;
import forge.Card;
import forge.CounterType;
import forge.Singletons;
import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostBeingPaid;
import forge.card.mana.ManaCostParser;
import forge.card.mana.ManaCost;
import forge.card.spellability.SpellAbility;
import forge.game.zone.ZoneType;
import forge.util.TextUtil;

View File

@@ -23,10 +23,9 @@ import java.util.List;
import com.google.common.base.Predicate;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates;
import forge.Singletons;
import forge.CardLists;
import forge.card.ability.AbilityUtils;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;

View File

@@ -22,7 +22,6 @@ import java.util.Iterator;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates;
import forge.Singletons;

View File

@@ -22,7 +22,6 @@ import java.util.Iterator;
import java.util.List;
import forge.Card;
import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.spellability.SpellAbility;

View File

@@ -21,7 +21,6 @@ import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.CardUtil;
import forge.card.spellability.SpellAbility;

View File

@@ -20,7 +20,6 @@ package forge.card.cost;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.CounterType;
import forge.Singletons;

View File

@@ -21,7 +21,6 @@ import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.CounterType;
import forge.Singletons;

View File

@@ -23,7 +23,6 @@ import java.util.List;
import javax.swing.JOptionPane;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.card.ability.AbilityUtils;

View File

@@ -21,9 +21,8 @@ import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.Singletons;
import forge.CardLists;
import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;

View File

@@ -23,7 +23,6 @@ import java.util.List;
import javax.swing.JOptionPane;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.card.ability.AbilityUtils;

View File

@@ -21,7 +21,6 @@ import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates.Presets;
import forge.Singletons;

View File

@@ -20,7 +20,6 @@ package forge.card.cost;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates.Presets;
import forge.Singletons;

View File

@@ -21,6 +21,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import forge.Constant;
import forge.card.MagicColor;

View File

@@ -17,8 +17,8 @@
*/
package forge.card.mana;
import forge.card.MagicColor;
import forge.card.ColorSet;
import forge.card.MagicColor;
import forge.util.BinaryUtil;
/**

View File

@@ -21,7 +21,6 @@ import java.util.ArrayList;
import forge.Card;
import forge.Singletons;
import forge.card.cost.Cost;
import forge.card.cost.CostPayment;
import forge.card.staticability.StaticAbility;

View File

@@ -21,9 +21,8 @@ import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.Singletons;
import forge.CardLists;
import forge.Singletons;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.Cost;
import forge.card.cost.CostPayment;

View File

@@ -22,7 +22,6 @@ import java.util.List;
import java.util.Map;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.card.ability.AbilityUtils;

View File

@@ -22,7 +22,6 @@ import java.util.List;
import java.util.Map;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.card.ability.AbilityUtils;

View File

@@ -21,7 +21,6 @@ import java.util.HashMap;
import java.util.List;
import forge.Card;
import forge.game.player.Player;
/**

View File

@@ -26,7 +26,6 @@ import com.google.common.base.Supplier;
import com.google.common.collect.Iterables;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates;
import forge.Command;

View File

@@ -24,9 +24,8 @@ import java.util.List;
import com.google.common.base.Predicate;
import forge.Card;
import forge.Singletons;
import forge.CardLists;
import forge.Singletons;
import forge.card.ability.AbilityUtils;
import forge.card.ability.ApiType;
import forge.control.input.Input;
@@ -34,7 +33,6 @@ import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
import forge.gui.match.CMatchUI;
import forge.view.ButtonUtil;
/**

View File

@@ -23,10 +23,9 @@ import java.util.HashMap;
import java.util.List;
import forge.Card;
import forge.Singletons;
import forge.CardLists;
import forge.CardUtil;
import forge.Singletons;
import forge.StaticEffect;
import forge.StaticEffects;
import forge.card.CardType;

View File

@@ -23,7 +23,6 @@ import java.util.List;
import java.util.Map;
import forge.Card;
import forge.Singletons;
import forge.card.TriggerReplacementBase;
import forge.card.spellability.Ability;

View File

@@ -19,7 +19,6 @@ package forge.card.trigger;
import java.util.Map;
import forge.Card;
import forge.card.spellability.SpellAbility;

View File

@@ -19,7 +19,6 @@ package forge.card.trigger;
import java.util.Map;
import forge.Card;
import forge.card.spellability.SpellAbility;

View File

@@ -20,9 +20,7 @@ package forge.card.trigger;
import java.util.List;
import java.util.Map;
import forge.Card;
import forge.card.spellability.SpellAbility;
/**

View File

@@ -21,7 +21,6 @@ import java.util.List;
import java.util.Map;
import forge.Card;
import forge.GameEntity;
import forge.card.spellability.SpellAbility;

View File

@@ -19,7 +19,6 @@ package forge.card.trigger;
import java.util.Map;
import forge.Card;
import forge.card.spellability.SpellAbility;

View File

@@ -19,7 +19,6 @@ package forge.card.trigger;
import java.util.Map;
import forge.Card;
import forge.card.spellability.SpellAbility;

View File

@@ -19,7 +19,6 @@ package forge.card.trigger;
import java.util.Map;
import forge.Card;
import forge.card.spellability.SpellAbility;

View File

@@ -24,7 +24,6 @@ import java.util.List;
import java.util.Map;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.card.ability.AbilityFactory;
@@ -40,28 +39,15 @@ import forge.game.GlobalRuleChange;
import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseType;
import forge.game.player.AIPlayer;
//import forge.util.TextUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
/**
* <p>
* TriggerHandler class.
* </p>
*
* @author Forge
* @version $Id$
*/
public class TriggerHandler {
private final ArrayList<TriggerType> suppressedModes = new ArrayList<TriggerType>();
private final ArrayList<Trigger> delayedTriggers = new ArrayList<Trigger>();
private final List<TriggerWaiting> waitingTriggers = new ArrayList<TriggerWaiting>();
/**
* Clean up temporary triggers.
*/
public final void cleanUpTemporaryTriggers() {
final List<Card> absolutelyAllCards = Singletons.getModel().getGame().getCardsInGame();
for (final Card c : absolutelyAllCards) {
@@ -80,34 +66,14 @@ public class TriggerHandler {
}
/**
* <p>
* registerDelayedTrigger.
* </p>
*
* @param trig
* a {@link forge.card.trigger.Trigger} object.
*/
public final void registerDelayedTrigger(final Trigger trig) {
this.delayedTriggers.add(trig);
}
/**
* <p>
* clearDelayedTrigger.
* </p>
*/
public final void clearDelayedTrigger() {
this.delayedTriggers.clear();
}
/**
* <p>
* clearDelayedTrigger.
* </p>
* @param card
* a card object.
*/
public final void clearDelayedTrigger(Card card) {
ArrayList<Trigger> deltrigs = new ArrayList<Trigger>(this.delayedTriggers);
@@ -119,45 +85,14 @@ public class TriggerHandler {
}
/**
* <p>
* suppressMode.
* </p>
*
* @param mode
* a {@link java.lang.String} object.
*/
public final void suppressMode(final TriggerType mode) {
this.suppressedModes.add(mode);
}
/**
* <p>
* clearSuppression.
* </p>
*
* @param mode
* a {@link java.lang.String} object.
*/
public final void clearSuppression(final TriggerType mode) {
this.suppressedModes.remove(mode);
}
/**
* <p>
* parseTrigger.
* </p>
*
* @param name
* a {@link java.lang.String} object.
* @param trigParse
* a {@link java.lang.String} object.
* @param host
* a {@link forge.Card} object.
* @param intrinsic
* a boolean.
* @return a {@link forge.card.trigger.Trigger} object.
*/
public static Trigger parseTrigger(final String name, final String trigParse, final Card host,
final boolean intrinsic) {
final Trigger ret = TriggerHandler.parseTrigger(trigParse, host, intrinsic);
@@ -165,37 +100,11 @@ public class TriggerHandler {
return ret;
}
/**
* <p>
* parseTrigger.
* </p>
*
* @param trigParse
* a {@link java.lang.String} object.
* @param host
* a {@link forge.Card} object.
* @param intrinsic
* a boolean.
* @return a {@link forge.card.trigger.Trigger} object.
*/
public static Trigger parseTrigger(final String trigParse, final Card host, final boolean intrinsic) {
final HashMap<String, String> mapParams = TriggerHandler.parseParams(trigParse);
return TriggerHandler.parseTrigger(mapParams, host, intrinsic);
}
/**
* <p>
* parseTrigger.
* </p>
*
* @param mapParams
* a {@link java.util.HashMap} object.
* @param host
* a {@link forge.Card} object.
* @param intrinsic
* a boolean.
* @return a {@link forge.card.trigger.Trigger} object.
*/
public static Trigger parseTrigger(final Map<String, String> mapParams, final Card host, final boolean intrinsic) {
Trigger ret = null;
@@ -215,15 +124,6 @@ public class TriggerHandler {
return ret;
}
/**
* <p>
* parseParams.
* </p>
*
* @param trigParse
* a {@link java.lang.String} object.
* @return a {@link java.util.HashMap} object.
*/
private static HashMap<String, String> parseParams(final String trigParse) {
final HashMap<String, String> mapParams = new HashMap<String, String>();
@@ -256,17 +156,6 @@ public class TriggerHandler {
return mapParams;
}
/**
* <p>
* runTrigger.
* </p>
*
* @param mode
* a {@link java.lang.String} object.
* @param runParams
* a {@link java.util.Map} object.
* @param forceHeldTriggers Force certain triggers to be added the waitingTriggers if stack isnt frozen
*/
public final void runTrigger(final TriggerType mode, final Map<String, Object> runParams, boolean holdTrigger) {
if (this.suppressedModes.contains(mode)) {
return;
@@ -401,19 +290,6 @@ public class TriggerHandler {
// Checks if the conditions are right for a single trigger to go off, and
// runs it if so.
// Return true if the trigger went off, false otherwise.
/**
* <p>
* runSingleTrigger.
* </p>
*
* @param regtrig
* a {@link forge.card.trigger.Trigger} object.
* @param mode
* a {@link java.lang.String} object.
* @param runParams
* a {@link java.util.HashMap} object.
* @return false if trigger is not happening.
*/
private boolean runSingleTrigger(final Trigger regtrig, final TriggerType mode, final Map<String, Object> runParams) {
final Map<String, String> triggerParams = regtrig.getMapParams();
final GameState game = Singletons.getModel().getGame();
@@ -558,12 +434,6 @@ public class TriggerHandler {
private final ArrayList<Integer> triggersAlwaysAccept = new ArrayList<Integer>();
private final ArrayList<Integer> triggersAlwaysDecline = new ArrayList<Integer>();
/**
* Sets the always accept trigger.
*
* @param trigID
* the new always accept trigger
*/
public final void setAlwaysAcceptTrigger(final int trigID) {
if (this.triggersAlwaysDecline.contains(trigID)) {
this.triggersAlwaysDecline.remove((Object) trigID);
@@ -574,12 +444,6 @@ public class TriggerHandler {
}
}
/**
* Sets the always decline trigger.
*
* @param trigID
* the new always decline trigger
*/
public final void setAlwaysDeclineTrigger(final int trigID) {
if (this.triggersAlwaysAccept.contains(trigID)) {
this.triggersAlwaysAccept.remove((Object) trigID);
@@ -590,42 +454,19 @@ public class TriggerHandler {
}
}
/**
* Sets the always ask trigger.
*
* @param trigID
* the new always ask trigger
*/
public final void setAlwaysAskTrigger(final int trigID) {
this.triggersAlwaysAccept.remove((Object) trigID);
this.triggersAlwaysDecline.remove((Object) trigID);
}
/**
* Checks if is always accepted.
*
* @param trigID
* the trig id
* @return true, if is always accepted
*/
public final boolean isAlwaysAccepted(final int trigID) {
return this.triggersAlwaysAccept.contains(trigID);
}
/**
* Checks if is always declined.
*
* @param trigID
* the trig id
* @return true, if is always declined
*/
public final boolean isAlwaysDeclined(final int trigID) {
return this.triggersAlwaysDecline.contains(trigID);
}
/**
* Clear trigger settings.
*/
public final void clearTriggerSettings() {
this.triggersAlwaysAccept.clear();
this.triggersAlwaysDecline.clear();

View File

@@ -19,7 +19,6 @@ package forge.card.trigger;
import java.util.Map;
import forge.Card;
import forge.card.spellability.SpellAbility;

View File

@@ -17,9 +17,8 @@
*/
package forge.card.trigger;
import forge.Singletons;
import forge.Card;
import forge.Singletons;
import forge.card.cost.Cost;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbilityStackInstance;

View File

@@ -46,7 +46,6 @@ import forge.gui.match.VMatchUI;
import forge.gui.match.controllers.CDock;
import forge.gui.toolbox.CardFaceSymbols;
import forge.gui.toolbox.FSkin;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
import forge.quest.data.QuestPreferences.QPref;
import forge.quest.io.QuestDataIO;
@@ -152,13 +151,12 @@ public enum FControl {
// Does not use progress bar, due to be deprecated with battlefield refactoring.
CardFaceSymbols.loadImages();
this.shortcuts = KeyboardShortcuts.attachKeyboardShortcuts();
this.display = FView.SINGLETON_INSTANCE.getLpnDocument();
// Preload quest data if present
final File dirQuests = ForgeProps.getFile(NewConstants.Quest.DATA_DIR);
final String questname = Singletons.getModel().getQuestPreferences().getPreference(QPref.CURRENT_QUEST);
final File dirQuests = new File(NewConstants.QUEST_SAVE_DIR);
final String questname = Singletons.getModel().getQuestPreferences().getPref(QPref.CURRENT_QUEST);
final File data = new File(dirQuests.getPath(), questname);
if (data.exists()) {
Singletons.getModel().getQuest().load(QuestDataIO.loadData(data));

Some files were not shown because too many files have changed in this diff Show More