From 450739e00c20adf4ab26a094c95a21eb490aa6ec Mon Sep 17 00:00:00 2001 From: Morphan1 Date: Wed, 9 Mar 2016 17:31:01 -0500 Subject: [PATCH] Add entity.marker tag and mechanism, fixes #1311 --- .../java/net/aufdemrand/denizen/Denizen.java | 1 + .../properties/entity/EntityMarker.java | 101 ++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 src/main/java/net/aufdemrand/denizen/objects/properties/entity/EntityMarker.java diff --git a/src/main/java/net/aufdemrand/denizen/Denizen.java b/src/main/java/net/aufdemrand/denizen/Denizen.java index 0ec97a4885..4c1d12a3c3 100644 --- a/src/main/java/net/aufdemrand/denizen/Denizen.java +++ b/src/main/java/net/aufdemrand/denizen/Denizen.java @@ -778,6 +778,7 @@ public void onEnable() { propertyParser.registerProperty(EntityItem.class, dEntity.class); propertyParser.registerProperty(EntityJumpStrength.class, dEntity.class); propertyParser.registerProperty(EntityKnockback.class, dEntity.class); + propertyParser.registerProperty(EntityMarker.class, dEntity.class); propertyParser.registerProperty(EntityPainting.class, dEntity.class); propertyParser.registerProperty(EntityPotion.class, dEntity.class); propertyParser.registerProperty(EntityPowered.class, dEntity.class); diff --git a/src/main/java/net/aufdemrand/denizen/objects/properties/entity/EntityMarker.java b/src/main/java/net/aufdemrand/denizen/objects/properties/entity/EntityMarker.java new file mode 100644 index 0000000000..0f9febeac0 --- /dev/null +++ b/src/main/java/net/aufdemrand/denizen/objects/properties/entity/EntityMarker.java @@ -0,0 +1,101 @@ +package net.aufdemrand.denizen.objects.properties.entity; + +import net.aufdemrand.denizen.objects.dEntity; +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; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.EntityType; + +public class EntityMarker implements Property { + + public static boolean describes(dObject entity) { + return entity instanceof dEntity && ((dEntity) entity).getBukkitEntityType() == EntityType.ARMOR_STAND; + } + + public static EntityMarker getFrom(dObject entity) { + if (!describes(entity)) { + return null; + } + + else { + return new EntityMarker((dEntity) entity); + } + } + + /////////////////// + // Instance Fields and Methods + ///////////// + + private EntityMarker(dEntity entity) { + dentity = entity; + } + + dEntity dentity; + + ///////// + // Property Methods + /////// + + @Override + public String getPropertyString() { + if (!((ArmorStand) dentity.getBukkitEntity()).isMarker()) { + return null; + } + else { + return "true"; + } + } + + @Override + public String getPropertyId() { + return "marker"; + } + + /////////// + // dObject Attributes + //////// + + @Override + public String getAttribute(Attribute attribute) { + + if (attribute == null) { + return "null"; + } + + // <--[tag] + // @attribute + // @returns Element(Boolean) + // @mechanism dEntity.marker + // @group properties + // @description + // If the entity is an armor stand, returns whether the armor stand is a marker. + // --> + if (attribute.startsWith("marker")) { + return new Element(((ArmorStand) dentity.getBukkitEntity()).isMarker()) + .getAttribute(attribute.fulfill(1)); + } + + return null; + } + + @Override + public void adjust(Mechanism mechanism) { + + // <--[mechanism] + // @object dEntity + // @name marker + // @input Element(Boolean) + // @description + // Changes the marker state of an armor stand. + // @tags + // + // --> + + if (mechanism.matches("marker") && mechanism.requireBoolean()) { + ((ArmorStand) dentity.getBukkitEntity()).setMarker(mechanism.getValue().asBoolean()); + } + } +}