From 8f505322fd7a2965515a2c1c73a021806295ee46 Mon Sep 17 00:00:00 2001 From: mergu Date: Thu, 17 Jan 2019 14:36:24 -0500 Subject: [PATCH] Add riptide entity property --- .../denizen/nms/interfaces/EntityHelper.java | 2 + .../java/net/aufdemrand/denizen/Denizen.java | 3 + .../aufdemrand/denizen/objects/dEntity.java | 12 --- .../properties/entity/EntityRiptide.java | 85 +++++++++++++++++++ .../nms/helpers/EntityHelper_v1_10_R1.java | 5 ++ .../nms/helpers/EntityHelper_v1_11_R1.java | 5 ++ .../nms/helpers/EntityHelper_v1_12_R1.java | 5 ++ .../nms/helpers/EntityHelper_v1_13_R2.java | 7 ++ .../nms/helpers/EntityHelper_v1_8_R3.java | 5 ++ .../nms/helpers/EntityHelper_v1_9_R2.java | 5 ++ 10 files changed, 122 insertions(+), 12 deletions(-) create mode 100644 plugin/src/main/java/net/aufdemrand/denizen/objects/properties/entity/EntityRiptide.java diff --git a/nmshandler/src/main/java/net/aufdemrand/denizen/nms/interfaces/EntityHelper.java b/nmshandler/src/main/java/net/aufdemrand/denizen/nms/interfaces/EntityHelper.java index 1aa651b9c1..2f345953d9 100644 --- a/nmshandler/src/main/java/net/aufdemrand/denizen/nms/interfaces/EntityHelper.java +++ b/nmshandler/src/main/java/net/aufdemrand/denizen/nms/interfaces/EntityHelper.java @@ -18,6 +18,8 @@ public interface EntityHelper { + void setRiptide(Entity entity, boolean state); + int getBodyArrows(Entity entity); void setBodyArrows(Entity entity, int numArrows); diff --git a/plugin/src/main/java/net/aufdemrand/denizen/Denizen.java b/plugin/src/main/java/net/aufdemrand/denizen/Denizen.java index 2c80aa6404..1d94b38c04 100644 --- a/plugin/src/main/java/net/aufdemrand/denizen/Denizen.java +++ b/plugin/src/main/java/net/aufdemrand/denizen/Denizen.java @@ -848,6 +848,9 @@ public Property get(dObject o) { PropertyParser.registerProperty(EntityPotion.class, dEntity.class); PropertyParser.registerProperty(EntityPowered.class, dEntity.class); PropertyParser.registerProperty(EntityProfession.class, dEntity.class); + if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_13_R2)) { + PropertyParser.registerProperty(EntityRiptide.class, dEntity.class); + } PropertyParser.registerProperty(EntityRotation.class, dEntity.class); PropertyParser.registerProperty(EntitySmall.class, dEntity.class); PropertyParser.registerProperty(EntitySilent.class, dEntity.class); diff --git a/plugin/src/main/java/net/aufdemrand/denizen/objects/dEntity.java b/plugin/src/main/java/net/aufdemrand/denizen/objects/dEntity.java index f1a8eed75e..bffd10e667 100644 --- a/plugin/src/main/java/net/aufdemrand/denizen/objects/dEntity.java +++ b/plugin/src/main/java/net/aufdemrand/denizen/objects/dEntity.java @@ -2282,18 +2282,6 @@ && getBukkitEntity() instanceof Item) { .getAttribute(attribute.fulfill(1)); } - // <--[tag] - // @attribute - // @returns Element(Boolean) - // @group attributes - // @description - // Returns whether this entity is using the Riptide enchantment. - // --> - if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_13_R2) && attribute.startsWith("is_using_riptide")) { - return new Element(getLivingEntity().isRiptiding()) - .getAttribute(attribute.fulfill(1)); - } - // <--[tag] // @attribute // @returns Element(Boolean) diff --git a/plugin/src/main/java/net/aufdemrand/denizen/objects/properties/entity/EntityRiptide.java b/plugin/src/main/java/net/aufdemrand/denizen/objects/properties/entity/EntityRiptide.java new file mode 100644 index 0000000000..b4719bca7c --- /dev/null +++ b/plugin/src/main/java/net/aufdemrand/denizen/objects/properties/entity/EntityRiptide.java @@ -0,0 +1,85 @@ +package net.aufdemrand.denizen.objects.properties.entity; + +import net.aufdemrand.denizen.nms.NMSHandler; +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; + +public class EntityRiptide implements Property { + public static boolean describes(dObject object) { + return object instanceof dEntity && ((dEntity) object).isLivingEntity(); + } + + public static EntityRiptide getFrom(dObject object) { + if (!describes(object)) { + return null; + } + else { + return new EntityRiptide((dEntity) object); + } + } + + /////////////////// + // Instance Fields and Methods + ///////////// + + private EntityRiptide(dEntity entity) { + this.entity = entity; + } + + dEntity entity; + + ///////// + // Property Methods + /////// + + @Override + public String getPropertyString() { + return entity.getLivingEntity().isRiptiding() ? "true" : null; + } + + @Override + public String getPropertyId() { + return "is_using_riptide"; + } + + @Override + public String getAttribute(Attribute attribute) { + + if (attribute == null) { + return null; + } + + // <--[tag] + // @attribute + // @returns Element(Boolean) + // @group properties + // @description + // Returns whether this entity is using the Riptide enchantment. + // --> + if (attribute.startsWith("is_using_riptide")) { + return new Element(entity.getLivingEntity().isRiptiding()) + .getAttribute(attribute.fulfill(1)); + } + + return null; + } + + @Override + public void adjust(Mechanism mechanism) { + + // <--[mechanism] + // @object dEntity + // @name is_using_riptide + // @input Element(Boolean) + // @description + // Sets whether this entity is using the Riptide enchantment. + // --> + if (mechanism.matches("is_using_riptide") && mechanism.requireBoolean()) { + NMSHandler.getInstance().getEntityHelper().setRiptide(entity.getBukkitEntity(), mechanism.getValue().asBoolean()); + } + } +} diff --git a/v1_10_R1/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_10_R1.java b/v1_10_R1/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_10_R1.java index 06d9b39a45..26a91589c7 100644 --- a/v1_10_R1/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_10_R1.java +++ b/v1_10_R1/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_10_R1.java @@ -37,6 +37,11 @@ public class EntityHelper_v1_10_R1 implements EntityHelper { General Entity Methods */ + @Override + public void setRiptide(Entity entity, boolean state) { + // Intentionally empty + } + @Override public int getBodyArrows(Entity entity) { // https://wiki.vg/Entity_metadata#Living diff --git a/v1_11_R1/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_11_R1.java b/v1_11_R1/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_11_R1.java index 116088e99b..94343a5594 100644 --- a/v1_11_R1/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_11_R1.java +++ b/v1_11_R1/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_11_R1.java @@ -37,6 +37,11 @@ public class EntityHelper_v1_11_R1 implements EntityHelper { General Entity Methods */ + @Override + public void setRiptide(Entity entity, boolean state) { + // Intentionally empty + } + @Override public int getBodyArrows(Entity entity) { // https://wiki.vg/Entity_metadata#Living diff --git a/v1_12_R1/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_12_R1.java b/v1_12_R1/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_12_R1.java index be49566740..da56c67f4d 100644 --- a/v1_12_R1/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_12_R1.java +++ b/v1_12_R1/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_12_R1.java @@ -42,6 +42,11 @@ public class EntityHelper_v1_12_R1 implements EntityHelper { General Entity Methods */ + @Override + public void setRiptide(Entity entity, boolean state) { + // Intentionally empty + } + @Override public int getBodyArrows(Entity entity) { // https://wiki.vg/Entity_metadata#Living diff --git a/v1_13_R2/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_13_R2.java b/v1_13_R2/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_13_R2.java index a3bbcea2b5..6015b7c97a 100644 --- a/v1_13_R2/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_13_R2.java +++ b/v1_13_R2/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_13_R2.java @@ -43,6 +43,13 @@ public class EntityHelper_v1_13_R2 implements EntityHelper { General Entity Methods */ + @Override + public void setRiptide(Entity entity, boolean state) { + // https://wiki.vg/Entity_metadata#Living + ((CraftEntity) entity).getHandle().getDataWatcher().set( + new DataWatcherObject<>(6, DataWatcherRegistry.a), (byte) (state ? 4 : 0)); + } + @Override public int getBodyArrows(Entity entity) { // https://wiki.vg/Entity_metadata#Living diff --git a/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_8_R3.java b/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_8_R3.java index 81734cbd29..1c990c3045 100644 --- a/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_8_R3.java +++ b/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_8_R3.java @@ -38,6 +38,11 @@ public class EntityHelper_v1_8_R3 implements EntityHelper { General Entity Methods */ + @Override + public void setRiptide(Entity entity, boolean state) { + // Intentionally empty + } + @Override public int getBodyArrows(Entity entity) { // https://wiki.vg/Entity_metadata#Living diff --git a/v1_9_R2/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_9_R2.java b/v1_9_R2/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_9_R2.java index a75178124b..2fba5ffd93 100644 --- a/v1_9_R2/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_9_R2.java +++ b/v1_9_R2/src/main/java/net/aufdemrand/denizen/nms/helpers/EntityHelper_v1_9_R2.java @@ -37,6 +37,11 @@ public class EntityHelper_v1_9_R2 implements EntityHelper { General Entity Methods */ + @Override + public void setRiptide(Entity entity, boolean state) { + // Intentionally empty + } + @Override public int getBodyArrows(Entity entity) { // https://wiki.vg/Entity_metadata#Living