From aa603274037f88ffca46b92dc88edb17156535dd Mon Sep 17 00:00:00 2001 From: Inquisitor <62276696+creaturesofhabit@users.noreply.github.com> Date: Wed, 22 Jul 2026 03:19:37 -0700 Subject: [PATCH 1/3] Add is_enemy tag --- .../denizen/objects/EntityTag.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/EntityTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/EntityTag.java index 4ce44f74ab..9a4b128ff3 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/EntityTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/EntityTag.java @@ -610,6 +610,13 @@ public boolean isMonsterType() { return getBukkitEntity() instanceof Monster; } + public boolean isEnemyType() { + if (getBukkitEntity() == null && entity_type != null) { + return Enemy.class.isAssignableFrom(entity_type.getBukkitEntityType().getEntityClass()); + } + return getBukkitEntity() instanceof Enemy; + } + public boolean isMobType() { if (getBukkitEntity() == null && entity_type != null) { return Mob.class.isAssignableFrom(entity_type.getBukkitEntityType().getEntityClass()); @@ -2372,6 +2379,20 @@ else if (object.getBukkitEntity() instanceof Hanging hanging) { return new ElementTag(object.isMonsterType()); }); + if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_19)) { + + // <--[tag] + // @attribute + // @returns ElementTag(Boolean) + // @group data + // @description + // Returns whether the entity type is an enemy. See <@link url https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/Enemy.html> + // --> + tagProcessor.registerTag(ElementTag.class, "is_enemy", (attribute, object) -> { + return new ElementTag(object.isEnemyType()); + }); + } + // <--[tag] // @attribute // @returns ElementTag(Boolean) From 8b19a3bcac9d8fc75798dcbf0b568a6e7e4dc043 Mon Sep 17 00:00:00 2001 From: Inquisitor <62276696+creaturesofhabit@users.noreply.github.com> Date: Wed, 22 Jul 2026 12:35:47 -0700 Subject: [PATCH 2/3] Added enemy matcher This also requires/justifies the seperate method --- .../main/java/com/denizenscript/denizen/objects/EntityTag.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/EntityTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/EntityTag.java index 9a4b128ff3..31e60e87b0 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/EntityTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/EntityTag.java @@ -4608,6 +4608,8 @@ public final boolean trySpecialEntityMatcher(String text, boolean isNPC) { return isMobType(); case "animal": return isAnimalType(); + case "enemy": + return isEnemyType(); } return false; } From e1367ecbb4c3d8effe10a6b6cdbc5a22169da88f Mon Sep 17 00:00:00 2001 From: Iridian Date: Mon, 27 Jul 2026 05:33:28 -0400 Subject: [PATCH 3/3] add matcher documentation --- .../main/java/com/denizenscript/denizen/objects/EntityTag.java | 1 + 1 file changed, 1 insertion(+) diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/EntityTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/EntityTag.java index 31e60e87b0..a31fef84f7 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/EntityTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/EntityTag.java @@ -100,6 +100,7 @@ public class EntityTag implements ObjectTag, Adjustable, EntityFormObject, Flagg // "projectile" plaintext: matches for any projectile type (arrow, trident, fish hook, snowball, etc). // "hanging" plaintext: matches for any hanging type (painting, item_frame, etc). // "monster" plaintext: matches for any monster type (creepers, zombies, etc). + // "enemy" plaintext: matches for any hostile entities (zombies, shulkers, ect). // "animal" plaintext: matches for any animal type (pigs, cows, etc). // "mob" plaintext: matches for any mob type (creepers, pigs, etc). // "living" plaintext: matches for any living type (players, pigs, creepers, etc).