Skip to content

Commit f900439

Browse files
committed
improve event target logic
1 parent dd060ef commit f900439

3 files changed

Lines changed: 29 additions & 22 deletions

File tree

src/main/java/org/mcmonkey/sentinel/SentinelEventHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,11 +231,11 @@ public void whenAttacksHappened(EntityDamageByEntityEvent event) {
231231
if (damager instanceof LivingEntity) {
232232
LivingEntity damagerLiving = (LivingEntity) damager;
233233
for (SentinelTrait sentinel : cleanCurrentList()) {
234-
if (sentinel.allTargets.isEventTarget(event)
234+
if (sentinel.allTargets.isEventTarget(event, sentinel)
235235
&& sentinel.targetingHelper.canSee(damagerLiving) && !sentinel.targetingHelper.isIgnored(damagerLiving)) {
236236
sentinel.targetingHelper.addTarget(damager.getUniqueId());
237237
}
238-
if (sentinel.allAvoids.isEventTarget(event)
238+
if (sentinel.allAvoids.isEventTarget(event, sentinel)
239239
&& sentinel.targetingHelper.canSee(damagerLiving) && !sentinel.targetingHelper.isIgnored(damagerLiving)) {
240240
sentinel.targetingHelper.addAvoid(damager.getUniqueId());
241241
}

src/main/java/org/mcmonkey/sentinel/SentinelPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public class SentinelPlugin extends JavaPlugin {
3434
* A map of all valid event targets.
3535
*/
3636
public static HashSet<String> validEventTargets = new HashSet<>(
37-
Arrays.asList("pvp", "pve", "pv", "pvnpc", "pvsentinel", "guarded_fight", "eve", "ev", "message")
37+
Arrays.asList("pvp", "pve", "pv", "pvnpc", "pvsentinel", "guarded_fight", "eve", "ev", "message", "npcvnpc")
3838
);
3939

4040
/**

src/main/java/org/mcmonkey/sentinel/targeting/SentinelTargetList.java

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -390,48 +390,46 @@ public boolean isReverseEventTarget(SentinelTrait sentinel, EntityDamageByEntity
390390
/**
391391
* Returns whether the damager in a damage event is targeted by this list.
392392
*/
393-
public boolean isEventTarget(EntityDamageByEntityEvent event) {
393+
public boolean isEventTarget(EntityDamageByEntityEvent event, SentinelTrait sentinel) {
394394
Entity damager = event.getDamager();
395395
if (event.getDamager() instanceof Projectile) {
396396
ProjectileSource source = ((Projectile) event.getDamager()).getShooter();
397397
if (source instanceof Entity) {
398398
damager = (Entity) source;
399399
}
400400
}
401-
if (CitizensAPI.getNPCRegistry().isNPC(damager)) {
402-
return false;
403-
}
401+
boolean damagerIsNPC = CitizensAPI.getNPCRegistry().isNPC(damager);
404402
if (damager.equals(event.getEntity())) {
405403
return false; // Players can accidentally hurt themselves - that's not PvP
406404
}
407405
for (String evt : byEvent) {
408406
if (evt.equals("pvp")
409407
&& event.getEntity() instanceof Player
410-
&& damager instanceof Player
408+
&& damager instanceof Player && !damagerIsNPC
411409
&& !CitizensAPI.getNPCRegistry().isNPC(event.getEntity())) {
412410
return true;
413411
}
414412
else if (evt.equals("pve")
415413
&& !(event.getEntity() instanceof Player)
416-
&& damager instanceof Player
414+
&& damager instanceof Player && !damagerIsNPC
417415
&& event.getEntity() instanceof LivingEntity) {
418416
return true;
419417
}
420418
else if (evt.equals("eve")
421-
&& !(damager instanceof Player)
419+
&& !(damager instanceof Player) && !damagerIsNPC
422420
&& !(event.getEntity() instanceof Player)
423421
&& event.getEntity() instanceof LivingEntity) {
424422
return true;
425423
}
426424
else if (evt.equals("pvnpc")
427425
&& event.getEntity() instanceof LivingEntity
428-
&& damager instanceof Player
426+
&& damager instanceof Player && !damagerIsNPC
429427
&& CitizensAPI.getNPCRegistry().isNPC(event.getEntity())) {
430428
return true;
431429
}
432430
else if (evt.equals("pvsentinel")
433431
&& event.getEntity() instanceof LivingEntity
434-
&& damager instanceof Player
432+
&& damager instanceof Player && !damagerIsNPC
435433
&& CitizensAPI.getNPCRegistry().isNPC(event.getEntity())
436434
&& CitizensAPI.getNPCRegistry().getNPC(event.getEntity()).hasTrait(SentinelTrait.class)) {
437435
return true;
@@ -445,25 +443,34 @@ else if (evt.equals("npcvnpc")
445443
int colon = evt.indexOf(':');
446444
String prefix = evt.substring(0, colon);
447445
String value = evt.substring(colon + 1);
448-
if (prefix.equals("pv")) {
449-
SentinelTarget target = SentinelTarget.forName(value);
450-
if (target != null) {
446+
if (prefix.equals("pv") && !damagerIsNPC) {
447+
SentinelTargetList list = new SentinelTargetList();
448+
SentinelTargetLabel label = new SentinelTargetLabel(value);
449+
if (label.isValidTarget()) {
450+
label.addToList(list);
451451
if (damager instanceof Player
452452
&& event.getEntity() instanceof LivingEntity
453-
&& target.isTarget((LivingEntity) event.getEntity())) {
453+
&& list.isTarget((LivingEntity) event.getEntity(), sentinel)) {
454454
return true;
455455
}
456456
}
457+
else {
458+
sentinel.debug("Invalid event:pv: target label: " + value);
459+
}
457460
}
458-
else if (prefix.equals("ev")) {
459-
SentinelTarget target = SentinelTarget.forName(value);
460-
if (target != null) {
461-
if (!(damager instanceof Player)
462-
&& event.getEntity() instanceof LivingEntity
463-
&& target.isTarget((LivingEntity) event.getEntity())) {
461+
else if (prefix.equals("ev") && !damagerIsNPC) {
462+
SentinelTargetList list = new SentinelTargetList();
463+
SentinelTargetLabel label = new SentinelTargetLabel(value);
464+
if (label.isValidTarget()) {
465+
label.addToList(list);
466+
if (event.getEntity() instanceof LivingEntity
467+
&& list.isTarget((LivingEntity) event.getEntity(), sentinel)) {
464468
return true;
465469
}
466470
}
471+
else {
472+
sentinel.debug("Invalid event:ev: target label: " + value);
473+
}
467474
}
468475
}
469476
}

0 commit comments

Comments
 (0)