LuckPerms Integration (2/2)

This commit is contained in:
Paul Reilly 2023-03-30 15:26:35 -05:00
parent cc244fc4f7
commit 8a58782d99
87 changed files with 528 additions and 1438 deletions

View File

@ -614,7 +614,7 @@ public class FrontDoor extends FreedomService
{
for (Player player : Bukkit.getOnlinePlayers())
{
plugin.pl.getPlayer(player).setTag("[" + ChatColor.BLUE + "Total" + ChatColor.GOLD + "Freedom" + ChatColor.WHITE + "]");
plugin.pl.getPlayer(player).setTag(FUtil.miniMessage("[" + ChatColor.BLUE + "Total" + ChatColor.GOLD + "Freedom" + ChatColor.WHITE + "]"));
}
break;
}

View File

@ -15,6 +15,7 @@ import me.totalfreedom.totalfreedommod.util.FConverter;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FSync;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.Location;
@ -245,10 +246,10 @@ public class LoginProcess extends FreedomService
if (!plugin.al.isAdmin(player))
{
String tag = playerData.getTag();
Component tag = playerData.getTag();
if (tag != null)
{
fPlayer.setTag(FUtil.colorize(tag));
fPlayer.setTag(tag);
}
int noteCount = playerData.getNotes().size();

View File

@ -15,8 +15,6 @@ import me.totalfreedom.totalfreedommod.config.MainConfig;
import me.totalfreedom.totalfreedommod.freeze.Freezer;
import me.totalfreedom.totalfreedommod.fun.*;
import me.totalfreedom.totalfreedommod.httpd.HTTPDaemon;
import me.totalfreedom.totalfreedommod.permissions.PermissionConfig;
import me.totalfreedom.totalfreedommod.permissions.PermissionManager;
import me.totalfreedom.totalfreedommod.player.PlayerList;
import me.totalfreedom.totalfreedommod.punishments.PunishmentList;
import me.totalfreedom.totalfreedommod.rank.RankManager;
@ -49,7 +47,6 @@ public class TotalFreedomMod extends JavaPlugin
private static TotalFreedomMod plugin;
//
public MainConfig config;
public PermissionConfig permissions;
//
// Service Handler
public FreedomServiceHandler fsh;
@ -78,7 +75,6 @@ public class TotalFreedomMod extends JavaPlugin
public PunishmentList pul;
public BanManager bm;
public IndefiniteBanList im;
public PermissionManager pem;
public GameRuleHandler gr;
public CommandSpy cs;
public Cager ca;
@ -171,9 +167,6 @@ public class TotalFreedomMod extends JavaPlugin
BackupManager backups = new BackupManager();
backups.createAllBackups();
permissions = new PermissionConfig();
permissions.load();
mv = new MovementValidator();
sp = new ServerPing();
@ -305,7 +298,6 @@ public class TotalFreedomMod extends JavaPlugin
pul = new PunishmentList();
bm = new BanManager();
im = new IndefiniteBanList();
pem = new PermissionManager();
gr = new GameRuleHandler();
ew = new EntityWiper();
vh = new VanishHandler();

View File

@ -2,20 +2,20 @@ package me.totalfreedom.totalfreedommod.admin;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.concurrent.TimeUnit;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class AdminList extends FreedomService
{
@ -48,19 +48,9 @@ public class AdminList extends FreedomService
ResultSet adminSet = plugin.sql.getAdminList();
while (adminSet.next())
{
try
{
Admin admin = new Admin(adminSet);
allAdmins.add(admin);
}
catch (Throwable ex)
{
FLog.warning("An error occurred whilst reading the admin entry at row #" + adminSet.getRow());
FLog.warning(ex);
}
tryAddAdmin(adminSet);
}
}
catch (SQLException e)
} catch (SQLException e)
{
FLog.severe("Failed to load admin list: " + e.getMessage());
}
@ -69,22 +59,24 @@ public class AdminList extends FreedomService
FLog.info("Loaded " + allAdmins.size() + " admins (" + uuidTable.size() + " active, " + ipTable.size() + " IPs)");
}
private void tryAddAdmin(ResultSet adminSet) throws SQLException
{
try
{
Admin admin = new Admin(adminSet);
allAdmins.add(admin);
} catch (Throwable ex)
{
FLog.warning("An error occurred whilst reading the admin entry at row #" + adminSet.getRow());
FLog.warning(ex);
}
}
public void messageAllAdmins(Component message)
{
server.getOnlinePlayers().stream().filter(this::isAdmin).forEach(player -> player.sendMessage(message));
}
public void messageAllAdmins(String message)
{
for (Player player : server.getOnlinePlayers())
{
if (isAdmin(player))
{
player.sendMessage(message);
}
}
}
public void potionSpyMessage(String message)
{
for (Player player : server.getOnlinePlayers())
@ -109,12 +101,18 @@ public class AdminList extends FreedomService
return true;
}
Admin admin = getAdmin((Player)sender);
Admin admin = getAdmin((Player) sender);
return admin != null && admin.isActive();
}
// Cast to OfflinePlayer
public boolean isAdmin(Player player)
{
return isAdmin((OfflinePlayer) player);
}
public boolean isAdmin(OfflinePlayer player)
{
if (player == null)
{
@ -141,25 +139,17 @@ public class AdminList extends FreedomService
public Admin getAdmin(CommandSender sender)
{
if (sender instanceof Player)
if (sender instanceof Player player)
{
return getAdmin((Player)sender);
return getAdmin(player);
}
return getEntryByName(sender.getName());
}
public Admin getAdmin(Player player)
public Admin getAdmin(OfflinePlayer player)
{
final String ip = FUtil.getIp(player);
final Admin entry = getEntryByUuid(player.getUniqueId());
if (entry != null && !entry.getIps().contains(ip))
{
entry.addIp(ip);
}
return entry;
return getEntryByUuid(player.getUniqueId());
}
public Admin getEntryByUuid(UUID uuid)
@ -177,6 +167,12 @@ public class AdminList extends FreedomService
return ipTable.get(ip);
}
// To cast against OfflinePlayer
public Admin getAdmin(Player player)
{
return getAdmin((OfflinePlayer) player);
}
public void updateLastLogin(Player player)
{
final Admin admin = getAdmin(player);
@ -189,12 +185,12 @@ public class AdminList extends FreedomService
save(admin);
}
public boolean addAdmin(Admin admin)
public void addAdmin(Admin admin)
{
if (!admin.isValid())
{
FLog.warning("Could not add admin: " + admin.getName() + ". Admin is missing details!");
return false;
return;
}
// Store admin, update views
@ -203,18 +199,13 @@ public class AdminList extends FreedomService
// Save admin
plugin.sql.addAdmin(admin);
return true;
}
public boolean removeAdmin(Admin admin)
{
if (admin.getRank().isAtLeast(Rank.ADMIN))
if (admin.getRank().isAtLeast(GroupProvider.ADMIN.getGroup()) && (plugin.btb != null))
{
if (plugin.btb != null)
{
plugin.btb.killTelnetSessions(admin.getName());
}
plugin.btb.killTelnetSessions(admin.getName());
}
// Remove admin, update views
@ -275,13 +266,13 @@ public class AdminList extends FreedomService
ResultSet currentSave = plugin.sql.getAdminByUuid(admin.getUuid());
for (Map.Entry<String, Object> entry : admin.toSQLStorable().entrySet())
{
Object storedValue = plugin.sql.getValue(currentSave, entry.getKey(), entry.getValue()); if (storedValue != null && !storedValue.equals(entry.getValue()) || storedValue == null && entry.getValue() != null || entry.getValue() == null)
Object storedValue = plugin.sql.getValue(currentSave, entry.getKey(), entry.getValue());
if (storedValue != null && !storedValue.equals(entry.getValue()) || storedValue == null && entry.getValue() != null || entry.getValue() == null)
{
plugin.sql.setAdminValue(admin, entry.getKey(), entry.getValue());
}
}
}
catch (SQLException e)
} catch (SQLException e)
{
FLog.severe("Failed to save admin: " + e.getMessage());
}
@ -292,20 +283,20 @@ public class AdminList extends FreedomService
allAdmins.stream()
.filter(admin -> admin.isActive() && !admin.getRank().isAtLeast(GroupProvider.SENIOR_ADMIN.getGroup()))
.forEach(admin ->
{
final Date lastLogin = admin.getLastLogin();
final long lastLoginHours = TimeUnit.HOURS.convert(new Date().getTime() - lastLogin.getTime(), TimeUnit.MILLISECONDS);
if (lastLoginHours < ConfigEntry.ADMINLIST_CLEAN_THESHOLD_HOURS.getInteger())
{
return;
}
if (verbose)
{
FUtil.adminAction("TotalFreedomMod", "Deactivating admin " + admin.getName() + ", inactive for " + lastLoginHours + " hours", true);
}
admin.setActive(false);
save(admin);
});
{
final Date lastLogin = admin.getLastLogin();
final long lastLoginHours = TimeUnit.HOURS.convert(new Date().getTime() - lastLogin.getTime(), TimeUnit.MILLISECONDS);
if (lastLoginHours < ConfigEntry.ADMINLIST_CLEAN_THESHOLD_HOURS.getInteger())
{
return;
}
if (verbose)
{
FUtil.adminAction("TotalFreedomMod", "Deactivating admin " + admin.getName() + ", inactive for " + lastLoginHours + " hours", true);
}
admin.setActive(false);
save(admin);
});
updateTables();
}

View File

@ -2,7 +2,7 @@ package me.totalfreedom.totalfreedommod.blocking.command;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import org.bukkit.command.CommandSender;
public enum CommandBlockerRank
@ -25,7 +25,7 @@ public enum CommandBlockerRank
Admin admin = TotalFreedomMod.getPlugin().al.getAdmin(sender);
if (admin != null)
{
if (admin.getRank() == Rank.SENIOR_ADMIN)
if (admin.getRank() == GroupProvider.SENIOR_ADMIN.getGroup())
{
return SENIOR_ADMIN;
}

View File

@ -1,8 +1,5 @@
package me.totalfreedom.totalfreedommod.bridge;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import me.totalfreedom.bukkittelnet.BukkitTelnet;
import me.totalfreedom.bukkittelnet.api.TelnetCommandEvent;
import me.totalfreedom.bukkittelnet.api.TelnetPreLoginEvent;
@ -10,13 +7,18 @@ import me.totalfreedom.bukkittelnet.api.TelnetRequestDataTagsEvent;
import me.totalfreedom.bukkittelnet.session.ClientSession;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.util.FLog;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.plugin.Plugin;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Deprecated
public class BukkitTelnetBridge extends FreedomService
{
@ -44,7 +46,7 @@ public class BukkitTelnetBridge extends FreedomService
final Admin admin = plugin.al.getEntryByIp(ip);
if (admin == null || !admin.isActive() || !admin.getRank().hasConsoleVariant())
if (admin == null || !admin.isActive())
{
return;
}
@ -80,8 +82,8 @@ public class BukkitTelnetBridge extends FreedomService
boolean active = admin.isActive();
isAdmin = active;
isSeniorAdmin = active && admin.getRank() == Rank.SENIOR_ADMIN;
isTelnetAdmin = active && (isSeniorAdmin || admin.getRank() == Rank.ADMIN);
isSeniorAdmin = active && admin.getRank().equals(GroupProvider.SENIOR_ADMIN.getGroup());
isTelnetAdmin = active && (isSeniorAdmin || admin.getRank().equals(GroupProvider.ADMIN.getGroup()));
}
playerTags.put("tfm.admin.isAdmin", isAdmin);
@ -106,10 +108,9 @@ public class BukkitTelnetBridge extends FreedomService
final Plugin bukkitTelnet = server.getPluginManager().getPlugin("BukkitTelnet");
if (bukkitTelnet instanceof BukkitTelnet)
{
bukkitTelnetPlugin = (BukkitTelnet)bukkitTelnet;
bukkitTelnetPlugin = (BukkitTelnet) bukkitTelnet;
}
}
catch (Exception ex)
} catch (Exception ex)
{
FLog.severe(ex);
}
@ -159,8 +160,7 @@ public class BukkitTelnetBridge extends FreedomService
{
telnet.appender.removeSession(session);
session.syncTerminateSession();
}
catch (Exception ex)
} catch (Exception ex)
{
FLog.severe("Error removing single telnet session: " + ex.getMessage());
}
@ -168,8 +168,7 @@ public class BukkitTelnetBridge extends FreedomService
FLog.info(sessionsToRemove.size() + " telnet session(s) removed.");
}
}
catch (Exception ex)
} catch (Exception ex)
{
FLog.severe("Error removing telnet sessions: " + ex.getMessage());
}

View File

