implement [M3C] Planar Nexus [MH3] Omo, Queen of Vesuva and [UNF] Nearby Planet ; introduce AllNonbasicLandTypes status (#12203)

This commit is contained in:
Evan Kranzler 2024-06-07 12:36:41 -04:00 committed by GitHub
parent 3e18b58cac
commit 08c7d2ab8f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
19 changed files with 659 additions and 5 deletions

View file

@ -471,6 +471,9 @@ public interface MageObject extends MageItem, Serializable, Copyable<MageObject>
if (subTypeSet == SubTypeSet.CreatureType || subTypeSet == null) {
this.setIsAllCreatureTypes(game, mageObject.isAllCreatureTypes(game));
}
if (subTypeSet == SubTypeSet.NonBasicLandType || subTypeSet == null) {
this.setIsAllNonbasicLandTypes(game, mageObject.isAllNonbasicLandTypes(game));
}
for (SubType subType : mageObject.getSubtype(game)) {
if (subType.getSubTypeSet() == subTypeSet || subTypeSet == null) {
this.addSubType(game, subType);
@ -485,10 +488,12 @@ public interface MageObject extends MageItem, Serializable, Copyable<MageObject>
default void removeAllSubTypes(Game game, SubTypeSet subTypeSet) {
if (subTypeSet == null) {
setIsAllCreatureTypes(game, false);
setIsAllNonbasicLandTypes(game, false);
game.getState().getCreateMageObjectAttribute(this, game).getSubtype().clear();
} else if (subTypeSet == SubTypeSet.CreatureType) {
removeAllCreatureTypes(game);
} else if (subTypeSet == SubTypeSet.NonBasicLandType) {
setIsAllNonbasicLandTypes(game, false);
game.getState().getCreateMageObjectAttribute(this, game).getSubtype().removeAll(SubType.getLandTypes());
} else {
game.getState().getCreateMageObjectAttribute(this, game).getSubtype().removeAll(SubType.getBySubTypeSet(subTypeSet));
@ -497,11 +502,13 @@ public interface MageObject extends MageItem, Serializable, Copyable<MageObject>
default void retainAllArtifactSubTypes(Game game) {
setIsAllCreatureTypes(game, false);
setIsAllNonbasicLandTypes(game, false);
game.getState().getCreateMageObjectAttribute(this, game).getSubtype().retainAll(SubType.getArtifactTypes());
}
default void retainAllEnchantmentSubTypes(Game game) {
setIsAllCreatureTypes(game, false);
setIsAllNonbasicLandTypes(game, false);
game.getState().getCreateMageObjectAttribute(this, game).getSubtype().retainAll(SubType.getEnchantmentTypes());
}
@ -603,5 +610,17 @@ public interface MageObject extends MageItem, Serializable, Copyable<MageObject>
*/
void setIsAllCreatureTypes(Game game, boolean value);
boolean isAllNonbasicLandTypes(Game game);
void setIsAllNonbasicLandTypes(boolean value);
/**
* Change all nonbasic land type mark temporary, for continuous effects only
*
* @param game
* @param value
*/
void setIsAllNonbasicLandTypes(Game game, boolean value);
void removePTCDA();
}

View file

@ -323,10 +323,9 @@ public abstract class MageObjectImpl implements MageObject {
if (value == null) {
return false;
}
if (value.getSubTypeSet() == SubTypeSet.CreatureType && isAllCreatureTypes(game)) {
return true;
}
return getSubtype(game).contains(value);
return value.getSubTypeSet() == SubTypeSet.CreatureType && isAllCreatureTypes(game)
|| value.getSubTypeSet() == SubTypeSet.NonBasicLandType && isAllNonbasicLandTypes(game)
|| getSubtype(game).contains(value);
}
@Override
@ -375,6 +374,21 @@ public abstract class MageObjectImpl implements MageObject {
this.getSubtype(game).setIsAllCreatureTypes(value && (this.isTribal(game) || this.isCreature(game)));
}
@Override
public boolean isAllNonbasicLandTypes(Game game) {
return this.getSubtype(game).isAllNonbasicLandTypes();
}
@Override
public void setIsAllNonbasicLandTypes(boolean value) {
this.getSubtype().setIsAllNonbasicLandTypes(value && this.isLand());
}
@Override
public void setIsAllNonbasicLandTypes(Game game, boolean value) {
this.getSubtype(game).setIsAllNonbasicLandTypes(value && this.isLand(game));
}
/**
* Remove power/toughness character defining abilities
*/

View file

@ -43,7 +43,6 @@ public class BecomesEnchantmentSourceEffect extends ContinuousEffectImpl {
permanent.removeAllCardTypes(game);
permanent.addCardType(game, CardType.ENCHANTMENT);
permanent.retainAllEnchantmentSubTypes(game);
permanent.setIsAllCreatureTypes(game, false);
return true;
}
}

View file

@ -71,6 +71,7 @@ public enum CounterType {
ENERGY("energy"),
ENLIGHTENED("enlightened"),
EON("eon"),
EVERYTHING("everything"),
EXALTED("exalted"),
EXPERIENCE("experience"),
EYEBALL("eyeball"),

View file

@ -181,6 +181,19 @@ public abstract class Designation extends MageObjectImpl {
public void setIsAllCreatureTypes(boolean value) {
}
@Override
public void setIsAllNonbasicLandTypes(Game game, boolean value) {
}
@Override
public boolean isAllNonbasicLandTypes(Game game) {
return false;
}
@Override
public void setIsAllNonbasicLandTypes(boolean value) {
}
@Override
public void setIsAllCreatureTypes(Game game, boolean value) {
}

View file

@ -316,6 +316,21 @@ public class Commander extends CommandObjectImpl {
sourceObject.setIsAllCreatureTypes(game, value);
}
@Override
public boolean isAllNonbasicLandTypes(Game game) {
return sourceObject.isAllNonbasicLandTypes(game);
}
@Override
public void setIsAllNonbasicLandTypes(boolean value) {
sourceObject.setIsAllNonbasicLandTypes(value);
}
@Override
public void setIsAllNonbasicLandTypes(Game game, boolean value) {
sourceObject.setIsAllNonbasicLandTypes(game, value);
}
@Override
public void removePTCDA() {
}

View file

@ -331,6 +331,19 @@ public class Dungeon extends CommandObjectImpl {
public void setIsAllCreatureTypes(Game game, boolean value) {
}
@Override
public boolean isAllNonbasicLandTypes(Game game) {
return false;
}
@Override
public void setIsAllNonbasicLandTypes(boolean value) {
}
@Override
public void setIsAllNonbasicLandTypes(Game game, boolean value) {
}
public void discardEffects() {
for (Ability ability : abilites) {
for (Effect effect : ability.getEffects()) {

View file

@ -246,6 +246,19 @@ public abstract class Emblem extends CommandObjectImpl {
public void setIsAllCreatureTypes(Game game, boolean value) {
}
@Override
public boolean isAllNonbasicLandTypes(Game game) {
return false;
}
@Override
public void setIsAllNonbasicLandTypes(boolean value) {
}
@Override
public void setIsAllNonbasicLandTypes(Game game, boolean value) {
}
public void discardEffects() {
for (Ability ability : abilites) {
for (Effect effect : ability.getEffects()) {

View file

@ -268,6 +268,19 @@ public abstract class Plane extends CommandObjectImpl {
public void setIsAllCreatureTypes(Game game, boolean value) {
}
@Override
public boolean isAllNonbasicLandTypes(Game game) {
return false;
}
@Override
public void setIsAllNonbasicLandTypes(boolean value) {
}
@Override
public void setIsAllNonbasicLandTypes(Game game, boolean value) {
}
public void discardEffects() {
for (Ability ability : abilites) {
for (Effect effect : ability.getEffects()) {

View file

@ -1181,6 +1181,21 @@ public class Spell extends StackObjectImpl implements Card {
card.setIsAllCreatureTypes(game, value);
}
@Override
public boolean isAllNonbasicLandTypes(Game game) {
return card.isAllNonbasicLandTypes(game);
}
@Override
public void setIsAllNonbasicLandTypes(boolean value) {
card.setIsAllNonbasicLandTypes(value);
}
@Override
public void setIsAllNonbasicLandTypes(Game game, boolean value) {
card.setIsAllNonbasicLandTypes(game, value);
}
@Override
public List<UUID> getAttachments() {
throw new UnsupportedOperationException("Not supported.");

View file

@ -740,6 +740,19 @@ public class StackAbility extends StackObjectImpl implements Ability {
public void setIsAllCreatureTypes(Game game, boolean value) {
}
@Override
public boolean isAllNonbasicLandTypes(Game game) {
return false;
}
@Override
public void setIsAllNonbasicLandTypes(boolean value) {
}
@Override
public void setIsAllNonbasicLandTypes(Game game, boolean value) {
}
@Override
public StackAbility setTargetAdjuster(TargetAdjuster targetAdjuster) {
this.targetAdjuster = targetAdjuster;

View file

@ -9,6 +9,7 @@ import java.util.Collections;
public class SubTypes extends ArrayList<SubType> {
private boolean isAllCreatureTypes = false;
private boolean isAllNonbasicLandTypes = false;
public SubTypes(SubType... subTypes) {
super();
@ -18,6 +19,7 @@ public class SubTypes extends ArrayList<SubType> {
protected SubTypes(final SubTypes list) {
this.addAll(list);
this.isAllCreatureTypes = list.isAllCreatureTypes;
this.isAllNonbasicLandTypes = list.isAllNonbasicLandTypes;
}
public SubTypes copy() {
@ -32,6 +34,7 @@ public class SubTypes extends ArrayList<SubType> {
this.clear();
this.addAll(subtypes);
this.isAllCreatureTypes = subtypes.isAllCreatureTypes;
this.isAllNonbasicLandTypes = subtypes.isAllNonbasicLandTypes;
}
public boolean removeAll(SubType... subTypes) {
@ -45,4 +48,12 @@ public class SubTypes extends ArrayList<SubType> {
public boolean isAllCreatureTypes() {
return isAllCreatureTypes;
}
public void setIsAllNonbasicLandTypes(boolean allNonbasicLandTypes) {
isAllNonbasicLandTypes = allNonbasicLandTypes;
}
public boolean isAllNonbasicLandTypes() {
return isAllNonbasicLandTypes;
}
}