LuckPerms Integration (1.5/2)

This commit is contained in:
Paul Reilly 2023-03-29 22:00:35 -05:00
parent 65540b7f3a
commit cc244fc4f7
24 changed files with 230 additions and 209 deletions

View File

@ -1,6 +1,5 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.GameMode; import org.bukkit.GameMode;
@ -8,7 +7,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH) @CommandPermissions(permission = "creative", source = SourceType.BOTH)
@CommandParameters(description = "Quickly change your own gamemode to creative, define someone's username to change theirs, or change everyone's gamemode on the server.", usage = "/<command> <-a | [partialname]>", aliases = "gmc") @CommandParameters(description = "Quickly change your own gamemode to creative, define someone's username to change theirs, or change everyone's gamemode on the server.", usage = "/<command> <-a | [partialname]>", aliases = "gmc")
public class Command_creative extends FreedomCommand public class Command_creative extends FreedomCommand
{ {
@ -28,7 +27,7 @@ public class Command_creative extends FreedomCommand
return true; return true;
} }
checkPermission(Rank.ADMIN); checkPermission("tfm.creative.other");
if (args[0].equals("-a")) if (args[0].equals("-a"))
{ {

View File

@ -1,13 +1,12 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.api.ShopItem; import me.totalfreedom.totalfreedommod.api.ShopItem;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "lightningrod", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Obtain a lightning rod", usage = "/<command>") @CommandParameters(description = "Obtain a lightning rod", usage = "/<command>")
public class Command_lightningrod extends FreedomCommand public class Command_lightningrod extends FreedomCommand
{ {
@ -15,7 +14,8 @@ public class Command_lightningrod extends FreedomCommand
@Override @Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
if (plugin.sh == null) { if (plugin.sh == null)
{
msg("The shop is currently disabled.", ChatColor.RED); msg("The shop is currently disabled.", ChatColor.RED);
return true; return true;
} }
@ -24,8 +24,7 @@ public class Command_lightningrod extends FreedomCommand
{ {
playerSender.getInventory().addItem(plugin.sh.getLightningRod()); playerSender.getInventory().addItem(plugin.sh.getLightningRod());
msg("You have been given a Lightning Rod", ChatColor.GREEN); msg("You have been given a Lightning Rod", ChatColor.GREEN);
} } else
else
{ {
msg("You do not own a Lightning Rod! Purchase one from the shop.", ChatColor.RED); msg("You do not own a Lightning Rod! Purchase one from the shop.", ChatColor.RED);
} }

View File

@ -1,13 +1,12 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "linkdiscord", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Link your Discord account to your Minecraft account", usage = "/<command> [<name> <id>]") @CommandParameters(description = "Link your Discord account to your Minecraft account", usage = "/<command> [<name> <id>]")
public class Command_linkdiscord extends FreedomCommand public class Command_linkdiscord extends FreedomCommand
{ {

View File

@ -1,9 +1,5 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -11,7 +7,11 @@ import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH) import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@CommandPermissions(permission = "links", source = SourceType.BOTH)
@CommandParameters(description = "See TotalFreedom's social media links.", usage = "/<command>", aliases = "link") @CommandParameters(description = "See TotalFreedom's social media links.", usage = "/<command>", aliases = "link")
public class Command_links extends FreedomCommand public class Command_links extends FreedomCommand
{ {
@ -38,8 +38,7 @@ public class Command_links extends FreedomCommand
msg("Social Media Links:", ChatColor.AQUA); msg("Social Media Links:", ChatColor.AQUA);
sender.sendMessage(lines.toArray(new String[0])); sender.sendMessage(lines.toArray(new String[0]));
return true; return true;
} } else
else
{ {
msg("There are no links added in the configuration file.", ChatColor.RED); msg("There are no links added in the configuration file.", ChatColor.RED);
} }

View File

@ -1,7 +1,6 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.admin.Admin; import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
@ -11,7 +10,7 @@ import org.bukkit.entity.Player;
import java.util.List; import java.util.List;
@CommandPermissions(rank = Rank.NON_OP, source = SourceType.BOTH) @CommandPermissions(permission = "list", source = SourceType.BOTH)
@CommandParameters(description = "Lists the real names of all online players.", usage = "/<command> [-a | -v]", aliases = "who,lsit") @CommandParameters(description = "Lists the real names of all online players.", usage = "/<command> [-a | -v]", aliases = "who,lsit")
public class Command_list extends FreedomCommand public class Command_list extends FreedomCommand
{ {
@ -31,12 +30,12 @@ public class Command_list extends FreedomCommand
case "-s", "-a" -> listFilter = ListFilter.ADMINS; case "-s", "-a" -> listFilter = ListFilter.ADMINS;
case "-v" -> case "-v" ->
{ {
checkPermission(Rank.ADMIN); checkPermission("tfm.list.vanished");
listFilter = ListFilter.VANISHED_ADMINS; listFilter = ListFilter.VANISHED_ADMINS;
} }
case "-t" -> case "-t" ->
{ {
checkPermission(Rank.ADMIN); checkPermission("tfm.list.telnet");
listFilter = ListFilter.TELNET_SESSIONS; listFilter = ListFilter.TELNET_SESSIONS;
} }
default -> default ->
@ -44,8 +43,7 @@ public class Command_list extends FreedomCommand
return false; return false;
} }
} }
} } else
else
{ {
listFilter = ListFilter.PLAYERS; listFilter = ListFilter.PLAYERS;
} }
@ -58,8 +56,7 @@ public class Command_list extends FreedomCommand
players = plugin.btb.getConnectedAdmins().stream().map(Admin::getName).toList(); players = plugin.btb.getConnectedAdmins().stream().map(Admin::getName).toList();
onlineStats = ChatColor.BLUE + "There are " + ChatColor.RED + players.size() + ChatColor.BLUE onlineStats = ChatColor.BLUE + "There are " + ChatColor.RED + players.size() + ChatColor.BLUE
+ " admins connected to telnet."; + " admins connected to telnet.";
} } else
else
{ {
onlineStats = ChatColor.BLUE + "There are " + ChatColor.RED + FUtil.getFakePlayerCount() + ChatColor.BLUE onlineStats = ChatColor.BLUE + "There are " + ChatColor.RED + FUtil.getFakePlayerCount() + ChatColor.BLUE
+ " out of a maximum " + ChatColor.RED + server.getMaxPlayers() + ChatColor.BLUE + " players online."; + " out of a maximum " + ChatColor.RED + server.getMaxPlayers() + ChatColor.BLUE + " players online.";
@ -78,8 +75,7 @@ public class Command_list extends FreedomCommand
{ {
msg(ChatColor.stripColor(onlineStats)); msg(ChatColor.stripColor(onlineStats));
msg(ChatColor.stripColor(onlineUsers)); msg(ChatColor.stripColor(onlineUsers));
} } else
else
{ {
msg(onlineStats); msg(onlineStats);
msg(onlineUsers); msg(onlineUsers);

View File

@ -1,12 +1,11 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import io.papermc.lib.PaperLib; import io.papermc.lib.PaperLib;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.NON_OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "localspawn", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Teleport to the spawn point for the current world, instead of the Essentials spawn point.", usage = "/<command>", aliases = "worldspawn,gotospawn") @CommandParameters(description = "Teleport to the spawn point for the current world, instead of the Essentials spawn point.", usage = "/<command>", aliases = "worldspawn,gotospawn")
public class Command_localspawn extends FreedomCommand public class Command_localspawn extends FreedomCommand
{ {

View File

@ -1,16 +1,17 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Bukkit;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask; import org.bukkit.scheduler.BukkitTask;
@CommandPermissions(rank = Rank.SENIOR_ADMIN, source = SourceType.BOTH, blockHostConsole = true) @CommandPermissions(permission = "lockup", source = SourceType.BOTH, blockHostConsole = true)
@CommandParameters(description = "This is evil, and I never should have wrote it - blocks specified player's input.", usage = "/<command> <all | purge | <<partialname> on | off> [-q]>") @CommandParameters(description = "This is evil, and I never should have wrote it - blocks specified player's input.", usage = "/<command> <all | purge | <<partialname> on | off> [-q]>")
public class Command_lockup extends FreedomCommand public class Command_lockup extends FreedomCommand
{ {
@ -30,8 +31,7 @@ public class Command_lockup extends FreedomCommand
startLockup(player); startLockup(player);
} }
msgNew("Locked up all players."); msgNew("Locked up all players.");
} } else if (args[0].equalsIgnoreCase("purge"))
else if (args[0].equalsIgnoreCase("purge"))
{ {
FUtil.adminAction(sender.getName(), "Unlocking all players", true); FUtil.adminAction(sender.getName(), "Unlocking all players", true);
for (Player player : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
@ -40,13 +40,11 @@ public class Command_lockup extends FreedomCommand
} }
msgNew("Unlocked all players."); msgNew("Unlocked all players.");
} } else
else
{ {
return false; return false;
} }
} } else if (args.length == 2)
else if (args.length == 2)
{ {
if (args[1].equalsIgnoreCase("on")) if (args[1].equalsIgnoreCase("on"))
{ {
@ -64,8 +62,7 @@ public class Command_lockup extends FreedomCommand
} }
startLockup(player); startLockup(player);
msgNew("Locked up <player>.", Placeholder.unparsed("player", player.getName())); msgNew("Locked up <player>.", Placeholder.unparsed("player", player.getName()));
} } else if ("off".equals(args[1]))
else if ("off".equals(args[1]))
{ {
final Player player = getPlayer(args[0]); final Player player = getPlayer(args[0]);
@ -81,13 +78,11 @@ public class Command_lockup extends FreedomCommand
} }
cancelLockup(player); cancelLockup(player);
msgNew("Unlocked <player>.", Placeholder.unparsed("player", player.getName())); msgNew("Unlocked <player>.", Placeholder.unparsed("player", player.getName()));
} } else
else
{ {
return false; return false;
} }
} } else
else
{ {
return false; return false;
} }
@ -124,9 +119,8 @@ public class Command_lockup extends FreedomCommand
{ {
if (player.isOnline()) if (player.isOnline())
{ {
player.openInventory(player.getInventory()); player.openInventory(Bukkit.createInventory(null, 9, Component.text("You are locked up!"))); // TODO: Use MiniMessage instead of using Component.
} } else
else
{ {
cancelLockup(playerdata); cancelLockup(playerdata);
} }

View File

@ -1,15 +1,14 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.api.ShopItem; import me.totalfreedom.totalfreedommod.api.ShopItem;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "loginmessage", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Change your login message", usage = "/<command> [message]") @CommandParameters(description = "Change your login message", usage = "/<command> [message]")
public class Command_loginmessage extends FreedomCommand public class Command_loginmessage extends FreedomCommand
{ {
@ -28,7 +27,7 @@ public class Command_loginmessage extends FreedomCommand
return true; return true;
} }
checkPermission(Rank.ADMIN); checkPermission("tfm.loginmessage.custom");
String message = StringUtils.join(args, " "); String message = StringUtils.join(args, " ");
if (!message.contains("%rank%") && !message.contains("%coloredrank%")) if (!message.contains("%rank%") && !message.contains("%coloredrank%"))

View File

@ -1,20 +1,24 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.api.ShopItem; import me.totalfreedom.totalfreedommod.api.ShopItem;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "manageshop", source = SourceType.BOTH)
@CommandParameters(description = "Manage the shop", usage = "/<command> <coins: <add | set | remove> <amount> <player | all> | items: <give | take> <item> <player>", aliases = "ms") @CommandParameters(description = "Manage the shop", usage = "/<command> <coins: <add | set | remove> <amount> <player | all> | items: <give | take> <item> <player>", aliases = "ms")
public class Command_manageshop extends FreedomCommand public class Command_manageshop extends FreedomCommand
{ {
// These are here because SonarLint said "use a constant instead of duplicating this literal".
public static final String AMOUNT = "amount";
public static final String PLAYER = "player";
public static final String BALANCE = "balance";
@Override @Override
public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
@ -41,7 +45,7 @@ public class Command_manageshop extends FreedomCommand
} }
switch (args[1]) switch (args[1])
{ {
case "add": case "add" ->
{ {
try try
{ {
@ -57,19 +61,18 @@ public class Command_manageshop extends FreedomCommand
playerData.setCoins(playerData.getCoins() + amount); playerData.setCoins(playerData.getCoins() + amount);
plugin.pl.save(playerData); plugin.pl.save(playerData);
msgNew("<green>Successfully gave <amount> coins to <player>. Their new balance is <balance>.", msgNew("<green>Successfully gave <amount> coins to <player>. Their new balance is <balance>.",
Placeholder.unparsed("amount", String.valueOf(amount)), Placeholder.unparsed(AMOUNT, String.valueOf(amount)),
Placeholder.unparsed("player", playerData.getName()), Placeholder.unparsed(PLAYER, playerData.getName()),
Placeholder.unparsed("balance", String.valueOf(playerData.getCoins()))); Placeholder.unparsed(BALANCE, String.valueOf(playerData.getCoins())));
Player player = getPlayer(args[3]); Player player = getPlayer(args[3]);
if (player != null) if (player != null)
{ {
msgNew(player, "<green><player> gave you <amount> coins. Your new balance is <balance>.", msgNew(player, "<green><player> gave you <amount> coins. Your new balance is <balance>.",
Placeholder.unparsed("player", sender.getName()), Placeholder.unparsed(PLAYER, sender.getName()),
Placeholder.unparsed("amount", String.valueOf(amount)), Placeholder.unparsed(AMOUNT, String.valueOf(amount)),
Placeholder.unparsed("balance", String.valueOf(playerData.getCoins()))); Placeholder.unparsed(BALANCE, String.valueOf(playerData.getCoins())));
} }
} } else
else
{ {
for (Player player : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
@ -78,23 +81,22 @@ public class Command_manageshop extends FreedomCommand
plugin.pl.save(playerData); plugin.pl.save(playerData);
msgNew(player, "<green><player> gave you <amount> coins. Your new balance is <balance>.", msgNew(player, "<green><player> gave you <amount> coins. Your new balance is <balance>.",
Placeholder.unparsed("player", sender.getName()), Placeholder.unparsed(PLAYER, sender.getName()),
Placeholder.unparsed("amount", String.valueOf(amount)), Placeholder.unparsed(AMOUNT, String.valueOf(amount)),
Placeholder.unparsed("balance", String.valueOf(playerData.getCoins()))); Placeholder.unparsed(BALANCE, String.valueOf(playerData.getCoins())));
} }
msgNew("<green>Successfully gave <amount> coins to all online players.", msgNew("<green>Successfully gave <amount> coins to all online players.",
Placeholder.unparsed("amount", String.valueOf(amount))); Placeholder.unparsed(AMOUNT, String.valueOf(amount)));
} }
return true; return true;
} } catch (NumberFormatException ex)
catch (NumberFormatException ex)
{ {
msgNew("<red>Invalid number: <amount>", Placeholder.unparsed("amount", args[2])); msgNew("<red>Invalid number: <amount>", Placeholder.unparsed(AMOUNT, args[2]));
return true; return true;
} }
} }
case "remove": case "remove" ->
{ {
try try
{ {
@ -114,20 +116,19 @@ public class Command_manageshop extends FreedomCommand
} }
plugin.pl.save(playerData); plugin.pl.save(playerData);
msgNew("<green>Successfully took <amount> coins from <player>. Their new balance is <balance>.", msgNew("<green>Successfully took <amount> coins from <player>. Their new balance is <balance>.",
Placeholder.unparsed("amount", String.valueOf(amount)), Placeholder.unparsed(AMOUNT, String.valueOf(amount)),
Placeholder.unparsed("player", playerData.getName()), Placeholder.unparsed(PLAYER, playerData.getName()),
Placeholder.unparsed("balance", String.valueOf(playerData.getCoins()))); Placeholder.unparsed(BALANCE, String.valueOf(playerData.getCoins())));
Player player = getPlayer(args[3]); Player player = getPlayer(args[3]);
if (player != null) if (player != null)
{ {
msgNew(player, "<red><player> took <amount> coins from you. Your new balance is <balance>.", msgNew(player, "<red><player> took <amount> coins from you. Your new balance is <balance>.",
Placeholder.unparsed("player", sender.getName()), Placeholder.unparsed(PLAYER, sender.getName()),
Placeholder.unparsed("amount", String.valueOf(amount)), Placeholder.unparsed(AMOUNT, String.valueOf(amount)),
Placeholder.unparsed("balance", String.valueOf(playerData.getCoins()))); Placeholder.unparsed(BALANCE, String.valueOf(playerData.getCoins())));
} }
} } else
else
{ {
for (Player player : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
@ -140,23 +141,22 @@ public class Command_manageshop extends FreedomCommand
plugin.pl.save(playerData); plugin.pl.save(playerData);
msgNew(player, "<red><player> took <amount> coins from you. Your new balance is <balance>.", msgNew(player, "<red><player> took <amount> coins from you. Your new balance is <balance>.",
Placeholder.unparsed("player", sender.getName()), Placeholder.unparsed(PLAYER, sender.getName()),
Placeholder.unparsed("amount", String.valueOf(amount)), Placeholder.unparsed(AMOUNT, String.valueOf(amount)),
Placeholder.unparsed("balance", String.valueOf(playerData.getCoins()))); Placeholder.unparsed(BALANCE, String.valueOf(playerData.getCoins())));
} }
msgNew("<green>Successfully took <amount> coins from all online players.", msgNew("<green>Successfully took <amount> coins from all online players.",
Placeholder.unparsed("amount", String.valueOf(amount))); Placeholder.unparsed(AMOUNT, String.valueOf(amount)));
} }
return true; return true;
} } catch (NumberFormatException ex)
catch (NumberFormatException ex)
{ {
msgNew("<red>Invalid number: <amount>", Placeholder.unparsed("amount", args[2])); msgNew("<red>Invalid number: <amount>", Placeholder.unparsed(AMOUNT, args[2]));
return true; return true;
} }
} }
case "set": case "set" ->
{ {
try try
{ {
@ -171,31 +171,29 @@ public class Command_manageshop extends FreedomCommand
plugin.pl.save(playerData); plugin.pl.save(playerData);
msgNew("<green>Successfully set <player>'s coin balance to <amount>.", msgNew("<green>Successfully set <player>'s coin balance to <amount>.",
Placeholder.unparsed("player", playerData.getName()), Placeholder.unparsed(PLAYER, playerData.getName()),
Placeholder.unparsed("amount", String.valueOf(amount))); Placeholder.unparsed(AMOUNT, String.valueOf(amount)));
Player player = getPlayer(args[3]); Player player = getPlayer(args[3]);
if (player != null) if (player != null)
{ {
msgNew(player, "<green><player> set your coin balance to <amount>.", msgNew(player, "<green><player> set your coin balance to <amount>.",
Placeholder.unparsed("player", sender.getName()), Placeholder.unparsed(PLAYER, sender.getName()),
Placeholder.unparsed("amount", String.valueOf(amount))); Placeholder.unparsed(AMOUNT, String.valueOf(amount)));
} }
return true; return true;
} } catch (NumberFormatException ex)
catch (NumberFormatException ex)
{ {
msgNew("<red>Invalid number: <amount>", Placeholder.unparsed("amount", args[2])); msgNew("<red>Invalid number: <amount>", Placeholder.unparsed(AMOUNT, args[2]));
return true; return true;
} }
} }
default: default ->
{ {
return false; return false;
} }
} }
} } else if (args[0].equals("items"))
else if (args[0].equals("items"))
{ {
if (args[1].equals("list")) if (args[1].equals("list"))
{ {
@ -227,18 +225,17 @@ public class Command_manageshop extends FreedomCommand
plugin.pl.save(playerData); plugin.pl.save(playerData);
msgNew("<green>Successfully gave the <item> to <player>.", msgNew("<green>Successfully gave the <item> to <player>.",
Placeholder.unparsed("item", item.getName()), Placeholder.unparsed("item", item.getName()),
Placeholder.unparsed("player", playerData.getName())); Placeholder.unparsed(PLAYER, playerData.getName()));
Player player = getPlayer(args[3]); Player player = getPlayer(args[3]);
if (player != null) if (player != null)
{ {
msgNew(player, "<green><player> gave the <item> to you.", msgNew(player, "<green><player> gave the <item> to you.",
Placeholder.unparsed("item", item.getName()), Placeholder.unparsed("item", item.getName()),
Placeholder.unparsed("player", sender.getName())); Placeholder.unparsed(PLAYER, sender.getName()));
} }
return true; return true;
} } else if (args[1].equals("take"))
else if (args[1].equals("take"))
{ {
ShopItem item = ShopItem.findItem(args[2].toUpperCase()); ShopItem item = ShopItem.findItem(args[2].toUpperCase());
if (item == null) if (item == null)
@ -258,14 +255,14 @@ public class Command_manageshop extends FreedomCommand
msgNew("<green>Successfully took the <item> from <player>.", msgNew("<green>Successfully took the <item> from <player>.",
Placeholder.unparsed("item", item.getName()), Placeholder.unparsed("item", item.getName()),
Placeholder.unparsed("player", playerData.getName())); Placeholder.unparsed(PLAYER, playerData.getName()));
Player player = getPlayer(args[3]); Player player = getPlayer(args[3]);
if (player != null) if (player != null)
{ {
msgNew(player, "<red><player> took the <item> from you.", msgNew(player, "<red><player> took the <item> from you.",
Placeholder.unparsed("item", item.getName()), Placeholder.unparsed("item", item.getName()),
Placeholder.unparsed("player", sender.getName())); Placeholder.unparsed(PLAYER, sender.getName()));
} }
return true; return true;
} }

View File

@ -1,8 +1,6 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.List;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -10,7 +8,9 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH) import java.util.List;
@CommandPermissions(permission = "masterbuilderinfo", source = SourceType.BOTH)
@CommandParameters(description = "Information on how to apply for Master Builder.", usage = "/<command>", aliases = "mbi") @CommandParameters(description = "Information on how to apply for Master Builder.", usage = "/<command>", aliases = "mbi")
public class Command_masterbuilderinfo extends FreedomCommand public class Command_masterbuilderinfo extends FreedomCommand
{ {
@ -23,8 +23,7 @@ public class Command_masterbuilderinfo extends FreedomCommand
if (masterBuilderInfo.isEmpty()) if (masterBuilderInfo.isEmpty())
{ {
msg("The master builder information section of the config.yml file has not been configured.", ChatColor.RED); msg("The master builder information section of the config.yml file has not been configured.", ChatColor.RED);
} } else
else
{ {
msg(FUtil.colorize(StringUtils.join(masterBuilderInfo, "\n"))); msg(FUtil.colorize(StringUtils.join(masterBuilderInfo, "\n")));
} }

View File

@ -1,10 +1,6 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import io.papermc.lib.PaperLib; import io.papermc.lib.PaperLib;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.world.WorldTime; import me.totalfreedom.totalfreedommod.world.WorldTime;
import me.totalfreedom.totalfreedommod.world.WorldWeather; import me.totalfreedom.totalfreedommod.world.WorldWeather;
import org.bukkit.World; import org.bukkit.World;
@ -12,7 +8,11 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH) import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@CommandPermissions(permission = "masterbuilderworld", source = SourceType.BOTH)
@CommandParameters(description = "Allows for master builders to configure the time, the weather of the MasterBuilder, and allows for players to go to the MasterBuilderWorld.", @CommandParameters(description = "Allows for master builders to configure the time, the weather of the MasterBuilder, and allows for players to go to the MasterBuilderWorld.",
usage = "/<command> [time <morning | noon | evening | night> | weather <off | rain | storm>]", usage = "/<command> [time <morning | noon | evening | night> | weather <off | rain | storm>]",
aliases = "mbw,mbworld") aliases = "mbw,mbworld")
@ -27,14 +27,12 @@ public class Command_masterbuilderworld extends FreedomCommand
if (args.length == 0) if (args.length == 0)
{ {
commandMode = CommandMode.TELEPORT; commandMode = CommandMode.TELEPORT;
} } else if (args.length >= 2)
else if (args.length >= 2)
{ {
if ("time".equalsIgnoreCase(args[0])) if ("time".equalsIgnoreCase(args[0]))
{ {
commandMode = CommandMode.TIME; commandMode = CommandMode.TIME;
} } else if ("weather".equalsIgnoreCase(args[0]))
else if ("weather".equalsIgnoreCase(args[0]))
{ {
commandMode = CommandMode.WEATHER; commandMode = CommandMode.WEATHER;
} }
@ -60,8 +58,7 @@ public class Command_masterbuilderworld extends FreedomCommand
try try
{ {
masterBuilderWorld = plugin.wm.masterBuilderWorld.getWorld(); masterBuilderWorld = plugin.wm.masterBuilderWorld.getWorld();
} } catch (Exception ignored)
catch (Exception ignored)
{ {
} }
@ -69,8 +66,7 @@ public class Command_masterbuilderworld extends FreedomCommand
{ {
msg("Going to the main world."); msg("Going to the main world.");
PaperLib.teleportAsync(playerSender, server.getWorlds().get(0).getSpawnLocation()); PaperLib.teleportAsync(playerSender, server.getWorlds().get(0).getSpawnLocation());
} } else
else
{ {
msg("Going to the Master Builder world"); msg("Going to the Master Builder world");
plugin.wm.masterBuilderWorld.sendToWorld(playerSender); plugin.wm.masterBuilderWorld.sendToWorld(playerSender);
@ -89,13 +85,11 @@ public class Command_masterbuilderworld extends FreedomCommand
{ {
plugin.wm.masterBuilderWorld.setTimeOfDay(timeOfDay); plugin.wm.masterBuilderWorld.setTimeOfDay(timeOfDay);
msg("MasterBuilder world time set to: " + timeOfDay.name()); msg("MasterBuilder world time set to: " + timeOfDay.name());
} } else
else
{ {
msg("Invalid time of day. Can be: sunrise, noon, sunset, midnight"); msg("Invalid time of day. Can be: sunrise, noon, sunset, midnight");
} }
} } else
else
{ {
return false; return false;
} }
@ -113,13 +107,11 @@ public class Command_masterbuilderworld extends FreedomCommand
{ {
plugin.wm.masterBuilderWorld.setWeatherMode(weatherMode); plugin.wm.masterBuilderWorld.setWeatherMode(weatherMode);
msg("MasterBuilder world weather set to: " + weatherMode.name()); msg("MasterBuilder world weather set to: " + weatherMode.name());
} } else
else
{ {
msg("Invalid weather mode. Can be: off, rain, storm"); msg("Invalid weather mode. Can be: off, rain, storm");
} }
} } else
else
{ {
return false; return false;
} }
@ -131,8 +123,7 @@ public class Command_masterbuilderworld extends FreedomCommand
return false; return false;
} }
} }
} } catch (PermissionDeniedException ex)
catch (PermissionDeniedException ex)
{ {
if (ex.getMessage().isEmpty()) if (ex.getMessage().isEmpty())
{ {
@ -155,14 +146,12 @@ public class Command_masterbuilderworld extends FreedomCommand
if (args.length == 1) if (args.length == 1)
{ {
return Arrays.asList("time", "weather"); return Arrays.asList("time", "weather");
} } else if (args.length == 2)
else if (args.length == 2)
{ {
if (args[0].equals("time")) if (args[0].equals("time"))
{ {
return Arrays.asList("morning", "noon", "evening", "night"); return Arrays.asList("morning", "noon", "evening", "night");
} } else if (args[0].equals("weather"))
else if (args[0].equals("weather"))
{ {
return Arrays.asList("off", "rain", "storm"); return Arrays.asList("off", "rain", "storm");
} }

View File

@ -1,10 +1,6 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -12,7 +8,11 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH) import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@CommandPermissions(permission = "mbconfig", source = SourceType.BOTH)
@CommandParameters(description = "List, add, or remove master builders. Master builders can also clear their own IPs.", usage = "/<command> <list | clearip <ip> | clearips | <<add | remove> <username>>>") @CommandParameters(description = "List, add, or remove master builders. Master builders can also clear their own IPs.", usage = "/<command> <list | clearip <ip> | clearips | <<add | remove> <username>>>")
public class Command_mbconfig extends FreedomCommand public class Command_mbconfig extends FreedomCommand
{ {
@ -125,8 +125,7 @@ public class Command_mbconfig extends FreedomCommand
{ {
plugin.rm.updateDisplay(player); plugin.rm.updateDisplay(player);
} }
} } else
else
{ {
msg("That player is already on the Master Builder list."); msg("That player is already on the Master Builder list.");
} }
@ -175,18 +174,15 @@ public class Command_mbconfig extends FreedomCommand
if (args.length == 1) if (args.length == 1)
{ {
return Arrays.asList("add", "remove", "list", "clearips", "clearip"); return Arrays.asList("add", "remove", "list", "clearips", "clearip");
} } else if (args.length == 2)
else if (args.length == 2)
{ {
if (args[0].equalsIgnoreCase("add")) if (args[0].equalsIgnoreCase("add"))
{ {
return FUtil.getPlayerList(); return FUtil.getPlayerList();
} } else if (args[0].equalsIgnoreCase("remove"))
else if (args[0].equalsIgnoreCase("remove"))
{ {
return plugin.pl.getMasterBuilderNames(); return plugin.pl.getMasterBuilderNames();
} } else if (args[0].equalsIgnoreCase("clearip"))
else if (args[0].equalsIgnoreCase("clearip"))
{ {
PlayerData data = plugin.pl.getData(sender.getName()); PlayerData data = plugin.pl.getData(sender.getName());
if (data.isMasterBuilder()) if (data.isMasterBuilder())

View File

@ -2,13 +2,12 @@ package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.GameRuleHandler; import me.totalfreedom.totalfreedommod.GameRuleHandler;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "moblimiter", source = SourceType.BOTH)
@CommandParameters(description = "Control mob limiting parameters.", usage = "/<command> <on | off | setmax <count> | dragon | giant | ghast | slime>") @CommandParameters(description = "Control mob limiting parameters.", usage = "/<command> <on | off | setmax <count> | dragon | giant | ghast | slime>")
public class Command_moblimiter extends FreedomCommand public class Command_moblimiter extends FreedomCommand
{ {
@ -24,10 +23,14 @@ public class Command_moblimiter extends FreedomCommand
{ {
case "on" -> ConfigEntry.MOB_LIMITER_ENABLED.setBoolean(true); case "on" -> ConfigEntry.MOB_LIMITER_ENABLED.setBoolean(true);
case "off" -> ConfigEntry.MOB_LIMITER_ENABLED.setBoolean(false); case "off" -> ConfigEntry.MOB_LIMITER_ENABLED.setBoolean(false);
case "dragon" -> ConfigEntry.MOB_LIMITER_DISABLE_DRAGON.setBoolean(!ConfigEntry.MOB_LIMITER_DISABLE_DRAGON.getBoolean()); case "dragon" ->
case "giant" -> ConfigEntry.MOB_LIMITER_DISABLE_GIANT.setBoolean(!ConfigEntry.MOB_LIMITER_DISABLE_GIANT.getBoolean()); ConfigEntry.MOB_LIMITER_DISABLE_DRAGON.setBoolean(!ConfigEntry.MOB_LIMITER_DISABLE_DRAGON.getBoolean());
case "slime" -> ConfigEntry.MOB_LIMITER_DISABLE_SLIME.setBoolean(!ConfigEntry.MOB_LIMITER_DISABLE_SLIME.getBoolean()); case "giant" ->
case "ghast" -> ConfigEntry.MOB_LIMITER_DISABLE_GHAST.setBoolean(!ConfigEntry.MOB_LIMITER_DISABLE_GHAST.getBoolean()); ConfigEntry.MOB_LIMITER_DISABLE_GIANT.setBoolean(!ConfigEntry.MOB_LIMITER_DISABLE_GIANT.getBoolean());
case "slime" ->
ConfigEntry.MOB_LIMITER_DISABLE_SLIME.setBoolean(!ConfigEntry.MOB_LIMITER_DISABLE_SLIME.getBoolean());
case "ghast" ->
ConfigEntry.MOB_LIMITER_DISABLE_GHAST.setBoolean(!ConfigEntry.MOB_LIMITER_DISABLE_GHAST.getBoolean());
case "setmax" -> case "setmax" ->
{ {
if (args.length < 2) if (args.length < 2)
@ -38,8 +41,7 @@ public class Command_moblimiter extends FreedomCommand
try try
{ {
ConfigEntry.MOB_LIMITER_MAX.setInteger(Math.max(0, Math.min(2000, Integer.parseInt(args[1])))); ConfigEntry.MOB_LIMITER_MAX.setInteger(Math.max(0, Math.min(2000, Integer.parseInt(args[1]))));
} } catch (Exception ex)
catch (Exception ex)
{ {
msg("Invalid number: " + args[1], ChatColor.RED); msg("Invalid number: " + args[1], ChatColor.RED);
return true; return true;
@ -59,8 +61,7 @@ public class Command_moblimiter extends FreedomCommand
msg("Giant: " + (ConfigEntry.MOB_LIMITER_DISABLE_GIANT.getBoolean() ? "disabled" : "enabled") + "."); msg("Giant: " + (ConfigEntry.MOB_LIMITER_DISABLE_GIANT.getBoolean() ? "disabled" : "enabled") + ".");
msg("Slime: " + (ConfigEntry.MOB_LIMITER_DISABLE_SLIME.getBoolean() ? "disabled" : "enabled") + "."); msg("Slime: " + (ConfigEntry.MOB_LIMITER_DISABLE_SLIME.getBoolean() ? "disabled" : "enabled") + ".");
msg("Ghast: " + (ConfigEntry.MOB_LIMITER_DISABLE_GHAST.getBoolean() ? "disabled" : "enabled") + "."); msg("Ghast: " + (ConfigEntry.MOB_LIMITER_DISABLE_GHAST.getBoolean() ? "disabled" : "enabled") + ".");
} } else
else
{ {
msg("Moblimiter is disabled. No mob restrictions are in effect."); msg("Moblimiter is disabled. No mob restrictions are in effect.");
} }

View File

@ -1,8 +1,5 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.Collections;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import me.totalfreedom.totalfreedommod.util.Groups; import me.totalfreedom.totalfreedommod.util.Groups;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -11,7 +8,11 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) import java.util.Collections;
import java.util.List;
@CommandPermissions(permission = "mobpurge", source = SourceType.BOTH)
@CommandParameters(description = "Purge all mobs in all worlds.", usage = "/<command> [name]", aliases = "mp") @CommandParameters(description = "Purge all mobs in all worlds.", usage = "/<command> [name]", aliases = "mp")
public class Command_mobpurge extends FreedomCommand public class Command_mobpurge extends FreedomCommand
{ {
@ -25,8 +26,7 @@ public class Command_mobpurge extends FreedomCommand
try try
{ {
type = EntityType.valueOf(args[0].toUpperCase()); type = EntityType.valueOf(args[0].toUpperCase());
} } catch (Exception e)
catch (Exception e)
{ {
msg(args[0] + " is not a valid mob type.", ChatColor.RED); msg(args[0] + " is not a valid mob type.", ChatColor.RED);
return true; return true;

View File

@ -1,9 +1,7 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.Objects;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@ -11,7 +9,9 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) import java.util.Objects;
@CommandPermissions(permission = "mp44", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Modern weaponry, FTW. Use 'draw' to start firing, 'sling' to stop firing.", usage = "/<command> <draw | sling>") @CommandParameters(description = "Modern weaponry, FTW. Use 'draw' to start firing, 'sling' to stop firing.", usage = "/<command> <draw | sling>")
public class Command_mp44 extends FreedomCommand public class Command_mp44 extends FreedomCommand
{ {
@ -40,8 +40,7 @@ public class Command_mp44 extends FreedomCommand
msg("Type /mp44 sling to disable. -by Madgeek1450", ChatColor.GREEN); msg("Type /mp44 sling to disable. -by Madgeek1450", ChatColor.GREEN);
Objects.requireNonNull(playerSender.getEquipment()).setItemInMainHand(new ItemStack(Material.GUNPOWDER, 1)); Objects.requireNonNull(playerSender.getEquipment()).setItemInMainHand(new ItemStack(Material.GUNPOWDER, 1));
} } else
else
{ {
playerdata.disarmMP44(); playerdata.disarmMP44();

View File

@ -1,19 +1,18 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.*;
import me.totalfreedom.totalfreedommod.punishments.Punishment; import me.totalfreedom.totalfreedommod.punishments.Punishment;
import me.totalfreedom.totalfreedommod.punishments.PunishmentType; import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) import java.util.*;
@CommandPermissions(permission = "tfm.mute", source = SourceType.BOTH)
@CommandParameters(description = "Mutes a player with brute force.", usage = "/<command> <[-q] <player> [reason] | list | purge | all>", aliases = "stfu") @CommandParameters(description = "Mutes a player with brute force.", usage = "/<command> <[-q] <player> [reason] | list | purge | all>", aliases = "stfu")
public class Command_mute extends FreedomCommand public class Command_mute extends FreedomCommand
{ {
@ -34,8 +33,7 @@ public class Command_mute extends FreedomCommand
if (muted.isEmpty()) if (muted.isEmpty())
{ {
msgNew("Nobody is currently muted."); msgNew("Nobody is currently muted.");
} } else
else
{ {
msgNew("Muted players: <players>", Placeholder.unparsed("players", FUtil.listToString(muted))); msgNew("Muted players: <players>", Placeholder.unparsed("players", FUtil.listToString(muted)));
} }
@ -93,8 +91,7 @@ public class Command_mute extends FreedomCommand
{ {
msgNew("<red><player> is an admin, and as such can't be muted.", Placeholder.unparsed("player", player.getName())); msgNew("<red><player> is an admin, and as such can't be muted.", Placeholder.unparsed("player", player.getName()));
return; return;
} } else if (plugin.pl.getPlayer(player).isMuted())
else if (plugin.pl.getPlayer(player).isMuted())
{ {
msgNew("<red><player> is already muted.", Placeholder.unparsed("player", player.getName())); msgNew("<red><player> is already muted.", Placeholder.unparsed("player", player.getName()));
return; return;
@ -122,8 +119,7 @@ public class Command_mute extends FreedomCommand
if (quiet) if (quiet)
{ {
msgNew("Muted <player>.", Placeholder.unparsed("player", player.getName())); msgNew("Muted <player>.", Placeholder.unparsed("player", player.getName()));
} } else
else
{ {
msgNew("Quietly muted <player>.", Placeholder.unparsed("player", player.getName())); msgNew("Quietly muted <player>.", Placeholder.unparsed("player", player.getName()));
} }

View File

@ -13,7 +13,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "notes", source = SourceType.BOTH)
@CommandParameters(description = "Manage notes for a player", usage = "/<command> <name> <list | add <note> | remove <id> | clear>") @CommandParameters(description = "Manage notes for a player", usage = "/<command> <name> <list | add <note> | remove <id> | clear>")
public class Command_notes extends FreedomCommand public class Command_notes extends FreedomCommand
{ {

View File

@ -1,12 +1,14 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.luckperms.api.model.user.User;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.NON_OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "opme", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "OPs the command sender.", usage = "/<command>") @CommandParameters(description = "OPs the command sender.", usage = "/<command>")
public class Command_opme extends FreedomCommand public class Command_opme extends FreedomCommand
{ {
@ -15,7 +17,8 @@ public class Command_opme extends FreedomCommand
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
FUtil.adminAction(sender.getName(), "Opping " + sender.getName(), false); FUtil.adminAction(sender.getName(), "Opping " + sender.getName(), false);
sender.setOp(true); User user = GroupProvider.getUser(playerSender);
user.setPrimaryGroup(GroupProvider.OP.getGroup().getLuckPermsGroup().getName());
msg(YOU_ARE_OP); msg(YOU_ARE_OP);
plugin.rm.updateDisplay(playerSender); plugin.rm.updateDisplay(playerSender);
return true; return true;

View File

@ -1,5 +1,9 @@
package me.totalfreedom.totalfreedommod.rank; package me.totalfreedom.totalfreedommod.rank;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.JoinConfiguration;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
public interface Displayable public interface Displayable
@ -21,7 +25,7 @@ public interface Displayable
String getColoredName(); String getColoredName();
String getColoredTag(); Component getColoredTag();
String getColoredLoginMessage(); String getColoredLoginMessage();
@ -29,4 +33,15 @@ public interface Displayable
boolean hasDefaultLoginMessage(); boolean hasDefaultLoginMessage();
default Component generateColoredTag(String colorAndTag)
{
Component open = Component.text("[").color(NamedTextColor.DARK_GRAY);
Component close = Component.text("]").color(NamedTextColor.DARK_GRAY);
Component tagComponent = LegacyComponentSerializer.legacyAmpersand().deserialize(colorAndTag);
return Component.join(JoinConfiguration
.builder()
.separator(Component.text(" "))
.build(), open, tagComponent, close);
}
} }

View File

@ -1,12 +1,17 @@
package me.totalfreedom.totalfreedommod.rank; package me.totalfreedom.totalfreedommod.rank;
import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import net.kyori.adventure.text.Component;
import net.luckperms.api.model.data.DataType;
import net.luckperms.api.model.group.Group; import net.luckperms.api.model.group.Group;
import net.luckperms.api.node.types.PrefixNode;
import net.luckperms.api.node.types.WeightNode;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Locale; import java.util.Locale;
import java.util.concurrent.CompletableFuture;
public class DisplayableGroup implements Displayable public class DisplayableGroup implements Displayable
{ {
@ -17,10 +22,11 @@ public class DisplayableGroup implements Displayable
private final String abbr; private final String abbr;
private final String plural; private final String plural;
private final String article; private final String article;
private final int weight;
private final String tag; private final String tag;
private final String coloredTag; private final Component coloredTag;
private final ChatColor color; private final ChatColor color;
@ -33,6 +39,7 @@ public class DisplayableGroup implements Displayable
public DisplayableGroup(String group, public DisplayableGroup(String group,
String plural, String plural,
String tag, String tag,
int weight,
ChatColor color, ChatColor color,
org.bukkit.ChatColor teamColor, org.bukkit.ChatColor teamColor,
boolean hasTeam, boolean hasTeam,
@ -41,7 +48,22 @@ public class DisplayableGroup implements Displayable
Group matched = TotalFreedomMod.getPlugin().lpb.getAPI().getGroupManager().getGroup(group); Group matched = TotalFreedomMod.getPlugin().lpb.getAPI().getGroupManager().getGroup(group);
if (matched == null) { if (matched == null) {
throw new IllegalArgumentException("Group " + group + " does not exist!"); CompletableFuture<Group> cfg = TotalFreedomMod.getPlugin()
.lpb
.getAPI()
.getGroupManager()
.createAndLoadGroup(group);
cfg.thenAcceptAsync(g -> {
WeightNode weightNode = WeightNode.builder(weight).build();
PrefixNode prefixNode = PrefixNode.builder().prefix(ChatColor.DARK_GRAY + "[" + color + tag + ChatColor.DARK_GRAY + "]" + getColor()).build();
g.getData(DataType.NORMAL).add(prefixNode);
g.getData(DataType.NORMAL).add(weightNode);
}).join(); // Block until the group is created and loaded.
matched = TotalFreedomMod.getPlugin().lpb.getAPI().getGroupManager().getGroup(group);
if (matched == null) throw new IllegalArgumentException("Group " + group + " does not exist and could not be created.");
} }
this.group = matched; this.group = matched;
@ -49,11 +71,12 @@ public class DisplayableGroup implements Displayable
this.plural = plural; this.plural = plural;
this.article = StringUtils.startsWithAny(this.name.toLowerCase(Locale.ROOT), new String[]{"a", "e", "i", "o", "u"}) ? "an" : "a"; this.article = StringUtils.startsWithAny(this.name.toLowerCase(Locale.ROOT), new String[]{"a", "e", "i", "o", "u"}) ? "an" : "a";
this.abbr = tag; this.abbr = tag;
this.weight = weight;
this.tag = "[" + tag + "]"; this.tag = "[" + tag + "]";
this.color = color; this.color = color;
this.teamColor = teamColor; this.teamColor = teamColor;
this.hasTeam = hasTeam; this.hasTeam = hasTeam;
this.coloredTag = ChatColor.DARK_GRAY + "[" + getColor() + getTag() + ChatColor.DARK_GRAY + "]" + getColor(); this.coloredTag = generateColoredTag(color + tag);
this.hasDefaultLoginMessage = hasDefaultLoginMessage; this.hasDefaultLoginMessage = hasDefaultLoginMessage;
} }
@ -116,7 +139,7 @@ public class DisplayableGroup implements Displayable
} }
@Override @Override
public String getColoredTag() public Component getColoredTag()
{ {
return coloredTag; return coloredTag;
} }

View File

@ -3,18 +3,18 @@ package me.totalfreedom.totalfreedommod.rank;
import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import net.luckperms.api.model.user.User; import net.luckperms.api.model.user.User;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.UUID; import java.util.Set;
@FunctionalInterface @FunctionalInterface
public interface GroupProvider<T extends DisplayableGroup> public interface GroupProvider<T extends DisplayableGroup>
{ {
GroupProvider<DisplayableGroup> NON_OP = () -> new DisplayableGroup("non_op", "Non-Ops", "", ChatColor.WHITE, null, false, false); GroupProvider<DisplayableGroup> NON_OP = () -> new DisplayableGroup("non_op", "Non-Ops", "", 0, ChatColor.WHITE, null, false, false);
GroupProvider<DisplayableGroup> OP = () -> new DisplayableGroup("op", "Operators", "Op", ChatColor.GREEN, null, false, false); GroupProvider<DisplayableGroup> OP = () -> new DisplayableGroup("op", "Operators", "Op", 1, ChatColor.GREEN, null, false, false);
GroupProvider<DisplayableGroup> ADMIN = () -> new DisplayableGroup("admin", "Administrators", "Admin", ChatColor.DARK_GREEN, org.bukkit.ChatColor.DARK_GREEN, true, true); GroupProvider<DisplayableGroup> MASTER_BUILDER = () -> new DisplayableGroup("builder", "Master Builders", "MB", 2, ChatColor.DARK_AQUA, org.bukkit.ChatColor.DARK_AQUA, true, true);
GroupProvider<DisplayableGroup> SENIOR_ADMIN = () -> new DisplayableGroup("senior", "Senior Administrators", "SrA", ChatColor.GOLD, org.bukkit.ChatColor.GOLD, true, true); GroupProvider<DisplayableGroup> ADMIN = () -> new DisplayableGroup("admin", "Administrators", "Admin", 3, ChatColor.DARK_GREEN, org.bukkit.ChatColor.DARK_GREEN, true, true);
GroupProvider<DisplayableGroup> SENIOR_ADMIN = () -> new DisplayableGroup("senior", "Senior Administrators", "SrA", 4, ChatColor.GOLD, org.bukkit.ChatColor.GOLD, true, true);
static User getUser(Player player) static User getUser(Player player)
{ {
@ -24,15 +24,21 @@ public interface GroupProvider<T extends DisplayableGroup>
.getUser(player); .getUser(player);
} }
T getGroup(); static GroupProvider<DisplayableGroup> fromArgument(String arg)
{
static GroupProvider<DisplayableGroup> fromArgument(String arg) {
return switch (arg.toLowerCase()) return switch (arg.toLowerCase())
{ {
case "op" -> OP; case "op" -> OP;
case "builder" -> MASTER_BUILDER;
case "admin" -> ADMIN; case "admin" -> ADMIN;
case "senior" -> SENIOR_ADMIN; case "senior" -> SENIOR_ADMIN;
default -> NON_OP; default -> NON_OP;
}; };
} }
static Set<GroupProvider<DisplayableGroup>> providerSet() {
return Set.of(NON_OP, OP, MASTER_BUILDER, ADMIN, SENIOR_ADMIN);
}
T getGroup();
} }

View File

@ -6,7 +6,10 @@ import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.luckperms.api.model.data.DataType;
import net.luckperms.api.model.group.Group; import net.luckperms.api.model.group.Group;
import net.luckperms.api.node.types.PrefixNode;
import net.luckperms.api.node.types.WeightNode;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -18,18 +21,23 @@ import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.scoreboard.Scoreboard; import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team; import org.bukkit.scoreboard.Team;
import java.util.Objects; import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class RankManager extends FreedomService public class RankManager extends FreedomService
{ {
@Override @Override
public void onStart() public void onStart()
{ {
// We don't need to do anything here.
} }
@Override @Override
public void onStop() public void onStop()
{ {
// We don't need to do anything here.
} }
public Displayable getDisplay(CommandSender sender) public Displayable getDisplay(CommandSender sender)

View File

@ -1,5 +1,9 @@
package me.totalfreedom.totalfreedommod.rank; package me.totalfreedom.totalfreedommod.rank;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.JoinConfiguration;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
public enum Title implements Displayable public enum Title implements Displayable
@ -21,7 +25,7 @@ public enum Title implements Displayable
private final String tag; private final String tag;
private final String coloredTag; private final Component coloredTag;
private final ChatColor color; private final ChatColor color;
@ -35,7 +39,7 @@ public enum Title implements Displayable
this.article = article; this.article = article;
this.name = name; this.name = name;
this.plural = plural; this.plural = plural;
this.coloredTag = ChatColor.DARK_GRAY + "[" + color + tag + ChatColor.DARK_GRAY + "]" + color; this.coloredTag = generateColoredTag(color + tag);
this.abbr = tag; this.abbr = tag;
this.tag = "[" + tag + "]"; this.tag = "[" + tag + "]";
this.color = color; this.color = color;
@ -99,7 +103,7 @@ public enum Title implements Displayable
} }
@Override @Override
public String getColoredTag() public Component getColoredTag()
{ {
return coloredTag; return coloredTag;
} }

View File

@ -9,6 +9,7 @@ import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.admin.Admin; import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.rank.Title; import me.totalfreedom.totalfreedommod.rank.Title;
import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FLog;
@ -52,15 +53,15 @@ public class TFM_Bridge
} }
else if (role.getId().equals(SnowflakeEntry.SENIOR_ADMIN_ROLE_ID.getSnowflake())) else if (role.getId().equals(SnowflakeEntry.SENIOR_ADMIN_ROLE_ID.getSnowflake()))
{ {
return Rank.SENIOR_ADMIN.getColoredTag(); return GroupProvider.SENIOR_ADMIN.getGroup().getColoredTag().toString();
} }
else if (role.getId().equals(SnowflakeEntry.ADMIN_ROLE_ID.getSnowflake())) else if (role.getId().equals(SnowflakeEntry.ADMIN_ROLE_ID.getSnowflake()))
{ {
return Rank.ADMIN.getColoredTag(); return GroupProvider.ADMIN.getGroup().getColoredTag().toString();
} }
else if (role.getId().equals(SnowflakeEntry.MASTERBUILDER_ROLE_ID.getSnowflake())) else if (role.getId().equals(SnowflakeEntry.MASTERBUILDER_ROLE_ID.getSnowflake()))
{ {
return Title.MASTER_BUILDER.getColoredTag(); return GroupProvider.MASTER_BUILDER.getGroup().getColoredTag().toString());
} }
else else
{ {