@ -4,7 +4,7 @@ import com.earth2me.essentials.Essentials;
import com.earth2me.essentials.User;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.rank.DisplayableGroup;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.entity.HumanEntity;
@ -156,9 +156,9 @@ public class EssentialsBridge extends FreedomService
if (inventoryHolder instanceof HumanEntity)
{
Player invOwner = (Player)inventoryHolder;
Rank recieverRank = plugin.rm.getRank(player);
Rank playerRank = plugin.rm.getRank(invOwner);
if (playerRank.ordinal() >= recieverRank.ordinal() || !invOwner.isOnline())
DisplayableGroup recieverRank = plugin.rm.getRank(player);
DisplayableGroup playerRank = plugin.rm.getRank(invOwner);
if (playerRank.getWeight() >= recieverRank.getWeight() || !invOwner.isOnline())
{
event.setCancelled(true);
refreshPlayer = player;

View File

@ -3,9 +3,6 @@ package me.totalfreedom.totalfreedommod.command;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.rank.Rank;
@Retention(RetentionPolicy.RUNTIME)
public @interface CommandPermissions
{

View File

@ -29,24 +29,22 @@ public class Command_deop extends FreedomCommand
Player player = Bukkit.getServer().getPlayer(args[0]);
if (player == null)
if (player == null || plugin.al.isVanished(player.getUniqueId()))
{
msg(sender, PLAYER_NOT_FOUND);
return true;
}
if (plugin.al.isVanished(player.getUniqueId()))
User user = GroupProvider.getUser(player);
if (user.getPrimaryGroup().equalsIgnoreCase(GroupProvider.NON_OP.getGroup().getLuckPermsGroup().getName()))
{
msgNew("<red>You cannot de-op <player>, as they are vanished.", Placeholder.unparsed("player", player.getName()));
msgNew(sender, "<red><player> is already de-opped!", Placeholder.unparsed("<player>", player.getName()));
return true;
}
User user = GroupProvider.getUser(player);
user.setPrimaryGroup(GroupProvider.NON_OP.getGroup().getLuckPermsGroup().getName());
msg(player, YOU_ARE_NOT_OP);
plugin.rm.updateDisplay(player);
if (!silent)
{
FUtil.adminAction(sender.getName(), "De-opping " + player.getName(), false);

View File

@ -7,7 +7,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(permission = "", source = SourceType.BOTH, blockHostConsole = true)
@CommandPermissions(permission = "deop.all", source = SourceType.BOTH, blockHostConsole = true)
@CommandParameters(description = "Deop everyone on the server.", usage = "/<command>")
public class Command_deopall extends FreedomCommand
{

View File

@ -3,7 +3,7 @@ package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.util.FConverter;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.format.TextColor;
@ -20,7 +20,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.ONLY_IN_GAME)
@CommandPermissions(permission = "myadmin", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Manage your admin entry.", usage = "/<command> [-o <admin name>] <clearips | clearip <ip> | convertacformat | setacformat <format> | clearacformat> | syncroles>")
public class Command_myadmin extends FreedomCommand
{
@ -39,7 +39,7 @@ public class Command_myadmin extends FreedomCommand
// -o switch
if (args[0].equals("-o"))
{
checkPermission(Rank.SENIOR_ADMIN);
checkPermission("tfm.myadmin.other");
init = playerSender;
targetPlayer = getPlayer(args[1]);
if (targetPlayer == null)
@ -67,7 +67,7 @@ public class Command_myadmin extends FreedomCommand
switch (args[0])
{
case "clearips":
case "clearips" ->
{
if (args.length != 1)
{
@ -94,8 +94,7 @@ public class Command_myadmin extends FreedomCommand
msgNew(targetPlayer, "<ip> is now your only IP address.", Placeholder.unparsed("ip", String.valueOf(target.getIps().get(0))));
return true;
}
case "clearip":
case "clearip" ->
{
if (args.length != 2)
{
@ -107,8 +106,7 @@ public class Command_myadmin extends FreedomCommand
if (init == null)
{
msgNew("<red>That IP is not registered to you.");
}
else
} else
{
msgNew("<red>That IP does not belong to that player.");
}
@ -120,8 +118,7 @@ public class Command_myadmin extends FreedomCommand
if (init == null)
{
msgNew("<red>You cannot remove your current IP.");
}
else
} else
{
msgNew("<red>You cannot remove that admin's current IP.");
}
@ -140,14 +137,12 @@ public class Command_myadmin extends FreedomCommand
msgNew("Current IPs: <ips>", Placeholder.unparsed("ip", StringUtils.join(target.getIps(), ", ")));
return true;
}
case "convertacformat":
case "convertacformat" ->
{
if (!FConverter.needsConversion(target.getAcFormat()))
{
msgNew("<red>That format does not need to be converted.");
}
else
} else
{
msgNew("<yellow>Converting format...");
target.setAcFormat(FConverter.convertAdminChatFormat(target.getAcFormat()));
@ -158,9 +153,7 @@ public class Command_myadmin extends FreedomCommand
return true;
}
case "setacformat":
case "setscformat":
case "setacformat", "setscformat" ->
{
String format = StringUtils.join(args, " ", 1, args.length);
if (FConverter.needsConversion(format))
@ -175,14 +168,12 @@ public class Command_myadmin extends FreedomCommand
msgNew("Set admin chat format to \"<format>\"", Placeholder.unparsed("format", format));
msgNew("Example:");
msgNew(format, Placeholder.unparsed("name", "ExampleAdmin"),
Placeholder.unparsed("rank", Rank.ADMIN.getAbbr()),
TagResolver.resolver("rankcolor", Tag.styling(lol -> lol.color(TextColor.color(Rank.ADMIN.getColor().getColor().getRGB())))),
Placeholder.unparsed("rank", GroupProvider.ADMIN.getGroup().getAbbr()),
TagResolver.resolver("rankcolor", Tag.styling(styler -> styler.color(TextColor.color(GroupProvider.ADMIN.getGroup().getColor().getColor().getRGB())))),
Placeholder.unparsed("message", "The quick brown fox jumped over the lazy dog."));
return true;
}
case "clearacformat":
case "clearscformat":
case "clearacformat", "clearscformat" ->
{
target.setAcFormat(null);
plugin.al.save(target);
@ -190,8 +181,7 @@ public class Command_myadmin extends FreedomCommand
msgNew("Cleared admin chat format.");
return true;
}
case "syncroles":
case "syncroles" ->
{
if (plugin.dc != null && plugin.dc.isEnabled())
{
@ -210,8 +200,7 @@ public class Command_myadmin extends FreedomCommand
if (synced)
{
msgNew("<green>Successfully synced your roles.");
}
else
} else
{
msgNew("<red>Failed to sync your roles, please check the console.");
}
@ -219,8 +208,7 @@ public class Command_myadmin extends FreedomCommand
return true;
}
default:
default ->
{
return false;
}

View File

@ -1,18 +1,17 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandPermissions(permission = "myinfo", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Check your personal data", usage = "/<command>")
public class Command_myinfo extends FreedomCommand
{
@Override
public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
msg(plugin.pl.getData(playerSender).toString());
msgNew(sender, plugin.pl.getData(playerSender).toString());
return true;
}
}

View File

@ -1,15 +1,13 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.NON_OP, source = SourceType.ONLY_IN_GAME)
@CommandPermissions(permission = "nether", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Go to the Nether.", usage = "/<command>", aliases = "hell")
public class Command_nether extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{

View File

@ -1,13 +1,6 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
@ -16,29 +9,40 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@CommandPermissions(permission = "nickclean", source = SourceType.BOTH)
@CommandParameters(description = "Essentials Interface Command - Remove illegal chatcodes from nicknames of one or all players on server.", usage = "/<command> [player]", aliases = "nc")
public class Command_nickclean extends FreedomCommand
{
private final Map<String, Color> colorCodes = new HashMap<String, Color>()
{{
put("&0", Color.BLACK);
put("&1", Color.BLUE);
put("&2", Color.GREEN);
put("&3", Color.TEAL);
put("&4", Color.MAROON);
put("&5", Color.FUCHSIA);
put("&6", Color.OLIVE);
put("&7", Color.SILVER);
put("&8", Color.GRAY);
put("&9", Color.NAVY);
put("&a", Color.LIME);
put("&b", Color.AQUA);
put("&c", Color.RED);
put("&d", Color.PURPLE);
put("&e", Color.YELLOW);
put("&f", Color.WHITE);
}};
private static final Map<String, Color> colorCodes = populateHashMap();
private static Map<String, Color> populateHashMap()
{
Map<String, Color> colorCodes = new HashMap<>();
colorCodes.put("&0", Color.BLACK);
colorCodes.put("&1", Color.BLUE);
colorCodes.put("&2", Color.GREEN);
colorCodes.put("&3", Color.TEAL);
colorCodes.put("&4", Color.MAROON);
colorCodes.put("&5", Color.FUCHSIA);
colorCodes.put("&6", Color.OLIVE);
colorCodes.put("&7", Color.SILVER);
colorCodes.put("&8", Color.GRAY);
colorCodes.put("&9", Color.NAVY);
colorCodes.put("&a", Color.LIME);
colorCodes.put("&b", Color.AQUA);
colorCodes.put("&c", Color.RED);
colorCodes.put("&d", Color.PURPLE);
colorCodes.put("&e", Color.YELLOW);
colorCodes.put("&f", Color.WHITE);
return colorCodes;
}
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
@ -86,7 +90,7 @@ public class Command_nickclean extends FreedomCommand
{
hexColorSub = split.substring(0, 12);
split = String.valueOf(split.charAt(12));
String hexColorString = "#" + hexColorSub.replaceAll("§", "");
String hexColorString = "#" + hexColorSub.replace("§", "");
java.awt.Color hexColor = java.awt.Color.decode(hexColorString);
// Get a range of nearby colors that are alike to the color blocked.
@ -126,8 +130,7 @@ public class Command_nickclean extends FreedomCommand
newNick.append("§x").append(hexColorSub).append(split);
}
}
}
else
} else
{
// Falls back on old code if hex isn't used.
final Pattern REGEX = Pattern.compile(FUtil.colorize(ChatColor.COLOR_CHAR + "[" + StringUtils.join(ConfigEntry.BLOCKED_CHATCODES.getString().split(","), "") + "]"), Pattern.CASE_INSENSITIVE);

View File

@ -1,120 +0,0 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH)
@CommandParameters(description = "NickFilter: Prefix any command with this command to replace nicknames in that command with real names. Nicknames should be prefixed with a !.",
usage = "/<command> <other_command> !<playernick>",
aliases = "nf")
public class Command_nickfilter extends FreedomCommand
{
private static Player getPlayerByDisplayName(String needle)
{
needle = needle.toLowerCase().trim();
for (Player player : Bukkit.getOnlinePlayers())
{
if (player.getDisplayName().toLowerCase().trim().contains(needle))
{
return player;
}
}
return null;
}
private static Player getPlayerByDisplayNameAlt(String needle)
{
needle = needle.toLowerCase().trim();
Integer minEditDistance = null;
Player minEditMatch = null;
for (Player player : Bukkit.getOnlinePlayers())
{
String haystack = player.getDisplayName().toLowerCase().trim();
int editDistance = StringUtils.getLevenshteinDistance(needle, haystack.toLowerCase());
if (minEditDistance == null || minEditDistance > editDistance)
{
minEditDistance = editDistance;
minEditMatch = player;
}
}
return minEditMatch;
}
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
boolean nickMatched = false;
final List<String> outputCommand = new ArrayList<>();
if (args.length >= 1)
{
for (String arg : args)
{
Player player = null;
Matcher matcher = Pattern.compile("^!(.+)$").matcher(arg);
if (matcher.find())
{
String displayName = matcher.group(1);
player = getPlayerByDisplayName(displayName);
if (player == null || plugin.al.isVanished(player.getUniqueId()) && !plugin.al.isAdmin(sender))
{
player = getPlayerByDisplayNameAlt(displayName);
if (player == null || !plugin.al.isVanished(player.getUniqueId()) && !plugin.al.isAdmin(sender))
{
msg("Can't find player by nickname: " + displayName);
return true;
}
}
}
if (player == null)
{
outputCommand.add(arg);
}
else
{
nickMatched = true;
outputCommand.add(player.getName());
}
}
}
if (!nickMatched)
{
msg("No nicknames replaced in command.");
return true;
}
String newCommand = StringUtils.join(outputCommand, " ");
if (plugin.cb.isCommandBlocked(newCommand, sender))
{
// CommandBlocker handles messages and broadcasts
return true;
}
msg("Sending command: \"" + newCommand + "\".");
server.dispatchCommand(sender, newCommand);
return true;
}
}

View File

@ -1,7 +1,6 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.api.Interpolator;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang3.StringUtils;
import org.bukkit.Bukkit;
@ -11,7 +10,9 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
import java.util.List;
@CommandPermissions(permission = "nickgradient", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Essentials Interface Command - Rainbowify your nickname.", usage = "/<command> <hex> <hex> <nick>", aliases = "nickgr")
public class Command_nickgradient extends FreedomCommand
{
@ -59,8 +60,7 @@ public class Command_nickgradient extends FreedomCommand
{
awt1 = FUtil.getRandomAWTColor();
from = " (From: " + FUtil.getHexStringOfAWTColor(awt1) + ")";
}
else
} else
{
awt1 = java.awt.Color.decode(args[0]);
}
@ -69,13 +69,11 @@ public class Command_nickgradient extends FreedomCommand
{
awt2 = FUtil.getRandomAWTColor();
to = " (To: " + FUtil.getHexStringOfAWTColor(awt2) + ")";
}
else
} else
{
awt2 = java.awt.Color.decode(args[1]);
}
}
catch (NumberFormatException ex)
} catch (NumberFormatException ex)
{
msg("Invalid hex values.");
return true;

View File

@ -1,70 +0,0 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Arrays;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Essentials Interface Command - Randomize the colors of your nickname.", usage = "/<command> <<nick> | off>")
public class Command_nicknyan extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (!server.getPluginManager().isPluginEnabled("Essentials"))
{
msgNew("<red>Essentials is not enabled on this server.");
return true;
}
if (args.length != 1)
{
return false;
}
if (args[0].equalsIgnoreCase("off"))
{
plugin.esb.setNickname(sender.getName(), null);
msgNew("<green>Nickname cleared.");
return true;
}
final String nickPlain = ChatColor.stripColor(FUtil.colorize(args[0].trim()));
if (!nickPlain.matches("^[a-zA-Z_0-9" + ChatColor.COLOR_CHAR + "]+$"))
{
msgNew("<red>That nickname contains invalid characters.");
return true;
}
else if (nickPlain.length() < 3 || nickPlain.length() > 30)
{
msgNew("<red>Your nickname must be between 3 and 30 characters long.");
return true;
}
if (server.getOnlinePlayers().stream().anyMatch(player -> player != playerSender
&& (player.getName().equalsIgnoreCase(nickPlain)
|| ChatColor.stripColor(plugin.esb.getNickname(player.getName())).trim().equalsIgnoreCase(nickPlain))))
{
msgNew("<red>That nickname is already in use.");
return true;
}
final StringBuilder newNick = new StringBuilder();
Arrays.stream(nickPlain.chars().toArray()).forEach(character -> newNick.append(FUtil.randomChatColor())
.append(Character.toString(character)));
newNick.append(ChatColor.WHITE);
plugin.esb.setNickname(sender.getName(), newNick.toString());
msgNew("Your nickname is now: <new>", Placeholder.component("new", FUtil.colorizeAsComponent(newNick.toString())));
return true;
}
}

View File

@ -1,6 +1,5 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Bukkit;
@ -9,7 +8,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandPermissions(permission = "nickrainbow", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Essentials Interface Command - Rainbowify your nickname.", usage = "/<command> <nick>")
public class Command_nickrainbow extends FreedomCommand
{

View File

@ -1,10 +1,6 @@
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.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.ArrayUtils;
@ -13,6 +9,10 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@CommandPermissions(permission = "notes", source = SourceType.BOTH)
@CommandParameters(description = "Manage notes for a player", usage = "/<command> <name> <list | add <note> | remove <id> | clear>")
public class Command_notes extends FreedomCommand
@ -39,8 +39,7 @@ public class Command_notes extends FreedomCommand
}
playerData = plugin.pl.getData(entry.getName());
}
else
} else
{
playerData = plugin.pl.getData(player);
}
@ -125,12 +124,10 @@ public class Command_notes extends FreedomCommand
if (args.length == 1)
{
return FUtil.getPlayerList();
}
else if (args.length == 2)
} else if (args.length == 2)
{
return Arrays.asList("list", "add", "remove", "clear");
}
else if (args.length > 2 && (args[1].equals("add")))
} else if (args.length > 2 && (args[1].equals("add")))
{
return FUtil.getPlayerList();
}

