Skip to content
11 changes: 10 additions & 1 deletion src/main/java/ch/njol/skript/conditions/CondAlphanumeric.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package ch.njol.skript.conditions;

import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SimplifiedCondition;
import org.apache.commons.lang.StringUtils;
import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;
Expand Down Expand Up @@ -42,7 +44,14 @@ public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelaye
public boolean check(Event e) {
return isNegated() ^ strings.check(e, StringUtils::isAlphanumeric);
}


@Override
public Condition simplify() {
if (strings instanceof Literal<String>)
return SimplifiedCondition.fromCondition(this);
return this;
}

@Override
public String toString(@Nullable Event e, boolean debug) {
return strings.toString(e, debug) + " is" + (isNegated() ? "n't" : "") + " alphanumeric";
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/ch/njol/skript/conditions/CondCompare.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.ExpressionList;
import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SimplifiedCondition;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.lang.UnparsedLiteral;
import ch.njol.skript.lang.VerboseAssert;
Expand Down Expand Up @@ -397,6 +398,13 @@ private boolean compareLists(Event event) {
return shouldMatch;
}

@Override
public Condition simplify() {
if (first instanceof Literal<?> && second instanceof Literal<?> && (third == null || third instanceof Literal<?>))
return SimplifiedCondition.fromCondition(this);
return this;
}

@Override
public String toString(final @Nullable Event event, final boolean debug) {
String s;
Expand Down
22 changes: 15 additions & 7 deletions src/main/java/ch/njol/skript/conditions/CondContains.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,30 @@
import ch.njol.skript.Skript;
import ch.njol.skript.SkriptConfig;
import ch.njol.skript.aliases.ItemType;
import ch.njol.skript.lang.VerboseAssert;
import ch.njol.skript.lang.util.common.AnyContains;
import ch.njol.skript.util.LiteralUtils;
import org.skriptlang.skript.lang.comparator.Relation;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Examples;
import ch.njol.skript.doc.Name;
import ch.njol.skript.doc.Since;
import ch.njol.skript.lang.Condition;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SimplifiedCondition;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.lang.VerboseAssert;
import ch.njol.skript.lang.util.SimpleExpression;
import org.skriptlang.skript.lang.comparator.Comparators;
import ch.njol.skript.lang.util.common.AnyContains;
import ch.njol.skript.util.LiteralUtils;
import ch.njol.util.Kleenean;
import ch.njol.util.StringUtils;
import org.bukkit.event.Event;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.skriptlang.skript.lang.converter.Converters;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.lang.comparator.Comparators;
import org.skriptlang.skript.lang.comparator.Relation;
import org.skriptlang.skript.lang.converter.Converters;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.StringJoiner;

Expand Down Expand Up @@ -183,6 +184,13 @@ public String getReceivedMessage(Event event) {
return joiner.toString();
}

@Override
public Condition simplify() {
if (containers instanceof Literal<?> && items instanceof Literal<?>)
return SimplifiedCondition.fromCondition(this);
return this;
}

@Override
public String toString(@Nullable Event e, boolean debug) {
return containers.toString(e, debug) + (isNegated() ? " doesn't contain " : " contains ") + items.toString(e, debug);
Expand Down
11 changes: 10 additions & 1 deletion src/main/java/ch/njol/skript/conditions/CondDate.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package ch.njol.skript.conditions;

import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SimplifiedCondition;
import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -58,7 +60,14 @@ public boolean check(final Event e) {
timespan -> now - date.getTime() >= timespan.getAs(Timespan.TimePeriod.MILLISECOND)
), isNegated());
}


@Override
public Condition simplify() {
if (date instanceof Literal<Date> && delta instanceof Literal<Timespan>)
return SimplifiedCondition.fromCondition(this);
return this;
}

@Override
public String toString(final @Nullable Event e, final boolean debug) {
return date.toString(e, debug) + " was " + (isNegated() ? "less" : "more") + " than " + delta.toString(e, debug) + " ago";
Expand Down
16 changes: 12 additions & 4 deletions src/main/java/ch/njol/skript/conditions/CondIsFuel.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
package ch.njol.skript.conditions;

import org.bukkit.Material;

import ch.njol.skript.Skript;
import ch.njol.skript.aliases.ItemType;
import ch.njol.skript.conditions.base.PropertyCondition;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Examples;
import ch.njol.skript.doc.Name;
import ch.njol.skript.doc.RequiredPlugins;
import ch.njol.skript.doc.Since;
import ch.njol.skript.lang.Condition;
import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SimplifiedCondition;
import org.bukkit.Material;

@Name("Is Fuel")
@Description("Checks whether an item can be used as fuel in a furnace.")
Expand All @@ -32,7 +33,14 @@ public class CondIsFuel extends PropertyCondition<ItemType> {
public boolean check(ItemType item) {
return item.getMaterial().isFuel();
}


@Override
public Condition simplify() {
if (getExpr() instanceof Literal<? extends ItemType>)
return SimplifiedCondition.fromCondition(this);
return this;
}

@Override
protected String getPropertyName() {
return "fuel";
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/ch/njol/skript/conditions/CondIsInfinite.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
import ch.njol.skript.doc.Example;
import ch.njol.skript.doc.Name;
import ch.njol.skript.doc.Since;
import ch.njol.skript.lang.Condition;
import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SimplifiedCondition;
import ch.njol.skript.util.Timespan;
import org.bukkit.potion.PotionEffect;

Expand All @@ -28,6 +31,13 @@ public boolean check(Object object) {
return false;
}

@Override
public Condition simplify() {
if (getExpr() instanceof Literal<?>)
return SimplifiedCondition.fromCondition(this);
return this;
}

@Override
protected String getPropertyName() {
return "infinite";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
import ch.njol.skript.doc.Examples;
import ch.njol.skript.doc.Name;
import ch.njol.skript.doc.Since;
import ch.njol.skript.lang.Condition;
import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SimplifiedCondition;
import org.bukkit.util.Vector;

@Name("Is Normalized")
Expand All @@ -21,7 +24,14 @@ public class CondIsVectorNormalized extends PropertyCondition<Vector> {
public boolean check(Vector vector) {
return vector.isNormalized();
}


@Override
public Condition simplify() {
if (getExpr() instanceof Literal<? extends Vector>)
return SimplifiedCondition.fromCondition(this);
return this;
}

@Override
protected String getPropertyName() {
return "normalized";
Expand Down
22 changes: 15 additions & 7 deletions src/main/java/ch/njol/skript/conditions/CondMatches.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@

package ch.njol.skript.conditions;

import java.util.Arrays;
import java.util.regex.Pattern;

import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;

import ch.njol.skript.Skript;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Examples;
import ch.njol.skript.doc.Name;
import ch.njol.skript.doc.Since;
import ch.njol.skript.lang.Condition;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SimplifiedCondition;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;
import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;

import java.util.Arrays;
import java.util.regex.Pattern;

@Name("Matches")
@Description("Checks whether the defined strings match the input regexes (Regular expressions).")
Expand Down Expand Up @@ -75,7 +76,14 @@ public boolean check(Event e) {
public boolean matches(String str, Pattern pattern) {
return partial ? pattern.matcher(str).find() : str.matches(pattern.pattern());
}


@Override
public Condition simplify() {
if (strings instanceof Literal<String> && regex instanceof Literal<String>)
return SimplifiedCondition.fromCondition(this);
return this;
}

@Override
public String toString(@Nullable Event e, boolean debug) {
return strings.toString(e, debug) + " " + (isNegated() ? "doesn't match" : "matches") + " " + regex.toString(e, debug);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package ch.njol.skript.conditions;

import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SimplifiedCondition;
import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -40,7 +42,14 @@ public boolean check(Event e) {
String ver = version.getSingle(e);
return ver != null ? Skript.isRunningMinecraft(new Version(ver)) ^ isNegated() : false;
}


@Override
public Condition simplify() {
if (version instanceof Literal<String>)
return SimplifiedCondition.fromCondition(this);
return this;
}

@Override
public String toString(@Nullable Event e, boolean debug) {
return "is running minecraft " + version.toString(e, debug);
Expand Down
9 changes: 9 additions & 0 deletions src/main/java/ch/njol/skript/conditions/CondPastFuture.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import ch.njol.skript.lang.Condition;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.ExpressionList;
import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SimplifiedCondition;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.util.Date;
import ch.njol.util.Kleenean;
Expand Down Expand Up @@ -78,6 +80,13 @@ public boolean check(Event event) {
return dates.check(event, date -> date.compareTo(new Date()) < 0, isNegated());
}

@Override
public Condition simplify() {
if (dates instanceof Literal<Date>)
return SimplifiedCondition.fromCondition(this);
return this;
}

@Override
public String toString(@Nullable Event event, boolean debug) {
return dates.toString(event, debug) + (dates.isSingle() ? " is" : " are") + " in the" + (isFuture ? " future" : " past");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package ch.njol.skript.conditions;

import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SimplifiedCondition;
import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -80,7 +82,14 @@ public boolean check(Event e) {
},
isNegated());
}


@Override
public Condition simplify() {
if (strings instanceof Literal<String> && affix instanceof Literal<String>)
return SimplifiedCondition.fromCondition(this);
return this;
}

@Override
public String toString(@Nullable Event e, boolean debug) {
if (isNegated())
Expand Down
8 changes: 7 additions & 1 deletion src/main/java/ch/njol/skript/lang/Condition.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import ch.njol.skript.Skript;
import ch.njol.skript.conditions.base.PropertyCondition;
import ch.njol.skript.config.Node;
import ch.njol.skript.lang.simplification.Simplifiable;
import ch.njol.skript.lang.util.SimpleExpression;
import ch.njol.util.Kleenean;
import org.bukkit.event.Event;
Expand All @@ -22,7 +23,7 @@
*
* @see Skript#registerCondition(Class, String...)
*/
public abstract class Condition extends Statement implements Conditional<Event>, SyntaxRuntimeErrorProducer {
public abstract class Condition extends Statement implements Conditional<Event>, SyntaxRuntimeErrorProducer, Simplifiable<Condition> {

public enum ConditionType {
/**
Expand Down Expand Up @@ -117,6 +118,11 @@ public Node getNode() {
return "condition";
}

@Override
public Condition simplify() {
return this;
}

/**
* Parse a raw string input as a condition.
*
Expand Down
Loading