inventory work

This commit is contained in:
aPunch 2012-02-05 03:10:09 -06:00
parent 28273ec7b5
commit 11fbd0c7b4
6 changed files with 21 additions and 51 deletions

1
TODO
View File

@ -1,5 +1,6 @@
-Citizens2 TODO List-
-Better inventory handling/saving
-Add proper color parsing for names
-Add NPC templates
-Finish pathfinding API

Binary file not shown.

View File

@ -99,6 +99,7 @@ public class EventListen implements Listener {
return;
}
}
npc.openInventory(player);
if (npc.getCharacter() != null)
npc.getCharacter().onRightClick(npc, player);
}

View File

@ -6,6 +6,7 @@ import net.citizensnpcs.api.npc.AbstractNPC;
import net.citizensnpcs.api.npc.trait.trait.SpawnLocation;
import net.citizensnpcs.api.npc.trait.trait.Spawned;
import net.citizensnpcs.npc.ai.CitizensAI;
import net.citizensnpcs.trait.Inventory;
import net.citizensnpcs.util.Messaging;
import net.minecraft.server.EntityLiving;
@ -14,12 +15,12 @@ import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.PlayerInventory;
public abstract class CitizensNPC extends AbstractNPC {
protected final CitizensNPCManager manager;
protected final CitizensAI ai = new CitizensAI(this);
protected EntityLiving mcEntity;
protected final NPCInventory inventory = new NPCInventory();
protected CitizensNPC(CitizensNPCManager manager, int id, String name) {
super(id, name);
@ -92,15 +93,17 @@ public abstract class CitizensNPC extends AbstractNPC {
}
@Override
public PlayerInventory getInventory() {
throw new UnsupportedOperationException("not implemented yet");
public org.bukkit.inventory.Inventory getInventory() {
return inventory.asInventory();
}
@Override
public boolean openInventory(Player player) {
if (!isSpawned())
if (!isSpawned() || getTrait(Inventory.class).getContents() == null)
return false;
throw new UnsupportedOperationException("not implemented yet");
getInventory().setContents(getTrait(Inventory.class).getContents());
inventory.show(player);
return true;
}
public void update() {

View File

@ -1,4 +1,4 @@
package net.citizensnpcs.util;
package net.citizensnpcs.npc;
import net.minecraft.server.EntityHuman;
import net.minecraft.server.IInventory;
@ -9,14 +9,12 @@ import org.bukkit.craftbukkit.inventory.CraftInventory;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
public class ShowableInventory implements IInventory {
public class NPCInventory implements IInventory {
private final ItemStack[] contents;
private final Inventory inventory = new CraftInventory(this);
private final String name;
public ShowableInventory(String name, int size) {
this.name = name;
this.contents = new ItemStack[size];
public NPCInventory() {
contents = new ItemStack[36];
}
@Override
@ -51,7 +49,7 @@ public class ShowableInventory implements IInventory {
@Override
public String getName() {
return name;
return "Inventory";
}
@Override
@ -88,8 +86,4 @@ public class ShowableInventory implements IInventory {
public void show(Player player) {
((CraftPlayer) player).getHandle().a(this);
}
public static Inventory create(String name, int size) {
return new ShowableInventory(name, size).asInventory();
}
}
}

View File

@ -15,43 +15,21 @@ import net.citizensnpcs.api.npc.trait.Trait;
@SaveId("inventory")
public class Inventory implements Trait {
private ItemStack[] contents;
private ItemStack helmet;
private ItemStack chestplate;
private ItemStack leggings;
private ItemStack boots;
public Inventory() {
}
public Inventory(org.bukkit.inventory.PlayerInventory inventory) {
public Inventory(org.bukkit.inventory.Inventory inventory) {
contents = inventory.getContents();
helmet = inventory.getHelmet();
chestplate = inventory.getChestplate();
leggings = inventory.getLeggings();
boots = inventory.getBoots();
}
public ItemStack[] getContents() {
return contents;
}
public ItemStack[] getArmorContents() {
ItemStack[] armor = new ItemStack[4];
armor[0] = helmet;
armor[1] = chestplate;
armor[2] = leggings;
armor[3] = boots;
return armor;
}
@Override
public void load(DataKey key) throws NPCLoadException {
contents = parseContents(key);
// Armor
helmet = getItemStack(key.getRelative("armor.helmet"));
chestplate = getItemStack(key.getRelative("armor.chestplate"));
leggings = getItemStack(key.getRelative("armor.leggings"));
boots = getItemStack(key.getRelative("armor.boots"));
}
@Override
@ -59,12 +37,6 @@ public class Inventory implements Trait {
int index = 0;
for (ItemStack item : contents)
saveItem(item, key.getRelative(String.valueOf(index++)));
DataKey armorKey = key.getRelative("armor");
saveItem(helmet, armorKey.getRelative("helmet"));
saveItem(chestplate, armorKey.getRelative("chestplate"));
saveItem(leggings, armorKey.getRelative("leggings"));
saveItem(boots, armorKey.getRelative("boots"));
}
private ItemStack[] parseContents(DataKey key) throws NPCLoadException {
@ -77,8 +49,8 @@ public class Inventory implements Trait {
private ItemStack getItemStack(DataKey key) throws NPCLoadException {
try {
ItemStack item = new ItemStack(Material.getMaterial(key.getString("name")), key.getInt("amount"),
(short) key.getLong("data"));
ItemStack item = new ItemStack(Material.getMaterial(key.getString("name").toUpperCase().replace('-', '_')),
key.getInt("amount"), (short) key.getLong("data"));
if (key.keyExists("enchantments")) {
Map<Enchantment, Integer> enchantments = new HashMap<Enchantment, Integer>();
for (DataKey subKey : key.getRelative("enchantments").getSubKeys()) {
@ -90,7 +62,7 @@ public class Inventory implements Trait {
}
return item;
} catch (Exception ex) {
throw new NPCLoadException("Invalid item.");
throw new NPCLoadException("Invalid item. " + ex.getMessage());
}
}
@ -106,7 +78,6 @@ public class Inventory implements Trait {
@Override
public String toString() {
return "Inventory{contents:" + contents + "; helmet:" + helmet + "; chestplate:" + chestplate + "; leggings:"
+ leggings + "; boots:" + boots + "}";
return "Inventory{contents:" + contents + "}";
}
}