From 3f9218f568c58a904049e9cb494cfac8c8fbc0d8 Mon Sep 17 00:00:00 2001 From: aPunch Date: Wed, 14 Mar 2012 01:09:20 -0500 Subject: [PATCH] Added support for * wildcard for selection and talking. This addresses CITIZENS-26. --- lib/CitizensAPI.jar | Bin 48087 -> 48106 bytes .../java/net/citizensnpcs/EventListen.java | 13 ++++++++++--- src/main/java/net/citizensnpcs/Settings.java | 10 +++++----- .../command/command/NPCCommands.java | 7 +++---- .../net/citizensnpcs/npc/CitizensNPC.java | 7 +++---- .../npc/CitizensTraitManager.java | 1 - 6 files changed, 21 insertions(+), 17 deletions(-) diff --git a/lib/CitizensAPI.jar b/lib/CitizensAPI.jar index 5fb5134438380803e0afb9da3e54e6ee4748a6ef..08c4ca5585668db00278b4c61b3bc30dcb34aa76 100644 GIT binary patch delta 2831 zcmZXWdmxi-AII-)wl-}Jv9XL6a!7MNR1PDDa){=2h)kx^l+;Q+(vx+-lSFivg0cgP30&yH;1z?0_ zBe{sD4=>t4_)A$tEWp}>gqK)rBvQ=49mWFY;JFyUX+jgqCZZC`E>bJ%r<1>;<1__* zlnsj27^IANn=*|0Gb-Jv-b3Aq>Mm*%DDCM8k-F9zOVBv3<}s9mi-f4oU%VfUlWG5o zj(NIL)YsI{CsA0$XvY=#*IVqc5X6GJOpSyb9~CF1ONrgvBdMp46cdkM{v~f&`XuvV zdaqkJtm6K7^m*T>=pN&ck@L+v)_#k0n8bbMbV%OU)kpfcd%^Lx4HkcP+Su%23lGj< zApKq8t+|-qLpr!L(#xztD_xc2tu3$RLO6j2A5!OW?(NmNB|TCyd48LIpHw?t&_{kE z6unNUam{Yd)@T|yykMK7$wBMq-TNwnayU77R&b!N980q?x=R=xYxkz65_8zK=gX=v zQM-SETUcN1Kwz6(d2bZfXlOF@PvO0BxqW7v>zA$`&)7b6l;=t=tv|Q9;>D>}&O(Y- zvF+Fu8S&1#R`Q_zvuk0R-j@?d5ebwny+S*de7icI@?=k}NAUE%8Xf-}*Nlt4w_kcP z(<@T~TK#;&r5+N&mys+ny>RyxUe52d=}j#hcjd#WhE`Upcg{PkF6xn}z1pyA)2@on zJeQcrH2$w|MHU(vvXqfUCeA!`6L;(RS4wqrxT~%up7sA-<)C=fAb1yjf>eq+ZFU_kz#9<@rdzhD?4~#tjKjly#G$3cB+Y4?kdI**2Au zl+H)zE)VT$w<}ctcA9Zs@THlgs5~yXxN61ay8Ev;4IK!HAStbHeWty6R7HHoiJp#k zv}B$Q3zeCxTGIN{I<8jb38=%7O^VwC7J61y2z06!wd(D*YkN0;l=%Kel~sMt!uEl1I0`LY5&ah=T2--=6*Qo(d0k#z@isxCq$ANDCw0yoCAkLnQcCE65 z$M^1bWTF(VT7f|}pjhgxPXv^CuEql{;}CIx)_yBd?hZ`ADHtR73--CS;uzB90z4ca zXaGAlkcFx62Bg_lZ_MROC@iUgEIvGc+@u(w5!W{QkFV<69uwUb`JDvMW_At#= zW;5ob!b;YQhuEh-+=(dIy6;@Dm?t!AT_2VyiVR5^d>zk0VLwJt@MrzdZnCmk;(f7@3*etbmmP!|7S z#}?{t9e(fa@U=^W%CgLhXjPOosKF zojDy;7#Uw{nrujzYKpTsagiexEj!v*?ebOlU=1bT8Zv{<;Qr0F8TE;zsfm7EAjevtNxzM2wR?aez;+zHGbhMQJ;FzOj-7{ZBoL*1+Ikl zgE!&kHKkU!^lxT&VY1*aNo{JuOYZs9Yq-}mui>07u)x(WjPi#UVPj%QXOr7aPbfeB zhwzU7%A%6pU0x2qw{eO^4Ft;D~^m9@_oG zygJauaKV--(A0Smzfk~59tfL*0t04=2f0JJi1fQYh4fcs@304C+Z04e2RApQOK zk$VN|6;=2Hak?TDAhdELh`d(00f143=EYWR0;4BYTo7Vc%>$#H>h%Dhs{{V_ZVRb# z21afT18ZRc3v@MLu7wi(riKjENknb4MAczSI_x1v)%9Wqc4GMtRRzu$(?RStM3u8g zRbzW5sK5m0nJn&&JrOxyI*>C>5B-Dj{gQupfdjnQ!2ph`MT^GOGO(eJh@uUjbfm!i ztKZXOhZ59Ak&FrCxMa;qKeP%Brqgj0k&qMX^!JmU?gV_z}%!3;k*iP=On%$rQR7Ad5L=rhXlJ5yVNwy1)A@?o)zx&?KoxMZV)y0GhMWEb&0g(J1*8l(j delta 2660 zcmZ9O2{@E%AI4_}ljR)@p~(n20%Bvy!O4pQ9|!zZ zM2=vOzp9xG##SjXPAg&~DuP!9ID}UtIN;F>cufEnUKfaqcy#~;g24|@2KBHdZi+?k z6ZC*LNzlM5E2tbX1i)-AIv#MH*Z|qUEeP4m(**r=n3)dhjY)}bReO5K%=@fW^_i28H@>craBj^xT*`_sSRzL?$ilnEy9ZPTS|9yHX{( z&bXrg?rvi}INBW~edg_1b$hGVY&SO{BTnZzeSi}nt~f4On+-=C5z8lc4& zizYQUI|Q+t#-!7jY5Q|&sq)lwzi(_E-T7#tWzj2Eo!Yn0^r=%EaS^#Kbl zitHbA=0oWL&XWv1(W~oS{7+PO65k1nYgO*nIB#_CuUpC%LuI^*BQ0!!jDs5j;&#D~ zW>qiMFBWSRndrXf2^%_@`wF+W@k@W)tIJD|^Ma_`No_8NGV7SCZ`b|VcQZUah%SZk z^r@s1vmIX9Sq@7R5|lu<;S4P#gE`jP(Hp-CG5? zzFCP_y(bZ$g#UL%apSNiG&qn3o9wxoDko@44sAY2K|KWOlKK{~`TPx~Ag|E0VRLpE z%W#8c|7dB>1*mPy%>ig^uLH?E7RNzyz?$_=k4g1KtXWT?f-aiO0Bd2Rt(V^9c)L_9 z#CMzK?Cfj{B0GLk5+ljF2PW{unLHxRbD9l}J|C|V~$40%&RzA?oaoR_iRz*qD6Y=O-7MTjH;-S4f1*x4Jl#)$?-v# zCY_zg$nZ6!)oiV&I5+4MJzKuk&S`pGqvY@!RSflaH$&QbT^%Ou+WHrF$tNQ`Bfi^o z>qTg*(j_X-G6%xwhu=hXi!hb=ttJwO#?w7NQ~imn!}aCNTzLx7mUo#=CmY-ueRE|wIR8&%X&dnsZC1qK@2tL9y^`bq>Fgf+D7UORVootrv54AUbt%r)JE@|!m?-pynI5=>e?TW3x#@>L&^f{T zwq4eGfN|r(M4ZpY-9*>#NhdkR=GkOt^FEWoL!pYq;&iiu!tqm=H6F4r40bpWBAm0+J$M!@i$q zyny}Pc0o-L=&PxsM2x8Ljn81ZC8L)Qa44rATo!2lLv8G;LZ==Y0?6d5036TN1Gt%M z1TdOw0xG5R%mMuKEP=?%GX+@Bv;N^x(SUpf@bArhD}b4NGvF&1*a5^A90BMra0HMm zJPHt5=m#)a=n6n9at6pM^1zl~D~1!-VrbPBJAg=Xi5oy@i90A9C~*N$E`^oJr6<7b zV<{b!SeJQ%S$UZg08;MwkEhb_L+4mnj5(I8y(x3~;IA0T zN(zY3uA~yU^ij_$3Di=b4`o)u;1o=?HH2zsr6j0hV@eneDz!8rbgdlO0q$IT7}L(9 zTX48z{@1onfJt3kh{+Az+^%7L`y(hiWlP z930nEOd0n?$zF2kNDZu!s-Y5Yd1HzcnqG^b{x!m2B@&e;^#tH5LH)8CG;|WMaf0+p#pXA z3rW;b2@fv(boj0@iD=*tgMk^ZQZa*y%A}Ej3Qx#@f`MNNwi6rsli9T6;&t>>ojTY} hww_90-+)UGWKhtkdbm>}rq<*@^+~-nG4UZ-{a=pC0xAFi diff --git a/src/main/java/net/citizensnpcs/EventListen.java b/src/main/java/net/citizensnpcs/EventListen.java index ea215e30e..38efba508 100644 --- a/src/main/java/net/citizensnpcs/EventListen.java +++ b/src/main/java/net/citizensnpcs/EventListen.java @@ -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 toIntPair(Chunk chunk) { return new Pair(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("*"); + } + } } \ No newline at end of file diff --git a/src/main/java/net/citizensnpcs/Settings.java b/src/main/java/net/citizensnpcs/Settings.java index 847215aa7..73c40ec25 100644 --- a/src/main/java/net/citizensnpcs/Settings.java +++ b/src/main/java/net/citizensnpcs/Settings.java @@ -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", "You selected !"), - 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() { diff --git a/src/main/java/net/citizensnpcs/command/command/NPCCommands.java b/src/main/java/net/citizensnpcs/command/command/NPCCommands.java index 5ffbee672..395be07e2 100644 --- a/src/main/java/net/citizensnpcs/command/command/NPCCommands.java +++ b/src/main/java/net/citizensnpcs/command/command/NPCCommands.java @@ -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); diff --git a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index 9727d563f..36643a168 100644 --- a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -38,8 +38,7 @@ public abstract class CitizensNPC extends AbstractNPC { } @Override - public void addTrait(Class 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 getTrait(Class 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 diff --git a/src/main/java/net/citizensnpcs/npc/CitizensTraitManager.java b/src/main/java/net/citizensnpcs/npc/CitizensTraitManager.java index fb031e740..685f7eea0 100644 --- a/src/main/java/net/citizensnpcs/npc/CitizensTraitManager.java +++ b/src/main/java/net/citizensnpcs/npc/CitizensTraitManager.java @@ -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> registered = new HashMap>();