diff --git a/README.md b/README.md index 54dc773af9..c43fbaad25 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ Denizen: Helpful Citizens for Bukkit! ------------------------------------- -**Version 0.9.8**: Compatible with Spigot 1.9.4 -- Working towards the Denizen 1.0 release! +**Version 0.9.8**: Compatible with Spigot 1.10 -- Working towards the Denizen 1.0 release! **Download (Developmental builds)**: http://ci.citizensnpcs.co/job/Denizen/ **Download (VERY Developmental builds)**: http://ci.mineconomy.org/job/Denizen_Developmental/ diff --git a/src/main/java/net/aufdemrand/denizen/Denizen.java b/src/main/java/net/aufdemrand/denizen/Denizen.java index 939f40cb14..a889447c76 100644 --- a/src/main/java/net/aufdemrand/denizen/Denizen.java +++ b/src/main/java/net/aufdemrand/denizen/Denizen.java @@ -791,6 +791,7 @@ public void onEnable() { propertyParser.registerProperty(EntityArmorPose.class, dEntity.class); propertyParser.registerProperty(EntityArms.class, dEntity.class); propertyParser.registerProperty(EntityBasePlate.class, dEntity.class); + propertyParser.registerProperty(EntityBoatType.class, dEntity.class); propertyParser.registerProperty(EntityChestCarrier.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/dWorld.java b/src/main/java/net/aufdemrand/denizen/objects/dWorld.java index 48bad59701..d78f47d921 100644 --- a/src/main/java/net/aufdemrand/denizen/objects/dWorld.java +++ b/src/main/java/net/aufdemrand/denizen/objects/dWorld.java @@ -1,5 +1,6 @@ package net.aufdemrand.denizen.objects; +import net.aufdemrand.denizen.Settings; import net.aufdemrand.denizen.utilities.debugging.dB; import net.aufdemrand.denizencore.objects.*; import net.aufdemrand.denizencore.objects.properties.Property; @@ -10,11 +11,7 @@ import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.npc.NPC; import org.apache.commons.io.FileUtils; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Difficulty; -import org.bukkit.Location; -import org.bukkit.World; +import org.bukkit.*; import org.bukkit.craftbukkit.v1_10_R1.CraftChunk; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -925,10 +922,15 @@ public void adjust(Mechanism mechanism) { // @input None // @description // Unloads the world from the server without saving chunks, then destroys all data that is part of the world. + // Require config setting 'Commands.Delete.Allow file deletion'. // @tags // None // --> if (mechanism.matches("destroy")) { + if (!Settings.allowDelete()) { + dB.echoError("Unable to delete due to config."); + return; + } File folder = new File(getWorld().getName()); Bukkit.getServer().unloadWorld(getWorld(), false); try { diff --git a/src/main/java/net/aufdemrand/denizen/objects/properties/entity/EntityBoatType.java b/src/main/java/net/aufdemrand/denizen/objects/properties/entity/EntityBoatType.java new file mode 100644 index 0000000000..d6fc489402 --- /dev/null +++ b/src/main/java/net/aufdemrand/denizen/objects/properties/entity/EntityBoatType.java @@ -0,0 +1,98 @@ +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.TreeSpecies; +import org.bukkit.entity.Boat; +import org.bukkit.entity.EntityType; + +public class EntityBoatType implements Property { + + public static boolean describes(dObject object) { + return object instanceof dEntity && ((dEntity) object).getBukkitEntityType() == EntityType.BOAT; + } + + public static EntityBoatType getFrom(dObject object) { + if (!describes(object)) { + return null; + } + + else { + return new EntityBoatType((dEntity) object); + } + } + + /////////////////// + // Instance Fields and Methods + ///////////// + + private EntityBoatType(dEntity entity) { + this.entity = entity; + } + + dEntity entity; + + ///////// + // Property Methods + /////// + + @Override + public String getPropertyString() { + return ((Boat) entity.getBukkitEntity()).getWoodType().name(); + } + + @Override + public String getPropertyId() { + return "boat_type"; + } + + @Override + public String getAttribute(Attribute attribute) { + if (attribute == null) { + return null; + } + + // <--[tag] + // @attribute + // @returns Element + // @mechanism dEntity.boat_type + // @group properties + // @description + // Returns the wood type of the boat. + // Valid wood types: GENERIC, REDWOOD, BIRCH, JUNGLE, ACACIA, DARK_OAK. + // --> + if (attribute.startsWith("boat_type")) { + return new Element(((Boat) entity.getBukkitEntity()).getWoodType().name()) + .getAttribute(attribute.fulfill(1)); + } + + return null; + } + + @Override + public void adjust(Mechanism mechanism) { + Element value = mechanism.getValue(); + + // <--[mechanism] + // @object dEntity + // @name boat_type + // @input Element + // @description + // Changes the wood type of the boat. + // Valid wood types: GENERIC, REDWOOD, BIRCH, JUNGLE, ACACIA, DARK_OAK. + // @tags + // + // --> + + if (mechanism.matches("boat_type")) { + TreeSpecies type = TreeSpecies.valueOf(value.asString().toUpperCase()); + if (type != null) { + ((Boat) entity.getBukkitEntity()).setWoodType(type); + } + } + } +} diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java index bdc7db1db6..3f456541bb 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java @@ -2701,7 +2701,7 @@ public void registerCoreMembers() { // <--[command] // @Name Run - // @Syntax run (locally) [