-
-
Notifications
You must be signed in to change notification settings - Fork 438
Expand file tree
/
Copy pathExprCreeperMaxFuseTicks.java
More file actions
84 lines (74 loc) · 2.22 KB
/
ExprCreeperMaxFuseTicks.java
File metadata and controls
84 lines (74 loc) · 2.22 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
package ch.njol.skript.expressions;
import org.bukkit.entity.Creeper;
import org.bukkit.entity.LivingEntity;
import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;
import ch.njol.skript.Skript;
import ch.njol.skript.classes.Changer.ChangeMode;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Example;
import ch.njol.skript.doc.Name;
import ch.njol.skript.doc.Since;
import ch.njol.skript.expressions.base.SimplePropertyExpression;
import ch.njol.util.coll.CollectionUtils;
@Name("Creeper Max Fuse Ticks")
@Description("The max fuse ticks that a creeper has.")
@Example("set target entity's max fuse ticks to 20 #1 second")
@Since("2.5")
public class ExprCreeperMaxFuseTicks extends SimplePropertyExpression<LivingEntity, Long> {
static {
if(Skript.methodExists(LivingEntity.class, "getMaxFuseTicks"))
register(ExprCreeperMaxFuseTicks.class, Long.class, "[creeper] max[imum] fuse tick[s]", "livingentities");
}
@Override
public Long convert(LivingEntity e) {
return e instanceof Creeper ? (long) ((Creeper) e).getMaxFuseTicks() : 0;
}
@Override
@Nullable
public Class<?>[] acceptChange(final ChangeMode mode) {
if (mode == ChangeMode.REMOVE_ALL)
return null;
return CollectionUtils.array(Number.class);
}
@Override
public void change(final Event e, final @Nullable Object[] delta, final ChangeMode mode) {
int d = delta == null ? 0 : ((Number) delta[0]).intValue();
for (LivingEntity le : getExpr().getArray(e)) {
if (le instanceof Creeper) {
Creeper c = (Creeper) le;
switch (mode) {
case ADD:
int r1 = c.getMaxFuseTicks() + d;
if (r1 < 0) r1 = 0;
c.setMaxFuseTicks(r1);
break;
case SET:
c.setMaxFuseTicks(d);
break;
case DELETE:
c.setMaxFuseTicks(0);
break;
case RESET:
c.setMaxFuseTicks(30); //Seems to be the same for powered creepers?
break;
case REMOVE:
int r2 = c.getMaxFuseTicks() - d;
if (r2 < 0) r2 = 0;
c.setMaxFuseTicks(r2);
break;
case REMOVE_ALL:
assert false;
}
}
}
}
@Override
public Class<? extends Long> getReturnType() {
return Long.class;
}
@Override
protected String getPropertyName() {
return "creeper max fuse ticks";
}
}