Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Whether expression for getting the result of conditions. #6748

Merged
merged 8 commits into from
Jun 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions src/main/java/ch/njol/skript/expressions/ExprTernary.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

}
78 changes: 78 additions & 0 deletions src/main/java/ch/njol/skript/expressions/ExprWhether.java
Original file line number Diff line number Diff line change
@@ -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 <http://www.gnu.org/licenses/>.
*
* 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 <condition> else false`.")
@Examples({
"set {fly} to whether player can fly",
"broadcast \"Flying: %whether player is flying%\""
})
@Since("INSERT VERSION")
public class ExprWhether extends SimpleExpression<Boolean> {

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<? extends Boolean> getReturnType() {
return Boolean.class;
}

@Override
public boolean isSingle() {
return true;
}

@Override
public String toString(Event event, boolean debug) {
return "whether " + condition.toString(event, debug);
}

}
14 changes: 14 additions & 0 deletions src/test/skript/tests/syntaxes/expressions/ExprWhether.sk
Original file line number Diff line number Diff line change
@@ -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