From 891162e06e076f2ddb28d57d36ba256e5e4224d4 Mon Sep 17 00:00:00 2001 From: aPunch Date: Sun, 22 Jan 2012 11:43:58 -0600 Subject: [PATCH] fix annoying spawning save bug --- TODO | 1 + lib/CitizensAPI.jar | Bin 13709 -> 13670 bytes src/net/citizensnpcs/Citizens.java | 12 ++-- src/net/citizensnpcs/npc/CitizensNPC.java | 14 ++-- .../npc/trait/CitizensCharacterManager.java | 60 +++++++++--------- .../npc/trait/CitizensTraitManager.java | 14 ++-- 6 files changed, 54 insertions(+), 47 deletions(-) diff --git a/TODO b/TODO index 73f9bb292..805271afd 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,6 @@ -Citizens2 TODO List- +-Add proper color parsing for names (separate it into a trait?) -Properly implement commands -Finish saving -Finish pathfinding API diff --git a/lib/CitizensAPI.jar b/lib/CitizensAPI.jar index 3e3dc919ca3eb507d9e732ce1a48309db1d86bd6..c994d6a76f618187fe58887754643236c371af64 100644 GIT binary patch delta 2582 zcmZXW2|QGN7sqGDk}XRL!z_%g2F+MzG-`|`OFT4WnHG&w*&;3Wywg}4TjseHF_wwE zw$zAJBr*0RQ4(3|O-ND?5y?Audg^`py!Z3D_j}Lzopb-6|M{GI&rJ)Q2#}#Viik=< zz{A^vEwcsY<-s;hfgwEDe0A_TVIa5yo1lgu?4hP0n9%JY8lVIa3sB1+PF;Ww+X&u< z!a&chJ1_A!Fp4gnmnfexa?rF+ymwH^o3@ z5gtSfD15%W9}0n3iUMO2YJjP-EW_35M4!b*j)4=$geh+C$o#x_-|Kc=-%;hC31On-MJu9R9@5^ z9LuYYR%qTtdEw(neTLNSXxPS<38G9QS*$VE6T^=~e@rbA;_QlI$F7X-)?<9vH(ugX z6eR};{k+IhM2%h!qAohona7aEdl zZoWzVHu{Jfmf!8Wc)NX<@ulD!-(M5ydWo~M-oC!hql5f7%e=(di@uv5iS;qQ_po-2 z7O}Qlvsq6%Q^)TzrZV;r-v(wgDE+vtyr&@eyrVcGN}e&sSU z((N~%V_KRp7BtIeT+hSnLz5i+wjFRFyZPz3F*lR+ey_(v`6}_NNjasa zSF05l{m+hPGVW39&tPHN%-oVP8#Aop*0pERCyjD;R!gAcSMEJ|dH#BlNz5zH8pcPT zz$5Rj7H0Dgo!)Il*J9tsWa3qDNfuEKQuQmJrxvOeMT}~iFo6c zMs+Xin|hVfJ+|()iU{0i^K?x5`^x}8_*G01K{bJJtuNracS3t7RMJ~et!~ClU?)(o zW5f7xYRFBVY#OF-0pMn1}I68CW^)V1$}mrZ(M*2+2cB^$hs{dHIuXk7hcQ? zgZ0)V*Y=u!*7_m!wmCAeWK}nam*b$O{mCART^RwF9~_!hY>79g4-?Qiwy(|vv=)CH zbWRHZLI*0OIDKzQ|0+H)!jl!L;OB*I#z#kCG>F}8{7jt*pDi$77Ww<|)9#TSgW=Zx zu+HM4&sdL#vd$lN_M{A-Pfm%jX^A|*D5#2x579}q^`2{7n0A-UFI$qycU-b+$;6BC zO|hK?JgESu9bA6m2hXsQLF>QH!OJ*)yOtbU%4t-W=5#5wI_wv!C$A^3xz)zHWx$Vm zW3{b*r0TtUm!b-(x1|=l!(?!YznYsINRy{6uX$Q{S2#x2)(5&v%)NdvcAUr9)XpI~ zF*UMZf3ny*)k80Mv7Int9J}Dnl~i~llJ}4@KHo1IS*{T|5+sH@VpO>qhcBeiuk^f= z7Hi-sM(NMe)=(~lx|oCM++>Y+cFr)gIL;hxg(%NWX11d}k0*5%&QWJWXLHQy1s5dN zf>0SgMAggIO-kSUxZ%Ms0vPmvMJPLWw2_vp9y3QMtKv%ry`G*r`FTo%jvKwW?oZ6J z$gxW-4)lOd`4g#<`Bg+BD#CKZ1pC@0=qcnm*wIs!O_0H1oXX_YRCUX+i_}(p{3nP% z_R*|5udRwEN^X>$u(ETra{Q*kycT=C14UxlKgOgwPnk;|i+wv|%+RVm{nA^ll&^;4rt}0u23lUn=ZH3vs&Oqg3q*<*rjmsJ? z=8ouUd)>cge`3p1ujqs*sRh;EN!GPBjpWew%?MpRL3M<}Hj4Zl?7#~w zNif*~MLi3_>kqi=;Xx$nkwLWTS%Q$%w*x^kKmft|IPf-K-v-2lzRM565k#Va&>A#w z1ucWE&LCobpnK~+(At9Y29bh00AdQ~4#EO2)HrxA&|1MCTL0Tj2mB4KL7~zR0aJkk zY^X922;T_oGm%jTeGS~Cpdo|Ma+Au!eBXsJb+Y_(*NJS!RbM?DCoR~ z92P`72!0$)er5?+#H?5QI}!bVNzdAo9U=wuBV7yvar!N38u51$97r>k01hIRWq)50 zpco@ykJ0~#QU$kFD)90(gkEqQO&Y5SxAohw`fZ^V%&%aYrV>~O@G*WS2$+r5FQq_R u45%>K04j|Fg{=J#WrMJGzrOJzg8w@S2xQxDi^S>tN;pW^B3_6E)&BxCFf6eE delta 2580 zcmY+Gdpy(oAIEK!<~ovNN}kF!xKOR;=Mj)+*;Kmt0DkC=Mbj zg>b5q9Asf~S5zpp5aH~*&N;td`{VQczF+UpKA-nKkJsMc&vY0gT!et<7ZBnDKV70( zBAU>bqFE+%DEGMo1CGR?`}_<>hLt_lJiOL*?oIwicinDP`AE)6K>TzfqoQM z(?t+sh6;+9_*8chRQr*3y)@G-k%WO+^!eKHtRAJ$S8YEmD5Tol@EN~(i|TskQ~j&; zmjnr`9()>Br1(wms~A7|uQneKi*IDpOC~w3&T11xa^!2<;*LO1)7cri$*!z2VttQC ziA-=dVRK#6G4OQ5{f$SiS1TM&pLQIIV9I$hMn^|4Jm^zcp?I2boa>5~0c@o&$>z;- zTh1=W8yk2(TyRlAnPLVflWMfNbZy3I6WP^^&aho&DYRcaJ@4kiV)^Ml9#2l17d1Bu z!B?^A=EM>MLv~`d&`u$v)!Xs=WpiEku$2!FDP%@_O>apcE3$(N14iaM9G|b3P6axB z>S#95>Ng&Q9aB;kUW`jFlFunG74KhgLj^S(MG)L)UO229b&nnTPCaU(sM;J+kuiKF zwSBrELgCo@4CZD4$h7xyUbhDd;3dRV!-w!wA( z7S~U^0V`oS(8YiPPKJ7g@WhGVP`YrS|Mw~nZH+aUuK@p%M(JbBTbbi2EBDj$B=4&J zNm=OI!}VGAs#j+N#=1+@DF0FZ%IM6%y5QMx5h=8)saoMlrgO%N8U0tCzdOA+E@#GkneAMSn?5YfJU{LHU|c2$9v46r;FoxebHl;d$KILr zXhkty8g%LJ8GW7)o75)?Hx&E(%4ZJ1(&%n$Q@-|rc1Jw#ydY~mvumU}Ol=*sc`xfR zkKesJC--<#Zt_O8`w4S!5dW$q;^Oq}m_j-bg{dbNx zolE|b+)A#oJ~u`X{--g3rwX{KEQ9}4M^)P&r*^+nzqFH|kI#PxAD`)er`D>5qHYmU z9`H>)7+cj-BZ77mUt3@AD;a=rLR6IF%7)77g`Dvl4;=ez;3uYn-ES)Hd~*Cux+Sf+ z)N0<$@~rr~*x*EVT0DKte)_NBmuJRI5HKs%I6Z<-XWhA3)UkngTI_lW8lA;w5hbIU6gl?pGGNW33Q9Hw}*g$P+bla*{fynqmaELNpp$(1Qy zQm&e{0jI7+hAp=ahNNq$UzKboE+D6+Sv6IyZ5LB~S%|sXkh<6&!h$H075>?<`d%gF zb^NyUiwTQGP+4bV#aL?fxcRhz%;pvXF87Hrs{J_+0WJI{Tj)$}fCB2y?*3=XPU0?W z57A{cmR%U}4F4`avb6x`a>xR<@OR|CXjM$Nh3?j`7ydxJ+xAzOK5_cXH)~q-T)7P0 zVz|lvaF@%qUjoaIKL3^lwAyddy9MF)Vb20FOZEuwCrhTL+3OQYeZj&UiHR0QQrv|D z?e&g>!&Gz5LV6XI^Hwl%BJIqEE1F>gayU znb2b6s?J)Ebt{pZXVe2^JiX*GvQTLa;CP?N<*tp)X0aD=$z$hWK?3}Qq??Nv3)`cY zf@*hA&MHm&XlRwFC1TWG5iqDUb z^J`wnl9^hA*kUH7fpOew7WjB-=}q3p*NubBXzZ(%vTI-a_Yv?As5Jk-Hw2(o%Zz(P z0OqvzbNd0Hr)>bjUwbczYuZ*ICbjKBXzSoXoYb)c(W2w_Lqr35y87UwpDs_it9uBH zw(GfoApSs^o);KF_5DE{)As?gGIoHO~m!B)yG%;|ONEVmXCw>Z6@3VW->{jw7G z getTraits() { - return traits.values(); - } - @Override public boolean hasTrait(Class trait) { return traits.containsKey(trait); @@ -153,7 +148,8 @@ public class CitizensNPC implements NPC { Bukkit.getPluginManager().callEvent(new NPCDespawnEvent(this)); manager.despawn(this); - mcEntity.die(); + getHandle().die(); + spawned = false; } @@ -166,7 +162,11 @@ public class CitizensNPC implements NPC { @Override public Entity getBukkitEntity() { - return mcEntity.getBukkitEntity(); + return getHandle().getBukkitEntity(); + } + + public Iterable getTraits() { + return traits.values(); } public CraftNPC getHandle() { diff --git a/src/net/citizensnpcs/npc/trait/CitizensCharacterManager.java b/src/net/citizensnpcs/npc/trait/CitizensCharacterManager.java index 512a6198d..a5f1f99d4 100644 --- a/src/net/citizensnpcs/npc/trait/CitizensCharacterManager.java +++ b/src/net/citizensnpcs/npc/trait/CitizensCharacterManager.java @@ -1,47 +1,49 @@ package net.citizensnpcs.npc.trait; -import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; -import java.util.Set; +import net.citizensnpcs.api.Factory; import net.citizensnpcs.api.npc.trait.Character; import net.citizensnpcs.api.npc.trait.CharacterManager; public class CitizensCharacterManager implements CharacterManager { - private final Map> registered = new HashMap>(); - private final Set characters = new HashSet(); + private final Map> registered = new HashMap>(); @Override public Character getCharacter(String name) { - if (registered.get(name) == null) { + if (registered.get(name) == null) return null; + return registered.get(name).create(); + } + + @Override + public void registerCharacter(String name, Class clazz) { + registerCharacterWithFactory(name, new DefaultCharacterFactory(clazz)); + } + + @Override + public void registerCharacterWithFactory(String name, Factory factory) { + if (registered.get(name) != null) + throw new IllegalArgumentException("A character factory for the character '" + name + + "' has already been registered."); + registered.put(name, factory); + } + + private static class DefaultCharacterFactory implements Factory { + private final Class clazz; + + private DefaultCharacterFactory(Class clazz) { + this.clazz = clazz; } - for (Character character : characters) { - if (character.getName().equals(name)) { - return character; + + @Override + public Character create() { + try { + return clazz.newInstance(); + } catch (Exception ex) { + return null; } } - return null; - } - - @Override - public void registerCharacter(Class character) { - if (registered.containsValue(character)) { - return; - } - try { - Character register = character.newInstance(); - registered.put(register.getName(), character); - characters.add(register); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - @Override - public Collection getRegisteredCharacters() { - return characters; } } \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/trait/CitizensTraitManager.java b/src/net/citizensnpcs/npc/trait/CitizensTraitManager.java index 9b3d11f6b..1f623bf2b 100644 --- a/src/net/citizensnpcs/npc/trait/CitizensTraitManager.java +++ b/src/net/citizensnpcs/npc/trait/CitizensTraitManager.java @@ -1,15 +1,14 @@ package net.citizensnpcs.npc.trait; +import java.util.HashMap; import java.util.Map; import net.citizensnpcs.api.Factory; import net.citizensnpcs.api.npc.trait.Trait; import net.citizensnpcs.api.npc.trait.TraitManager; -import com.google.common.collect.Maps; - public class CitizensTraitManager implements TraitManager { - private final Map> registered = Maps.newHashMap(); + private final Map> registered = new HashMap>(); @Override public Trait getTrait(String name) { @@ -20,20 +19,21 @@ public class CitizensTraitManager implements TraitManager { @Override public void registerTrait(String name, Class clazz) { - registerTraitWithFactory(name, new ReflectionFactory(clazz)); + registerTraitWithFactory(name, new DefaultTraitFactory(clazz)); } @Override public void registerTraitWithFactory(String name, Factory factory) { if (registered.get(name) != null) - throw new IllegalArgumentException("Trait factory already registered."); + throw new IllegalArgumentException("A trait factory for the trait '" + name + + "' has already been registered."); registered.put(name, factory); } - private static class ReflectionFactory implements Factory { + private static class DefaultTraitFactory implements Factory { private final Class clazz; - private ReflectionFactory(Class clazz) { + private DefaultTraitFactory(Class clazz) { this.clazz = clazz; }