19
19
*/
20
20
package ch .njol .skript .expressions ;
21
21
22
- import org .bukkit .entity .LivingEntity ;
23
- import org .bukkit .event .Event ;
24
- import org .eclipse .jdt .annotation .Nullable ;
25
-
26
22
import ch .njol .skript .classes .Changer .ChangeMode ;
27
23
import ch .njol .skript .doc .Description ;
28
24
import ch .njol .skript .doc .Examples ;
29
25
import ch .njol .skript .doc .Name ;
30
26
import ch .njol .skript .doc .Since ;
31
27
import ch .njol .skript .expressions .base .SimplePropertyExpression ;
32
- import ch .njol .skript .lang .Expression ;
33
- import ch .njol .skript .lang .SkriptParser ;
34
- import ch .njol .util .Kleenean ;
35
28
import ch .njol .util .coll .CollectionUtils ;
29
+ import org .bukkit .entity .LivingEntity ;
30
+ import org .bukkit .event .Event ;
31
+ import org .jetbrains .annotations .Nullable ;
36
32
37
33
@ Name ("Last Damage" )
38
34
@ Description ("The last damage that was done to an entity. Note that changing it doesn't deal more/less damage." )
39
35
@ Examples ({"set last damage of event-entity to 2" })
40
36
@ Since ("2.5.1" )
41
37
public class ExprLastDamage extends SimplePropertyExpression <LivingEntity , Number > {
42
-
38
+
43
39
static {
44
40
register (ExprLastDamage .class , Number .class , "last damage" , "livingentities" );
45
41
}
46
-
47
- @ Nullable
48
- private ExprDamage damageExpr ;
49
-
50
- @ Override
51
- public boolean init (Expression <?>[] exprs , int matchedPattern , Kleenean isDelayed , SkriptParser .ParseResult parseResult ) {
52
- damageExpr = new ExprDamage ();
53
- return true ;
54
- }
55
-
42
+
56
43
@ Nullable
57
44
@ Override
58
45
@ SuppressWarnings ("null" )
59
46
public Number convert (LivingEntity livingEntity ) {
60
- return damageExpr . get ( livingEntity .getLastDamageCause ())[ 0 ] ;
47
+ return livingEntity .getLastDamage () / 2 ;
61
48
}
62
-
49
+
63
50
@ Nullable
64
51
@ Override
65
52
public Class <?>[] acceptChange (ChangeMode mode ) {
@@ -72,35 +59,38 @@ public Class<?>[] acceptChange(ChangeMode mode) {
72
59
return null ;
73
60
}
74
61
}
75
-
62
+
63
+ @ SuppressWarnings ("ConstantValue" )
76
64
@ Override
77
65
public void change (Event e , @ Nullable Object [] delta , ChangeMode mode ) {
78
- if (delta != null ) {
66
+ if (delta != null && delta [0 ] instanceof Number ) {
67
+ double damage = ((Number ) delta [0 ]).doubleValue () * 2 ;
68
+
79
69
switch (mode ) {
80
70
case SET :
81
71
for (LivingEntity entity : getExpr ().getArray (e ))
82
- entity .setLastDamage (( Long ) delta [ 0 ] );
72
+ entity .setLastDamage (damage );
83
73
break ;
84
74
case REMOVE :
85
- delta [ 0 ] = ( Long ) delta [ 0 ] * -1 ;
75
+ damage = damage * -1 ;
86
76
case ADD :
87
77
for (LivingEntity entity : getExpr ().getArray (e ))
88
- entity .setLastDamage (( Long ) delta [ 0 ] + entity .getLastDamage ());
78
+ entity .setLastDamage (damage + entity .getLastDamage ());
89
79
break ;
90
80
default :
91
81
assert false ;
92
82
}
93
83
}
94
84
}
95
-
85
+
96
86
@ Override
97
87
public Class <? extends Number > getReturnType () {
98
88
return Number .class ;
99
89
}
100
-
90
+
101
91
@ Override
102
92
protected String getPropertyName () {
103
93
return "last damage" ;
104
94
}
105
-
95
+
106
96
}
0 commit comments