From 3469f017f5520886bc1a66e45839158c56509745 Mon Sep 17 00:00:00 2001 From: aPunch Date: Wed, 25 Jan 2012 04:09:02 -0600 Subject: [PATCH] changes and fixes to character handling --- src/net/citizensnpcs/Citizens.java | 4 ++- src/net/citizensnpcs/EventListen.java | 18 ++++++++---- src/net/citizensnpcs/Settings.java | 3 +- src/net/citizensnpcs/npc/CitizensNPC.java | 6 ++-- .../citizensnpcs/npc/CitizensNPCManager.java | 11 +++++--- .../npc/ai/CitizensNavigator.java | 28 +++++++++++++++++++ src/net/citizensnpcs/test/ByIdArrayTest.java | 1 + src/net/citizensnpcs/test/StorageTest.java | 1 + 8 files changed, 57 insertions(+), 15 deletions(-) create mode 100644 src/net/citizensnpcs/npc/ai/CitizensNavigator.java diff --git a/src/net/citizensnpcs/Citizens.java b/src/net/citizensnpcs/Citizens.java index 94244398f..a6b61b6fa 100644 --- a/src/net/citizensnpcs/Citizens.java +++ b/src/net/citizensnpcs/Citizens.java @@ -42,6 +42,8 @@ public class Citizens extends JavaPlugin { public boolean onCommand(CommandSender sender, Command cmd, String cmdName, String[] args) { if (args[0].equals("spawn")) { NPC npc = npcManager.createNPC(ChatColor.GREEN + "aPunch"); + // TODO remove + npc.setCharacter(characterManager.getInstance("test")); npc.spawn(((Player) sender).getLocation()); ((CitizensNPC) npc).save(saves); } else if (args[0].equals("despawn")) { @@ -120,7 +122,7 @@ public class Citizens extends JavaPlugin { // Load the character if it exists, otherwise remove the character if (character != null) - character.load(key.getRelative(character.getName())); + character.load(key.getRelative("characters." + character.getName())); else { if (key.keyExists("character")) { Messaging.debug("Character '" + key.getString("character") diff --git a/src/net/citizensnpcs/EventListen.java b/src/net/citizensnpcs/EventListen.java index cf99c91b4..a963213a3 100644 --- a/src/net/citizensnpcs/EventListen.java +++ b/src/net/citizensnpcs/EventListen.java @@ -87,15 +87,21 @@ public class EventListen implements Listener { NPC npc = manager.getNPC(event.getEntity()); Player player = (Player) event.getTarget(); - if (manager.canSelect(player, npc)) { - manager.selectNPC(player, npc); - Messaging.sendWithNPC(player, Setting.SELECTION_MESSAGE.getString(), npc); - } else { - if (npc.getCharacter() != null) - npc.getCharacter().onRightClick(npc, player); + if (!manager.hasSelected(player, npc)) { + if (manager.canSelect(player, npc)) { + manager.selectNPC(player, npc); + Messaging.sendWithNPC(player, Setting.SELECTION_MESSAGE.getString(), npc); + if (!Setting.QUICK_SELECT.getBoolean()) + return; + } } + if (npc.getCharacter() != null) + npc.getCharacter().onRightClick(npc, player); } + /* + * Player events + */ @EventHandler public void onPlayerInteractEntity(PlayerInteractEntityEvent event) { if (!manager.isNPC(event.getRightClicked())) diff --git a/src/net/citizensnpcs/Settings.java b/src/net/citizensnpcs/Settings.java index 4b41f853c..1d429f0bd 100644 --- a/src/net/citizensnpcs/Settings.java +++ b/src/net/citizensnpcs/Settings.java @@ -33,7 +33,8 @@ public class Settings { DEBUG_MODE("general.debug-mode", false), USE_DATABASE("use-database", false), SELECTION_ITEM("npc.selection.item", 280), - SELECTION_MESSAGE("npc.selection.message", "You selected !"); + SELECTION_MESSAGE("npc.selection.message", "You selected !"), + QUICK_SELECT("npc.selection.quick-select", false); private String path; private Object value; diff --git a/src/net/citizensnpcs/npc/CitizensNPC.java b/src/net/citizensnpcs/npc/CitizensNPC.java index 61afa0606..c54ec6409 100644 --- a/src/net/citizensnpcs/npc/CitizensNPC.java +++ b/src/net/citizensnpcs/npc/CitizensNPC.java @@ -7,6 +7,7 @@ import net.citizensnpcs.api.npc.AbstractNPC; import net.citizensnpcs.api.npc.ai.Navigator; import net.citizensnpcs.api.npc.trait.Trait; import net.citizensnpcs.api.npc.trait.trait.SpawnLocation; +import net.citizensnpcs.npc.ai.CitizensNavigator; import net.citizensnpcs.resources.lib.CraftNPC; import net.citizensnpcs.storage.Storage; import net.citizensnpcs.util.Messaging; @@ -51,8 +52,7 @@ public class CitizensNPC extends AbstractNPC { @Override public Navigator getNavigator() { - // TODO add default navigator - return null; + return new CitizensNavigator(this); } @Override @@ -101,7 +101,7 @@ public class CitizensNPC extends AbstractNPC { // Save the character if it exists if (getCharacter() != null) { key.setString("character", getCharacter().getName()); - getCharacter().save(key.getRelative(getCharacter().getName())); + getCharacter().save(key.getRelative("characters." + getCharacter().getName())); } // Save all existing traits diff --git a/src/net/citizensnpcs/npc/CitizensNPCManager.java b/src/net/citizensnpcs/npc/CitizensNPCManager.java index 5a02943bc..1d26dd6a3 100644 --- a/src/net/citizensnpcs/npc/CitizensNPCManager.java +++ b/src/net/citizensnpcs/npc/CitizensNPCManager.java @@ -143,12 +143,15 @@ public class CitizensNPCManager implements NPCManager { selected.put(player.getName(), npc.getId()); } + public boolean hasSelected(Player player, NPC npc) { + if (!selected.containsKey(player.getName())) + return false; + return selected.get(player.getName()) == npc.getId(); + } + public boolean canSelect(Player player, NPC npc) { if (player.hasPermission("citizens.npc.select")) { - if (!selected.containsKey(player.getName())) - return true; - return selected.get(player.getName()) != npc.getId() - && player.getItemInHand().getTypeId() == Setting.SELECTION_ITEM.getInt(); + return player.getItemInHand().getTypeId() == Setting.SELECTION_ITEM.getInt(); } return false; } diff --git a/src/net/citizensnpcs/npc/ai/CitizensNavigator.java b/src/net/citizensnpcs/npc/ai/CitizensNavigator.java new file mode 100644 index 000000000..3dacd058b --- /dev/null +++ b/src/net/citizensnpcs/npc/ai/CitizensNavigator.java @@ -0,0 +1,28 @@ +package net.citizensnpcs.npc.ai; + +import net.citizensnpcs.api.npc.ai.Navigator; +import net.citizensnpcs.api.npc.ai.NavigatorCallback; +import net.citizensnpcs.npc.CitizensNPC; + +import org.bukkit.Location; +import org.bukkit.entity.Entity; + +public class CitizensNavigator implements Navigator { + private CitizensNPC npc; + + public CitizensNavigator(CitizensNPC npc) { + this.npc = npc; + } + + @Override + public void setDestination(Location destination) { + } + + @Override + public void registerCallback(NavigatorCallback callback) { + } + + @Override + public void setTarget(Entity target, boolean aggressive) { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/test/ByIdArrayTest.java b/src/net/citizensnpcs/test/ByIdArrayTest.java index 579b07077..824cfb03a 100644 --- a/src/net/citizensnpcs/test/ByIdArrayTest.java +++ b/src/net/citizensnpcs/test/ByIdArrayTest.java @@ -7,6 +7,7 @@ import net.citizensnpcs.util.ByIdArray; import org.junit.Test; public class ByIdArrayTest { + @Test public void testInsert() { ByIdArray test = new ByIdArray(); diff --git a/src/net/citizensnpcs/test/StorageTest.java b/src/net/citizensnpcs/test/StorageTest.java index 6626d997e..2b72f3401 100644 --- a/src/net/citizensnpcs/test/StorageTest.java +++ b/src/net/citizensnpcs/test/StorageTest.java @@ -3,6 +3,7 @@ package net.citizensnpcs.test; import org.junit.Test; public class StorageTest { + @Test public void testYaml() { }