GlobalChatCommand.java

package dev.aura.bungeechat.command;

import dev.aura.bungeechat.account.BungeecordAccountManager;
import dev.aura.bungeechat.api.account.BungeeChatAccount;
import dev.aura.bungeechat.api.enums.AccountType;
import dev.aura.bungeechat.api.enums.ChannelType;
import dev.aura.bungeechat.message.Messages;
import dev.aura.bungeechat.message.MessagesService;
import dev.aura.bungeechat.module.GlobalChatModule;
import dev.aura.bungeechat.permission.Permission;
import dev.aura.bungeechat.permission.PermissionManager;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.connection.ProxiedPlayer;

public class GlobalChatCommand extends BaseCommand {
  public GlobalChatCommand(GlobalChatModule globalChatModule) {
    super(
        "global",
        Permission.COMMAND_GLOBAL,
        globalChatModule.getModuleSection().getStringList("aliases"));
  }

  @Override
  public void execute(CommandSender sender, String[] args) {
    if (!PermissionManager.hasPermission(sender, Permission.COMMAND_GLOBAL)) return;

    BungeeChatAccount account = BungeecordAccountManager.getAccount(sender).get();

    if (!MessagesService.getGlobalPredicate().test(account)
        && (account.getAccountType() == AccountType.PLAYER)) {
      MessagesService.sendMessage(sender, Messages.NOT_IN_GLOBAL_SERVER.get());

      return;
    }

    if (args.length < 1) {
      if (!(sender instanceof ProxiedPlayer)) {
        MessagesService.sendMessage(sender, Messages.NOT_A_PLAYER.get());
        return;
      }

      if (PermissionManager.hasPermission(sender, Permission.COMMAND_GLOBAL_TOGGLE)) {
        BungeeChatAccount player = BungeecordAccountManager.getAccount(sender).get();

        if (player.getChannelType() == ChannelType.GLOBAL) {
          ChannelType defaultChannelType = player.getDefaultChannelType();
          player.setChannelType(defaultChannelType);

          if (defaultChannelType == ChannelType.LOCAL) {
            MessagesService.sendMessage(sender, Messages.ENABLE_LOCAL.get());
          } else {
            MessagesService.sendMessage(sender, Messages.GLOBAL_IS_DEFAULT.get());
          }
        } else {
          player.setChannelType(ChannelType.GLOBAL);
          MessagesService.sendMessage(sender, Messages.ENABLE_GLOBAL.get());
        }
      } else {
        MessagesService.sendMessage(
            sender, Messages.INCORRECT_USAGE.get(sender, "/global <message>"));
      }
    } else {
      String finalMessage = String.join(" ", args);

      MessagesService.sendGlobalMessage(sender, finalMessage);
    }
  }
}