1
1
package fi .septicuss .tooltips .managers .condition .impl .lookingat ;
2
2
3
3
import fi .septicuss .tooltips .managers .condition .Condition ;
4
+ import fi .septicuss .tooltips .managers .condition .Context ;
4
5
import fi .septicuss .tooltips .managers .condition .argument .Arguments ;
5
6
import fi .septicuss .tooltips .managers .condition .type .MultiString ;
6
7
import fi .septicuss .tooltips .utils .Utils ;
7
8
import fi .septicuss .tooltips .utils .validation .Validity ;
8
9
import net .citizensnpcs .api .CitizensAPI ;
10
+ import net .citizensnpcs .api .npc .NPC ;
9
11
import net .citizensnpcs .api .npc .NPCRegistry ;
10
12
import org .bukkit .Bukkit ;
11
13
import org .bukkit .entity .Entity ;
@@ -19,33 +21,57 @@ public class LookingAtCitizen implements Condition {
19
21
@ Override
20
22
public boolean check (Player player , Arguments args ) {
21
23
24
+ MultiString ids = null ;
25
+
26
+ if (args .has (ID ))
27
+ ids = MultiString .of (args .get (ID ).getAsString ());
28
+
29
+ final NPC citizen = this .getCitizen (player , args );
30
+
31
+ if (citizen == null ) {
32
+ return false ;
33
+ }
34
+
35
+ // Any citizen
36
+ if (ids == null ) {
37
+ return true ;
38
+ }
39
+
40
+ // Specific ID citizen
41
+ final String id = String .valueOf (citizen .getId ());
42
+ return ids .contains (id );
43
+ }
44
+
45
+ @ Override
46
+ public void writeContext (Player player , Arguments args , Context context ) {
47
+ final NPC citizen = this .getCitizen (player , args );
48
+
49
+ if (citizen == null ) {
50
+ return ;
51
+ }
52
+
53
+ context .put ("citizen.id" , citizen .getId ());
54
+ }
55
+
56
+ private NPC getCitizen (Player player , Arguments args ) {
22
57
int distance = 3 ;
23
58
24
59
if (args .has (DISTANCE ))
25
60
distance = args .get (DISTANCE ).getAsInt ();
26
61
27
62
var rayTrace = Utils .getRayTraceResult (player , distance );
28
-
63
+
29
64
if (rayTrace == null || rayTrace .getHitEntity () == null )
30
- return false ;
31
-
32
- Entity entity = rayTrace .getHitEntity ();
33
- MultiString ids = null ;
65
+ return null ;
34
66
35
- if (args .has (ID ))
36
- ids = MultiString .of (args .get (ID ).getAsString ());
67
+ Entity entity = rayTrace .getHitEntity ();
37
68
38
69
NPCRegistry registry = CitizensAPI .getNPCRegistry ();
39
70
40
71
if (!registry .isNPC (entity ))
41
- return false ;
72
+ return null ;
42
73
43
- // Any Citizen
44
- if (ids == null )
45
- return true ;
46
-
47
- String id = String .valueOf (registry .getNPC (entity ).getId ());
48
- return ids .contains (id );
74
+ return registry .getNPC (entity );
49
75
}
50
76
51
77
@ Override
0 commit comments