diff --git a/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/src/main/java/net/citizensnpcs/commands/NPCCommands.java index 834d75393..71e1c0e6e 100644 --- a/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -33,6 +33,8 @@ import net.citizensnpcs.npc.EntityControllers; import net.citizensnpcs.npc.NPCSelector; import net.citizensnpcs.npc.Template; import net.citizensnpcs.npc.entity.nonliving.FallingBlockController.FallingBlockNPC; +import net.citizensnpcs.npc.entity.nonliving.ItemController.ItemNPC; +import net.citizensnpcs.npc.entity.nonliving.ItemFrameController.ItemFrameNPC; import net.citizensnpcs.trait.Age; import net.citizensnpcs.trait.Anchors; import net.citizensnpcs.trait.Controllable; @@ -584,15 +586,18 @@ public class NPCCommands { Material mat = Material.matchMaterial(args.getString(1)); if (mat == null) throw new CommandException(Messages.UNKNOWN_MATERIAL); + int data = args.getInteger(2, 0); switch (npc.getEntity().getType()) { case DROPPED_ITEM: ((org.bukkit.entity.Item) npc.getEntity()).getItemStack().setType(mat); + ((ItemNPC) npc.getEntity()).setType(mat, data); break; case ITEM_FRAME: ((ItemFrame) npc.getEntity()).getItem().setType(mat); + ((ItemFrameNPC) npc.getEntity()).setType(mat, data); break; case FALLING_BLOCK: - ((FallingBlockNPC) npc.getEntity()).setType(mat, args.argsLength() > 2 ? args.getInteger(2) : 0); + ((FallingBlockNPC) npc.getEntity()).setType(mat, data); break; default: break; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/FallingBlockController.java b/src/main/java/net/citizensnpcs/npc/entity/nonliving/FallingBlockController.java index 8b6c7584b..15b5ff0b4 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/FallingBlockController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/nonliving/FallingBlockController.java @@ -33,9 +33,11 @@ public class FallingBlockController extends AbstractEntityController { protected Entity createEntity(Location at, NPC npc) { WorldServer ws = ((CraftWorld) at.getWorld()).getHandle(); Block id = Blocks.STONE; - int data = npc.data().get("falling-block-data", 0); - if (npc.data().has("falling-block-id")) - id = CraftMagicNumbers.getBlock(Material.getMaterial(npc.data(). get("falling-block-id"))); + int data = npc.data().get(NPC.ITEM_DATA_METADATA, npc.data().get("falling-block-data", 0)); + if (npc.data().has("falling-block-id") || npc.data().has(NPC.ITEM_ID_METADATA)) { + id = CraftMagicNumbers.getBlock(Material.getMaterial(npc.data(). get(NPC.ITEM_ID_METADATA, + npc.data(). get("falling-block-id")))); + } final EntityFallingBlockNPC handle = new EntityFallingBlockNPC(ws, npc, at.getX(), at.getY(), at.getZ(), id, data); return handle.getBukkitEntity(); @@ -140,8 +142,8 @@ public class FallingBlockController extends AbstractEntityController { } public void setType(Material material, int data) { - npc.data().setPersistent("falling-block-id", material.name()); - npc.data().setPersistent("falling-block-data", data); + npc.data().setPersistent(NPC.ITEM_ID_METADATA, material.name()); + npc.data().setPersistent(NPC.ITEM_DATA_METADATA, data); if (npc.isSpawned()) { npc.despawn(); npc.spawn(npc.getStoredLocation()); diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ItemController.java b/src/main/java/net/citizensnpcs/npc/entity/nonliving/ItemController.java index 755018031..a2fb49df6 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ItemController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/nonliving/ItemController.java @@ -32,8 +32,13 @@ public class ItemController extends AbstractEntityController { @Override protected Entity createEntity(Location at, NPC npc) { WorldServer ws = ((CraftWorld) at.getWorld()).getHandle(); + Material id = Material.STONE; + int data = npc.data().get(NPC.ITEM_DATA_METADATA, npc.data().get("falling-block-data", 0)); + if (npc.data().has(NPC.ITEM_ID_METADATA)) { + id = Material.getMaterial(npc.data(). get(NPC.ITEM_ID_METADATA)); + } final EntityItemNPC handle = new EntityItemNPC(ws, npc, at.getX(), at.getY(), at.getZ(), - CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(Material.STONE))); + CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(id, 1, (short) data))); return handle.getBukkitEntity(); } @@ -129,5 +134,14 @@ public class ItemController extends AbstractEntityController { public NPC getNPC() { return npc; } + + public void setType(Material material, int data) { + npc.data().setPersistent(NPC.ITEM_ID_METADATA, material.name()); + npc.data().setPersistent(NPC.ITEM_DATA_METADATA, data); + if (npc.isSpawned()) { + npc.despawn(); + npc.spawn(npc.getStoredLocation()); + } + } } } \ No newline at end of file diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ItemFrameController.java b/src/main/java/net/citizensnpcs/npc/entity/nonliving/ItemFrameController.java index ca57d424d..d26946f1b 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ItemFrameController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/nonliving/ItemFrameController.java @@ -10,6 +10,7 @@ import net.minecraft.server.v1_7_R2.EntityItemFrame; import net.minecraft.server.v1_7_R2.World; import org.bukkit.Bukkit; +import org.bukkit.Material; import org.bukkit.craftbukkit.v1_7_R2.CraftServer; import org.bukkit.craftbukkit.v1_7_R2.entity.CraftEntity; import org.bukkit.craftbukkit.v1_7_R2.entity.CraftItemFrame; @@ -107,11 +108,27 @@ public class ItemFrameController extends MobEntityController { public ItemFrameNPC(EntityItemFrameNPC entity) { super((CraftServer) Bukkit.getServer(), entity); this.npc = entity.npc; + Material id = Material.STONE; + int data = npc.data().get(NPC.ITEM_DATA_METADATA, npc.data().get("falling-block-data", 0)); + if (npc.data().has(NPC.ITEM_ID_METADATA)) { + id = Material.getMaterial(npc.data(). get(NPC.ITEM_ID_METADATA)); + } + getItem().setType(id); + getItem().setDurability((short) data); } @Override public NPC getNPC() { return npc; } + + public void setType(Material material, int data) { + npc.data().setPersistent(NPC.ITEM_ID_METADATA, material.name()); + npc.data().setPersistent(NPC.ITEM_DATA_METADATA, data); + if (npc.isSpawned()) { + npc.despawn(); + npc.spawn(npc.getStoredLocation()); + } + } } } \ No newline at end of file