diff --git a/docs/wiki/Commands.md b/docs/wiki/Commands.md index 9431eac33..e0a3fb335 100644 --- a/docs/wiki/Commands.md +++ b/docs/wiki/Commands.md @@ -1893,6 +1893,8 @@ Aggressive mobs are mobs that are actively targeting and attacking the player. ```killAura targetCustom add/del ``` + ```killAura ignoreNamedMobs on/off``` + ```killAura weaponSwitch on/off``` ```killAura weaponType ``` diff --git a/src/main/java/com/zenith/cache/data/entity/Entity.java b/src/main/java/com/zenith/cache/data/entity/Entity.java index eef8cb781..124e1b3ae 100644 --- a/src/main/java/com/zenith/cache/data/entity/Entity.java +++ b/src/main/java/com/zenith/cache/data/entity/Entity.java @@ -108,6 +108,10 @@ public double distanceSqTo(Entity entity) { } public @Nullable T getMetadataValue(int index, MetadataType metadataType, Class valueClass) { + return getMetadataValue(index, metadataType); + } + + public @Nullable T getMetadataValue(int index, MetadataType metadataType) { var metadata = this.metadata.get(index); if (metadata == null) return null; if (metadata.getType() == metadataType) { @@ -115,8 +119,10 @@ public double distanceSqTo(Entity entity) { if (metadataValue == null) { return null; } - if (valueClass.isInstance(metadataValue)) { - return valueClass.cast(metadata.getValue()); + try { + return (T) metadataValue; + } catch (ClassCastException e) { + return null; } } return null; diff --git a/src/main/java/com/zenith/command/impl/KillAuraCommand.java b/src/main/java/com/zenith/command/impl/KillAuraCommand.java index a6b6314b0..1d8b891a4 100644 --- a/src/main/java/com/zenith/command/impl/KillAuraCommand.java +++ b/src/main/java/com/zenith/command/impl/KillAuraCommand.java @@ -46,6 +46,7 @@ public CommandUsage commandUsage() { "targetNeutralMobs onlyAggressive on/off", "targetCustom on/off", "targetCustom add/del ", + "ignoreNamedMobs on/off", "weaponSwitch on/off", "weaponType ", "weaponMaterial ", @@ -103,6 +104,11 @@ public LiteralArgumentBuilder register() { c.getSource().getEmbed() .title("Target Neutral Mobs Only Aggressive " + toggleStrCaps(CONFIG.client.extra.killAura.onlyNeutralAggressive)); })))) + .then(literal("ignoreNamedMobs").then(argument("toggle", toggle()).executes(c -> { + CONFIG.client.extra.killAura.ignoreNamedMobs = getToggle(c, "toggle"); + c.getSource().getEmbed() + .title("Ignore Named Mobs " + toggleStrCaps(CONFIG.client.extra.killAura.ignoreNamedMobs)); + }))) .then(literal("weaponSwitch").then(argument("toggle", toggle()).executes(c -> { CONFIG.client.extra.killAura.switchWeapon = getToggle(c, "toggle"); c.getSource().getEmbed() @@ -165,6 +171,7 @@ public void defaultEmbed(Embed builder) { .addField("Target Hostile Mobs", toggleStr(CONFIG.client.extra.killAura.targetHostileMobs) + " [onlyAggressive: " + toggleStr(CONFIG.client.extra.killAura.onlyHostileAggressive) + "]") .addField("Target Neutral Mobs", toggleStr(CONFIG.client.extra.killAura.targetNeutralMobs) + " [onlyAggressive: " + toggleStr(CONFIG.client.extra.killAura.onlyNeutralAggressive) + "]") .addField("Target Custom", toggleStr(CONFIG.client.extra.killAura.targetCustom)) + .addField("Ignore Named Mobs", toggleStr(CONFIG.client.extra.killAura.ignoreNamedMobs)) .addField("Weapon Switching", toggleStr(CONFIG.client.extra.killAura.switchWeapon)) .addField("Weapon Type", CONFIG.client.extra.killAura.weaponType.name().toLowerCase()) .addField("Weapon Material", CONFIG.client.extra.killAura.weaponMaterial.name().toLowerCase()) diff --git a/src/main/java/com/zenith/module/impl/KillAura.java b/src/main/java/com/zenith/module/impl/KillAura.java index ff2667091..a3215c29e 100644 --- a/src/main/java/com/zenith/module/impl/KillAura.java +++ b/src/main/java/com/zenith/module/impl/KillAura.java @@ -169,6 +169,7 @@ private boolean validTarget(EntityLiving entity) { && !PLAYER_LISTS.getSpectatorWhitelist().contains(player.getUuid()); } else if (entity instanceof EntityStandard e) { + if (CONFIG.client.extra.killAura.ignoreNamedMobs && hasCustomName(e)) return false; if (CONFIG.client.extra.killAura.targetCustom) { if (CONFIG.client.extra.killAura.customTargets.contains(e.getEntityType())) { return true; @@ -196,6 +197,11 @@ private boolean validTarget(EntityLiving entity) { return false; } + private static boolean hasCustomName(final EntityLiving entity) { + var customName = entity.getMetadataValue(2, MetadataTypes.OPTIONAL_CHAT); + return customName != null && customName.isPresent(); + } + private static boolean isAggressive(final EntityLiving entity) { // https://minecraft.wiki/w/Java_Edition_protocol/Entity_metadata#Mob var byteData = entity.getMetadataValue(15, MetadataTypes.BYTE, Byte.class); diff --git a/src/main/java/com/zenith/util/config/Config.java b/src/main/java/com/zenith/util/config/Config.java index 674b4978c..46cc2411c 100644 --- a/src/main/java/com/zenith/util/config/Config.java +++ b/src/main/java/com/zenith/util/config/Config.java @@ -398,6 +398,7 @@ public static final class KillAura { public boolean targetHostileMobs = true; public boolean targetNeutralMobs = false; public boolean targetCustom = false; + public boolean ignoreNamedMobs = false; public boolean onlyNeutralAggressive = false; public boolean onlyHostileAggressive = false; public boolean switchWeapon = true;