001/* This file is part of Vault.
002
003    Vault is free software: you can redistribute it and/or modify
004    it under the terms of the GNU Lesser General Public License as published by
005    the Free Software Foundation, either version 3 of the License, or
006    (at your option) any later version.
007
008    Vault is distributed in the hope that it will be useful,
009    but WITHOUT ANY WARRANTY; without even the implied warranty of
010    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
011    GNU Lesser General Public License for more details.
012
013    You should have received a copy of the GNU Lesser General Public License
014    along with Vault.  If not, see <http://www.gnu.org/licenses/>.
015*/
016package net.milkbowl.vault.chat;
017
018import net.milkbowl.vault.permission.Permission;
019
020import org.bukkit.OfflinePlayer;
021import org.bukkit.World;
022import org.bukkit.entity.Player;
023
024/**
025 * The main Chat API - allows for Prefix/Suffix nodes along with generic Info nodes if the linked Chat system supports them
026 *
027 */
028public abstract class Chat {
029        
030        private Permission perms;
031        
032        public Chat(Permission perms) {
033                this.perms = perms;
034        }
035    /**
036     * Gets name of permission method
037     * @return Name of Permission Method
038     */
039    abstract public String getName();
040
041    /**
042     * Checks if permission method is enabled.
043     * @return Success or Failure
044     */
045    abstract public boolean isEnabled();
046    
047    /**
048     * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerPrefix(String, OfflinePlayer)} instead.
049     * 
050     * Get players prefix
051     * @param world World name
052     * @param player Player name
053     * @return Prefix
054     */
055    @Deprecated
056    abstract public String getPlayerPrefix(String world, String player);
057    
058    /**
059     * Get a players prefix in the given world
060     * Use NULL for world if requesting a global prefix
061     * 
062     * @param world World name
063     * @param player OfflinePlayer
064     * @return Prefix
065     */
066    public String getPlayerPrefix(String world, OfflinePlayer player) {
067        return getPlayerPrefix(world, player.getName());
068    }
069
070    /**
071     * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerPrefix(String, OfflinePlayer)} instead.
072     * 
073     * Get players prefix
074     * @param world World Object
075     * @param player Player name
076     * @return Prefix
077     */
078    @Deprecated
079    public String getPlayerPrefix(World world, String player) {
080        return getPlayerPrefix(world.getName(), player);
081    }
082
083    /**
084     * Get players prefix from the world they are currently in. 
085     * May or may not return the global prefix depending on implementation.
086     * 
087     * @param player Player Object
088     * @return Prefix
089     */
090    public String getPlayerPrefix(Player player) {
091        return getPlayerPrefix(player.getWorld().getName(), player);
092    }
093
094    /**
095     * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerPrefix(String, OfflinePlayer, String)} instead.
096     * 
097     * Set players prefix
098     * @param world World name
099     * @param player Player name
100     * @param prefix Prefix
101     */
102    @Deprecated
103    abstract public void setPlayerPrefix(String world, String player, String prefix);
104
105    /**
106     * Sets players prefix in the given world.
107     * Use NULL for world for setting in the Global scope.
108     * 
109     * @param world World name
110     * @param player OfflinePlayer
111     * @param prefix Prefix
112     */
113    public void setPlayerPrefix(String world, OfflinePlayer player, String prefix) {
114        setPlayerPrefix(world, player.getName(), prefix);
115    }
116
117    /**
118     * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerPrefix(String, OfflinePlayer, String)} instead.
119     * 
120     * Set players prefix in the given world.
121     * 
122     * @param world World Object
123     * @param player Player name
124     * @param prefix Prefix
125     */
126    @Deprecated
127    public void setPlayerPrefix(World world, String player, String prefix) {
128        setPlayerPrefix(world.getName(), player, prefix);
129    }
130
131    /**
132     * Set players prefix in the world they are currently in.
133     * 
134     * @param player Player Object
135     * @param prefix Prefix
136     */
137    public void setPlayerPrefix(Player player, String prefix) {
138        setPlayerPrefix(player.getWorld().getName(), player, prefix);
139    }
140
141    /**
142     * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerSuffix(String, OfflinePlayer)} instead.
143     * 
144     * Get players suffix
145     * @param world World name
146     * @param player Player name
147     * @return Suffix
148     */
149    @Deprecated
150    abstract public String getPlayerSuffix(String world, String player);
151
152    /**
153     * Get players suffix in the specified world.
154     * 
155     * @param world World name
156     * @param player OfflinePlayer name
157     * @return Suffix
158     */
159    public String getPlayerSuffix(String world, OfflinePlayer player) {
160        return getPlayerSuffix(world, player.getName());
161    }
162
163    /**
164     * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerSuffix(String, OfflinePlayer)} instead.
165     * 
166     * Get players suffix
167     * @param world World Object
168     * @param player Player name
169     * @return Suffix
170     */
171    @Deprecated
172    public String getPlayerSuffix(World world, String player) {
173        return getPlayerSuffix(world.getName(), player);
174    }
175
176    /**
177     * Get players suffix in the world they are currently in.
178     * 
179     * @param player Player Object
180     * @return Suffix
181     */
182    public String getPlayerSuffix(Player player) {
183        return getPlayerSuffix(player.getWorld().getName(), player);
184    }
185
186    /**
187     * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerSuffix(String, OfflinePlayer, String)} instead.
188     * 
189     * Set players suffix
190     * @param world World name
191     * @param player Player name
192     * @param suffix Suffix
193     */
194    @Deprecated
195    abstract public void setPlayerSuffix(String world, String player, String suffix);
196
197    /**
198     * Set players suffix for the world specified
199     * 
200     * @param world World name
201     * @param player OfflinePlayer
202     * @param suffix Suffix
203     */
204    public void setPlayerSuffix(String world, OfflinePlayer player, String suffix) {
205        setPlayerSuffix(world, player.getName(), suffix);
206    }
207    
208    /**
209     * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerSuffix(String, OfflinePlayer, String)} instead.
210     * 
211     * Set players suffix
212     * @param world World Object
213     * @param player Player name
214     * @param suffix Suffix
215     */
216    @Deprecated
217    public void setPlayerSuffix(World world, String player, String suffix) {
218        setPlayerSuffix(world.getName(), player, suffix);
219    }
220
221    /**
222     * Set players suffix in the world they currently occupy.
223     * 
224     * @param player Player Object
225     * @param suffix Suffix
226     */
227    public void setPlayerSuffix(Player player, String suffix) {
228        setPlayerSuffix(player.getWorld().getName(), player, suffix);
229    }
230
231    /**
232     * Get group prefix
233     * @param world World name
234     * @param group Group name
235     * @return Prefix
236     */
237    abstract public String getGroupPrefix(String world, String group);
238
239    /**
240     * Get group prefix
241     * @param world World Object
242     * @param group Group name
243     * @return Prefix
244     */
245    public String getGroupPrefix(World world, String group) {
246        return getGroupPrefix(world.getName(), group);
247    }
248
249    /**
250     * Set group prefix
251     * @param world World name
252     * @param group Group name
253     * @param prefix Prefix
254     */
255    abstract public void setGroupPrefix(String world, String group, String prefix);
256
257    /**
258     * Set group prefix
259     * @param world World Object
260     * @param group Group name
261     * @param prefix Prefix
262     */
263    public void setGroupPrefix(World world, String group, String prefix) {
264        setGroupPrefix(world.getName(), group, prefix);
265    }
266
267    /**
268     * Get group suffix
269     * @param world World name
270     * @param group Group name
271     * @return Suffix
272     */
273    abstract public String getGroupSuffix(String world, String group);
274
275    /**
276     * Get group suffix
277     * @param world World Object
278     * @param group Group name
279     * @return Suffix
280     */
281    public String getGroupSuffix(World world, String group) {
282        return getGroupSuffix(world.getName(), group);
283    }
284
285    /**
286     * Set group suffix
287     * @param world World name
288     * @param group Group name
289     * @param suffix Suffix
290     */
291    abstract public void setGroupSuffix(String world, String group, String suffix);
292
293    /**
294     * Set group suffix
295     * @param world World Object
296     * @param group Group name
297     * @param suffix Suffix
298     */
299    public void setGroupSuffix(World world, String group, String suffix) {
300        setGroupSuffix(world.getName(), group, suffix);
301    }
302
303        /**
304     * Get a players informational node (Integer) value
305     * @param world World name
306     * @param player OfflinePlayer
307     * @param node Permission node
308     * @param defaultValue Default value
309     * @return Value
310     */
311    public int getPlayerInfoInteger(String world, OfflinePlayer player, String node, int defaultValue) {
312        return getPlayerInfoInteger(world, player.getName(), node, defaultValue);
313    }
314
315        /**
316         * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerInfoInteger(String, OfflinePlayer, String, int)} instead.
317     * Get a players informational node (Integer) value
318     * @param world World name
319     * @param player Player name
320     * @param node Permission node
321     * @param defaultValue Default value
322     * @return Value
323     */
324    @Deprecated
325    abstract public int getPlayerInfoInteger(String world, String player, String node, int defaultValue);
326
327    /**
328     * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerInfoInteger(String, OfflinePlayer, String, int)} instead.
329     * 
330     * Get a players informational node (Integer) value
331     * @param world World Object
332     * @param player Player name
333     * @param node Permission node
334     * @param defaultValue Default value
335     * @return Value
336     */
337    @Deprecated
338    public int getPlayerInfoInteger(World world, String player, String node, int defaultValue) {
339        return getPlayerInfoInteger(world.getName(), player, node, defaultValue);
340    }
341
342    /**
343     * Get a players informational node (Integer) value
344     * @param player Player Object
345     * @param node Permission node
346     * @param defaultValue Default value
347     * @return Value
348     */
349    public int getPlayerInfoInteger(Player player, String node, int defaultValue) {
350        return getPlayerInfoInteger(player.getWorld().getName(), player, node, defaultValue);
351    }
352
353    /**
354     * Set a players informational node (Integer) value
355     * @param world World name
356     * @param player OfflinePlayer
357     * @param node Permission node
358     * @param value Value to set
359     */
360    public void setPlayerInfoInteger(String world, OfflinePlayer player, String node, int value) {
361        setPlayerInfoInteger(world, player.getName(), node, value);
362    }
363    
364    /**
365     * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerInfoInteger(String, OfflinePlayer, String, int)} instead.
366     * 
367     * Set a players informational node (Integer) value
368     * @param world World name
369     * @param player Player name
370     * @param node Permission node
371     * @param value Value to set
372     */
373    @Deprecated
374    abstract public void setPlayerInfoInteger(String world, String player, String node, int value);
375
376    /**
377     * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerInfoInteger(String, OfflinePlayer, String, int)} instead.
378     *
379     * Set a players informational node (Integer) value
380     * @param world World Object
381     * @param player Player name
382     * @param node Permission node
383     * @param value Value to set
384     */
385    @Deprecated
386    public void setPlayerInfoInteger(World world, String player, String node, int value) {
387        setPlayerInfoInteger(world.getName(), player, node, value);
388    }
389
390    /**
391     * Set a players informational node (Integer) value
392     * @param player Player Object
393     * @param node Permission node
394     * @param value Value to set
395     */
396    public void setPlayerInfoInteger(Player player, String node, int value) {
397        setPlayerInfoInteger(player.getWorld().getName(), player, node, value);
398    }
399
400    /**
401     * Get a groups informational node (Integer) value
402     * @param world World name
403     * @param group Group name
404     * @param node Permission node
405     * @param defaultValue Default value
406     * @return Value
407     */
408    abstract public int getGroupInfoInteger(String world, String group, String node, int defaultValue);
409
410    /**
411     * Get a groups informational node (Integer) value
412     * @param world World Object
413     * @param group Group name
414     * @param node Permission node
415     * @param defaultValue Default value
416     * @return Value
417     */
418    public int getGroupInfoInteger(World world, String group, String node, int defaultValue) {
419        return getGroupInfoInteger(world.getName(), group, node, defaultValue);
420    }
421
422    /**
423     * Set a groups informational node (Integer) value
424     * @param world World name
425     * @param group Group name
426     * @param node Permission node
427     * @param value Value to set
428     */
429    abstract public void setGroupInfoInteger(String world, String group, String node, int value);
430
431    /**
432     * Set a groups informational node (Integer) value
433     * @param world World Object
434     * @param group Group name
435     * @param node Permission node
436     * @param value Value to set
437     */
438    public void setGroupInfoInteger(World world, String group, String node, int value) {
439        setGroupInfoInteger(world.getName(), group, node, value);
440    }
441
442    /**
443     * Get a players informational node (Double) value
444     * @param world World name
445     * @param player OfflinePlayer
446     * @param node Permission node
447     * @param defaultValue Default value
448     * @return Value
449     */
450    public double getPlayerInfoDouble(String world, OfflinePlayer player, String node, double defaultValue) {
451        return getPlayerInfoDouble(world, player.getName(), node, defaultValue);
452    }
453    
454    /**
455     * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerInfoDouble(String, OfflinePlayer, String, double)} instead.
456     * 
457     * Get a players informational node (Double) value
458     * @param world World name
459     * @param player Player name
460     * @param node Permission node
461     * @param defaultValue Default value
462     * @return Value
463     */
464    @Deprecated
465    abstract public double getPlayerInfoDouble(String world, String player, String node, double defaultValue);
466
467    /**
468     * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerInfoDouble(String, OfflinePlayer, String, double)} instead
469     * 
470     * Get a players informational node (Double) value
471     * @param world World Object
472     * @param player Player name
473     * @param node Permission node
474     * @param defaultValue Default value
475     * @return Value
476     */
477    @Deprecated
478    public double getPlayerInfoDouble(World world, String player, String node, double defaultValue) {
479        return getPlayerInfoDouble(world.getName(), player, node, defaultValue);
480    }
481
482    /**
483     * Get a players informational node (Double) value
484     * @param player Player Object
485     * @param node Permission node
486     * @param defaultValue Default value
487     * @return Value
488     */
489    public double getPlayerInfoDouble(Player player, String node, double defaultValue) {
490        return getPlayerInfoDouble(player.getWorld().getName(), player, node, defaultValue);
491    }
492
493    /**
494     * Set a players informational node (Double) value
495     * @param world World name
496     * @param player OfflinePlayer
497     * @param node Permission node
498     * @param value Value to set
499     */
500    public void setPlayerInfoDouble(String world, OfflinePlayer player, String node, double value) {
501        setPlayerInfoDouble(world, player.getName(), node, value);
502    }
503    
504    /**
505     * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerInfoDouble(String, OfflinePlayer, String, double)} instead.
506     * Set a players informational node (Double) value
507     * @param world World name
508     * @param player Player name
509     * @param node Permission node
510     * @param value Value to set
511     */
512    @Deprecated
513    abstract public void setPlayerInfoDouble(String world, String player, String node, double value);
514
515    /**
516     * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerInfoDouble(String, OfflinePlayer, String, double)} instead.
517     * Set a players informational node (Double) value
518     * @param world World Object
519     * @param player Player name
520     * @param node Permission node
521     * @param value Value to set
522     */
523    @Deprecated
524    public void setPlayerInfoDouble(World world, String player, String node, double value) {
525        setPlayerInfoDouble(world.getName(), player, node, value);
526    }
527
528    /**
529     * Set a players informational node (Double) value
530     * @param player Player Object
531     * @param node Permission node
532     * @param value Value to set
533     */
534    public void setPlayerInfoDouble(Player player, String node, double value) {
535        setPlayerInfoDouble(player.getWorld().getName(), player, node, value);
536    }
537
538    /**
539     * Get a groups informational node (Double) value
540     * @param world World name
541     * @param group Group name
542     * @param node Permission node
543     * @param defaultValue Default value
544     * @return Value
545     */
546    abstract public double getGroupInfoDouble(String world, String group, String node, double defaultValue);
547
548    /**
549     * Get a groups informational node (Double) value
550     * @param world World Object
551     * @param group Group name
552     * @param node Permission node
553     * @param defaultValue Default value
554     * @return Value
555     */
556    public double getGroupInfoDouble(World world, String group, String node, double defaultValue) {
557        return getGroupInfoDouble(world.getName(), group, node, defaultValue);
558    }
559
560    /**
561     * Set a groups informational node (Double) value
562     * @param world World name
563     * @param group Group name
564     * @param node Permission node
565     * @param value Value to set
566     */
567    abstract public void setGroupInfoDouble(String world, String group, String node, double value);
568
569    /**
570     * Set a groups informational node (Double) value
571     * @param world World Object
572     * @param group Group name
573     * @param node Permission node
574     * @param value Value to set
575     */
576    public void setGroupInfoDouble(World world, String group, String node, double value) {
577        setGroupInfoDouble(world.getName(), group, node, value);
578    }
579
580    /**
581     * Get a players informational node (Boolean) value
582     * @param world World name
583     * @param player OfflinePlayer
584     * @param node Permission node
585     * @param defaultValue Default value
586     * @return Value
587     */
588    public boolean getPlayerInfoBoolean(String world, OfflinePlayer player, String node, boolean defaultValue) {
589        return getPlayerInfoBoolean(world, player.getName(), node, defaultValue);
590    }
591    
592    /**
593     * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerInfoBoolean(String, OfflinePlayer, String, boolean)} instead.
594     * 
595     * Get a players informational node (Boolean) value
596     * @param world World name
597     * @param player Player name
598     * @param node Permission node
599     * @param defaultValue Default value
600     * @return Value
601     */
602    @Deprecated
603    abstract public boolean getPlayerInfoBoolean(String world, String player, String node, boolean defaultValue);
604
605    /**
606     * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerInfoBoolean(String, OfflinePlayer, String, boolean)} instead.
607     * 
608     * Get a players informational node (Boolean) value
609     * @param world World Object
610     * @param player Player name
611     * @param node Permission node
612     * @param defaultValue Default value
613     * @return Value
614     */
615    @Deprecated
616    public boolean getPlayerInfoBoolean(World world, String player, String node, boolean defaultValue) {
617        return getPlayerInfoBoolean(world.getName(), player, node, defaultValue);
618    }
619
620    /**
621     * Get a players informational node (Boolean) value
622     * @param player Player Object
623     * @param node Permission node
624     * @param defaultValue Default value
625     * @return Value
626     */
627    public boolean getPlayerInfoBoolean(Player player, String node, boolean defaultValue) {
628        return getPlayerInfoBoolean(player.getWorld().getName(), player, node, defaultValue);
629    }
630
631    /**
632     * Set a players informational node (Boolean) value
633     * @param world World name
634     * @param player OfflinePlayer
635     * @param node Permission node
636     * @param value Value to set
637     */
638    public void setPlayerInfoBoolean(String world, OfflinePlayer player, String node, boolean value) {
639        setPlayerInfoBoolean(world, player.getName(), node, value);
640    }
641    
642    /**
643     * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerInfoBoolean(String, OfflinePlayer, String, boolean)} instead.
644     * Set a players informational node (Boolean) value
645     * @param world World name
646     * @param player Player name
647     * @param node Permission node
648     * @param value Value to set
649     */
650    @Deprecated
651    abstract public void setPlayerInfoBoolean(String world, String player, String node, boolean value);
652
653    /**
654     * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerInfoBoolean(String, OfflinePlayer, String, boolean)} instead.
655     * Set a players informational node (Boolean) value
656     * @param world World Object
657     * @param player Player name
658     * @param node Permission node
659     * @param value Value to set
660     */
661    @Deprecated
662    public void setPlayerInfoBoolean(World world, String player, String node, boolean value) {
663        setPlayerInfoBoolean(world.getName(), player, node, value);
664    }
665
666    /**
667     * Set a players informational node (Boolean) value
668     * @param player Player Object
669     * @param node Permission node
670     * @param value Value to set
671     */
672    public void setPlayerInfoBoolean(Player player, String node, boolean value) {
673        setPlayerInfoBoolean(player.getWorld().getName(), player, node, value);
674    }
675
676    /**
677     * Get a groups informational node (Boolean) value
678     * @param world Name of World
679     * @param group Name of Group
680     * @param node Permission node
681     * @param defaultValue Default value
682     * @return Value
683     */
684    abstract public boolean getGroupInfoBoolean(String world, String group, String node, boolean defaultValue);
685
686    /**
687     * Set a players informational node (Boolean) value
688     * @param world World Object
689     * @param group Group name
690     * @param node Permission node
691     * @param defaultValue Default value
692     * @return Value
693     */
694    public boolean getGroupInfoBoolean(World world, String group, String node, boolean defaultValue) {
695        return getGroupInfoBoolean(world.getName(), group, node, defaultValue);
696    }
697
698    /**
699     * Set a groups informational node (Boolean) value
700     * @param world World name
701     * @param group Group name
702     * @param node Permission node
703     * @param value Value to set
704     */
705    abstract public void setGroupInfoBoolean(String world, String group, String node, boolean value);
706
707    /**
708     * Set a players informational node (Boolean) value
709     * @param world World Object
710     * @param group Group name
711     * @param node Permission node
712     * @param value Value to set
713     */
714    public void setGroupInfoBoolean(World world, String group, String node, boolean value) {
715        setGroupInfoBoolean(world.getName(), group, node, value);
716    }
717    
718    /**
719     * Get a players informational node (String) value
720     * @param world World name
721     * @param player OfflinePlayer
722     * @param node Permission node
723     * @param defaultValue Default value
724     * @return Value
725     */
726    public String getPlayerInfoString(String world, OfflinePlayer player, String node, String defaultValue) {
727        return getPlayerInfoString(world, player.getName(), node, defaultValue);
728    }
729
730    /**
731     * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerInfoString(String, OfflinePlayer, String, String)} instead.
732     *
733     * Get a players informational node (String) value
734     * @param world World name
735     * @param player Player name
736     * @param node Permission node
737     * @param defaultValue Default value
738     * @return Value
739     */
740    @Deprecated
741    abstract public String getPlayerInfoString(String world, String player, String node, String defaultValue);
742
743    /**
744     * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerInfoString(String, OfflinePlayer, String, String)} instead.
745     * Get a players informational node (String) value
746     * @param world World Object
747     * @param player Player name
748     * @param node Permission node
749     * @param defaultValue Default value
750     * @return Value
751     */
752    @Deprecated
753    public String getPlayerInfoString(World world, String player, String node, String defaultValue) {
754        return getPlayerInfoString(world.getName(), player, node, defaultValue);
755    }
756
757    /**
758     * Get a players informational node (String) value
759     * @param player Player Object
760     * @param node Permission node
761     * @param defaultValue Default value
762     * @return Value
763     */
764    public String getPlayerInfoString(Player player, String node, String defaultValue) {
765        return getPlayerInfoString(player.getWorld().getName(), player, node, defaultValue);
766    }
767    
768    /**
769     * Set a players informational node (String) value
770     * @param world World name
771     * @param player OfflinePlayer
772     * @param node Permission node
773     * @param value Value to set
774     */
775    public void setPlayerInfoString(String world, OfflinePlayer player, String node, String value) {
776        setPlayerInfoString(world, player.getName(), node, value);
777    }
778
779    /**
780     * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerInfoString(String, OfflinePlayer, String, String)} instead.
781     * Set a players informational node (String) value
782     * @param world World name
783     * @param player Player name
784     * @param node Permission node
785     * @param value Value to set
786     */
787    @Deprecated
788    abstract public void setPlayerInfoString(String world, String player, String node, String value);
789
790    /**
791     * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerInfoString(String, OfflinePlayer, String, String)} instead.
792     * Set a players informational node (String) value
793     * @param world World name
794     * @param player Player name
795     * @param node Permission node
796     * @param value Value to set
797     */
798    @Deprecated
799    public void setPlayerInfoString(World world, String player, String node, String value) {
800        setPlayerInfoString(world.getName(), player, node, value);
801    }
802
803    /**
804     * Set a players informational node (String) value
805     * @param player Player Object
806     * @param node Permission node
807     * @param value Value ot set
808     */
809    public void setPlayerInfoString(Player player, String node, String value) {
810        setPlayerInfoString(player.getWorld().getName(), player, node, value);
811    }
812
813    /**
814     * Get a groups informational node (String) value
815     * @param world Name of World
816     * @param group Name of Group
817     * @param node Permission node
818     * @param defaultValue Default value
819     * @return Value
820     */
821    abstract public String getGroupInfoString(String world, String group, String node, String defaultValue);
822
823    /**
824     * Set a players informational node (String) value
825     * @param world World Object
826     * @param group Group name
827     * @param node Permission node
828     * @param defaultValue Default value
829     * @return Value
830     */
831    public String getGroupInfoString(World world, String group, String node, String defaultValue) {
832        return getGroupInfoString(world.getName(), group, node, defaultValue);
833    }
834
835    /**
836     * Set a groups informational node (String) value
837     * @param world World name
838     * @param group Group name
839     * @param node Permission node
840     * @param value Value to set
841     */
842    abstract public void setGroupInfoString(String world, String group, String node, String value);
843
844    /**
845     * Set a groups informational node (String) value
846     * @param world World name
847     * @param group Group name
848     * @param node Permission node
849     * @param value Value to set
850     */
851    public void setGroupInfoString(World world, String group, String node, String value) {
852        setGroupInfoString(world.getName(), group, node, value);
853    }
854    
855    /**
856     * Check if player is member of a group.
857     * @param world World name
858     * @param player OfflinePlayer
859     * @param group Group name
860     * @return Success or Failure
861     */
862    public boolean playerInGroup(String world, OfflinePlayer player, String group) {
863        return perms.playerInGroup(world, player, group);
864    }
865    
866    /**
867     * @deprecated As of VaultAPI 1.4 use {{@link #playerInGroup(String, OfflinePlayer, String)} instead.
868     * Check if player is member of a group.
869     * @param world World name
870     * @param player Player name
871     * @param group Group name
872     * @return Success or Failure
873     */
874    @Deprecated
875    public boolean playerInGroup(String world, String player, String group) {
876        return perms.playerInGroup(world, player, group);
877    }
878
879    /**
880     * @deprecated As of VaultAPI 1.4 use {{@link #playerInGroup(String, OfflinePlayer, String)} instead.
881     * Check if player is member of a group.
882     * @param world World Object
883     * @param player Player name
884     * @param group Group name
885     * @return Success or Failure
886     */
887    @Deprecated
888    public boolean playerInGroup(World world, String player, String group) {
889        return playerInGroup(world.getName(), player, group);
890    }
891
892    /**
893     * Check if player is member of a group.
894     * @param player Player Object
895     * @param group Group name
896     * @return Success or Failure
897     */
898    public boolean playerInGroup(Player player, String group) {
899        return playerInGroup(player.getWorld().getName(), player, group);
900    }
901    
902    /**
903     * Gets the list of groups that this player has
904     * @param world World name
905     * @param player OfflinePlayer
906     * @return Array of groups
907     */
908    public String[] getPlayerGroups(String world, OfflinePlayer player) {
909        return perms.getPlayerGroups(world, player);
910    }
911    
912    /**
913     * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerGroups(String, OfflinePlayer)} instead.
914     * Gets the list of groups that this player has
915     * @param world World name
916     * @param player Player name
917     * @return Array of groups
918     */
919    @Deprecated
920    public String[] getPlayerGroups(String world, String player) {
921        return perms.getPlayerGroups(world, player);
922    }
923
924    /**
925     * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerGroups(String, OfflinePlayer)} instead.
926     * Gets the list of groups that this player has
927     * @param world World Object
928     * @param player Player name
929     * @return Array of groups
930     */
931    @Deprecated
932    public String[] getPlayerGroups(World world, String player) {
933        return getPlayerGroups(world.getName(), player);
934    }
935
936    /**
937     * Gets the list of groups that this player has
938     * @param player Player Object
939     * @return Array of groups
940     */
941    public String[] getPlayerGroups(Player player) {
942        return getPlayerGroups(player.getWorld().getName(), player);
943    }
944    
945    /**
946     * Gets players primary group
947     * @param world World name
948     * @param player OfflinePlayer
949     * @return Players primary group
950     */
951    public String getPrimaryGroup(String world, OfflinePlayer player) {
952        return perms.getPrimaryGroup(world, player);
953    }
954    
955    /**
956     * @deprecated As of VaultAPI 1.4 use {{@link #getPrimaryGroup(String, OfflinePlayer)} instead. 
957     * Gets players primary group
958     * @param world World name
959     * @param player Player name
960     * @return Players primary group
961     */
962    @Deprecated
963    public String getPrimaryGroup(String world, String player) {
964        return perms.getPrimaryGroup(world, player);
965    }
966    
967    /**
968     * @deprecated As of VaultAPI 1.4 use {{@link #getPrimaryGroup(String, OfflinePlayer)} instead.
969     * Gets players primary group
970     * @param world World Object
971     * @param player Player name
972     * @return Players primary group
973     */
974    @Deprecated
975    public String getPrimaryGroup(World world, String player) {
976        return getPrimaryGroup(world.getName(), player);
977    }
978
979    /**
980     * Get players primary group
981     * @param player Player Object
982     * @return Players primary group
983     */
984    public String getPrimaryGroup(Player player) {
985        return getPrimaryGroup(player.getWorld().getName(), player);
986    }
987    
988    /**
989     * Returns a list of all known groups
990     * @return an Array of String of all groups
991     */
992    public String[] getGroups() {
993        return perms.getGroups();
994    }
995}