-
-
Notifications
You must be signed in to change notification settings - Fork 447
Expand file tree
/
Copy pathExprLungePower.java
More file actions
106 lines (92 loc) · 2.92 KB
/
Copy pathExprLungePower.java
File metadata and controls
106 lines (92 loc) · 2.92 KB
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package ch.njol.skript.expressions;
import ch.njol.skript.Skript;
import ch.njol.skript.classes.Changer.ChangeMode;
import ch.njol.skript.doc.*;
import ch.njol.skript.lang.*;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.lang.util.SimpleExpression;
import ch.njol.util.Kleenean;
import ch.njol.util.coll.CollectionUtils;
import io.papermc.paper.event.entity.EntityLungeEvent;
import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;
@Name("Lunge Power")
@Description("""
The power of lunge attack.
Can be set to modify the distance of the lunge attack.
Initially, the lunge power is determined by the enchantment level of the lunge enchantment
of the weapon used to perform the lunge attack (e.g. a spear).
""")
@Example("""
on skeleton lunge:
if the lunge power is 1, 2 or 3:
broadcast "Normal lunge power"
else if the lunge power is greater than 3:
broadcast "Overpowered lunge power"
""")
@Example("""
on lunge:
set event-lunge power to 5
""")
@Example("""
on player lunge:
if event-entity has slowness:
remove 1 from lunge power
send "Slowed you down a bit"
""")
@Since("INSERT VERSION")
public class ExprLungePower extends SimpleExpression<Integer> implements EventRestrictedSyntax {
static {
// Since paper 26.1.2
if (Skript.classExists("io.papermc.paper.event.entity.EntityLungeEvent")) {
Skript.registerExpression(ExprLungePower.class, Integer.class, ExpressionType.SIMPLE, "[the] [event-]lunge power");
}
}
@Override
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) {
return true;
}
@Override
public Class<? extends Event>[] supportedEvents() {
return CollectionUtils.array(EntityLungeEvent.class);
}
@Override
public Integer[] get(Event event) {
EntityLungeEvent lungeEvent = (EntityLungeEvent) event;
return CollectionUtils.array(lungeEvent.getLungePower());
}
@Override
public Class<?> @Nullable [] acceptChange(ChangeMode mode) {
return switch (mode) {
case SET, ADD, REMOVE -> CollectionUtils.array(Integer.class);
default -> null;
};
}
@Override
public void change(Event event, Object @Nullable [] delta, ChangeMode mode) {
int deltaValue = delta != null ? (Integer) delta[0] : 0;
int currentValue = ((EntityLungeEvent) event).getLungePower();
Integer newValue = switch (mode) {
case SET -> deltaValue;
case ADD -> currentValue + deltaValue;
case REMOVE -> currentValue - deltaValue;
default -> null;
};
// It isn't null because the change mode is guaranteed to be either SET, ADD or REMOVE
assert newValue != null;
EntityLungeEvent lungeEvent = (EntityLungeEvent) event;
lungeEvent.setLungePower(newValue);
}
@Override
public boolean isSingle() {
return true;
}
@Override
public Class<Integer> getReturnType() {
return Integer.class;
}
@Override
public String toString(@Nullable Event event, boolean debug) {
return "lunge power";
}
}