mirror of
https://github.com/magefree/mage.git
synced 2025-12-24 12:31:59 -08:00
* Improved editor search function, fixed some problems with search for split card rules.
This commit is contained in:
parent
1ddd063928
commit
18cab46b05
6 changed files with 484 additions and 202 deletions
|
|
@ -27,6 +27,9 @@
|
|||
*/
|
||||
package mage.cards;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Abilities;
|
||||
import mage.abilities.AbilitiesImpl;
|
||||
import mage.abilities.Ability;
|
||||
|
|
@ -36,10 +39,6 @@ import mage.constants.SpellAbilityType;
|
|||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
|
|
|
|||
|
|
@ -30,6 +30,8 @@ package mage.cards.repository;
|
|||
import com.j256.ormlite.field.DataType;
|
||||
import com.j256.ormlite.field.DatabaseField;
|
||||
import com.j256.ormlite.table.DatabaseTable;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.SpellAbility;
|
||||
|
|
@ -41,16 +43,13 @@ import mage.constants.*;
|
|||
import mage.util.SubTypeList;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author North
|
||||
*/
|
||||
@DatabaseTable(tableName = "card")
|
||||
public class CardInfo {
|
||||
|
||||
private static final int MAX_RULE_LENGTH = 700;
|
||||
private static final int MAX_RULE_LENGTH = 750;
|
||||
|
||||
private static final String SEPARATOR = "@@@";
|
||||
@DatabaseField(indexName = "name_index")
|
||||
|
|
@ -157,13 +156,30 @@ public class CardInfo {
|
|||
this.setManaCosts(card.getManaCost().getSymbols());
|
||||
|
||||
int length = 0;
|
||||
for (String rule : card.getRules()) {
|
||||
length += rule.length();
|
||||
List<String> rulesList = new ArrayList<>();
|
||||
if (card instanceof SplitCard) {
|
||||
for (String rule : ((SplitCard) card).getLeftHalfCard().getRules()) {
|
||||
length += rule.length();
|
||||
rulesList.add(rule);
|
||||
}
|
||||
for (String rule : ((SplitCard) card).getRightHalfCard().getRules()) {
|
||||
length += rule.length();
|
||||
rulesList.add(rule);
|
||||
}
|
||||
for (String rule : card.getRules()) {
|
||||
length += rule.length();
|
||||
rulesList.add(rule);
|
||||
}
|
||||
} else {
|
||||
for (String rule : card.getRules()) {
|
||||
length += rule.length();
|
||||
rulesList.add(rule);
|
||||
}
|
||||
}
|
||||
if (length > MAX_RULE_LENGTH) {
|
||||
length = 0;
|
||||
ArrayList<String> shortRules = new ArrayList<>();
|
||||
for (String rule : card.getRules()) {
|
||||
for (String rule : rulesList) {
|
||||
if (length + rule.length() + 3 <= MAX_RULE_LENGTH) {
|
||||
shortRules.add(rule);
|
||||
length += rule.length() + 3;
|
||||
|
|
@ -175,7 +191,7 @@ public class CardInfo {
|
|||
Logger.getLogger(CardInfo.class).warn("Card rule text was cut - cardname: " + card.getName());
|
||||
this.setRules(shortRules);
|
||||
} else {
|
||||
this.setRules(card.getRules());
|
||||
this.setRules(rulesList);
|
||||
}
|
||||
|
||||
SpellAbility spellAbility = card.getSpellAbility();
|
||||
|
|
@ -306,7 +322,7 @@ public class CardInfo {
|
|||
|
||||
public final SubTypeList getSubTypes() {
|
||||
SubTypeList sl = new SubTypeList();
|
||||
if(subtypes.trim().isEmpty()){
|
||||
if (subtypes.trim().isEmpty()) {
|
||||
return sl;
|
||||
}
|
||||
for (String s : subtypes.split(SEPARATOR)) {
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
package mage.filter.predicate.other;
|
||||
|
||||
import mage.cards.Card;
|
||||
import mage.cards.SplitCard;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.filter.predicate.Predicate;
|
||||
import mage.game.Game;
|
||||
|
||||
|
|
@ -39,9 +41,15 @@ import mage.game.Game;
|
|||
public class CardTextPredicate implements Predicate<Card> {
|
||||
|
||||
private final String text;
|
||||
private final boolean inNames;
|
||||
private final boolean inTypes;
|
||||
private final boolean inRules;
|
||||
|
||||
public CardTextPredicate(String text) {
|
||||
public CardTextPredicate(String text, boolean inNames, boolean inTypes, boolean inRules) {
|
||||
this.text = text;
|
||||
this.inNames = inNames;
|
||||
this.inTypes = inTypes;
|
||||
this.inRules = inRules;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -50,7 +58,7 @@ public class CardTextPredicate implements Predicate<Card> {
|
|||
return true;
|
||||
}
|
||||
// first check in card name
|
||||
if (input.getName().toLowerCase().contains(text.toLowerCase())) {
|
||||
if (inNames && input.getName().toLowerCase().contains(text.toLowerCase())) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -60,17 +68,40 @@ public class CardTextPredicate implements Predicate<Card> {
|
|||
boolean found = false;
|
||||
if (!token.isEmpty()) {
|
||||
// then try to find in rules
|
||||
for (String rule : input.getRules(game)) {
|
||||
if (rule.toLowerCase().contains(token)) {
|
||||
found = true;
|
||||
break;
|
||||
if (inRules) {
|
||||
if (input.isSplitCard()) {
|
||||
for (String rule : ((SplitCard) input).getLeftHalfCard().getRules(game)) {
|
||||
if (rule.toLowerCase().contains(token)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (String rule : ((SplitCard) input).getRightHalfCard().getRules(game)) {
|
||||
if (rule.toLowerCase().contains(token)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (String rule : input.getRules(game)) {
|
||||
if (rule.toLowerCase().contains(token)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (SubType subType : input.getSubtype(game)) {
|
||||
if (subType.toString().equalsIgnoreCase(token)) {
|
||||
found = true;
|
||||
break;
|
||||
if (inTypes) {
|
||||
for (SubType subType : input.getSubtype(game)) {
|
||||
if (subType.toString().equalsIgnoreCase(token)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (SuperType superType : input.getSuperType()) {
|
||||
if (superType.toString().equalsIgnoreCase(token)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue