19
19
package ch .njol .skript .expressions ;
20
20
21
21
import ch .njol .skript .aliases .ItemType ;
22
- import ch .njol .skript .classes .Changer ;
23
22
import ch .njol .skript .classes .Changer .ChangeMode ;
24
23
import ch .njol .skript .doc .Description ;
25
24
import ch .njol .skript .doc .Examples ;
29
28
import ch .njol .skript .util .slot .Slot ;
30
29
import ch .njol .util .coll .CollectionUtils ;
31
30
import org .bukkit .event .Event ;
31
+ import org .bukkit .inventory .ItemStack ;
32
32
import org .eclipse .jdt .annotation .Nullable ;
33
33
34
34
@ Name ("Item Amount" )
35
35
@ Description ("The amount of an <a href='classes.html#itemstack'>item stack</a>." )
36
36
@ Examples ("send \" You have got %item amount of player's tool% %player's tool% in your hand!\" to player" )
37
37
@ Since ("2.2-dev24" )
38
38
public class ExprItemAmount extends SimplePropertyExpression <Object , Long > {
39
-
40
- static {
41
- register (ExprItemAmount .class , Long .class , "item[[ ]stack] (amount|size|number)" , "slots/itemtypes" );
42
- }
43
39
44
-
40
+ static {
41
+ register (ExprItemAmount .class , Long .class , "item[[ ]stack] (amount|size|number)" , "slots/itemtypes/itemstacks" );
42
+ }
43
+
45
44
@ Override
46
45
public Long convert (final Object item ) {
47
- return (long ) (item instanceof ItemType ? ((ItemType ) item ).getAmount () : ((Slot ) item ).getAmount ());
46
+ if (item instanceof ItemType ) {
47
+ return (long ) ((ItemType ) item ).getAmount ();
48
+ } else if (item instanceof Slot ) {
49
+ return (long ) ((Slot ) item ).getAmount ();
50
+ } else {
51
+ return (long ) ((ItemStack ) item ).getAmount ();
52
+ }
48
53
}
49
-
54
+
50
55
@ Override
51
- public @ Nullable Class <?>[] acceptChange (Changer .ChangeMode mode ) {
52
- return (mode != ChangeMode .REMOVE_ALL ) ? CollectionUtils .array (Number .class ) : null ;
53
- }
56
+ @ Nullable
57
+ public Class <?>[] acceptChange (ChangeMode mode ) {
58
+ switch (mode ) {
59
+ case SET :
60
+ case ADD :
61
+ case RESET :
62
+ case DELETE :
63
+ case REMOVE :
64
+ return CollectionUtils .array (Long .class );
65
+ }
66
+ return null ;
67
+ }
54
68
55
- @ Override
56
- public void change (Event event , @ Nullable Object [] delta , Changer .ChangeMode mode ) {
57
- int amount = delta != null ? ((Number ) delta [0 ]).intValue () : 0 ;
58
- switch (mode ) {
59
- case ADD :
60
- for (Object obj : getExpr ().getArray (event ))
69
+ @ Override
70
+ public void change (Event event , @ Nullable Object [] delta , ChangeMode mode ) {
71
+ int amount = delta != null ? ((Number ) delta [0 ]).intValue () : 0 ;
72
+ switch (mode ) {
73
+ case REMOVE :
74
+ amount = -amount ;
75
+ // fall through
76
+ case ADD :
77
+ for (Object obj : getExpr ().getArray (event ))
61
78
if (obj instanceof ItemType ) {
62
79
ItemType item = ((ItemType ) obj );
63
80
item .setAmount (item .getAmount () + amount );
64
- } else {
81
+ } else if ( obj instanceof Slot ) {
65
82
Slot slot = ((Slot ) obj );
66
83
slot .setAmount (slot .getAmount () + amount );
84
+ } else {
85
+ ItemStack item = ((ItemStack ) obj );
86
+ item .setAmount (item .getAmount () + amount );
67
87
}
68
- break ;
69
- case SET :
88
+ break ;
89
+ case RESET :
90
+ case DELETE :
91
+ amount = 1 ;
92
+ // fall through
93
+ case SET :
70
94
for (Object obj : getExpr ().getArray (event ))
71
- if (obj instanceof ItemType )
95
+ if (obj instanceof ItemType ) {
72
96
((ItemType ) obj ).setAmount (amount );
73
- else
97
+ } else if ( obj instanceof Slot ) {
74
98
((Slot ) obj ).setAmount (amount );
75
- break ;
76
- case REMOVE :
77
- for (Object obj : getExpr ().getArray (event ))
78
- if (obj instanceof ItemType ) {
79
- ItemType item = ((ItemType ) obj );
80
- item .setAmount (item .getAmount () - amount );
81
99
} else {
82
- Slot slot = ((Slot ) obj );
83
- slot .setAmount (slot .getAmount () - amount );
100
+ ((ItemStack ) obj ).setAmount (amount );
84
101
}
85
- break ;
86
- case REMOVE_ALL :
87
- case RESET :
88
- case DELETE :
89
- for (Object obj : getExpr ().getArray (event ))
90
- if (obj instanceof ItemType )
91
- ((ItemType ) obj ).setAmount (1 );
92
- else
93
- ((Slot ) obj ).setAmount (1 );
94
102
break ;
95
- }
96
- }
103
+ }
104
+ }
97
105
98
106
@ Override
99
107
public Class <? extends Long > getReturnType () {
@@ -104,5 +112,4 @@ public Class<? extends Long> getReturnType() {
104
112
protected String getPropertyName () {
105
113
return "item[[ ]stack] (amount|size|number)" ;
106
114
}
107
-
108
115
}
0 commit comments