View File

@ -1,15 +1,15 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.StringUtils;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import net.luckperms.api.model.user.User;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH, cooldown = 5)
@CommandPermissions(permission = "op", source = SourceType.BOTH, cooldown = 5)
@CommandParameters(description = "OP a player", usage = "/<command> <partialname>")
public class Command_op extends FreedomCommand
{
@ -28,32 +28,27 @@ public class Command_op extends FreedomCommand
silent = args[1].equalsIgnoreCase("-s");
}
final String targetName = args[0].toLowerCase();
Player player = Bukkit.getServer().getPlayer(args[0]);
List<String> matchedPlayerNames = new ArrayList<>();
for (final Player player : server.getOnlinePlayers())
if (player == null || plugin.al.isVanished(player.getUniqueId()))
{
if ((player.getName().toLowerCase().contains(targetName) || player.getDisplayName().toLowerCase().contains(targetName)
|| player.getName().contains(targetName) || player.getDisplayName().contains(targetName)) &&
!player.isOp() && !plugin.al.isVanished(player.getUniqueId()))
{
matchedPlayerNames.add(player.getName());
player.setOp(true);
msg(player, YOU_ARE_OP);
plugin.rm.updateDisplay(player);
}
msg(sender, PLAYER_NOT_FOUND);
return true;
}
if (!matchedPlayerNames.isEmpty())
User user = GroupProvider.getUser(player);
if (user.getPrimaryGroup().equalsIgnoreCase(GroupProvider.OP.getGroup().getLuckPermsGroup().getName()))
{
if (!silent)
{
FUtil.adminAction(sender.getName(), "Opping " + StringUtils.join(matchedPlayerNames, ", "), false);
}
msgNew(sender, "<red><player> is already OP!", Placeholder.unparsed("<player>", player.getName()));
return true;
}
else
user.setPrimaryGroup(GroupProvider.OP.getGroup().getLuckPermsGroup().getName());
msg(player, YOU_ARE_OP);
plugin.rm.updateDisplay(player);
if (!silent)
{
msgNew("Either the player is already opped, or the player could not be found.");
FUtil.adminAction(sender.getName(), "Opping " + player.getName(), false);
}
return true;

View File

@ -1,32 +1,27 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.luckperms.api.model.user.User;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH, cooldown = 30)
@CommandPermissions(permission = "op.all", source = SourceType.BOTH, cooldown = 30)
@CommandParameters(description = "OP everyone on the server.", usage = "/<command>")
public class Command_opall extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
FUtil.adminAction(sender.getName(), "Opping all players on the server", false);
FUtil.adminAction(sender.getName(), "Opping all players on the server", true);
server.getOnlinePlayers().forEach(player ->
{
if (!player.isOp())
{
player.setOp(true);
msg(player, YOU_ARE_OP);
plugin.rm.updateDisplay(player);
}
else
{
player.recalculatePermissions();
}
User user = GroupProvider.getUser(player);
user.setPrimaryGroup(GroupProvider.OP.getGroup().getLuckPermsGroup().getName());
msg(player, YOU_ARE_OP);
plugin.rm.updateDisplay(player);
});
return true;

View File

@ -1,7 +1,6 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.luckperms.api.model.user.User;
import org.bukkit.command.Command;

View File

@ -1,60 +0,0 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.Objects;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH)
@CommandParameters(description = "Manage operators", usage = "/<command> <count | purge>")
public class Command_ops extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length != 1)
{
return false;
}
if (args[0].equalsIgnoreCase("count"))
{
int totalOps = server.getOperators().size();
long onlineOps = server.getOnlinePlayers().stream().filter(player -> player.isOp()).count();
msgNew("Online OPs: <online>", Placeholder.unparsed("online", String.valueOf(onlineOps)));
msgNew("Offline OPs: <offline>", Placeholder.unparsed("offline", String.valueOf(totalOps - onlineOps)));
msgNew("Total OPs: <total>", Placeholder.unparsed("total", String.valueOf(totalOps)));
return true;
}
if (args[0].equalsIgnoreCase("purge"))
{
if (!plugin.al.isAdmin(sender))
{
noPerms();
return true;
}
FUtil.adminAction(sender.getName(), "Purging all operators", true);
server.getOperators().forEach(operator ->
{
operator.setOp(false);
if (operator.isOnline())
{
msg(Objects.requireNonNull(operator.getPlayer()), YOU_ARE_NOT_OP);
}
});
return true;
}
return false;
}
}

View File

@ -3,7 +3,6 @@ package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.punishments.Punishment;
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.GameMode;
@ -12,7 +11,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
@CommandPermissions(permission = "orbit", source = SourceType.BOTH)
@CommandParameters(description = "POW!!! Right in the kisser! One of these days Alice, straight to the Moon - Sends the specified player into orbit.",
usage = "/<command> <target> [<<power> | stop>]")
public class Command_orbit extends FreedomCommand
@ -50,8 +49,7 @@ public class Command_orbit extends FreedomCommand
try
{
strength = Math.max(1.0, Math.min(150.0, Double.parseDouble(args[1])));
}
catch (NumberFormatException ex)
} catch (NumberFormatException ex)
{
msgNew("<red>" + ex.getMessage());
return true;

View File

@ -1,51 +0,0 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachmentInfo;
@CommandPermissions(rank = Rank.NON_OP, source = SourceType.BOTH)
@CommandParameters(description = "Check your permissions", usage = "/<command> [prefix | reload]")
public class Command_permissions extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length > 0 && args[0].equalsIgnoreCase("reload") && plugin.al.isAdmin(sender))
{
plugin.permissions.load();
plugin.pem.loadPermissionNodes();
plugin.pem.updatePlayers();
msg("Reloaded permissions");
}
else
{
String prefix = "";
if (args.length > 0)
{
prefix = args[0];
}
checkPlayer();
List<String> permissions = new ArrayList<>();
for (PermissionAttachmentInfo attachmentInfo : playerSender.getEffectivePermissions())
{
if (attachmentInfo.getValue())
{
String permission = attachmentInfo.getPermission();
if (!prefix.isEmpty() && !permission.startsWith(prefix))
{
continue;
}
permissions.add(permission);
}
}
msg(String.join(", ", permissions));
}
return true;
}
}

View File

