Added support for * wildcard for selection and talking. This addresses CITIZENS-26.

This commit is contained in:
aPunch 2012-03-14 01:09:20 -05:00
parent 2c3a51c3f7
commit b1c29e1e14
6 changed files with 21 additions and 17 deletions

Binary file not shown.

View File

@ -121,7 +121,7 @@ public class EventListen implements Listener {
if (!player.hasMetadata("selected") || player.getMetadata("selected").size() == 0
|| player.getMetadata("selected").get(0).asInt() != npc.getId()) {
if (player.getItemInHand().getTypeId() == Setting.SELECTION_ITEM.asInt()
if (isSettingFulfilled(player, Setting.SELECTION_ITEM)
&& (npc.getTrait(Owner.class).getOwner().equals(player.getName()) || player
.hasPermission("citizens.admin"))) {
npcManager.selectNPC(player, npc);
@ -131,8 +131,7 @@ public class EventListen implements Listener {
}
}
// If the NPC isn't a close talker
if (player.getItemInHand().getTypeId() == Setting.TALK_ITEM.asInt()
&& !npc.getTrait(Text.class).shouldTalkClose())
if (isSettingFulfilled(player, Setting.TALK_ITEM) && !npc.getTrait(Text.class).shouldTalkClose())
npc.getTrait(Text.class).sendText(player);
if (npc.getCharacter() != null)
@ -206,4 +205,12 @@ public class EventListen implements Listener {
private Pair<Integer, Integer> toIntPair(Chunk chunk) {
return new Pair<Integer, Integer>(chunk.getX(), chunk.getZ());
}
private boolean isSettingFulfilled(Player player, Setting setting) {
try {
return player.getItemInHand().getTypeId() == setting.asInt();
} catch (NumberFormatException ex) {
return setting.asString().equals("*");
}
}
}

View File

@ -41,11 +41,11 @@ public class Settings {
DEFAULT_RANDOM_TALKER("npc.default.random-talker", true),
DEFAULT_TALK_CLOSE("npc.default.talk-close", false),
QUICK_SELECT("npc.selection.quick-select", false),
SELECTION_ITEM("npc.selection.item", 280),
SELECTION_ITEM("npc.selection.item", "280"),
SELECTION_MESSAGE("npc.selection.message", "<b>You selected <a><npc><b>!"),
TALK_CLOSE_MAXIMUM_COOLDOWN("npc.talk.max-cooldown", 60),
TALK_CLOSE_MINIMUM_COOLDOWN("npc.talk.min-cooldown", 30),
TALK_ITEM("npc.talk-item", 340),
TALK_CLOSE_MAXIMUM_COOLDOWN("npc.text.max-talk-cooldown", 60),
TALK_CLOSE_MINIMUM_COOLDOWN("npc.text.min-talk-cooldown", 30),
TALK_ITEM("npc.text.talk-item", "340"),
USE_DATABASE("use-database", false);
private String path;
@ -65,7 +65,7 @@ public class Settings {
}
public int asInt() {
return (Integer) value;
return Integer.parseInt(value.toString());
}
public long asLong() {

View File

@ -34,8 +34,7 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
@Requirements(selected = true, ownership = true)
public class NPCCommands {
private final CharacterManager characterManager = CitizensAPI.getCharacterManager();
private final CitizensNPCManager npcManager; // TODO: remove reliance on
// CitizensNPCManager
private final CitizensNPCManager npcManager;
public NPCCommands(Citizens plugin) {
npcManager = plugin.getNPCManager();
@ -117,8 +116,8 @@ public class NPCCommands {
// Initialize necessary traits
create.getTrait(Owner.class).setOwner(player.getName());
create.getTrait(MobType.class).setType(type.toString());
create.addTrait(LookClose.class);
create.addTrait(Text.class);
create.addTrait(new LookClose(create));
create.addTrait(new Text(create));
create.spawn(player.getLocation());
npcManager.selectNPC(player, create);

View File

@ -38,8 +38,7 @@ public abstract class CitizensNPC extends AbstractNPC {
}
@Override
public void addTrait(Class<? extends Trait> clazz) {
Trait trait = traitManager.getTrait(clazz, this);
public void addTrait(Trait trait) {
if (trait == null) {
Bukkit.getLogger().log(Level.SEVERE, "Cannot register a null trait. Was it registered properly?");
return;
@ -109,7 +108,7 @@ public abstract class CitizensNPC extends AbstractNPC {
public <T extends Trait> T getTrait(Class<T> clazz) {
Trait t = traits.get(clazz);
if (t == null)
addTrait(clazz);
addTrait(traitManager.getTrait(clazz, this));
return traits.get(clazz) != null ? clazz.cast(traits.get(clazz)) : null;
}
@ -190,7 +189,7 @@ public abstract class CitizensNPC extends AbstractNPC {
+ ex.getMessage());
ex.printStackTrace();
}
addTrait(trait.getClass());
addTrait(trait);
}
// Spawn the NPC

View File

@ -19,7 +19,6 @@ import net.citizensnpcs.trait.LookClose;
import net.citizensnpcs.trait.Powered;
import net.citizensnpcs.trait.text.Text;
import net.citizensnpcs.trait.waypoint.Waypoints;
import net.citizensnpcs.util.Messaging;
public class CitizensTraitManager implements TraitManager {
private final Map<String, Class<? extends Trait>> registered = new HashMap<String, Class<? extends Trait>>();