202 lines
7.6 KiB
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);
|
|
}
|
|
} |