@ -1,13 +1,12 @@
package me.totalfreedom.totalfreedommod.command;
import io.papermc.lib.PaperLib;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.NON_OP, source = SourceType.ONLY_IN_GAME)
@CommandPermissions(permission = "plotworld", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Go to the PlotWorld.", usage = "/<command>", aliases = "pw")
public class Command_plotworld extends FreedomCommand
{
@ -18,8 +17,7 @@ public class Command_plotworld extends FreedomCommand
if (plotworld != null)
{
PaperLib.teleportAsync(playerSender, plotworld.getSpawnLocation());
}
else
} else
{
msg("\"plotworld\" doesn't exist.");
}

View File

@ -1,20 +1,21 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.*;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@CommandPermissions(permission = "plugincontrol", source = SourceType.BOTH)
@CommandParameters(description = "Enable, disable, or reload a specified plugin, as well as list all plugins on the server.", usage = "/<command> <<enable | disable | reload> <pluginname>> | list>", aliases = "plc")
public class Command_plugincontrol extends FreedomCommand
{
@ -26,8 +27,8 @@ public class Command_plugincontrol extends FreedomCommand
final PluginManager pm = server.getPluginManager();
/* This is the way it is because there was too much "if the arguments aren't enough then return false" in the
* original code in addition to the stupid amount of "if something isn't right then do some boilerplate stuff
* then return true". Codacy complained, so I aggressively optimized this to keep it quiet. */
* original code in addition to the stupid amount of "if something isn't right then do some boilerplate stuff
* then return true". Codacy complained, so I aggressively optimized this to keep it quiet. */
switch (args.length)
{
case 1 ->
@ -68,8 +69,7 @@ public class Command_plugincontrol extends FreedomCommand
if (pl.isEnabled())
{
msgNew("<green><plugin> is now enabled.", Placeholder.unparsed("plugin", pl.getName()));
}
else
} else
{
msgNew("<red>An error occurred whilst attempting to enable <plugin>", Placeholder.unparsed("plugin", pl.getName()));
}
@ -81,8 +81,7 @@ public class Command_plugincontrol extends FreedomCommand
{
msgNew("<red><plugin> is already disabled.", Placeholder.unparsed("plugin", pl.getName()));
return true;
}
else if (UNTOUCHABLE_PLUGINS.contains(pl.getName()))
} else if (UNTOUCHABLE_PLUGINS.contains(pl.getName()))
{
msgNew("<red><plugin> can't be disabled.", Placeholder.unparsed("plugin", pl.getName()));
return true;
@ -104,7 +103,8 @@ public class Command_plugincontrol extends FreedomCommand
pm.disablePlugin(pl);
pm.enablePlugin(pl);
msgNew("<green><plugin> has been reloaded.", Placeholder.unparsed("plugin", pl.getName()));;
msgNew("<green><plugin> has been reloaded.", Placeholder.unparsed("plugin", pl.getName()));
;
return true;
}
default ->
@ -112,8 +112,7 @@ public class Command_plugincontrol extends FreedomCommand
// Do nothing. This is here to please Codacy.
}
}
}
else
} else
{
msgNew("<red>Plugin not found!");
return true;
@ -138,8 +137,7 @@ public class Command_plugincontrol extends FreedomCommand
if (args.length == 1)
{
return Arrays.asList("enable", "disable", "reload", "list");
}
else if (args.length == 2 && !args[0].equalsIgnoreCase("list"))
} else if (args.length == 2 && !args[0].equalsIgnoreCase("list"))
{
return Arrays.stream(server.getPluginManager().getPlugins()).map(Plugin::getName)
.filter(pl -> !UNTOUCHABLE_PLUGINS.contains(pl)).toList();

View File

@ -1,10 +1,5 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
@ -13,7 +8,12 @@ import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@CommandPermissions(permission = "potion", source = SourceType.BOTH)
@CommandParameters(
description = "Manipulate your potion effects. Duration is measured in server ticks (~20 ticks per second).",
usage = "/<command> <list | clearall | clear [target name] | add <type> <duration> <amplifier> [target name]>",
@ -25,14 +25,13 @@ public class Command_potion extends FreedomCommand
{
switch (args.length)
{
case 1:
case 1 ->
{
if (args[0].equalsIgnoreCase("list"))
{
msg("Potion effect types: " + FUtil.listToString(Arrays.stream(PotionEffectType.values())
.map(PotionEffectType::getName).toList()), ChatColor.AQUA);
}
else if (args[0].equalsIgnoreCase("clearall"))
} else if (args[0].equalsIgnoreCase("clearall"))
{
if (!(plugin.al.isAdmin(sender) || senderIsConsole))
{
@ -46,29 +45,18 @@ public class Command_potion extends FreedomCommand
}
return true;
}
case 2:
case 2 ->
{
if (args[0].equalsIgnoreCase("clear"))
{
Player target = playerSender;
if (args.length == 2)
if (!plugin.al.isAdmin(sender) && !args[1].equalsIgnoreCase(sender.getName()))
{
if (!plugin.al.isAdmin(sender) && !args[1].equalsIgnoreCase(sender.getName()))
{
msg(ChatColor.RED + "Only admins can clear potion effects from other players.");
return true;
}
target = getPlayer(args[1], true);
}
else
{
if (senderIsConsole)
{
msg("You must specify a target player when using this command from the console.");
return true;
}
msg(ChatColor.RED + "Only admins can clear potion effects from other players.");
return true;
}
target = getPlayer(args[1], true);
if (target == null)
{
@ -84,11 +72,8 @@ public class Command_potion extends FreedomCommand
msg("Cleared all active potion effects " + (!target.equals(playerSender) ? "from player "
+ target.getName() + "." : "from yourself."), ChatColor.AQUA);
}
break;
}
case 4:
case 5:
case 4, 5 ->
{
if (args[0].equalsIgnoreCase("add"))
{
@ -109,8 +94,7 @@ public class Command_potion extends FreedomCommand
msg(PLAYER_NOT_FOUND);
return true;
}
}
else
} else
{
if (senderIsConsole)
{
@ -130,8 +114,7 @@ public class Command_potion extends FreedomCommand
try
{
duration = Math.min(Integer.parseInt(args[2]), 100000);
}
catch (NumberFormatException ex)
} catch (NumberFormatException ex)
{
msg("Invalid duration: " + args[2], ChatColor.RED);
return true;
@ -141,8 +124,7 @@ public class Command_potion extends FreedomCommand
try
{
amplifier = Math.min(Integer.parseInt(args[3]), 100000);
}
catch (NumberFormatException ex)
} catch (NumberFormatException ex)
{
msg("Invalid potion amplifier: " + args[3], ChatColor.RED);
return true;
@ -155,9 +137,8 @@ public class Command_potion extends FreedomCommand
+ ", Amplifier: " + new_effect.getAmplifier()
+ (!target.equals(playerSender) ? " to player " + target.getName() + "." : " to yourself."), ChatColor.AQUA);
}
break;
}
default:
default ->
{
return false;
}
@ -187,8 +168,7 @@ public class Command_potion extends FreedomCommand
{
return FUtil.getPlayerList();
}
}
else if (args[0].equalsIgnoreCase("add"))
} else if (args[0].equalsIgnoreCase("add"))
{
return Arrays.stream(PotionEffectType.values()).map(PotionEffectType::getName).toList();
}

View File

@ -1,11 +1,6 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.math.NumberUtils;
import org.bukkit.Bukkit;
@ -15,7 +10,12 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.entity.ThrownPotion;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.ONLY_IN_GAME)
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@CommandPermissions(permission = "potionspy", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Allows admins to see potions that are thrown.", usage = "/<command> <enable | on | disable | off> | history [player] <page>", aliases = "potspy")
public class Command_potionspy extends FreedomCommand
{
@ -29,8 +29,7 @@ public class Command_potionspy extends FreedomCommand
{
setPotionSpyState(admin, !admin.getPotionSpy());
return true;
}
else
} else
{
String titleText = "&8&m------------------&r &ePotionSpy &8&m------------------&r";
String validPageText = "Please specify a valid page number between 1 and %s.";
@ -39,17 +38,10 @@ public class Command_potionspy extends FreedomCommand
String bottomText = "&8&m--------------------&r &e%s / %s &8&m--------------------&r";
switch (args[0].toLowerCase())
{
case "enable":
case "on":
setPotionSpyState(admin, true);
break;
case "disable":
case "off":
setPotionSpyState(admin, false);
break;
case "history":
case "enable", "on" -> setPotionSpyState(admin, true);
case "disable", "off" -> setPotionSpyState(admin, false);
case "history" ->
{
if (args.length == 3)
{
Player player = Bukkit.getPlayer(args[1]);
@ -62,7 +54,7 @@ public class Command_potionspy extends FreedomCommand
List<Map.Entry<ThrownPotion, Long>> thrownPotions = new ArrayList<>(plugin.mo.getPlayerThrownPotions(player)); // Make a copy of the list to avoid modifying the original.
List<String> potionThrowNotifications = new ArrayList<>();
int lastPage = (int)Math.ceil(thrownPotions.size() / 5.0);
int lastPage = (int) Math.ceil(thrownPotions.size() / 5.0);
if (thrownPotions.isEmpty())
{
@ -95,30 +87,27 @@ public class Command_potionspy extends FreedomCommand
{
msg(sender, potionThrowNotification);
}
}
else
} else
{
msg(sender, String.format(validPageText, lastPage));
return true;
}
msg(sender, ChatColor.translateAlternateColorCodes('&', String.format(bottomText, pageIndex, lastPage)));
}
else if (args.length == 2)
} else if (args.length == 2)
{
List<Map.Entry<ThrownPotion, Long>> thrownPotions = new ArrayList<>();
thrownPotions.addAll(plugin.mo.getAllThrownPotions()); // Make a copy of the list to avoid modifying the original.
List<String> potionThrowNotifications = new ArrayList<>();
int lastPage = (int)Math.ceil(thrownPotions.size() / 5.0);
int lastPage = (int) Math.ceil(thrownPotions.size() / 5.0);
if (thrownPotions.isEmpty())
{
if (Bukkit.getPlayer(args[1]) != null)
{
msg(sender, noPlayerRecord);
}
else
} else
{
msg(sender, "No potions have been thrown yet.");
}
@ -136,7 +125,7 @@ public class Command_potionspy extends FreedomCommand
for (Map.Entry<ThrownPotion, Long> potionEntry : thrownPotions)
{
ThrownPotion potion = potionEntry.getKey();
Player player = (Player)potion.getShooter();
Player player = (Player) potion.getShooter();
boolean trollPotions = plugin.mo.isTrollPotion(potion);
if (player != null)
@ -154,22 +143,22 @@ public class Command_potionspy extends FreedomCommand
{
msg(sender, potionThrowNotification);
}
}
else
} else
{
msg(sender, String.format(validPageText, lastPage));
return true;
}
msg(sender, ChatColor.translateAlternateColorCodes('&', String.format(bottomText, pageIndex, lastPage)));
}
else
} else
{
return false;
}
break;
default:
}
default ->
{
return false;
}
}
}
return true;
@ -197,22 +186,19 @@ public class Command_potionspy extends FreedomCommand
if (seconds < 60)
{
return seconds + "s";
}
else
} else
{
long minutes = Math.round(seconds / 60.0);
if (minutes < 60)
{
return minutes + "m";
}
else
} else
{
long hours = Math.round(minutes / 60.0);
if (hours < 24)
{
return hours + "h";
}
else
} else
{
return Math.round(hours / 24.0) + "d";
}

View File

@ -1,7 +1,6 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.Bukkit;
import org.bukkit.World;
@ -11,7 +10,7 @@ import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
@CommandPermissions(permission = "purgeall", source = SourceType.BOTH)
@CommandParameters(description = "Purge current mutes, command blocks, orbits, freezes, potion effects, cages, and entities.", usage = "/<command>")
public class Command_purgeall extends FreedomCommand
{

View File

@ -1,13 +1,13 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Displayable;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.rank.DisplayableGroup;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.NON_OP, source = SourceType.BOTH)
@CommandPermissions(permission = "rank", source = SourceType.BOTH)
@CommandParameters(description = "Show the rank of the sender or a specified user.", usage = "/<command> [player]")
public class Command_rank extends FreedomCommand
{
@ -51,7 +51,7 @@ public class Command_rank extends FreedomCommand
public String message(Player player)
{
Displayable display = plugin.rm.getDisplay(player);
Rank rank = plugin.rm.getRank(player);
DisplayableGroup rank = plugin.rm.getRank(player);
StringBuilder sb = new StringBuilder();
sb.append(ChatColor.AQUA)

View File

@ -1,13 +1,12 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.StringUtils;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.SENIOR_ADMIN, source = SourceType.BOTH)
@CommandPermissions(permission = "rawsay", source = SourceType.BOTH)
@CommandParameters(description = "Broadcasts the given message. Supports colors.", usage = "/<command> <message>")
public class Command_rawsay extends FreedomCommand
{

View File

@ -1,15 +1,14 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME, blockHostConsole = true)
@CommandPermissions(permission = "report", source = SourceType.ONLY_IN_GAME, blockHostConsole = true)
@CommandParameters(description = "Report a player for all admins to see.", usage = "/<command> <player> <reason>")
public class Command_report extends FreedomCommand
{
@ -22,41 +21,31 @@ public class Command_report extends FreedomCommand
return false;
}
Player player = getPlayer(args[0], true);
OfflinePlayer offlinePlayer = getOfflinePlayer(args[0]);
OfflinePlayer player = Bukkit.getOfflinePlayer(args[0]);
if (player == null && offlinePlayer == null)
if (sender instanceof Player && (player.equals(playerSender)))
{
msg(PLAYER_NOT_FOUND);
msgNew("<red>Please, don't try to report yourself.");
return true;
}
else if (player != null)
if (plugin.al.isAdmin(player))
{
if (sender instanceof Player)
{
if (player.equals(playerSender))
{
msgNew("<red>Please, don't try to report yourself.");
return true;
}
}
if (plugin.al.isAdmin(player))
{
msgNew("<red>You can't report admins with this command.");
return true;
}
msgNew("<red>You can't report admins with this command.");
return true;
}
String report = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " ");
plugin.cm.reportAction(playerSender, (player == null) ? offlinePlayer.getName() : player.getName(), report);
plugin.cm.reportAction(playerSender, player.getName(), report);
boolean logged = false;
if (plugin.dc != null && plugin.dc.isEnabled())
{
logged = (player == null) ? plugin.dc.sendReportOffline(playerSender, offlinePlayer, report) : plugin.dc.sendReport(playerSender, player, report);
Player online = Bukkit.getPlayer(player.getUniqueId());
logged = (online != null)
? plugin.dc.sendReport(playerSender, online, report)
: plugin.dc.sendReportOffline(playerSender, player, report);
}
msgNew("<green>Thank you, your report has been successfully logged.");

View File

@ -1,20 +1,19 @@
package me.totalfreedom.totalfreedommod.command;
import io.papermc.lib.PaperLib;
import java.util.HashMap;
import java.util.Map;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
import java.util.HashMap;
import java.util.Map;
@CommandPermissions(permission = "ride", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Ride on the top of the specified player.", usage = "/<command> <playername | mode <normal | off | ask>>")
public class Command_ride extends FreedomCommand
{
@ -94,8 +93,7 @@ public class Command_ride extends FreedomCommand
playerDataSender.setRideMode(mode);
plugin.pl.save(playerDataSender);
msgNew("Ride mode is now set to <mode>.", Placeholder.unparsed("mode", mode.name().toLowerCase()));
}
catch (IllegalArgumentException ex)
} catch (IllegalArgumentException ex)
{
msgNew("<red>Invalid mode.");
}

View File

