From 0e7f1e2a8d75dd9791898a6e7c78dc0b9b25b6fb Mon Sep 17 00:00:00 2001 From: mcmonkey4eva Date: Sat, 4 Apr 2015 18:26:53 -0700 Subject: [PATCH] Add dEntity.has_ai property --- .../java/net/aufdemrand/denizen/Denizen.java | 1 + .../aufdemrand/denizen/objects/dEntity.java | 26 ------ .../objects/properties/entity/EntityAI.java | 92 +++++++++++++++++++ 3 files changed, 93 insertions(+), 26 deletions(-) create mode 100644 src/main/java/net/aufdemrand/denizen/objects/properties/entity/EntityAI.java diff --git a/src/main/java/net/aufdemrand/denizen/Denizen.java b/src/main/java/net/aufdemrand/denizen/Denizen.java index 2de49aaae8..b0f5bcc9ab 100644 --- a/src/main/java/net/aufdemrand/denizen/Denizen.java +++ b/src/main/java/net/aufdemrand/denizen/Denizen.java @@ -636,6 +636,7 @@ public void onEnable() { // register core dEntity properties propertyParser.registerProperty(EntityAge.class, dEntity.class); + propertyParser.registerProperty(EntityAI.class, dEntity.class); propertyParser.registerProperty(EntityAngry.class, dEntity.class); propertyParser.registerProperty(EntityColor.class, dEntity.class); propertyParser.registerProperty(EntityCritical.class, dEntity.class); diff --git a/src/main/java/net/aufdemrand/denizen/objects/dEntity.java b/src/main/java/net/aufdemrand/denizen/objects/dEntity.java index 9973aaa803..5bec5accf9 100644 --- a/src/main/java/net/aufdemrand/denizen/objects/dEntity.java +++ b/src/main/java/net/aufdemrand/denizen/objects/dEntity.java @@ -1877,19 +1877,6 @@ else return new Element("null") return new Duration(entity.getTicksLived() / 20) .getAttribute(attribute.fulfill(1)); - // <--[tag] - // @attribute - // @returns Element(Boolean) - // @group attributes - // @description - // Returns whether the entity uses the default Minecraft - // AI to roam and look around. - // --> - if (attribute.startsWith("has_ai")) - return new Element(!EntityMovement.isAIDisabled(getBukkitEntity())) - .getAttribute(attribute.fulfill(1)); - - ///////////////////// // TYPE ATTRIBUTES ///////////////// @@ -2273,19 +2260,6 @@ public void adjust(Mechanism mechanism) { getLivingEntity().playEffect(EntityEffect.DEATH); } - // <--[mechanism] - // @object dEntity - // @name toggle_ai - // @input Element(Boolean) - // @description - // Sets whether this entity will use the default - // Minecraft AI to roam and look around. - // @tags - // - // --> - if (mechanism.matches("toggle_ai") && mechanism.requireBoolean()) { - EntityMovement.toggleAI(getBukkitEntity(), value.asBoolean()); - } // Iterate through this object's properties' mechanisms for (Property property : PropertyParser.getProperties(this)) { diff --git a/src/main/java/net/aufdemrand/denizen/objects/properties/entity/EntityAI.java b/src/main/java/net/aufdemrand/denizen/objects/properties/entity/EntityAI.java new file mode 100644 index 0000000000..6279de6dc1 --- /dev/null +++ b/src/main/java/net/aufdemrand/denizen/objects/properties/entity/EntityAI.java @@ -0,0 +1,92 @@ +package net.aufdemrand.denizen.objects.properties.entity; + +import net.aufdemrand.denizen.objects.dEntity; +import net.aufdemrand.denizen.utilities.entity.EntityMovement; +import net.aufdemrand.denizencore.objects.Element; +import net.aufdemrand.denizencore.objects.Mechanism; +import net.aufdemrand.denizencore.objects.dObject; +import net.aufdemrand.denizencore.objects.properties.Property; +import net.aufdemrand.denizencore.tags.Attribute; + +public class EntityAI implements Property { + + public static boolean describes(dObject entity) { + return entity instanceof dEntity + && ((dEntity) entity).isLivingEntity(); + } + + public static EntityAI getFrom(dObject entity) { + if (!describes(entity)) return null; + + else return new EntityAI((dEntity) entity); + } + + + /////////////////// + // Instance Fields and Methods + ///////////// + + private EntityAI(dEntity ent) { + entity = ent; + } + + dEntity entity; + + ///////// + // Property Methods + /////// + + @Override + public String getPropertyString() { + return String.valueOf(!EntityMovement.isAIDisabled(entity.getBukkitEntity())); + } + + @Override + public String getPropertyId() { + return "has_ai"; + } + + + /////////// + // dObject Attributes + //////// + + @Override + public String getAttribute(Attribute attribute) { + + if (attribute == null) return "null"; + + // <--[tag] + // @attribute + // @returns Element(Boolean) + // @group attributes + // @description + // Returns whether the entity uses the default Minecraft + // AI to roam and look around. + // --> + if (attribute.startsWith("has_ai")) + return new Element(!EntityMovement.isAIDisabled(entity.getBukkitEntity())) + .getAttribute(attribute.fulfill(1)); + + + return null; + } + + @Override + public void adjust(Mechanism mechanism) { + + // <--[mechanism] + // @object dEntity + // @name has_ai + // @input Element(Boolean) + // @description + // Sets whether this entity will use the default + // Minecraft AI to roam and look around. + // @tags + // + // --> + if ((mechanism.matches("has_ai") || mechanism.matches("toggle_ai")) && mechanism.requireBoolean()) { + EntityMovement.toggleAI(entity.getBukkitEntity(), mechanism.getValue().asBoolean()); + } + } +}