replace RuntimeException with GameException in cases where game object is available for more informative exception reports
parent
a7604a93fe
commit
5263fc07f8
|
@ -7,6 +7,11 @@ public class GameException extends RuntimeException {
|
|||
|
||||
final MagicGame game;
|
||||
|
||||
public GameException(final String desc, final MagicGame aGame) {
|
||||
super(desc);
|
||||
game = aGame;
|
||||
}
|
||||
|
||||
public GameException(final Throwable cause, final MagicGame aGame) {
|
||||
super(cause);
|
||||
game = aGame;
|
||||
|
|
|
@ -8,6 +8,8 @@ import magic.model.target.MagicTargetFilter;
|
|||
import magic.model.target.MagicTargetType;
|
||||
import magic.model.stack.MagicItemOnStack;
|
||||
import magic.model.stack.MagicCardOnStack;
|
||||
import magic.exception.GameException;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.EnumMap;
|
||||
import java.util.LinkedList;
|
||||
|
@ -138,7 +140,7 @@ public class MagicCard
|
|||
card = mappedOwner.getLibrary().getCard(id);
|
||||
}
|
||||
if (card == MagicCard.NONE) {
|
||||
throw new RuntimeException("Mapping card failed, card " + getName() + " " + id + " not found");
|
||||
throw new GameException("Mapping card failed, card " + getName() + " " + id + " not found", game);
|
||||
}
|
||||
return card;
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import magic.model.MagicRandom;
|
|||
import magic.model.MagicSource;
|
||||
import magic.model.event.MagicEvent;
|
||||
import magic.exception.UndoClickedException;
|
||||
import magic.exception.GameException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
@ -85,7 +86,7 @@ public abstract class MagicChoice {
|
|||
final Collection<?> options=getArtificialOptions(game,event);
|
||||
final int size=options.size();
|
||||
if (size == 0) {
|
||||
throw new RuntimeException("no artificial choice result for " + event);
|
||||
throw new GameException("no artificial choice result for " + event, game);
|
||||
} else if (size == 1) {
|
||||
return Collections.singletonList(new Object[]{options.iterator().next()});
|
||||
} else {
|
||||
|
@ -102,7 +103,7 @@ public abstract class MagicChoice {
|
|||
final List<Object[]> choices = getArtificialChoiceResults(game, event);
|
||||
final int size = choices.size();
|
||||
if (size == 0) {
|
||||
throw new RuntimeException("no simulation choice result");
|
||||
throw new GameException("no simulation choice result", game);
|
||||
}
|
||||
return choices.get(MagicRandom.nextRNGInt(choices.size()));
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import magic.model.MagicAbility;
|
|||
import magic.model.MagicGame;
|
||||
import magic.model.MagicPermanent;
|
||||
import magic.model.MagicPlayer;
|
||||
import magic.exception.GameException;
|
||||
|
||||
/** Creature permanent or player. Can be your own creatures. */
|
||||
public class MagicDamageTargetPicker extends MagicTargetPicker<MagicTarget> {
|
||||
|
@ -55,7 +56,7 @@ public class MagicDamageTargetPicker extends MagicTargetPicker<MagicTarget> {
|
|||
final int score=leftToughness<=0?permanent.getScore():20-leftToughness;
|
||||
return permanent.getController()==player?-score:score;
|
||||
} else {
|
||||
throw new RuntimeException("target is neither MagicPlayer nor MagicPermanent");
|
||||
throw new GameException("target is neither MagicPlayer nor MagicPermanent", game);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import magic.model.MagicGame;
|
|||
import magic.model.MagicPermanent;
|
||||
import magic.model.event.MagicEvent;
|
||||
import magic.model.target.MagicTargetFilter;
|
||||
import magic.exception.GameException;
|
||||
|
||||
public abstract class MagicCannotBeBlockedTrigger extends MagicTrigger<MagicPermanent> {
|
||||
public MagicCannotBeBlockedTrigger(final int priority) {
|
||||
|
@ -24,7 +25,7 @@ public abstract class MagicCannotBeBlockedTrigger extends MagicTrigger<MagicPerm
|
|||
}
|
||||
@Override
|
||||
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent other) {
|
||||
throw new RuntimeException(getClass() + " does not have an executeTrigger method");
|
||||
throw new GameException(getClass() + " does not have an executeTrigger method", game);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -37,7 +38,7 @@ public abstract class MagicCannotBeBlockedTrigger extends MagicTrigger<MagicPerm
|
|||
}
|
||||
@Override
|
||||
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent other) {
|
||||
throw new RuntimeException(getClass() + " does not have an executeTrigger method");
|
||||
throw new GameException(getClass() + " does not have an executeTrigger method", game);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import magic.model.MagicGame;
|
|||
import magic.model.MagicPermanent;
|
||||
import magic.model.event.MagicEvent;
|
||||
import magic.model.target.MagicTargetFilter;
|
||||
import magic.exception.GameException;
|
||||
|
||||
public abstract class MagicCantBlockTrigger extends MagicTrigger<MagicPermanent> {
|
||||
public MagicCantBlockTrigger(final int priority) {
|
||||
|
@ -24,7 +25,7 @@ public abstract class MagicCantBlockTrigger extends MagicTrigger<MagicPermanent>
|
|||
}
|
||||
@Override
|
||||
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent other) {
|
||||
throw new RuntimeException(getClass() + " does not have an executeTrigger method");
|
||||
throw new GameException(getClass() + " does not have an executeTrigger method", game);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package magic.model.trigger;
|
|||
|
||||
import magic.model.MagicCopyMap;
|
||||
import magic.model.MagicPermanent;
|
||||
import magic.exception.GameException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
@ -76,7 +77,7 @@ public class MagicPermanentTriggerMap {
|
|||
}
|
||||
}
|
||||
}
|
||||
throw new RuntimeException("Could not remove " + permanent + "'s trigger " + trigger);
|
||||
throw new GameException("Could not remove " + permanent + "'s trigger " + trigger, permanent.getGame());
|
||||
}
|
||||
|
||||
public void remove(final MagicPermanentTrigger mptrigger) {
|
||||
|
|
|
@ -4,6 +4,7 @@ import magic.model.MagicGame;
|
|||
import magic.model.MagicPermanent;
|
||||
import magic.model.event.MagicEvent;
|
||||
import magic.model.target.MagicTargetFilter;
|
||||
import magic.exception.GameException;
|
||||
|
||||
public abstract class MagicProtectionTrigger extends MagicTrigger<MagicPermanent> {
|
||||
public MagicProtectionTrigger(final int priority) {
|
||||
|
@ -24,7 +25,7 @@ public abstract class MagicProtectionTrigger extends MagicTrigger<MagicPermanent
|
|||
}
|
||||
@Override
|
||||
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent other) {
|
||||
throw new RuntimeException(getClass() + " does not have an executeTrigger method");
|
||||
throw new GameException(getClass() + " does not have an executeTrigger method", game);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import magic.model.MagicGame;
|
|||
import magic.model.MagicPermanent;
|
||||
import magic.model.event.MagicEvent;
|
||||
import magic.model.event.MagicEventAction;
|
||||
import magic.exception.GameException;
|
||||
|
||||
/** Lower priority values trigger before higher priority values. */
|
||||
public abstract class MagicTrigger<T> implements MagicEventAction,MagicChangeCardDefinition {
|
||||
|
@ -38,7 +39,7 @@ public abstract class MagicTrigger<T> implements MagicEventAction,MagicChangeCar
|
|||
|
||||
@Override
|
||||
public void executeEvent(final MagicGame game, final MagicEvent event) {
|
||||
throw new RuntimeException(getClass() + " did not override executeEvent");
|
||||
throw new GameException(getClass() + " did not override executeEvent", game);
|
||||
}
|
||||
|
||||
public abstract MagicTriggerType getType();
|
||||
|
|
Loading…
Reference in New Issue