@ -1,13 +1,12 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.api.ShopItem;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandPermissions(permission = "rideablepearl", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Obtain a rideable ender pearl", usage = "/<command>")
public class Command_rideablepearl extends FreedomCommand
{
@ -25,8 +24,7 @@ public class Command_rideablepearl extends FreedomCommand
{
playerSender.getInventory().addItem(plugin.sh.getRideablePearl());
msg("You have been given a Rideable Ender Pearl", ChatColor.GREEN);
}
else
} else
{
msg("You do not own a Rideable Ender Pearl! Purchase one from the shop.", ChatColor.RED);
}

View File

@ -1,8 +1,5 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import me.totalfreedom.totalfreedommod.util.Groups;
import net.coreprotect.CoreProtectAPI;
@ -18,7 +15,10 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
import java.util.ArrayList;
import java.util.List;
@CommandPermissions(permission = "ro", source = SourceType.BOTH)
@CommandParameters(description = "Remove all blocks of a certain type in the radius of certain players.", usage = "/<command> <block> [radius (default=50)] [player]")
public class Command_ro extends FreedomCommand
{
@ -57,8 +57,7 @@ public class Command_ro extends FreedomCommand
block.setType(Material.AIR);
affected++;
}
else if (block.getType().equals(material))
} else if (block.getType().equals(material))
{
if (cpAPI != null)
{
@ -89,13 +88,11 @@ public class Command_ro extends FreedomCommand
{
materials.addAll(Groups.SHULKER_BOXES);
names = "shulker boxes";
}
else if (args[0].equalsIgnoreCase("banners") || args[0].equalsIgnoreCase("banner"))
} else if (args[0].equalsIgnoreCase("banners") || args[0].equalsIgnoreCase("banner"))
{
materials.addAll(Groups.BANNERS);
names = "banners";
}
else
} else
{
for (String materialName : StringUtils.split(args[0], ","))
{
@ -117,8 +114,7 @@ public class Command_ro extends FreedomCommand
try
{
radius = Math.max(1, Math.min(50, Integer.parseInt(args[1])));
}
catch (NumberFormatException ex)
} catch (NumberFormatException ex)
{
msg("Invalid radius: " + args[1], ChatColor.RED);
return true;
@ -134,8 +130,7 @@ public class Command_ro extends FreedomCommand
msg(FreedomCommand.PLAYER_NOT_FOUND);
return true;
}
}
else
} else
{
targetPlayer = null;
}
@ -149,8 +144,7 @@ public class Command_ro extends FreedomCommand
try
{
adminWorld = plugin.wm.adminworld.getWorld();
}
catch (Exception ignored)
} catch (Exception ignored)
{
}
@ -171,8 +165,7 @@ public class Command_ro extends FreedomCommand
affected += removeBlocks(player.getLocation(), material, radius, sender.getName());
}
}
}
else
} else
{
if (targetPlayer.getWorld() != adminWorld)
{

View File

@ -1,6 +1,5 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor;
import org.bukkit.Material;
@ -10,7 +9,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
@CommandPermissions(permission = "rock", source = SourceType.BOTH)
@CommandParameters(description = "You have thrown a rock, but you have also summoned a meteor!", usage = "/<command>")
public class Command_rock extends FreedomCommand
{

View File

@ -1,15 +1,13 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
@CommandPermissions(permission = "say", source = SourceType.BOTH)
@CommandParameters(description = "Broadcasts the given message as the server, includes sender name.", usage = "/<command> <message>")
public class Command_say extends FreedomCommand
{

View File

@ -1,6 +1,5 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Particle;
import org.bukkit.Sound;
@ -8,7 +7,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.SENIOR_ADMIN, source = SourceType.BOTH)
@CommandPermissions(permission = "scare", source = SourceType.BOTH)
@CommandParameters(description = "Sends a guardian particle effect with an enderman scream to the specified player.", usage = "/<command> <player>")
public class Command_scare extends FreedomCommand
{

View File

@ -1,6 +1,5 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.event.HoverEvent;
@ -14,7 +13,7 @@ import org.bukkit.generator.WorldInfo;
import java.util.List;
@CommandPermissions(rank = Rank.NON_OP, source = SourceType.BOTH)
@CommandPermissions(permission = "seed", source = SourceType.BOTH)
@CommandParameters(description = "Get the seed of the world you are currently in.", usage = "/seed [world]")
public class Command_seed extends FreedomCommand
{
@ -31,15 +30,13 @@ public class Command_seed extends FreedomCommand
msg("That world could not be found", ChatColor.RED);
return true;
}
}
else
} else
{
// If the sender is a Player, use that world. Otherwise, use the overworld as a fallback.
if (!senderIsConsole)
{
world = playerSender.getWorld();
}
else
} else
{
world = server.getWorlds().get(0);
}

View File

@ -1,13 +1,12 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH)
@CommandPermissions(permission = "stats", source = SourceType.BOTH)
@CommandParameters(description = "Check the status of the server, including opped players, admins, etc.", usage = "/<command>", aliases = "ss")
public class Command_serverstats extends FreedomCommand
{

View File

@ -1,13 +1,12 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandPermissions(permission = "compass", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Set your compass to the specified position.", usage = "/<command> <x> <y> <z>")
public class Command_setcompass extends FreedomCommand
{
@ -25,8 +24,7 @@ public class Command_setcompass extends FreedomCommand
Location location = new Location(playerSender.getWorld(), Integer.parseInt(args[0]), Integer.parseInt(args[1]), Integer.parseInt(args[2]));
playerSender.setCompassTarget(location);
msg("Successfully set your compass coordinates to X: " + args[0] + ", Y: " + args[1] + ", Z: " + args[2] + ".", ChatColor.GREEN);
}
catch (NumberFormatException e)
} catch (NumberFormatException e)
{
msg("One or more of your coordinates are not a valid integer.", ChatColor.RED);
}

View File

@ -1,14 +1,12 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
@CommandPermissions(permission = "worldedit.limit", source = SourceType.BOTH)
@CommandParameters(description = "Sets everyone's WorldEdit block modification limit to the default limit or to a custom limit.", usage = "/<command> [limit]", aliases = "setl,swl")
public class Command_setlimit extends FreedomCommand
{
@ -27,8 +25,7 @@ public class Command_setlimit extends FreedomCommand
try
{
amount = Math.max(-1, Math.min(plugin.web.getMaxLimit(), Integer.parseInt(args[0])));
}
catch (NumberFormatException ex)
} catch (NumberFormatException ex)
{
msgNew("<red>Invalid number: <number>", Placeholder.unparsed("number", args[0]));
return true;

View File

@ -1,15 +1,13 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
@CommandPermissions(permission = "worldedit.limit.other", source = SourceType.BOTH)
@CommandParameters(description = "Sets a specific player's WorldEdit block modification limit to the default limit or to a custom limit.", usage = "/<command> <player> [limit]", aliases = "setpl,spl")
public class Command_setplayerlimit extends FreedomCommand
{
@ -37,19 +35,16 @@ public class Command_setplayerlimit extends FreedomCommand
try
{
amount = Math.max(-1, Math.min(plugin.web.getMaxLimit(), Integer.parseInt(args[1])));
}
catch (NumberFormatException ex)
} catch (NumberFormatException ex)
{
msgNew("<red>Invalid number: <amount>", Placeholder.unparsed("amount", args[1]));
return true;
}
}
else
} else
{
amount = plugin.web.getDefaultLimit();
}
}
else
} else
{
return false;
}

View File

@ -1,6 +1,5 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Location;
@ -8,7 +7,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.ONLY_IN_GAME)
@CommandPermissions(permission = "setspawnworld", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Set the spawn point of the world you are in.", usage = "/<command>")
public class Command_setspawnworld extends FreedomCommand
{

View File

@ -1,12 +1,11 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandPermissions(permission = "shop", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Open the shop GUI", usage = "/<command>", aliases = "sh")
public class Command_shop extends FreedomCommand
{

View File

@ -2,7 +2,6 @@ package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.punishments.Punishment;
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
@ -14,7 +13,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
@CommandPermissions(permission = "smite", source = SourceType.BOTH)
@CommandParameters(description = "Someone being a little bitch? Smite them down...", usage = "/<command> <player> [reason] [-ci | -q]")
public class Command_smite extends FreedomCommand
{
@ -30,8 +29,7 @@ public class Command_smite extends FreedomCommand
FUtil.bcastMsg(" Reason: " + ChatColor.YELLOW + reason, ChatColor.RED);
}
FUtil.bcastMsg(" Smitten by: " + ChatColor.YELLOW + sender.getName(), ChatColor.RED);
}
else
} else
{
sender.sendMessage("Smitten " + player.getName() + " quietly.");
}
@ -94,8 +92,7 @@ public class Command_smite extends FreedomCommand
{
reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length - 1), " ");
}
}
else if (args[args.length - 1].equalsIgnoreCase("-ci"))
} else if (args[args.length - 1].equalsIgnoreCase("-ci"))
{
if (args[args.length - 1].equalsIgnoreCase("-ci"))
{
@ -106,8 +103,7 @@ public class Command_smite extends FreedomCommand
{
reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length - 1), " ");
}
}
else
} else
{
reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " ");
}

View File

@ -1,10 +1,6 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.Arrays;
import java.util.List;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.Location;
@ -14,7 +10,10 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
import java.util.Arrays;
import java.util.List;
@CommandPermissions(permission = "spawnmob", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Spawns the specified entity.", usage = "/<command> <entitytype> [amount]", aliases = "spawnentity")
public class Command_spawnmob extends FreedomCommand
{
@ -64,8 +63,7 @@ public class Command_spawnmob extends FreedomCommand
try
{
amount = Integer.parseInt(args[1]);
}
catch (NumberFormatException nfex)
} catch (NumberFormatException nfex)
{
msg("Invalid amount: " + args[1], ChatColor.RED);
return true;

View File

@ -1,14 +1,12 @@
package me.totalfreedom.totalfreedommod.command;
import io.papermc.lib.PaperLib;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.ONLY_IN_GAME)
@CommandPermissions(permission = "spectate", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Quickly spectate someone.", usage = "/<command> <playername>", aliases = "spec")
public class Command_spectate extends FreedomCommand
{

View File

@ -1,14 +1,12 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
@CommandPermissions(permission = "spectate", source = SourceType.BOTH)
@CommandParameters(description = "Quickly change your own gamemode to spectator, or define someone's username to change theirs.", usage = "/<command> <[partialname]>", aliases = "gmsp")
public class Command_spectator extends FreedomCommand
{

View File

@ -1,14 +1,12 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.api.ShopItem;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandPermissions(permission = "stackingpotato", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Obtain a stacking potato", usage = "/<command>")
public class Command_stackingpotato extends FreedomCommand
{
@ -25,8 +23,7 @@ public class Command_stackingpotato extends FreedomCommand
{
playerSender.getInventory().addItem(plugin.sh.getStackingPotato());
msgNew("<green>You have been given the <item>.", Placeholder.unparsed("item", ShopItem.STACKING_POTATO.getName()));
}
else
} else
{
msgNew("<red>You don't own the <item>! Purchase it from the shop.", Placeholder.unparsed("item", ShopItem.STACKING_POTATO.getName()));
}

View File

@ -1,18 +1,17 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.HashMap;
import java.util.Map;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
import java.util.HashMap;
import java.util.Map;
@CommandPermissions(permission = "stop", source = SourceType.BOTH)
@CommandParameters(description = "Kicks everyone and stops the server.", usage = "/<command> [reason]")
public class Command_stop extends FreedomCommand
{
@ -27,8 +26,7 @@ public class Command_stop extends FreedomCommand
{
shutdown(reason);
return true;
}
else if (STOP_CONFIRM.containsKey(sender))
} else if (STOP_CONFIRM.containsKey(sender))
{
shutdown(STOP_CONFIRM.get(sender));
return true;

View File

@ -1,18 +1,16 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.Sound;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@CommandPermissions(permission = "stopsound", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Stops all sounds or a specified sound.", usage = "/<command> [sound]")
public class Command_stopsound extends FreedomCommand
{

View File

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

View File

@ -3,7 +3,6 @@ package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
@ -15,7 +14,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH)
@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
{
@ -89,8 +88,7 @@ public class Command_tag extends FreedomCommand
if (senderIsConsole)
{
msg("\"/tag off\" can't be used from the console. Use \"/tag clear <player>\" or \"/tag clearall\" instead.");
}
else
} else
{
plugin.pl.getPlayer(playerSender).setTag(null);
@ -109,8 +107,7 @@ public class Command_tag extends FreedomCommand
return false;
}
}
}
else if (args.length >= 2)
} else if (args.length >= 2)
{
switch (args[0].toLowerCase())
{
@ -154,8 +151,7 @@ public class Command_tag extends FreedomCommand
if (FUtil.containsChatColor(inputTag))
{
tag = FUtil.colorizeAsComponent(inputTag.replace("&k", ""));
}
else
} else
{
tag = FUtil.miniMessage(inputTag);
}
@ -166,26 +162,22 @@ public class Command_tag extends FreedomCommand
{
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)))
} 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
} else
{
String flattened = FUtil.miniMessage(tag);
plugin.pl.getPlayer(playerSender).setTag(flattened);
plugin.pl.getPlayer(playerSender).setTag(tag);
if (save)
{
save(playerSender, flattened);
save(playerSender, tag);
}
msgNew("Tag set to '<tag>' <saved>",
Placeholder.component("tag", tag.hoverEvent(HoverEvent.showText(Component.translatable("chat.copy")))
.clickEvent(ClickEvent.copyToClipboard(flattened))),
.clickEvent(ClickEvent.copyToClipboard(FUtil.miniMessage(tag)))),
Placeholder.unparsed("saved", save ? "(Saved)" : ""));
}
return true;
@ -200,7 +192,7 @@ public class Command_tag extends FreedomCommand
return false;
}
public void save(Player player, String tag)
public void save(Player player, Component tag)
{
PlayerData playerData = plugin.pl.getData(player);
playerData.setTag(tag);

View File

@ -1,63 +0,0 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Give yourself a prefix with random colors", usage = "/<command> <tag>", aliases = "tn")
public class Command_tagnyan extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length < 1)
{
return false;
}
final StringBuilder tag = new StringBuilder();
for (char c : ChatColor.stripColor(FUtil.colorize(StringUtils.join(args, " "))).toCharArray())
{
tag.append(FUtil.randomChatColor()).append(c);
}
String tagStr = tag.toString();
int tagLimit = (plugin.al.isAdmin(sender) ? 30 : 20);
final String rawTag = ChatColor.stripColor(tagStr).toLowerCase();
if (rawTag.length() > tagLimit)
{
msg("That tag is too long (Max is " + tagLimit + " characters).");
return true;
}
if (!plugin.al.isAdmin(sender))
{
for (String word : ConfigEntry.FORBIDDEN_WORDS.getStringList())
{
if (rawTag.contains(word))
{
msg("That tag contains a forbidden word.");
return true;
}
}
}
final FPlayer data = plugin.pl.getPlayer(playerSender);
data.setTag(tagStr);
msg("Set tag to " + tag);
return true;
}
}

