diff --git a/src/main/java/ch/njol/skript/expressions/ExprTernary.java b/src/main/java/ch/njol/skript/expressions/ExprTernary.java index 3992f308623..dc4f5b518c6 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprTernary.java +++ b/src/main/java/ch/njol/skript/expressions/ExprTernary.java @@ -122,8 +122,10 @@ public boolean isSingle() { } @Override - public String toString(Event e, boolean debug) { - return ifTrue.toString(e, debug) + " if " + condition + " otherwise " + ifFalse.toString(e, debug); + public String toString(Event event, boolean debug) { + return ifTrue.toString(event, debug) + + " if " + condition.toString(event, debug) + + " otherwise " + ifFalse.toString(event, debug); } } diff --git a/src/main/java/ch/njol/skript/expressions/ExprWhether.java b/src/main/java/ch/njol/skript/expressions/ExprWhether.java new file mode 100644 index 00000000000..4817551e181 --- /dev/null +++ b/src/main/java/ch/njol/skript/expressions/ExprWhether.java @@ -0,0 +1,78 @@ +/** + * This file is part of Skript. + * + * Skript is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Skript is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Skript. If not, see . + * + * Copyright Peter Güttinger, SkriptLang team and contributors + */ +package ch.njol.skript.expressions; + +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.ExpressionType; +import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.lang.util.SimpleExpression; +import ch.njol.util.Kleenean; +import org.bukkit.event.Event; +import org.jetbrains.annotations.UnknownNullability; + +@Name("Whether") +@Description("A shorthand for returning the result of a condition (true or false). This is functionally identical to using `true if else false`.") +@Examples({ + "set {fly} to whether player can fly", + "broadcast \"Flying: %whether player is flying%\"" +}) +@Since("INSERT VERSION") +public class ExprWhether extends SimpleExpression { + + static { + Skript.registerExpression(ExprWhether.class, Boolean.class, ExpressionType.PATTERN_MATCHES_EVERYTHING, + "whether <.+>"); + } + + private @UnknownNullability Condition condition; + + @Override + public boolean init(Expression[] expressions, int pattern, Kleenean delayed, ParseResult result) { + String input = result.regexes.get(0).group(); + this.condition = Condition.parse(input, "Can't understand this condition: " + input); + return condition != null; + } + + @Override + protected Boolean[] get(Event event) { + return new Boolean[] {condition.check(event)}; + } + + @Override + public Class getReturnType() { + return Boolean.class; + } + + @Override + public boolean isSingle() { + return true; + } + + @Override + public String toString(Event event, boolean debug) { + return "whether " + condition.toString(event, debug); + } + +} diff --git a/src/test/skript/tests/syntaxes/expressions/ExprWhether.sk b/src/test/skript/tests/syntaxes/expressions/ExprWhether.sk new file mode 100644 index 00000000000..83001203599 --- /dev/null +++ b/src/test/skript/tests/syntaxes/expressions/ExprWhether.sk @@ -0,0 +1,14 @@ +test "whether": + set {_number} to 5 + set {_okay} to whether {_number} is greater than 3 + assert {_okay} is true with "Condition didn't evaluate correctly" + set {_okay} to whether {_number} is less than 6 + assert {_okay} is true with "Condition didn't evaluate correctly" + set {_okay} to whether {_number} is 5 + assert {_okay} is true with "Condition didn't evaluate correctly" + delete {_okay} + spawn a pig at spawn of "world": + set {_pig} to event-entity + assert (whether {_pig} is alive) is true with "Condition didn't evaluate correctly" + assert (whether health of {_pig} is greater than 0) is true with "Condition didn't evaluate correctly" + delete the last spawned pig