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.World;
021import org.bukkit.entity.Player;
022
023/**
024 * The main Chat API - allows for Prefix/Suffix nodes along with generic Info nodes if the linked Chat system supports them
025 *
026 */
027public abstract class Chat {
028        
029        private Permission perms;
030        
031        public Chat(Permission perms) {
032                this.perms = perms;
033        }
034    /**
035     * Gets name of permission method
036     * @return Name of Permission Method
037     */
038    abstract public String getName();
039
040    /**
041     * Checks if permission method is enabled.
042     * @return Success or Failure
043     */
044    abstract public boolean isEnabled();
045    
046    /**
047     * Get players prefix
048     * @param world World name
049     * @param player Player name
050     * @return Prefix
051     */
052    abstract public String getPlayerPrefix(String world, String player);
053
054    /**
055     * Get players prefix
056     * @param world World Object
057     * @param player Player name
058     * @return Prefix
059     */
060    public String getPlayerPrefix(World world, String player) {
061        return getPlayerPrefix(world.getName(), player);
062    }
063
064    /**
065     * Get players prefix
066     * @param player Player Object
067     * @return Prefix
068     */
069    public String getPlayerPrefix(Player player) {
070        return getPlayerPrefix(player.getWorld().getName(), player.getName());
071    }
072
073    /**
074     * Set players prefix
075     * @param world World name
076     * @param player Player name
077     * @param prefix Prefix
078     */
079    abstract public void setPlayerPrefix(String world, String player, String prefix);
080
081    /**
082     * Set players prefix
083     * @param world World Object
084     * @param player Player name
085     * @param prefix Prefix
086     */
087    public void setPlayerPrefix(World world, String player, String prefix) {
088        setPlayerPrefix(world.getName(), player, prefix);
089    }
090
091    /**
092     * Set players prefix
093     * @param player Player Object
094     * @param prefix Prefix
095     */
096    public void setPlayerPrefix(Player player, String prefix) {
097        setPlayerPrefix(player.getWorld().getName(), player.getName(), prefix);
098    }
099
100    /**
101     * Get players suffix
102     * @param world World name
103     * @param player Player name
104     * @return Suffix
105     */
106    abstract public String getPlayerSuffix(String world, String player);
107
108    /**
109     * Get players suffix
110     * @param world World Object
111     * @param player Player name
112     * @return Suffix
113     */
114    public String getPlayerSuffix(World world, String player) {
115        return getPlayerSuffix(world.getName(), player);
116    }
117
118    /**
119     * Get players suffix
120     * @param player Player Object
121     * @return Suffix
122     */
123    public String getPlayerSuffix(Player player) {
124        return getPlayerSuffix(player.getWorld().getName(), player.getName());
125    }
126
127    /**
128     * Set players suffix
129     * @param world World name
130     * @param player Player name
131     * @param suffix Suffix
132     */
133    abstract public void setPlayerSuffix(String world, String player, String suffix);
134
135    /**
136     * Set players suffix
137     * @param world World Object
138     * @param player Player name
139     * @param suffix Suffix
140     */
141    public void setPlayerSuffix(World world, String player, String suffix) {
142        setPlayerSuffix(world.getName(), player, suffix);
143    }
144
145    /**
146     * Set players suffix
147     * @param player Player Object
148     * @param suffix Suffix
149     */
150    public void setPlayerSuffix(Player player, String suffix) {
151        setPlayerSuffix(player.getWorld().getName(), player.getName(), suffix);
152    }
153
154    /**
155     * Get group prefix
156     * @param world World name
157     * @param group Group name
158     * @return Prefix
159     */
160    abstract public String getGroupPrefix(String world, String group);
161
162    /**
163     * Get group prefix
164     * @param world World Object
165     * @param group Group name
166     * @return Prefix
167     */
168    public String getGroupPrefix(World world, String group) {
169        return getGroupPrefix(world.getName(), group);
170    }
171
172    /**
173     * Set group prefix
174     * @param world World name
175     * @param group Group name
176     * @param prefix Prefix
177     */
178    abstract public void setGroupPrefix(String world, String group, String prefix);
179
180    /**
181     * Set group prefix
182     * @param world World Object
183     * @param group Group name
184     * @param prefix Prefix
185     */
186    public void setGroupPrefix(World world, String group, String prefix) {
187        setGroupPrefix(world.getName(), group, prefix);
188    }
189
190    /**
191     * Get group suffix
192     * @param world World name
193     * @param group Group name
194     * @return Suffix
195     */
196    abstract public String getGroupSuffix(String world, String group);
197
198    /**
199     * Get group suffix
200     * @param world World Object
201     * @param group Group name
202     * @return Suffix
203     */
204    public String getGroupSuffix(World world, String group) {
205        return getGroupSuffix(world.getName(), group);
206    }
207
208    /**
209     * Set group suffix
210     * @param world World name
211     * @param group Group name
212     * @param suffix Suffix
213     */
214    abstract public void setGroupSuffix(String world, String group, String suffix);
215
216    /**
217     * Set group suffix
218     * @param world World Object
219     * @param group Group name
220     * @param suffix Suffix
221     */
222    public void setGroupSuffix(World world, String group, String suffix) {
223        setGroupSuffix(world.getName(), group, suffix);
224    }
225           /**
226     * Get a players informational node (Integer) value
227     * @param world World name
228     * @param player Player name
229     * @param node Permission node
230     * @param defaultValue Default value
231     * @return Value
232     */
233    abstract public int getPlayerInfoInteger(String world, String player, String node, int defaultValue);
234
235    /**
236     * Get a players informational node (Integer) value
237     * @param world World Object
238     * @param player Player name
239     * @param node Permission node
240     * @param defaultValue Default value
241     * @return Value
242     */
243    public int getPlayerInfoInteger(World world, String player, String node, int defaultValue) {
244        return getPlayerInfoInteger(world.getName(), player, node, defaultValue);
245    }
246
247    /**
248     * Get a players informational node (Integer) value
249     * @param player Player Object
250     * @param node Permission node
251     * @param defaultValue Default value
252     * @return Value
253     */
254    public int getPlayerInfoInteger(Player player, String node, int defaultValue) {
255        return getPlayerInfoInteger(player.getWorld().getName(), player.getName(), node, defaultValue);
256    }
257
258    /**
259     * Set a players informational node (Integer) value
260     * @param world World name
261     * @param player Player name
262     * @param node Permission node
263     * @param value Value to set
264     */
265    abstract public void setPlayerInfoInteger(String world, String player, String node, int value);
266
267    /**
268     * Set a players informational node (Integer) value
269     * @param world World Object
270     * @param player Player name
271     * @param node Permission node
272     * @param value Value to set
273     */
274    public void setPlayerInfoInteger(World world, String player, String node, int value) {
275        setPlayerInfoInteger(world.getName(), player, node, value);
276    }
277
278    /**
279     * Set a players informational node (Integer) value
280     * @param player Player Object
281     * @param node Permission node
282     * @param value Value to set
283     */
284    public void setPlayerInfoInteger(Player player, String node, int value) {
285        setPlayerInfoInteger(player.getWorld().getName(), player.getName(), node, value);
286    }
287
288    /**
289     * Get a groups informational node (Integer) value
290     * @param world World name
291     * @param group Group name
292     * @param node Permission node
293     * @param defaultValue Default value
294     * @return Value
295     */
296    abstract public int getGroupInfoInteger(String world, String group, String node, int defaultValue);
297
298    /**
299     * Get a groups informational node (Integer) value
300     * @param world World Object
301     * @param group Group name
302     * @param node Permission node
303     * @param defaultValue Default value
304     * @return Value
305     */
306    public int getGroupInfoInteger(World world, String group, String node, int defaultValue) {
307        return getGroupInfoInteger(world.getName(), group, node, defaultValue);
308    }
309
310    /**
311     * Set a groups informational node (Integer) value
312     * @param world World name
313     * @param group Group name
314     * @param node Permission node
315     * @param value Value to set
316     */
317    abstract public void setGroupInfoInteger(String world, String group, String node, int value);
318
319    /**
320     * Set a groups informational node (Integer) value
321     * @param world World Object
322     * @param group Group name
323     * @param node Permission node
324     * @param value Value to set
325     */
326    public void setGroupInfoInteger(World world, String group, String node, int value) {
327        setGroupInfoInteger(world.getName(), group, node, value);
328    }
329
330    /**
331     * Get a players informational node (Double) value
332     * @param world World name
333     * @param player Group name
334     * @param node Permission node
335     * @param defaultValue Default value
336     * @return Value
337     */
338    abstract public double getPlayerInfoDouble(String world, String player, String node, double defaultValue);
339
340    /**
341     * Get a players informational node (Double) value
342     * @param world World Object
343     * @param player Player name
344     * @param node Permission node
345     * @param defaultValue Default value
346     * @return Value
347     */
348    public double getPlayerInfoDouble(World world, String player, String node, double defaultValue) {
349        return getPlayerInfoDouble(world.getName(), player, node, defaultValue);
350    }
351
352    /**
353     * Get a players informational node (Double) value
354     * @param player Player Object
355     * @param node Permission node
356     * @param defaultValue Default value
357     * @return Value
358     */
359    public double getPlayerInfoDouble(Player player, String node, double defaultValue) {
360        return getPlayerInfoDouble(player.getWorld().getName(), player.getName(), node, defaultValue);
361    }
362
363    /**
364     * Set a players informational node (Double) value
365     * @param world World name
366     * @param player Group name
367     * @param node Permission node
368     * @param value Value to set
369     */
370    abstract public void setPlayerInfoDouble(String world, String player, String node, double value);
371
372    /**
373     * Set a players informational node (Double) value
374     * @param world World Object
375     * @param player Player name
376     * @param node Permission node
377     * @param value Value to set
378     */
379    public void setPlayerInfoDouble(World world, String player, String node, double value) {
380        setPlayerInfoDouble(world.getName(), player, node, value);
381    }
382
383    /**
384     * Set a players informational node (Double) value
385     * @param player Player Object
386     * @param node Permission node
387     * @param value Value to set
388     */
389    public void setPlayerInfoDouble(Player player, String node, double value) {
390        setPlayerInfoDouble(player.getWorld().getName(), player.getName(), node, value);
391    }
392
393    /**
394     * Get a groups informational node (Double) value
395     * @param world World name
396     * @param group Group name
397     * @param node Permission node
398     * @param defaultValue Default value
399     * @return Value
400     */
401    abstract public double getGroupInfoDouble(String world, String group, String node, double defaultValue);
402
403    /**
404     * Get a groups informational node (Double) value
405     * @param world World Object
406     * @param group Group name
407     * @param node Permission node
408     * @param defaultValue Default value
409     * @return Value
410     */
411    public double getGroupInfoDouble(World world, String group, String node, double defaultValue) {
412        return getGroupInfoDouble(world.getName(), group, node, defaultValue);
413    }
414
415    /**
416     * Set a groups informational node (Double) value
417     * @param world World name
418     * @param group Group name
419     * @param node Permission node
420     * @param value Value to set
421     */
422    abstract public void setGroupInfoDouble(String world, String group, String node, double value);
423
424    /**
425     * Set a groups informational node (Double) value
426     * @param world World Object
427     * @param group Group name
428     * @param node Permission node
429     * @param value Value to set
430     */
431    public void setGroupInfoDouble(World world, String group, String node, double value) {
432        setGroupInfoDouble(world.getName(), group, node, value);
433    }
434
435    /**
436     * Get a players informational node (Boolean) value
437     * @param world World name
438     * @param player Player name
439     * @param node Permission node
440     * @param defaultValue Default value
441     * @return Value
442     */
443    abstract public boolean getPlayerInfoBoolean(String world, String player, String node, boolean defaultValue);
444
445    /**
446     * Get a players informational node (Boolean) value
447     * @param world World Object
448     * @param player Player name
449     * @param node Permission node
450     * @param defaultValue Default value
451     * @return Value
452     */
453    public boolean getPlayerInfoBoolean(World world, String player, String node, boolean defaultValue) {
454        return getPlayerInfoBoolean(world.getName(), player, node, defaultValue);
455    }
456
457    /**
458     * Get a players informational node (Boolean) value
459     * @param player Player Object
460     * @param node Permission node
461     * @param defaultValue Default value
462     * @return Value
463     */
464    public boolean getPlayerInfoBoolean(Player player, String node, boolean defaultValue) {
465        return getPlayerInfoBoolean(player.getWorld().getName(), player.getName(), node, defaultValue);
466    }
467
468    /**
469     * Set a players informational node (Boolean) value
470     * @param world World name
471     * @param player Player name
472     * @param node Permission node
473     * @param value Value to set
474     */
475    abstract public void setPlayerInfoBoolean(String world, String player, String node, boolean value);
476
477    /**
478     * Set a players informational node (Boolean) value
479     * @param world World Object
480     * @param player Player name
481     * @param node Permission node
482     * @param value Value to set
483     */
484    public void setPlayerInfoBoolean(World world, String player, String node, boolean value) {
485        setPlayerInfoBoolean(world.getName(), player, node, value);
486    }
487
488    /**
489     * Set a players informational node (Boolean) value
490     * @param player Player Object
491     * @param node Permission node
492     * @param value Value to set
493     */
494    public void setPlayerInfoBoolean(Player player, String node, boolean value) {
495        setPlayerInfoBoolean(player.getWorld().getName(), player.getName(), node, value);
496    }
497
498    /**
499     * Get a groups informational node (Boolean) value
500     * @param world Name of World
501     * @param group Name of Group
502     * @param node Permission node
503     * @param defaultValue Default value
504     * @return Value
505     */
506    abstract public boolean getGroupInfoBoolean(String world, String group, String node, boolean defaultValue);
507
508    /**
509     * Set a players informational node (Boolean) value
510     * @param world World Object
511     * @param group Group name
512     * @param node Permission node
513     * @param defaultValue Default value
514     * @return Value
515     */
516    public boolean getGroupInfoBoolean(World world, String group, String node, boolean defaultValue) {
517        return getGroupInfoBoolean(world.getName(), group, node, defaultValue);
518    }
519
520    /**
521     * Set a groups informational node (Boolean) value
522     * @param world World name
523     * @param group Group name
524     * @param node Permission node
525     * @param value Value to set
526     */
527    abstract public void setGroupInfoBoolean(String world, String group, String node, boolean value);
528
529    /**
530     * Set a players informational node (Boolean) value
531     * @param world World Object
532     * @param group Group name
533     * @param node Permission node
534     * @param value Value to set
535     */
536    public void setGroupInfoBoolean(World world, String group, String node, boolean value) {
537        setGroupInfoBoolean(world.getName(), group, node, value);
538    }
539
540    /**
541     * Get a players informational node (String) value
542     * @param world World name
543     * @param player Player name
544     * @param node Permission node
545     * @param defaultValue Default value
546     * @return Value
547     */
548    abstract public String getPlayerInfoString(String world, String player, String node, String defaultValue);
549
550    /**
551     * Get a players informational node (String) value
552     * @param world World Object
553     * @param player Player name
554     * @param node Permission node
555     * @param defaultValue Default value
556     * @return Value
557     */
558    public String getPlayerInfoString(World world, String player, String node, String defaultValue) {
559        return getPlayerInfoString(world.getName(), player, node, defaultValue);
560    }
561
562    /**
563     * Get a players informational node (String) value
564     * @param player Player Object
565     * @param node Permission node
566     * @param defaultValue Default value
567     * @return Value
568     */
569    public String getPlayerInfoString(Player player, String node, String defaultValue) {
570        return getPlayerInfoString(player.getWorld().getName(), player.getName(), node, defaultValue);
571    }
572
573    /**
574     * Set a players informational node (String) value
575     * @param world World name
576     * @param player Player name
577     * @param node Permission node
578     * @param value Value to set
579     */
580    abstract public void setPlayerInfoString(String world, String player, String node, String value);
581
582    /**
583     * Set a players informational node (String) value
584     * @param world World name
585     * @param player Player name
586     * @param node Permission node
587     * @param value Value to set
588     */
589    public void setPlayerInfoString(World world, String player, String node, String value) {
590        setPlayerInfoString(world.getName(), player, node, value);
591    }
592
593    /**
594     * Set a players informational node (String) value
595     * @param player Player Object
596     * @param node Permission node
597     * @param value Value ot set
598     */
599    public void setPlayerInfoString(Player player, String node, String value) {
600        setPlayerInfoString(player.getWorld().getName(), player.getName(), node, value);
601    }
602
603    /**
604     * Get a groups informational node (String) value
605     * @param world Name of World
606     * @param group Name of Group
607     * @param node Permission node
608     * @param defaultValue Default value
609     * @return Value
610     */
611    abstract public String getGroupInfoString(String world, String group, String node, String defaultValue);
612
613    /**
614     * Set a players informational node (String) value
615     * @param world World Object
616     * @param group Group name
617     * @param node Permission node
618     * @param defaultValue Default value
619     * @return Value
620     */
621    public String getGroupInfoString(World world, String group, String node, String defaultValue) {
622        return getGroupInfoString(world.getName(), group, node, defaultValue);
623    }
624
625    /**
626     * Set a groups informational node (String) value
627     * @param world World name
628     * @param group Group name
629     * @param node Permission node
630     * @param value Value to set
631     */
632    abstract public void setGroupInfoString(String world, String group, String node, String value);
633
634    /**
635     * Set a groups informational node (String) value
636     * @param world World name
637     * @param group Group name
638     * @param node Permission node
639     * @param value Value to set
640     */
641    public void setGroupInfoString(World world, String group, String node, String value) {
642        setGroupInfoString(world.getName(), group, node, value);
643    }
644    
645    /**
646     * Check if player is member of a group.
647     * @param world World name
648     * @param player Player name
649     * @param group Group name
650     * @return Success or Failure
651     */
652    public boolean playerInGroup(String world, String player, String group) {
653        return perms.playerInGroup(world, player, group);
654    }
655
656    /**
657     * Check if player is member of a group.
658     * @param world World Object
659     * @param player Player name
660     * @param group Group name
661     * @return Success or Failure
662     */
663    public boolean playerInGroup(World world, String player, String group) {
664        return playerInGroup(world.getName(), player, group);
665    }
666
667    /**
668     * Check if player is member of a group.
669     * @param player Player Object
670     * @param group Group name
671     * @return Success or Failure
672     */
673    public boolean playerInGroup(Player player, String group) {
674        return playerInGroup(player.getWorld().getName(), player.getName(), group);
675    }
676    
677    /**
678     * Gets the list of groups that this player has
679     * @param world World name
680     * @param player Player name
681     * @return Array of groups
682     */
683    public String[] getPlayerGroups(String world, String player) {
684        return perms.getPlayerGroups(world, player);
685    }
686
687    /**
688     * Gets the list of groups that this player has
689     * @param world World Object
690     * @param player Player name
691     * @return Array of groups
692     */
693    public String[] getPlayerGroups(World world, String player) {
694        return getPlayerGroups(world.getName(), player);
695    }
696
697    /**
698     * Gets the list of groups that this player has
699     * @param player Player Object
700     * @return Array of groups
701     */
702    public String[] getPlayerGroups(Player player) {
703        return getPlayerGroups(player.getWorld().getName(), player.getName());
704    }
705    
706    /**
707     * Gets players primary group
708     * @param world World name
709     * @param player Player name
710     * @return Players primary group
711     */
712    public String getPrimaryGroup(String world, String player) {
713        return perms.getPrimaryGroup(world, player);
714    }
715    
716    /**
717     * Gets players primary group
718     * @param world World Object
719     * @param player Player name
720     * @return Players primary group
721     */
722    public String getPrimaryGroup(World world, String player) {
723        return getPrimaryGroup(world.getName(), player);
724    }
725
726    /**
727     * Get players primary group
728     * @param player Player Object
729     * @return Players primary group
730     */
731    public String getPrimaryGroup(Player player) {
732        return getPrimaryGroup(player.getWorld().getName(), player.getName());
733    }
734    
735    /**
736     * Returns a list of all known groups
737     * @return an Array of String of all groups
738     */
739    public String[] getGroups() {
740        return perms.getGroups();
741    }
742}