View File

@ -1,15 +1,10 @@
package me.totalfreedom.totalfreedommod.command;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;
import com.earth2me.essentials.User;
import me.totalfreedom.totalfreedommod.banning.Ban;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.punishments.Punishment;
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
@ -20,7 +15,11 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;
@CommandPermissions(permission = "tempban", source = SourceType.BOTH)
@CommandParameters(description = "Temporarily ban someone.", usage = "/<command> [-q] <username> [duration] [reason]", aliases = "tban,noob")
public class Command_tempban extends FreedomCommand
{
@ -69,15 +68,13 @@ public class Command_tempban extends FreedomCommand
{
msg(PLAYER_NOT_FOUND);
return true;
}
else
} else
{
username = entry.getName();
ip = entry.getIps().get(0);
}
}
}
else
} else
{
username = player.getName();
ip = FUtil.getIp(player);
@ -94,8 +91,7 @@ public class Command_tempban extends FreedomCommand
try
{
expires = FUtil.parseDateOffset(args[1]);
}
catch (NumberFormatException error)
} catch (NumberFormatException error)
{
msg("Invalid duration: " + args[1], ChatColor.RED);
return true;
@ -116,8 +112,7 @@ public class Command_tempban extends FreedomCommand
if (player != null)
{
ban = Ban.forPlayer(player, sender, expires, reason);
}
else
} else
{
ban = Ban.forPlayerName(username, sender, expires, reason);
}
@ -144,8 +139,7 @@ public class Command_tempban extends FreedomCommand
}
FUtil.adminAction(sender.getName(), message.toString(), true);
}
else
} else
{
msg("Quietly temporarily banned " + username + ".");
}

View File

