package tc.oc.commons.bukkit.whisper;
import me.anxuiz.settings.Setting;
import me.anxuiz.settings.SettingBuilder;
import me.anxuiz.settings.types.EnumType;
import me.anxuiz.settings.types.Name;
import org.bukkit.command.CommandSender;
import tc.oc.commons.bukkit.nick.Familiarity;
import tc.oc.commons.bukkit.nick.Identity;
public class WhisperSettings {
// Common values between private message settings
private static final Options defaultValue = Options.ALL;
private static final EnumType enumType = new EnumType("Private Message Options", Options.class);
private static final String description = "Options:\n" +
"ALL: everybody\n" +
"FRIENDS: friends only\n" +
"NONE: nobody";
/**
* Whom users can receive private messages from.
*/
private static final Setting recieve = new SettingBuilder()
.name("PrivateMessages")
.alias("msg").alias("message").alias("messages").alias("pm").alias("pmr")
.description(description).type(enumType).defaultValue(defaultValue)
.summary("Who can send you private messages").get();
public static Setting receive() {
return recieve;
}
// Permission that allows you to send to anyone
public static final String SEND_OVERRIDE_PERMISSION = "projectares.msg.override";
/**
* Whether a user gets a sound notification when a private message arrives.
*/
private static final Setting sound = new SettingBuilder()
.name("PrivateMessageSounds")
.alias("sounds").alias("pmsound").alias("pms")
.description(description).type(enumType).defaultValue(defaultValue)
.summary("Whether you hear a sound when you receive a private message").get();
public static Setting sound() {
return sound;
}
public enum Options {
@Name("all") ALL(Familiarity.PERSON),
@Name("friends") FRIENDS(Familiarity.FRIEND),
@Name("none") NONE(Familiarity.SELF);
private final Familiarity minimumFamiliarity;
Options(Familiarity minimumFamiliarity) {
this.minimumFamiliarity = minimumFamiliarity;
}
public boolean isAllowed(Familiarity familiarity) {
return familiarity.noLessThan(minimumFamiliarity);
}
public boolean canSend(CommandSender sender, Identity recipient) {
return sender.hasPermission(SEND_OVERRIDE_PERMISSION) ||
isAllowed(recipient.familiarity(sender));
}
}
}