Skip to content

Commit 371c28b

Browse files
committedJan 6, 2025
feat: Add context to lookingatcitizen
1 parent 9594939 commit 371c28b

File tree

1 file changed

+40
-14
lines changed

1 file changed

+40
-14
lines changed
 

‎src/main/java/fi/septicuss/tooltips/managers/condition/impl/lookingat/LookingAtCitizen.java

+40-14
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package fi.septicuss.tooltips.managers.condition.impl.lookingat;
22

33
import fi.septicuss.tooltips.managers.condition.Condition;
4+
import fi.septicuss.tooltips.managers.condition.Context;
45
import fi.septicuss.tooltips.managers.condition.argument.Arguments;
56
import fi.septicuss.tooltips.managers.condition.type.MultiString;
67
import fi.septicuss.tooltips.utils.Utils;
78
import fi.septicuss.tooltips.utils.validation.Validity;
89
import net.citizensnpcs.api.CitizensAPI;
10+
import net.citizensnpcs.api.npc.NPC;
911
import net.citizensnpcs.api.npc.NPCRegistry;
1012
import org.bukkit.Bukkit;
1113
import org.bukkit.entity.Entity;
@@ -19,33 +21,57 @@ public class LookingAtCitizen implements Condition {
1921
@Override
2022
public boolean check(Player player, Arguments args) {
2123

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) {
2257
int distance = 3;
2358

2459
if (args.has(DISTANCE))
2560
distance = args.get(DISTANCE).getAsInt();
2661

2762
var rayTrace = Utils.getRayTraceResult(player, distance);
28-
63+
2964
if (rayTrace == null || rayTrace.getHitEntity() == null)
30-
return false;
31-
32-
Entity entity = rayTrace.getHitEntity();
33-
MultiString ids = null;
65+
return null;
3466

35-
if (args.has(ID))
36-
ids = MultiString.of(args.get(ID).getAsString());
67+
Entity entity = rayTrace.getHitEntity();
3768

3869
NPCRegistry registry = CitizensAPI.getNPCRegistry();
3970

4071
if (!registry.isNPC(entity))
41-
return false;
72+
return null;
4273

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);
4975
}
5076

5177
@Override

0 commit comments

Comments
 (0)
Please sign in to comment.