From c518821f46423e63a6334cb398f22cca2ecb07f0 Mon Sep 17 00:00:00 2001 From: David Cernat Date: Sun, 30 Jun 2013 15:13:33 +0300 Subject: [PATCH] Add powered creepers and endermen holding blocks to dEntity. --- .../aufdemrand/denizen/objects/dEntity.java | 23 +++++++++++++++---- .../aufdemrand/denizen/objects/dMaterial.java | 5 ++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/aufdemrand/denizen/objects/dEntity.java b/src/main/java/net/aufdemrand/denizen/objects/dEntity.java index 7eef354f46..e08cb1da45 100644 --- a/src/main/java/net/aufdemrand/denizen/objects/dEntity.java +++ b/src/main/java/net/aufdemrand/denizen/objects/dEntity.java @@ -14,6 +14,8 @@ import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_5_R3.CraftWorld; +import org.bukkit.entity.Creeper; +import org.bukkit.entity.Enderman; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; @@ -293,7 +295,7 @@ public void spawnAt(Location location) { Material material = null; - if (data != null) { + if (data != null && dMaterial.matches(data)) { material = dMaterial.valueOf(data).getMaterial(); @@ -309,8 +311,7 @@ public void spawnAt(Location location) { } } - // If material is null, not a block, a portal section or air, - // default to SAND + // If material is null or not a block, default to SAND if (material == null || material.isBlock() == false) { material = Material.SAND; @@ -326,14 +327,26 @@ public void spawnAt(Location location) { ent = location.getWorld().spawnEntity(location, entity_type); entity = ent; - // If there is some special data associated with this dEntity, + // If there is some special subtype data associated with this dEntity, // use the setSubtype method to set it in a clean, object-oriented // way that uses reflection + // + // Otherwise, just use entity-specific methods manually if (data != null) { try { - if (ent instanceof Ocelot) { + // Allow creepers to be powered + if (ent instanceof Creeper && data.equalsIgnoreCase("POWERED")) { + ((Creeper) entity).setPowered(true); + } + else if (ent instanceof Enderman && dMaterial.matches(data)) { + ((Enderman) entity).setCarriedMaterial(dMaterial.valueOf(data).getMaterialData()); + } + else if (ent instanceof Ocelot) { + setSubtype(Ocelot.class, "Type", "setCatType", data); + } + else if (ent instanceof Ocelot) { setSubtype(Ocelot.class, "Type", "setCatType", data); } else if (ent instanceof Skeleton) { diff --git a/src/main/java/net/aufdemrand/denizen/objects/dMaterial.java b/src/main/java/net/aufdemrand/denizen/objects/dMaterial.java index 23525c3e36..fdc559d353 100644 --- a/src/main/java/net/aufdemrand/denizen/objects/dMaterial.java +++ b/src/main/java/net/aufdemrand/denizen/objects/dMaterial.java @@ -5,6 +5,7 @@ import net.aufdemrand.denizen.utilities.Utilities; import org.bukkit.Material; +import org.bukkit.material.MaterialData; import net.aufdemrand.denizen.tags.Attribute; @@ -101,6 +102,10 @@ public Material getMaterial() { return material; } + public MaterialData getMaterialData() { + return new MaterialData(material, (byte) 0); + } + @Override public String getPrefix() {