mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2025-02-17 21:02:04 +01:00
Added support for * wildcard for selection and talking. This addresses CITIZENS-26.
This commit is contained in:
parent
0a52a851c8
commit
3f9218f568
Binary file not shown.
@ -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("*");
|
||||
}
|
||||
}
|
||||
}
|
@ -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() {
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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>>();
|
||||
|
Loading…
Reference in New Issue
Block a user