Permission.java

package dev.aura.bungeechat.permission;

import lombok.Getter;

/**
 * Enum which contains all the permissions used by BungeeChat.<br>
 * Used for easy access to all the permission nodes.
 */
public enum Permission {
  BUNGEECHAT_RELOAD("admin.reload"),
  BUNGEECHAT_SETPREFIX("admin.setprefix"),
  BUNGEECHAT_SETSUFFIX("admin.setsuffix"),
  BUNGEECHAT_MODULES("admin.modules"),
  CHECK_VERSION("admin.checkversion", false),

  USE_CHAT_COLOR_RGB("chat.color.rgb"),
  USE_CHAT_COLOR_BLACK("chat.color.black"),
  USE_CHAT_COLOR_DARK_BLUE("chat.color.dark_blue"),
  USE_CHAT_COLOR_DARK_GREEN("chat.color.dark_green"),
  USE_CHAT_COLOR_DARK_AQUA("chat.color.dark_aqua"),
  USE_CHAT_COLOR_DARK_RED("chat.color.dark_red"),
  USE_CHAT_COLOR_DARK_PURPLE("chat.color.dark_purple"),
  USE_CHAT_COLOR_GOLD("chat.color.gold"),
  USE_CHAT_COLOR_GRAY("chat.color.gray"),
  USE_CHAT_COLOR_DARK_GRAY("chat.color.dark_gray"),
  USE_CHAT_COLOR_BLUE("chat.color.blue"),
  USE_CHAT_COLOR_GREEN("chat.color.green"),
  USE_CHAT_COLOR_AQUA("chat.color.aqua"),
  USE_CHAT_COLOR_RED("chat.color.red"),
  USE_CHAT_COLOR_LIGHT_PURPLE("chat.color.light_purple"),
  USE_CHAT_COLOR_YELLOW("chat.color.yellow"),
  USE_CHAT_COLOR_WHITE("chat.color.white"),

  USE_CHAT_FORMAT_OBFUSCATED("chat.format.obfuscated"),
  USE_CHAT_FORMAT_BOLD("chat.format.bold"),
  USE_CHAT_FORMAT_STRIKETHROUGH("chat.format.strikethrough"),
  USE_CHAT_FORMAT_UNDERLINE("chat.format.underline"),
  USE_CHAT_FORMAT_ITALIC("chat.format.italic"),
  USE_CHAT_FORMAT_RESET("chat.format.reset"),

  BYPASS_ANTI_ADVERTISEMENT("chat.bypass.antiadvertisement"),
  BYPASS_ANTI_CAPSLOCK("chat.bypass.anticapslock"),
  BYPASS_ANTI_DUPLICATE("chat.bypass.antiduplicate"),
  BYPASS_ANTI_SPAM("chat.bypass.antispam"),
  BYPASS_ANTI_SWEAR("chat.bypass.antiswear"),
  BYPASS_TOGGLE_MESSAGE("chat.bypass.toggle"),
  BYPASS_CHAT_LOCK("chat.bypass.chatlock"),
  BYPASS_IGNORE("chat.bypass.ignore"),

  COMMAND_ALERT("command.alert"),
  COMMAND_GLOBAL("command.global"),
  COMMAND_GLOBAL_TOGGLE("command.global.toggle"),
  COMMAND_LOCAL("command.local"),
  COMMAND_LOCAL_TOGGLE("command.local.toggle"),
  COMMAND_STAFFCHAT("command.staffchat"),
  COMMAND_STAFFCHAT_VIEW("command.staffchat.view"),
  COMMAND_HELPOP("command.helpop"),
  COMMAND_HELPOP_VIEW("command.helpop.view"),
  COMMAND_IGNORE("command.ignore"),
  COMMAND_MESSAGE("command.msg"),
  COMMAND_MUTE("command.mute"),
  COMMAND_TEMPMUTE("command.tempmute"),
  COMMAND_UNMUTE("command.unmute"),
  COMMAND_TOGGLE_MESSAGE("command.toggle"),
  COMMAND_TOGGLE_MESSAGE_OTHERS("command.toggle.others"),
  COMMAND_VANISH("command.vanish"),
  COMMAND_VANISH_VIEW("command.vanish.view"),
  COMMAND_SOCIALSPY("command.socialspy"),
  COMMAND_SOCIALSPY_EXEMPT("command.socialspy.exempt"),
  COMMAND_LOCALSPY("command.localspy"),
  COMMAND_LOCALSPY_EXEMPT("command.localspy.exempt"),
  COMMAND_CHAT_LOCK("command.chatlock"),
  COMMAND_CLEAR_CHAT("command.clearchat"),
  COMMAND_LOCALTO("command.localto"),

  MESSAGE_JOIN("message.join"),
  MESSAGE_JOIN_VIEW("message.join.view"),
  MESSAGE_LEAVE("message.leave"),
  MESSAGE_LEAVE_VIEW("message.leave.view"),
  MESSAGE_SWITCH("message.switch"),
  MESSAGE_SWITCH_VIEW("message.switch.view"),
  MESSAGE_MOTD("message.motd");

  @Getter private final String stringedPermission;
  @Getter private final boolean warnOnLackingPermission;

  private Permission(String stringedPermission, boolean warnOnLackingPermission) {
    this.stringedPermission = "bungeechat." + stringedPermission;
    this.warnOnLackingPermission = warnOnLackingPermission;
  }

  private Permission(String stringedPermission) {
    this(
        stringedPermission,
        (stringedPermission.startsWith("command.") || stringedPermission.startsWith("admin."))
            && !(stringedPermission.endsWith(".view") || stringedPermission.endsWith(".exempt")));
  }
}