diff --git a/src/main/java/net/aufdemrand/denizen/objects/dLocation.java b/src/main/java/net/aufdemrand/denizen/objects/dLocation.java index 0348490b31..33b7368d3e 100644 --- a/src/main/java/net/aufdemrand/denizen/objects/dLocation.java +++ b/src/main/java/net/aufdemrand/denizen/objects/dLocation.java @@ -13,6 +13,7 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.World; import org.bukkit.block.Sign; @@ -522,8 +523,33 @@ public int compare(dEntity ent1, dEntity ent2) { }); return new dList(found).getAttribute(attribute); - } - + } + + // <-- + // -> dList + // Returns a dList of living entities within a radius. + // --> + else if (attribute.startsWith("living_entities") + && attribute.getAttribute(2).startsWith("within") + && attribute.hasContext(2)) { + ArrayList found = new ArrayList(); + int radius = aH.matchesInteger(attribute.getContext(2)) ? attribute.getIntContext(2) : 10; + attribute.fulfill(2); + for (Entity entity : getWorld().getEntities()) + if (entity instanceof LivingEntity + && Utilities.checkLocation(this, entity.getLocation(), radius)) + found.add(new dEntity(entity)); + + Collections.sort(found, new Comparator() { + @Override + public int compare(dEntity ent1, dEntity ent2) { + return (int) (distanceSquared(ent1.getBukkitEntity().getLocation()) - distanceSquared(ent2.getBukkitEntity().getLocation())); + } + }); + + return new dList(found).getAttribute(attribute); + } + else return "null"; }