@ -1,19 +1,19 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import me.totalfreedom.totalfreedommod.GameRuleHandler;
import me.totalfreedom.totalfreedommod.LoginProcess;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@CommandPermissions(permission = "toggle", source = SourceType.BOTH)
@CommandParameters(description = "Toggles TotalFreedomMod settings", usage = "/<command> [option] [value] [value]")
public class Command_toggle extends FreedomCommand
{
@ -64,8 +64,7 @@ public class Command_toggle extends FreedomCommand
try
{
ConfigEntry.NUKE_MONITOR_RANGE.setDouble(Math.max(1.0, Math.min(500.0, Double.parseDouble(args[1]))));
}
catch (NumberFormatException ex)
} catch (NumberFormatException ex)
{
msgNew("<red>The input provided is not a valid integer.");
return true;
@ -77,8 +76,7 @@ public class Command_toggle extends FreedomCommand
try
{
ConfigEntry.NUKE_MONITOR_COUNT_BREAK.setInteger(Math.max(1, Math.min(500, Integer.parseInt(args[2]))));
}
catch (NumberFormatException ex)
} catch (NumberFormatException ex)
{
msgNew("<red>The input provided is not a valid integer.");
return true;
@ -100,8 +98,7 @@ public class Command_toggle extends FreedomCommand
try
{
ConfigEntry.EXPLOSIVE_RADIUS.setDouble(Math.max(1.0, Math.min(30.0, Double.parseDouble(args[1]))));
}
catch (NumberFormatException ex)
} catch (NumberFormatException ex)
{
msgNew("<red>The input provided is not a valid integer.");
return true;

View File

@ -1,13 +1,12 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
@CommandPermissions(permission = "clownfish.toggle", source = SourceType.BOTH)
@CommandParameters(description = "Toggle whether or not a player has the ability to use clownfish", usage = "/<command> <player>", aliases = "togglecf")
public class Command_toggleclownfish extends FreedomCommand
{

View File

@ -1,13 +1,12 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandPermissions(permission = "discord.toggle", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Toggle the display of Discord messages in-game.", usage = "/<command>", aliases = "tdiscord,tdisc")
public class Command_togglediscord extends FreedomCommand
{

View File

@ -1,12 +1,10 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandPermissions(permission = "pickup.toggle", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Toggle item pickup.", usage = "/<command>")
public class Command_togglepickup extends FreedomCommand
{

View File

@ -1,9 +1,7 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.Objects;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import me.totalfreedom.totalfreedommod.util.Groups;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
@ -14,7 +12,9 @@ import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
import java.util.Objects;
@CommandPermissions(permission = "tossmob", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Throw a mob in the direction you are facing when you right click with a bone.",
usage = "/<command> <mobtype [speed] | off | list>")
public class Command_tossmob extends FreedomCommand
@ -76,8 +76,7 @@ public class Command_tossmob extends FreedomCommand
try
{
speed = Double.parseDouble(args[1]);
}
catch (NumberFormatException ex)
} catch (NumberFormatException ex)
{
msgNew("<red>Invalid speed: <speed>", Placeholder.unparsed("speed", args[1]));
return true;
@ -87,8 +86,7 @@ public class Command_tossmob extends FreedomCommand
if (speed < 1.0)
{
speed = 1.0;
}
else if (speed > 5.0)
} else if (speed > 5.0)
{
speed = 5.0;
}

View File

@ -2,10 +2,8 @@ package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FLog;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -13,7 +11,7 @@ import org.bukkit.entity.Player;
/*
* See https://github.com/TotalFreedom/License - This file may not be edited or removed.
*/
@CommandPermissions(rank = Rank.NON_OP, source = SourceType.BOTH)
@CommandPermissions(source = SourceType.BOTH)
@CommandParameters(description = "Shows information about TotalFreedomMod or reloads it", usage = "/<command> [reload]", aliases = "tfm")
public class Command_totalfreedommod extends FreedomCommand
{

View File

@ -1,23 +1,23 @@
package me.totalfreedom.totalfreedommod.command;
import io.papermc.lib.PaperLib;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandPermissions(permission = "tprandom", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Go to a random location in the current world you are in", usage = "/<command>", aliases = "tpr,rtp")
public class Command_tprandom extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
int x = FUtil.randomInteger(-50000, 50000);
int z = FUtil.randomInteger(-50000, 50000);
int maximumDistance = ConfigEntry.RANDOM_TELEPORT_MAX_DISTANCE.getInteger();
int x = FUtil.randomInteger(-(maximumDistance), maximumDistance);
int z = FUtil.randomInteger(-(maximumDistance), maximumDistance);
int y = playerSender.getWorld().getHighestBlockYAt(x, z) + 1;
Location location = new Location(playerSender.getLocation().getWorld(), x, y, z);
PaperLib.teleportAsync(playerSender, location);

View File

@ -1,14 +1,12 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.api.ShopItem;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandPermissions(permission = "trail", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Trails rainbow wool behind you as you walk/fly.", usage = "/<command>")
public class Command_trail extends FreedomCommand
{
@ -24,7 +22,7 @@ public class Command_trail extends FreedomCommand
if (!plugin.pl.getData(playerSender).hasItem(ShopItem.RAINBOW_TRAIL))
{
msgNew("<red>You didn't purchase the ability to have a <item>! Purchase it from the shop.",Placeholder.unparsed("item", ShopItem.RAINBOW_TRAIL.getName()));
msgNew("<red>You didn't purchase the ability to have a <item>! Purchase it from the shop.", Placeholder.unparsed("item", ShopItem.RAINBOW_TRAIL.getName()));
return true;
}
@ -32,8 +30,7 @@ public class Command_trail extends FreedomCommand
{
plugin.tr.remove(playerSender);
msgNew("Trail disabled.");
}
else
} else
{
plugin.tr.add(playerSender);
msgNew("Trail enabled. Run this command again to disable it.");

View File

@ -2,14 +2,13 @@ package me.totalfreedom.totalfreedommod.command;
import com.earth2me.essentials.User;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
@CommandPermissions(permission = "unban", source = SourceType.BOTH)
@CommandParameters(description = "Unbans the specified player.", usage = "/<command> <username> [-r]")
public class Command_unban extends FreedomCommand
{

View File

@ -7,6 +7,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
// TODO: Merge with /unban.
@CommandPermissions(permission = "unbanip", source = SourceType.BOTH)
@CommandParameters(description = "Unbans the specified IP.", usage = "/<command> <ip> [-q]")
public class Command_unbanip extends FreedomCommand

View File

@ -1,15 +1,14 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.banning.Ban;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
// TODO: Merge with /unban.
@CommandPermissions(permission = "unban.name", source = SourceType.BOTH)
@CommandParameters(description = "Unbans the specified name.", usage = "/<command> <name> [-q]")
public class Command_unbanname extends FreedomCommand
{
@ -32,8 +31,7 @@ public class Command_unbanname extends FreedomCommand
{
msgNew("<red>The name <name> is not banned.", Placeholder.unparsed("name", name));
return true;
}
else if (ban.hasIps())
} else if (ban.hasIps())
{
msgNew("<red>This ban is not a name-only ban.");
return true;

View File

@ -22,15 +22,8 @@ public class Command_vanish extends FreedomCommand
{
Displayable display = plugin.rm.getDisplay(playerSender);
String displayName = display.getColor() + playerSender.getName();
String tag = display.getColoredTag();
boolean silent = false;
if (args.length > 0)
{
if (args[0].equalsIgnoreCase("-s") || args[0].equalsIgnoreCase("-silent"))
{
silent = true;
}
}
Component tag = display.getColoredTag();
boolean silent = args.length > 0 && (args[0].equalsIgnoreCase("-s") || args[0].equalsIgnoreCase("-silent"));
if (plugin.al.isVanished(playerSender.getUniqueId()))
{
@ -53,7 +46,7 @@ public class Command_vanish extends FreedomCommand
PlayerData playerData = plugin.pl.getData(playerSender);
if (playerData.getTag() != null)
{
tag = FUtil.colorize(playerData.getTag());
tag = playerData.getTag();
}
plugin.pl.getData(playerSender).setTag(tag);

View File

@ -1,8 +1,5 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.*;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.OfflinePlayer;
@ -10,7 +7,9 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH)
import java.util.*;
@CommandPermissions(permission = "whitelist", source = SourceType.BOTH)
@CommandParameters(description = "Manage the whitelist.", usage = "/<command> <on | off | list | count | add <player> | remove <player> | addall | purge>")
public class Command_whitelist extends FreedomCommand
{
@ -25,13 +24,22 @@ public class Command_whitelist extends FreedomCommand
// list
if (args[0].equalsIgnoreCase("list"))
{
if (server.getWhitelistedPlayers().isEmpty())
List<String> whitelist = server.getWhitelistedPlayers()
.stream()
.filter(Objects::nonNull)
.map(player -> player.getName() == null
? player.getUniqueId().toString()
: player.getName())
.toList();
if (whitelist.isEmpty())
{
msgNew("There are no whitelisted players.");
return true;
}
msgNew("Whitelisted players: <players>", Placeholder.unparsed("players", FUtil.listToString(server.getWhitelistedPlayers().stream().map(player ->
player.getName() != null ? player.getName() : player.getUniqueId().toString()).toList())));
msgNew("Whitelisted players: <players>", Placeholder.unparsed("players", FUtil.listToString(whitelist)));
return true;
}
@ -47,8 +55,7 @@ public class Command_whitelist extends FreedomCommand
if (player.isOnline())
{
onlineWPs++;
}
else
} else
{
offlineWPs++;
}
@ -62,7 +69,7 @@ public class Command_whitelist extends FreedomCommand
}
// Commands below are restricted to admins
checkPermission(Rank.ADMIN);
checkPermission("tfm.whitelist.admin");
// on
if (args[0].equalsIgnoreCase("on"))
@ -123,8 +130,7 @@ public class Command_whitelist extends FreedomCommand
{
FUtil.adminAction(sender.getName(), "Removing " + player.getName() + " from the whitelist", false);
player.setWhitelisted(false);
}
else
} else
{
msgNew("That player is not whitelisted");
}
@ -151,7 +157,7 @@ public class Command_whitelist extends FreedomCommand
// Telnet only
checkConsole();
checkPermission(Rank.ADMIN);
checkPermission("tfm.whitelist.purge");
// purge
if (args[0].equalsIgnoreCase("purge"))
@ -178,14 +184,12 @@ public class Command_whitelist extends FreedomCommand
}
}
return arguments;
}
else if (args.length == 2 && plugin.al.isAdmin(sender))
} else if (args.length == 2 && plugin.al.isAdmin(sender))
{
if (args[0].equals("add"))
{
return FUtil.getPlayerList();
}
else if (args[0].equals("remove"))
} else if (args[0].equals("remove"))
{
return server.getWhitelistedPlayers().stream().map(OfflinePlayer::getName).filter(Objects::nonNull).toList();
}

View File

@ -1,5 +1,6 @@
package me.totalfreedom.totalfreedommod.command;
import com.earth2me.essentials.commands.PlayerNotFoundException;
import com.google.common.collect.Lists;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.admin.Admin;
@ -19,6 +20,7 @@ import org.bukkit.command.*;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.util.StringUtil;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@ -255,14 +257,15 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
return player;
}
@Nullable
protected OfflinePlayer getOfflinePlayer(String name)
@NotNull
@Contract("null -> fail")
protected OfflinePlayer getOfflinePlayer(String name) throws PlayerNotFoundException
{
return Arrays.stream(Bukkit.getOfflinePlayers())
.filter(player -> player.getName() != null)
.filter(player -> player.getName().equalsIgnoreCase(name))
.findFirst()
.orElse(null);
.orElseThrow(PlayerNotFoundException::new);
}
protected Admin getAdmin(CommandSender sender)

View File

@ -1,8 +1,9 @@
package me.totalfreedom.totalfreedommod.config;
import java.util.List;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import java.util.List;
public enum ConfigEntry
{
@ -164,7 +165,8 @@ public enum ConfigEntry
AUTO_ENTITY_WIPE(Boolean.class, "auto_wipe"),
TOGGLE_CHAT(Boolean.class, "toggle_chat"),
DEVELOPER_MODE(Boolean.class, "developer_mode"),
ANTISPAM_MINUTES(Integer.class, "antispam_minutes");
ANTISPAM_MINUTES(Integer.class, "antispam_minutes"),
RANDOM_TELEPORT_MAX_DISTANCE(Integer.class, "random_teleport_max_distance");
//
private final Class<?> type;
private final String configName;
@ -229,7 +231,7 @@ public enum ConfigEntry
@SuppressWarnings("unchecked")
public List<String> getStringList()
{
return (List<String>)getList();
return (List<String>) getList();
}
private MainConfig getConfig()

View File

@ -6,12 +6,13 @@ import java.util.*;
import me.totalfreedom.totalfreedommod.command.FreedomCommand;
import me.totalfreedom.totalfreedommod.httpd.NanoHTTPD;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.rank.DisplayableGroup;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandMap;
import org.bukkit.command.PluginIdentifiableCommand;
import org.bukkit.permissions.Permission;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@ -111,21 +112,28 @@ public class Module_help extends HTTPDModule
}
else
{
Map<Rank, List<FreedomCommand>> freedomCommands = new HashMap<>();
Map<String, List<FreedomCommand>> freedomCommands = new HashMap<>();
// Filters out non-TFM commands
commands.stream().filter((cmd) -> cmd instanceof FreedomCommand.FCommand).forEach((tfmCmd) -> {
Rank rank = Objects.requireNonNull(FreedomCommand.getFrom(tfmCmd)).getRank();
if (!freedomCommands.containsKey(rank))
freedomCommands.put(rank, new ArrayList<>());
freedomCommands.get(rank).add(FreedomCommand.getFrom(tfmCmd));
String permission = Objects.requireNonNull(FreedomCommand.getFrom(tfmCmd)).getPermission();
if (!freedomCommands.containsKey(permission))
freedomCommands.put(permission, new ArrayList<>());
freedomCommands.get(permission).add(FreedomCommand.getFrom(tfmCmd));
});
List<String> permissions = Bukkit.getPluginManager()
.getPermissions()
.stream()
.map(Permission::getName)
.filter(permission -> permission.startsWith("tfm."))
.toList();
// Finally dumps them to HTML
Arrays.stream(Rank.values()).filter(freedomCommands::containsKey)
.sorted(comparator::compare).forEach((rank -> {
responseBody.append("</ul>\r\n").append(heading(rank.getName(), 3)).append("<ul>\r\n");
freedomCommands.get(rank).stream().sorted(comparator::compare).forEach((command) -> responseBody.append(buildDescription(command)));
permissions.stream().filter(freedomCommands::containsKey)
.sorted(comparator::compare).forEach((permission -> {
responseBody.append("</ul>\r\n").append(heading(permission, 3)).append("<ul>\r\n");
freedomCommands.get(permission).stream().sorted(comparator::compare).forEach((command) -> responseBody.append(buildDescription(command)));
}));
}
@ -160,12 +168,9 @@ public class Module_help extends HTTPDModule
return a.getName().compareTo(b.getName());
}
public int compare(Rank a, Rank b)
public int compare(String perm1, String perm2)
{
Integer levelA = a.getLevel();
Integer levelB = b.getLevel();
return levelB.compareTo(levelA);
return perm1.compareTo(perm2);
}
}
}

View File

@ -1,185 +0,0 @@
package me.totalfreedom.totalfreedommod.permissions;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.EnumMap;
import java.util.List;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.util.FLog;
import org.apache.commons.io.FileUtils;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
public class PermissionConfig extends FreedomService
{
public static final String PERMISSIONS_FILENAME = "permissions.yml";
//
private final EnumMap<PermissionEntry, Object> entries;
public YamlConfiguration configuration;
public PermissionConfig()
{
entries = new EnumMap<>(PermissionEntry.class);
PermissionDefaults tempDefaults;
try
{
try
{
try (InputStream defaultConfig = getDefaultConfig())
{
tempDefaults = new PermissionDefaults(defaultConfig);
for (PermissionEntry entry : PermissionEntry.values())
{
entries.put(entry, tempDefaults.get(entry.getConfigName()));
}
}
}
catch (IOException ex)
{
FLog.severe(ex);
}
copyDefaultConfig(getConfigFile());
load();
}
catch (Exception ex)
{
FLog.severe(ex);
}
}
@Override
public void onStart()
{
}
@Override
public void onStop()
{
}
public void load()
{
try
{
YamlConfiguration config = new YamlConfiguration();
config.load(getConfigFile());
configuration = config;
for (PermissionEntry entry : PermissionEntry.values())
{
String path = entry.getConfigName();
if (config.contains(path))
{
Object value = config.get(path);
if (value != null)
{
entries.put(entry, value);
}
}
else
{
FLog.warning("Missing permission entry " + entry.getConfigName() + ". Using default value.");
}
}
}
catch (IOException | InvalidConfigurationException ex)
{
FLog.severe(ex);
}
}
private File getConfigFile()
{
return new File(plugin.getDataFolder(), PERMISSIONS_FILENAME);
}
public List<?> getList(PermissionEntry entry)
{
try
{
return get(entry, List.class);
}
catch (IllegalArgumentException ex)
{
FLog.severe(ex);
}
return null;
}
public <T> T get(PermissionEntry entry, Class<T> type) throws IllegalArgumentException
{
Object value = entries.get(entry);
try
{
return type.cast(value);
}
catch (ClassCastException ex)
{
throw new IllegalArgumentException(entry.name() + " is not of type " + type.getSimpleName());
}
}
public <T> void set(PermissionEntry entry, T value)
{
entries.put(entry, value);
}
private void copyDefaultConfig(File targetFile)
{
if (targetFile.exists())
{
return;
}
FLog.info("Installing default permission file template: " + targetFile.getPath());
try
{
try (InputStream defaultConfig = getDefaultConfig())
{
FileUtils.copyInputStreamToFile(defaultConfig, targetFile);
}
}
catch (IOException ex)
{
FLog.severe(ex);
}
}
private InputStream getDefaultConfig()
{
return plugin.getResource(PERMISSIONS_FILENAME);
}
public static class PermissionDefaults
{
private YamlConfiguration defaults = null;
private PermissionDefaults(InputStream defaultConfig)
{
try
{
defaults = new YamlConfiguration();
final InputStreamReader isr = new InputStreamReader(defaultConfig);
defaults.load(isr);
isr.close();
}
catch (IOException | InvalidConfigurationException ex)
{
FLog.severe(ex);
}
}
public Object get(String path)
{
return defaults.get(path);
}
}
}

View File

@ -1,41 +0,0 @@
package me.totalfreedom.totalfreedommod.permissions;
import java.util.List;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
public enum PermissionEntry
{
REMOVE("remove"),
OPERATORS("operators"),
MASTER_BUILDERS("master_builders"),
ADMINS("admins"),
SENIOR_ADMINS("senior_admins");
private final String configName;
PermissionEntry(String configName)
{
this.configName = configName;
}
public String getConfigName()
{
return configName;
}
public List<?> getList()
{
return getConfig().getList(this);
}
@SuppressWarnings("unchecked")
public List<String> getEntry()
{
return (List<String>)getList();
}
private PermissionConfig getConfig()
{
return TotalFreedomMod.getPlugin().permissions;
}
}

View File

@ -1,120 +0,0 @@
package me.totalfreedom.totalfreedommod.permissions;
import com.google.common.collect.Maps;
import java.util.List;
import java.util.Map;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.rank.Displayable;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.rank.Title;
import me.totalfreedom.totalfreedommod.util.FLog;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.permissions.PermissionAttachment;
import org.bukkit.permissions.PermissionAttachmentInfo;
public class PermissionManager extends FreedomService
{
public Map<Displayable, List<String>> permissions = Maps.newHashMap();
public Map<Player, PermissionAttachment> attachments = Maps.newHashMap();
@Override
public void onStart()
{
loadPermissionNodes();
}
@Override
public void onStop()
{
}
public void loadPermissionNodes()
{
FLog.info("Loading permission nodes...");
permissions.clear();
List<String> operatorPermissions;
List<String> masterBuilderPermissions;
List<String> adminPermissions;
List<String> senioradminPermissions;
operatorPermissions = PermissionEntry.OPERATORS.getEntry();
permissions.put(Rank.OP, operatorPermissions);
masterBuilderPermissions = PermissionEntry.MASTER_BUILDERS.getEntry();
masterBuilderPermissions.addAll(operatorPermissions);
permissions.put(Title.MASTER_BUILDER, masterBuilderPermissions);
adminPermissions = PermissionEntry.ADMINS.getEntry();
adminPermissions.addAll(masterBuilderPermissions);
permissions.put(Rank.ADMIN, adminPermissions);
senioradminPermissions = PermissionEntry.SENIOR_ADMINS.getEntry();
senioradminPermissions.addAll(adminPermissions);
permissions.put(Rank.SENIOR_ADMIN, senioradminPermissions);
int count = PermissionEntry.OPERATORS.getEntry().size() + PermissionEntry.MASTER_BUILDERS.getEntry().size() + PermissionEntry.ADMINS.getEntry().size() + PermissionEntry.SENIOR_ADMINS.getEntry().size();
FLog.info("Loaded " + count + " permission nodes");
}
public void setPermissions(Player player)
{
PermissionAttachment attachment = attachments.get(player);
if (attachment != null)
{
player.removeAttachment(attachment);
}
attachment = player.addAttachment(plugin);
for (PermissionAttachmentInfo attachmentInfo : player.getEffectivePermissions())
{
for (String rootNode : PermissionEntry.REMOVE.getEntry())
{
String permission = attachmentInfo.getPermission();
if (permission.startsWith(rootNode))
{
attachment.setPermission(attachmentInfo.getPermission(), false);
}
}
}
List<String> nodes = permissions.get(plugin.rm.getRank(player));
if (nodes != null)
{
for (String node : nodes)
{
attachment.setPermission(node, true);
}
}
if (plugin.pl.getData(player).isMasterBuilder() && !plugin.al.isAdmin(player))
{
if (nodes != null)
{
for (String node : permissions.get(Title.MASTER_BUILDER))
{
attachment.setPermission(node, true);
}
}
}
attachments.put(player, attachment);
player.recalculatePermissions();
}
public void updatePlayers()
{
for (Player player : server.getOnlinePlayers())
{
setPermissions(player);
}
}
}

View File

@ -5,6 +5,7 @@ import me.totalfreedom.totalfreedommod.caging.CageData;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.freeze.FreezeData;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Arrow;
@ -50,7 +51,7 @@ public class FPlayer
private boolean lockedUp = false;
private boolean inAdminchat = false;
private boolean allCommandsBlocked = false;
private String tag = null;
private Component tag = Component.empty();
private int warningCount = 0;
@ -256,6 +257,11 @@ public class FPlayer
return unmuteTask != null;
}
public void setMuted(boolean muted)
{
setMuted(muted, 5);
}
public void setMuted(boolean muted, int minutes)
{
FUtil.cancel(unmuteTask);
@ -281,8 +287,7 @@ public class FPlayer
{
FUtil.adminAction(ConfigEntry.SERVER_NAME.getString(), "Unmuting " + getPlayer().getName(), false);
setMuted(false);
}
else
} else
{
FUtil.adminAction(ConfigEntry.SERVER_NAME.getString(), "Unmuting " + getName(), false);
}
@ -290,11 +295,6 @@ public class FPlayer
}.runTaskLater(plugin, minutes * (60L * 20L));
}
public void setMuted(boolean muted)
{
setMuted(muted, 5);
}
public BukkitTask getLockupScheduleID()
{
return this.lockupScheduleTask;
@ -335,12 +335,12 @@ public class FPlayer
this.allCommandsBlocked = commandsBlocked;
}
public String getTag()
public Component getTag()
{
return this.tag;
}
public void setTag(String tag)
public void setTag(Component tag)
{
this.tag = tag;
}

View File

@ -1,24 +1,26 @@
package me.totalfreedom.totalfreedommod.player;
import com.google.common.collect.Lists;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import me.totalfreedom.totalfreedommod.api.ShopItem;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
public class PlayerData
{
private UUID uuid;
private final List<String> ips = Lists.newArrayList();
private final List<String> notes = Lists.newArrayList();
private String tag = null;
private UUID uuid;
private Component tag = Component.empty();
private String discordID = null;
private Boolean masterBuilder = false;
@ -48,7 +50,7 @@ public class PlayerData
ips.addAll(FUtil.stringToList(resultSet.getString("ips")));
notes.clear();
notes.addAll(FUtil.stringToList(resultSet.getString("notes")));
tag = resultSet.getString("tag");
tag = LegacyComponentSerializer.legacyAmpersand().deserialize(resultSet.getString("tag"));
discordID = resultSet.getString("discord_id");
masterBuilder = resultSet.getBoolean("master_builder");
rideMode = RideMode.valueOf(resultSet.getString("ride_mode").toUpperCase());
@ -59,8 +61,7 @@ public class PlayerData
displayDiscord = resultSet.getBoolean("display_discord");
loginMessage = resultSet.getString("login_message");
inspect = resultSet.getBoolean("inspect");
}
catch (SQLException e)
} catch (SQLException e)
{
FLog.severe("Failed to load player: " + e.getMessage());
}
@ -81,7 +82,7 @@ public class PlayerData
"- Coins: " + coins + "\n" +
"- Total Votes: " + totalVotes + "\n" +
"- Display Discord: " + displayDiscord + "\n" +
"- Tag: " + FUtil.colorize(tag) + ChatColor.GRAY + "\n" +
"- Tag: " + tag.toString() + ChatColor.GRAY + "\n" +
"- Ride Mode: " + rideMode.name() + "\n" +
"- Login Message: " + loginMessage;
}
@ -141,8 +142,7 @@ public class PlayerData
try
{
notes.remove(id);
}
catch (IndexOutOfBoundsException e)
} catch (IndexOutOfBoundsException e)
{
return false;
}
@ -186,22 +186,21 @@ public class PlayerData
public Map<String, Object> toSQLStorable()
{
return new HashMap<String, Object>()
{{
put("uuid", uuid.toString());
put("ips", FUtil.listToString(ips));
put("notes", FUtil.listToString(notes));
put("tag", tag);
put("discord_id", discordID);
put("master_builder", masterBuilder);
put("ride_mode", rideMode.name());
put("coins", coins);
put("items", FUtil.listToString(items));
put("total_votes", totalVotes);
put("display_discord", displayDiscord);
put("login_message", loginMessage);
put("inspect", inspect);
}};
Map<String, Object> objectMap = new HashMap<>();
objectMap.put("uuid", uuid.toString());
objectMap.put("ips", FUtil.listToString(ips));
objectMap.put("notes", FUtil.listToString(notes));
objectMap.put("tag", tag.toString());
objectMap.put("discord_id", discordID);
objectMap.put("master_builder", masterBuilder);
objectMap.put("ride_mode", rideMode.name());
objectMap.put("coins", coins);
objectMap.put("items", FUtil.listToString(items));
objectMap.put("total_votes", totalVotes);
objectMap.put("display_discord", displayDiscord);
objectMap.put("login_message", loginMessage);
objectMap.put("inspect", inspect);
return objectMap;
}
public boolean doesDisplayDiscord()
@ -219,12 +218,12 @@ public class PlayerData
return Bukkit.getOfflinePlayer(uuid).getName();
}
public String getTag()
public Component getTag()
{
return tag;
}
public void setTag(String tag)
public void setTag(Component tag)
{
this.tag = tag;
}

