Skip to content

Commit

Permalink
Whether expression for getting the result of conditions. (#6748)
Browse files Browse the repository at this point in the history
* Create whether expression.

* Stupid e :(

* Apply suggestions from code review

Co-authored-by: Patrick Miller <[email protected]>

* Fix ternary + toString.

* Update src/main/java/ch/njol/skript/expressions/ExprWhether.java

Co-authored-by: sovdee <[email protected]>

* Update src/main/java/ch/njol/skript/expressions/ExprWhether.java

Co-authored-by: _tud <[email protected]>

---------

Co-authored-by: Patrick Miller <[email protected]>
Co-authored-by: sovdee <[email protected]>
Co-authored-by: _tud <[email protected]>
  • Loading branch information
4 people authored Jun 28, 2024
1 parent ccc9373 commit 39acfe3
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 2 deletions.
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

0 comments on commit 39acfe3

Please sign in to comment.