TotalFreedomMod/commons/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java

202 lines
7.6 KiB
Java

package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.command.handling.CommandParameters;
import me.totalfreedom.totalfreedommod.command.handling.CommandPermissions;
import me.totalfreedom.totalfreedommod.command.handling.FreedomCommand;
import me.totalfreedom.totalfreedommod.command.handling.SourceType;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.event.HoverEvent;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(permission = "tag", source = SourceType.BOTH)
@CommandParameters(description = "Allows you to set your own prefix.", usage = "/<command> [-ns] <set <tag..> | list | off | clear <player> | clearall>")
public class Command_tag extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
boolean save = true;
if (args.length < 1)
{
return false;
}
if (args[0].equalsIgnoreCase("-ns"))
{
save = false;
args = ArrayUtils.remove(args, 0);
}
if (args.length == 1)
{
switch (args[0].toLowerCase())
{
case "list":
{
msgNew("Tags for all online players:");
server.getOnlinePlayers().stream().filter(player -> !(plugin.al.isVanished(player.getUniqueId()) && !isAdmin(sender)) && plugin.pl.getPlayer(player).getTag() != null).forEach(player ->
{
msgNew("<player>: <tag>", Placeholder.unparsed("player", player.getName()),
Placeholder.component("tag", plugin.pl.getPlayer(player).getTag()));
});
return true;
}
case "clearall":
{
if (!sender.hasPermission("tfm.tag.clear.all"))
{
noPerms();
return true;
}
FUtil.adminAction(sender.getName(), "Removing all tags", false);
int count = 0;
for (final Player player : server.getOnlinePlayers())
{
final FPlayer playerdata = plugin.pl.getPlayer(player);
if (playerdata.getTag() != null)
{
count++;
playerdata.setTag(null);
}
}
msgNew("<count> tag(s) removed.", Placeholder.unparsed("count", String.valueOf(count)));
return true;
}
case "off":
{
if (senderIsConsole)
{
msgNew("<red>\"/tag off\" can't be used from the console.");
} else
{
plugin.pl.getPlayer(playerSender).setTag(null);
if (save)
{
save(playerSender, null);
}
msgNew("Your tag has been removed. <saved>",
Placeholder.unparsed("saved", save ? "(Saved)" : ""));
}
return true;
}
default:
{
return false;
}
}
} else if (args.length >= 2)
{
switch (args[0].toLowerCase())
{
case "clear":
{
if (!sender.hasPermission("tfm.tag.clear.others"))
{
noPerms();
return true;
}
final Player player = getPlayer(args[1]);
if (player == null)
{
msg(FreedomCommand.PLAYER_NOT_FOUND);
return true;
}
plugin.pl.getPlayer(player).setTag(null);
if (save)
{
save(player, null);
}
msgNew("Removed <player>'s tag. <saved>",
Placeholder.unparsed("player", player.getName()),
Placeholder.unparsed("saved", save ? "(Saved)" : ""));
return true;
}
case "set":
{
if (senderIsConsole)
{
msgNew("<red>\"/tag set\" can't be used from the console.");
return true;
}
final String inputTag = StringUtils.join(args, " ", 1, args.length);
Component tag;
if (FUtil.containsChatColor(inputTag))
{
tag = FUtil.colorizeAsComponent(inputTag.replace("&k", ""));
} else
{
tag = FUtil.miniMessage(inputTag);
}
String steamrolled = FUtil.steamroll(tag);
int tagLimit = (plugin.al.isAdmin(sender) ? 30 : 20);
if (steamrolled.length() > tagLimit)
{
FLog.debug("FUCK YOU " + steamrolled.length());
FLog.debug("FUCK YOU " + steamrolled);
msgNew("<red>That tag is too long (Max is <max> characters).", Placeholder.unparsed("max", String.valueOf(tagLimit)));
return true;
} else if (!plugin.al.isAdmin(sender) && ConfigEntry.FORBIDDEN_WORDS.getStringList().stream().anyMatch(word -> steamrolled.toLowerCase().contains(word)))
{
msgNew("<red>That tag contains a forbidden word.");
return true;
} else
{
plugin.pl.getPlayer(playerSender).setTag(tag);
if (save)
{
save(playerSender, tag);
}
msgNew("Tag set to '<tag>' <saved>",
Placeholder.component("tag", tag.hoverEvent(HoverEvent.showText(Component.translatable("chat.copy")))
.clickEvent(ClickEvent.copyToClipboard(FUtil.miniMessage(tag)))),
Placeholder.unparsed("saved", save ? "(Saved)" : ""));
}
return true;
}
default:
{
return false;
}
}
}
return false;
}
public void save(Player player, Component tag)
{
PlayerData playerData = plugin.pl.getData(player);
playerData.setTag(tag);
plugin.pl.save(playerData);
}
}