-
-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathExprRawExpression.java
87 lines (74 loc) · 2.84 KB
/
ExprRawExpression.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.btk5h.skriptmirror.skript.custom;
import ch.njol.skript.Skript;
import ch.njol.skript.classes.Changer.ChangeMode;
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 com.btk5h.skriptmirror.WrappedEvent;
import com.btk5h.skriptmirror.skript.reflect.ExprJavaCall;
import com.btk5h.skriptmirror.util.SkriptUtil;
import org.bukkit.event.Event;
public class ExprRawExpression extends SimpleExpression<Expression> {
static {
Skript.registerExpression(ExprRawExpression.class, Expression.class, ExpressionType.COMBINED,
"[the] (raw|underlying) expression[s] of %objects%",
"%objects%'[s] (raw|underlying) expression[s]",
"[the] raw [expression] %objects%");
}
private Expression<?> expr;
@Override
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) {
if (matchedPattern == 2)
Skript.warning("Using 'raw %objects%' is deprecated, please use 'the (raw|underlying) expression of %objects%' instead. " +
"If you meant to use Skript's 'raw %strings%' expression, try 'raw string within %objects%'.");
expr = SkriptUtil.defendExpression(exprs[0]);
return SkriptUtil.canInitSafely(expr);
}
@Override
protected Expression<?>[] get(Event event) {
Expression<?> expr = this.expr;
if (expr instanceof ExprExpression<?> exprExpr && event instanceof CustomSyntaxEvent) {
expr = exprExpr.getExpression(event);
if (expr == null)
return null;
expr = expr.getSource();
}
return new Expression[] {expr};
}
@Override
public Class<?>[] acceptChange(ChangeMode changeMode) {
return expr instanceof ExprExpression ? new Class[] {Object[].class} : null;
}
@Override
public void change(Event event, Object[] delta, ChangeMode changeMode) {
if (!(expr instanceof ExprExpression && event instanceof CustomSyntaxEvent))
return;
Expression<?> expr = ((ExprExpression<?>) this.expr).getExpression(event);
if (expr == null)
return;
Expression<?> source = expr.getSource();
Event unwrappedEvent = ((WrappedEvent) event).getDirectEvent();
// Ensure acceptChange has been called before change
try {
source.acceptChange(changeMode);
source.change(unwrappedEvent, delta, changeMode);
} catch (Throwable throwable) {
ExprJavaCall.lastError = throwable;
}
}
@Override
public boolean isSingle() {
return true;
}
@Override
@SuppressWarnings("rawtypes")
public Class<? extends Expression> getReturnType() {
return Expression.class;
}
@Override
public String toString(Event event, boolean debug) {
return "the underlying expression of " + expr.toString(event, debug);
}
}