Skip to content

Commit

Permalink
improve event target logic
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Dec 12, 2023
1 parent dd060ef commit f900439
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 22 deletions.
4 changes: 2 additions & 2 deletions src/main/java/org/mcmonkey/sentinel/SentinelEventHandler.java
Expand Up @@ -231,11 +231,11 @@ public void whenAttacksHappened(EntityDamageByEntityEvent event) {
if (damager instanceof LivingEntity) {
LivingEntity damagerLiving = (LivingEntity) damager;
for (SentinelTrait sentinel : cleanCurrentList()) {
if (sentinel.allTargets.isEventTarget(event)
if (sentinel.allTargets.isEventTarget(event, sentinel)
&& sentinel.targetingHelper.canSee(damagerLiving) && !sentinel.targetingHelper.isIgnored(damagerLiving)) {
sentinel.targetingHelper.addTarget(damager.getUniqueId());
}
if (sentinel.allAvoids.isEventTarget(event)
if (sentinel.allAvoids.isEventTarget(event, sentinel)
&& sentinel.targetingHelper.canSee(damagerLiving) && !sentinel.targetingHelper.isIgnored(damagerLiving)) {
sentinel.targetingHelper.addAvoid(damager.getUniqueId());
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/mcmonkey/sentinel/SentinelPlugin.java
Expand Up @@ -34,7 +34,7 @@ public class SentinelPlugin extends JavaPlugin {
* A map of all valid event targets.
*/
public static HashSet<String> validEventTargets = new HashSet<>(
Arrays.asList("pvp", "pve", "pv", "pvnpc", "pvsentinel", "guarded_fight", "eve", "ev", "message")
Arrays.asList("pvp", "pve", "pv", "pvnpc", "pvsentinel", "guarded_fight", "eve", "ev", "message", "npcvnpc")
);

/**
Expand Down
Expand Up @@ -390,48 +390,46 @@ public boolean isReverseEventTarget(SentinelTrait sentinel, EntityDamageByEntity
/**
* Returns whether the damager in a damage event is targeted by this list.
*/
public boolean isEventTarget(EntityDamageByEntityEvent event) {
public boolean isEventTarget(EntityDamageByEntityEvent event, SentinelTrait sentinel) {
Entity damager = event.getDamager();
if (event.getDamager() instanceof Projectile) {
ProjectileSource source = ((Projectile) event.getDamager()).getShooter();
if (source instanceof Entity) {
damager = (Entity) source;
}
}
if (CitizensAPI.getNPCRegistry().isNPC(damager)) {
return false;
}
boolean damagerIsNPC = CitizensAPI.getNPCRegistry().isNPC(damager);
if (damager.equals(event.getEntity())) {
return false; // Players can accidentally hurt themselves - that's not PvP
}
for (String evt : byEvent) {
if (evt.equals("pvp")
&& event.getEntity() instanceof Player
&& damager instanceof Player
&& damager instanceof Player && !damagerIsNPC
&& !CitizensAPI.getNPCRegistry().isNPC(event.getEntity())) {
return true;
}
else if (evt.equals("pve")
&& !(event.getEntity() instanceof Player)
&& damager instanceof Player
&& damager instanceof Player && !damagerIsNPC
&& event.getEntity() instanceof LivingEntity) {
return true;
}
else if (evt.equals("eve")
&& !(damager instanceof Player)
&& !(damager instanceof Player) && !damagerIsNPC
&& !(event.getEntity() instanceof Player)
&& event.getEntity() instanceof LivingEntity) {
return true;
}
else if (evt.equals("pvnpc")
&& event.getEntity() instanceof LivingEntity
&& damager instanceof Player
&& damager instanceof Player && !damagerIsNPC
&& CitizensAPI.getNPCRegistry().isNPC(event.getEntity())) {
return true;
}
else if (evt.equals("pvsentinel")
&& event.getEntity() instanceof LivingEntity
&& damager instanceof Player
&& damager instanceof Player && !damagerIsNPC
&& CitizensAPI.getNPCRegistry().isNPC(event.getEntity())
&& CitizensAPI.getNPCRegistry().getNPC(event.getEntity()).hasTrait(SentinelTrait.class)) {
return true;
Expand All @@ -445,25 +443,34 @@ else if (evt.equals("npcvnpc")
int colon = evt.indexOf(':');
String prefix = evt.substring(0, colon);
String value = evt.substring(colon + 1);
if (prefix.equals("pv")) {
SentinelTarget target = SentinelTarget.forName(value);
if (target != null) {
if (prefix.equals("pv") && !damagerIsNPC) {
SentinelTargetList list = new SentinelTargetList();
SentinelTargetLabel label = new SentinelTargetLabel(value);
if (label.isValidTarget()) {
label.addToList(list);
if (damager instanceof Player
&& event.getEntity() instanceof LivingEntity
&& target.isTarget((LivingEntity) event.getEntity())) {
&& list.isTarget((LivingEntity) event.getEntity(), sentinel)) {
return true;
}
}
else {
sentinel.debug("Invalid event:pv: target label: " + value);
}
}
else if (prefix.equals("ev")) {
SentinelTarget target = SentinelTarget.forName(value);
if (target != null) {
if (!(damager instanceof Player)
&& event.getEntity() instanceof LivingEntity
&& target.isTarget((LivingEntity) event.getEntity())) {
else if (prefix.equals("ev") && !damagerIsNPC) {
SentinelTargetList list = new SentinelTargetList();
SentinelTargetLabel label = new SentinelTargetLabel(value);
if (label.isValidTarget()) {
label.addToList(list);
if (event.getEntity() instanceof LivingEntity
&& list.isTarget((LivingEntity) event.getEntity(), sentinel)) {
return true;
}
}
else {
sentinel.debug("Invalid event:ev: target label: " + value);
}
}
}
}
Expand Down

0 comments on commit f900439

Please sign in to comment.