View File

@ -1,19 +1,19 @@
package me.totalfreedom.totalfreedommod.player;
import com.google.common.collect.Maps;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
public class PlayerList extends FreedomService
{
@ -56,8 +56,7 @@ public class PlayerList extends FreedomService
PlayerData playerData = load(resultSet);
dataMap.put(playerData.getUuid(), playerData);
}
}
catch (SQLException e)
} catch (SQLException e)
{
FLog.severe("Failed to parse master builders: " + e.getMessage());
}
@ -101,7 +100,7 @@ public class PlayerList extends FreedomService
public boolean isTelnetMasterBuilder(PlayerData playerData)
{
Admin admin = plugin.al.getEntryByUuid(playerData.getUuid());
return admin != null && admin.getRank().isAtLeast(Rank.ADMIN) && playerData.isMasterBuilder();
return admin != null && admin.getRank().isAtLeast(GroupProvider.ADMIN.getGroup()) && playerData.isMasterBuilder();
}
// May not return null
@ -159,8 +158,7 @@ public class PlayerList extends FreedomService
plugin.sql.setPlayerValue(player, entry.getKey(), entry.getValue());
}
}
}
catch (SQLException e)
} catch (SQLException e)
{
FLog.severe("Failed to save player: " + e.getMessage());
}

View File

@ -86,6 +86,11 @@ public class DisplayableGroup implements Displayable
<= getLuckPermsGroup().getWeight().orElse(0);
}
public int getWeight()
{
return weight;
}
public Group getLuckPermsGroup() {
return this.group;
}

View File

@ -6,10 +6,7 @@ import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.luckperms.api.model.data.DataType;
import net.luckperms.api.model.group.Group;
import net.luckperms.api.node.types.PrefixNode;
import net.luckperms.api.node.types.WeightNode;
import net.kyori.adventure.text.Component;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
@ -21,10 +18,7 @@ import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.Objects;
public class RankManager extends FreedomService
{
@ -148,13 +142,13 @@ public class RankManager extends FreedomService
: GroupProvider.NON_OP.getGroup();
}
public String getTag(Player player, String defaultTag)
public Component getTag(Player player, Component defaultTag)
{
String tag = defaultTag;
Component tag = defaultTag;
PlayerData playerData = plugin.pl.getData(player);
String t = playerData.getTag();
if (t != null && !t.isEmpty())
Component t = playerData.getTag();
if (t != null && !(t.equals(Component.empty())))
{
tag = t;
}
@ -180,10 +174,9 @@ public class RankManager extends FreedomService
fPlayer.setTag(null);
player.setPlayerListName(null);
}
// FIXME: Adjust Rank to use MiniMessage instead of the legacy stuff
fPlayer.setTag(getTag(player, FUtil.miniMessage(FUtil.colorizeAsComponent(display.getColoredTag()))));
fPlayer.setTag(getTag(player, display.getColoredTag()));
updatePlayerTeam(player);
plugin.pem.setPermissions(player);
}
@EventHandler(priority = EventPriority.MONITOR)
@ -218,7 +211,7 @@ public class RankManager extends FreedomService
if (target.getTag() != null)
{
plugin.pl.getData(player).setTag(FUtil.colorize(target.getTag()));
plugin.pl.getData(player).setTag(target.getTag());
}
}

View File

@ -167,9 +167,9 @@ public class FUtil
public static String listToString(List<String> list)
{
if (list.size() == 0)
if (list.isEmpty())
{
return null;
return ""; // Don't return null here, that's stupid. Return an empty string.
}
return String.join(", ", list);

View File

@ -16,7 +16,7 @@ import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.api.TFD4JCommons;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.util.FLog;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.WordUtils;
@ -173,11 +173,11 @@ public class TFD4JCommonsImpl implements TFD4JCommons
return true;
}
if (admin.getRank().equals(Rank.ADMIN))
if (admin.getRank().equals(GroupProvider.ADMIN.getGroup()))
{
syncRolesAdminAssignment(member, adminRole, senioradminRole);
return true;
} else if (admin.getRank().equals(Rank.SENIOR_ADMIN))
} else if (admin.getRank().equals(GroupProvider.SENIOR_ADMIN.getGroup()))
{
syncRolesSeniorAssignment(member, adminRole, senioradminRole);
return true;

View File

@ -12,7 +12,7 @@ import me.totalfreedom.discord.util.SnowflakeEntry;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.rank.Displayable;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.rank.Title;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
@ -126,38 +126,32 @@ public class AdminChatListener
{
Guild server = tfd4j.getBot().getGuildById().block();
// Server Owner
assert server != null;
if (server == null) throw new IllegalStateException();
return member.getRoles().map(role ->
{
if (role.getId().equals(SnowflakeEntry.OWNER_ROLE_ID.getSnowflake()))
{
return Title.OWNER;
}
else if (role.getId().equals(SnowflakeEntry.DEVELOPER_ROLE_ID.getSnowflake()))
} else if (role.getId().equals(SnowflakeEntry.DEVELOPER_ROLE_ID.getSnowflake()))
{
return Title.DEVELOPER;
}
else if (role.getId().equals(SnowflakeEntry.EXECUTIVE_ROLE_ID.getSnowflake()))
} else if (role.getId().equals(SnowflakeEntry.EXECUTIVE_ROLE_ID.getSnowflake()))
{
return Title.EXECUTIVE;
}
else if (role.getId().equals(SnowflakeEntry.ASSISTANT_EXECUTIVE_ROLE_ID.getSnowflake()))
} else if (role.getId().equals(SnowflakeEntry.ASSISTANT_EXECUTIVE_ROLE_ID.getSnowflake()))
{
return Title.ASSTEXEC;
}
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;
}
else if (role.getId().equals(SnowflakeEntry.ADMIN_ROLE_ID.getSnowflake()))
return GroupProvider.SENIOR_ADMIN.getGroup();
} else if (role.getId().equals(SnowflakeEntry.ADMIN_ROLE_ID.getSnowflake()))
{
return Rank.ADMIN;
}
else if (role.getId().equals(SnowflakeEntry.MASTERBUILDER_ROLE_ID.getSnowflake()))
return GroupProvider.ADMIN.getGroup();
} else if (role.getId().equals(SnowflakeEntry.MASTERBUILDER_ROLE_ID.getSnowflake()))
{
return Title.MASTER_BUILDER;
}
else
return GroupProvider.MASTER_BUILDER.getGroup();
} else
{
return null;
}

View File

@ -53,7 +53,7 @@ public class MinecraftListener
{
Boolean b = m.getMessage()
.getChannel()
.map(c -> c instanceof TextChannel)
.map(TextChannel.class::isInstance)
.block();
return b != null && b;
}).subscribe(this::doMessageBodyDetails);

View File

@ -24,7 +24,7 @@ public class PrivateMessageListener
.on(MessageCreateEvent.class)
.filter(event -> event.getMessage().getAuthor().orElse(null) != null)
.filter(event -> !event.getMessage().getAuthor().orElseThrow().getId().equals(tfd4j.getBot().getClient().getSelfId()))
.filter(event -> event.getMessage().getContent().strip().matches("[0-9][0-9][0-9][0-9][0-9]"))
.filter(event -> event.getMessage().getContent().strip().matches("\\d{5}"))
.subscribe(event ->
{
String code = event.getMessage().getContent().strip();

View File

@ -1,18 +1,12 @@
package me.totalfreedom.discord.util;
import discord4j.common.util.Snowflake;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.entity.Member;
import discord4j.core.object.entity.Role;
import me.totalfreedom.discord.Bot;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.rank.Title;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.Bukkit;
public class TFM_Bridge
@ -37,33 +31,26 @@ public class TFM_Bridge
{
if (role.getId().equals(SnowflakeEntry.OWNER_ROLE_ID.getSnowflake()))
{
return Title.OWNER.getColoredTag();
}
else if (role.getId().equals(SnowflakeEntry.DEVELOPER_ROLE_ID.getSnowflake()))
return FUtil.miniMessage(Title.OWNER.getColoredTag());
} else if (role.getId().equals(SnowflakeEntry.DEVELOPER_ROLE_ID.getSnowflake()))
{
return Title.DEVELOPER.getColoredTag();
}
else if (role.getId().equals(SnowflakeEntry.EXECUTIVE_ROLE_ID.getSnowflake()))
return FUtil.miniMessage(Title.DEVELOPER.getColoredTag());
} else if (role.getId().equals(SnowflakeEntry.EXECUTIVE_ROLE_ID.getSnowflake()))
{
return Title.EXECUTIVE.getColoredTag();
}
else if (role.getId().equals(SnowflakeEntry.ASSISTANT_EXECUTIVE_ROLE_ID.getSnowflake()))
return FUtil.miniMessage(Title.EXECUTIVE.getColoredTag());
} else if (role.getId().equals(SnowflakeEntry.ASSISTANT_EXECUTIVE_ROLE_ID.getSnowflake()))
{
return Title.ASSTEXEC.getColoredTag();
}
else if (role.getId().equals(SnowflakeEntry.SENIOR_ADMIN_ROLE_ID.getSnowflake()))
return FUtil.miniMessage(Title.ASSTEXEC.getColoredTag());
} else if (role.getId().equals(SnowflakeEntry.SENIOR_ADMIN_ROLE_ID.getSnowflake()))
{
return GroupProvider.SENIOR_ADMIN.getGroup().getColoredTag().toString();
}
else if (role.getId().equals(SnowflakeEntry.ADMIN_ROLE_ID.getSnowflake()))
return FUtil.miniMessage(GroupProvider.SENIOR_ADMIN.getGroup().getColoredTag());
} else if (role.getId().equals(SnowflakeEntry.ADMIN_ROLE_ID.getSnowflake()))
{
return GroupProvider.ADMIN.getGroup().getColoredTag().toString();
}
else if (role.getId().equals(SnowflakeEntry.MASTERBUILDER_ROLE_ID.getSnowflake()))
return FUtil.miniMessage(GroupProvider.ADMIN.getGroup().getColoredTag());
} else if (role.getId().equals(SnowflakeEntry.MASTERBUILDER_ROLE_ID.getSnowflake()))
{
return GroupProvider.MASTER_BUILDER.getGroup().getColoredTag().toString());
}
else
return FUtil.miniMessage(GroupProvider.MASTER_BUILDER.getGroup().getColoredTag());
} else
{
return "";
}