@@ -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