LuckPerms Integration (1/2)

This is part 1 of 2 of the luckperms integration for our switch to permissions.
This commit is contained in:
Paul Reilly 2023-03-29 00:46:32 -05:00
parent f91c21cc81
commit 65540b7f3a
96 changed files with 567 additions and 724 deletions

View File

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>me.totalfreedom</groupId> <groupId>me.totalfreedom</groupId>
<artifactId>TotalFreedomMod</artifactId> <artifactId>TotalFreedomMod</artifactId>
<version>2023.02</version> <version>2023.03</version>
</parent> </parent>
<artifactId>commons</artifactId> <artifactId>commons</artifactId>
@ -39,10 +39,17 @@
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>net.luckperms</groupId>
<artifactId>api</artifactId>
<version>5.4</version>
<scope>provided</scope>
</dependency>
<dependency> <dependency>
<groupId>org.bstats</groupId> <groupId>org.bstats</groupId>
<artifactId>bstats-bukkit</artifactId> <artifactId>bstats-bukkit</artifactId>
<version>3.0.0</version> <version>3.0.1</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>

View File

@ -87,10 +87,8 @@ public class AntiSpam extends FreedomService
@EventHandler(priority = EventPriority.LOW) @EventHandler(priority = EventPriority.LOW)
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event)
{ {
String command = event.getMessage();
final Player player = event.getPlayer(); final Player player = event.getPlayer();
final FPlayer fPlayer = plugin.pl.getPlayer(player); final FPlayer fPlayer = plugin.pl.getPlayer(player);
fPlayer.setLastCommand(command);
if (fPlayer.allCommandsBlocked()) if (fPlayer.allCommandsBlocked())
{ {

View File

@ -110,6 +110,7 @@ public class TotalFreedomMod extends JavaPlugin
public CoreProtectBridge cpb; public CoreProtectBridge cpb;
public WorldEditBridge web; public WorldEditBridge web;
public WorldGuardBridge wgb; public WorldGuardBridge wgb;
public LuckPermsBridge lpb;
public static TotalFreedomMod getPlugin() public static TotalFreedomMod getPlugin()
{ {
@ -335,6 +336,7 @@ public class TotalFreedomMod extends JavaPlugin
ldb = new LibsDisguisesBridge(); ldb = new LibsDisguisesBridge();
web = new WorldEditBridge(); web = new WorldEditBridge();
wgb = new WorldGuardBridge(); wgb = new WorldGuardBridge();
lpb = new LuckPermsBridge();
} }
private void initFun() private void initFun()

View File

@ -1,14 +1,9 @@
package me.totalfreedom.totalfreedommod.admin; package me.totalfreedom.totalfreedommod.admin;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import com.google.common.base.Strings;
import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.DisplayableGroup;
import me.totalfreedom.totalfreedommod.util.FConverter; import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
@ -16,12 +11,16 @@ import org.bukkit.Bukkit;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
public class Admin public class Admin
{ {
private final List<String> ips = new ArrayList<>(); private final List<String> ips = new ArrayList<>();
private UUID uuid; private UUID uuid;
private boolean active = true; private boolean active = true;
private Rank rank = Rank.ADMIN; private DisplayableGroup rank = GroupProvider.ADMIN.getGroup();
private Date lastLogin = new Date(); private Date lastLogin = new Date();
private Boolean commandSpy = false; private Boolean commandSpy = false;
private Boolean potionSpy = false; private Boolean potionSpy = false;
@ -39,15 +38,14 @@ public class Admin
{ {
this.uuid = UUID.fromString(resultSet.getString("uuid")); this.uuid = UUID.fromString(resultSet.getString("uuid"));
this.active = resultSet.getBoolean("active"); this.active = resultSet.getBoolean("active");
this.rank = Rank.findRank(resultSet.getString("rank")); this.rank = GroupProvider.fromArgument(resultSet.getString("rank")).getGroup();
this.ips.clear(); this.ips.clear();
this.ips.addAll(FUtil.stringToList(resultSet.getString("ips"))); this.ips.addAll(FUtil.stringToList(resultSet.getString("ips")));
this.lastLogin = new Date(resultSet.getLong("last_login")); this.lastLogin = new Date(resultSet.getLong("last_login"));
this.commandSpy = resultSet.getBoolean("command_spy"); this.commandSpy = resultSet.getBoolean("command_spy");
this.potionSpy = resultSet.getBoolean("potion_spy"); this.potionSpy = resultSet.getBoolean("potion_spy");
this.acFormat = resultSet.getString("ac_format"); this.acFormat = resultSet.getString("ac_format");
} } catch (SQLException e)
catch (SQLException e)
{ {
FLog.severe("Failed to load admin: " + e.getMessage()); FLog.severe("Failed to load admin: " + e.getMessage());
} }
@ -71,18 +69,17 @@ public class Admin
public Map<String, Object> toSQLStorable() public Map<String, Object> toSQLStorable()
{ {
Map<String, Object> map = new HashMap<String, Object>() HashMap<String, Object> map = new HashMap<>();
{{ map.put("uuid", uuid.toString());
put("uuid", uuid.toString()); map.put("active", active);
put("active", active); map.put("rank", rank.toString());
put("rank", rank.toString()); map.put("ips", FUtil.listToString(ips));
put("ips", FUtil.listToString(ips)); map.put("last_login", lastLogin.getTime());
put("last_login", lastLogin.getTime()); map.put("command_spy", commandSpy);
put("command_spy", commandSpy); map.put("potion_spy", potionSpy);
put("potion_spy", potionSpy); map.put("ac_format", acFormat);
put("ac_format", acFormat);
}};
return map; return map;
} }
// Util IP methods // Util IP methods
@ -154,8 +151,9 @@ public class Admin
} }
} }
private void setActiveSplitWorkToReduceComplexity(TotalFreedomMod plugin) { private void setActiveSplitWorkToReduceComplexity(TotalFreedomMod plugin)
if (getRank().isAtLeast(Rank.ADMIN)) {
if (getRank().isAtLeast(GroupProvider.ADMIN.getGroup()))
{ {
if (plugin.btb != null) if (plugin.btb != null)
{ {
@ -163,7 +161,7 @@ public class Admin
} }
// Ensure admins don't have admin functionality when removed (FS-222) // Ensure admins don't have admin functionality when removed (FS-222)
AdminList.vanished.remove(getName()); AdminList.vanished.remove(getUuid());
if (plugin.esb != null) if (plugin.esb != null)
{ {
@ -192,12 +190,12 @@ public class Admin
} }
} }
public Rank getRank() public DisplayableGroup getRank()
{ {
return rank; return rank;
} }
public void setRank(Rank rank) public void setRank(DisplayableGroup rank)
{ {
this.rank = rank; this.rank = rank;
} }

View File

@ -8,6 +8,7 @@ import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import me.totalfreedom.totalfreedommod.FreedomService; import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
@ -133,7 +134,9 @@ public class AdminList extends FreedomService
return false; return false;
} }
return admin.getRank().ordinal() >= Rank.SENIOR_ADMIN.ordinal(); return admin.getRank().getLuckPermsGroup().getWeight().orElse(0)
>= GroupProvider.SENIOR_ADMIN.getGroup().getLuckPermsGroup().getWeight().orElse(1);
// We don't want this to return true if there's no group weight available.
} }
public Admin getAdmin(CommandSender sender) public Admin getAdmin(CommandSender sender)
@ -286,29 +289,23 @@ public class AdminList extends FreedomService
public void deactivateOldEntries(boolean verbose) public void deactivateOldEntries(boolean verbose)
{ {
for (Admin admin : allAdmins) allAdmins.stream()
.filter(admin -> admin.isActive() && !admin.getRank().isAtLeast(GroupProvider.SENIOR_ADMIN.getGroup()))
.forEach(admin ->
{ {
if (!admin.isActive() || admin.getRank().isAtLeast(Rank.SENIOR_ADMIN))
{
continue;
}
final Date lastLogin = admin.getLastLogin(); final Date lastLogin = admin.getLastLogin();
final long lastLoginHours = TimeUnit.HOURS.convert(new Date().getTime() - lastLogin.getTime(), TimeUnit.MILLISECONDS); final long lastLoginHours = TimeUnit.HOURS.convert(new Date().getTime() - lastLogin.getTime(), TimeUnit.MILLISECONDS);
if (lastLoginHours < ConfigEntry.ADMINLIST_CLEAN_THESHOLD_HOURS.getInteger()) if (lastLoginHours < ConfigEntry.ADMINLIST_CLEAN_THESHOLD_HOURS.getInteger())
{ {
continue; return;
} }
if (verbose) if (verbose)
{ {
FUtil.adminAction("TotalFreedomMod", "Deactivating admin " + admin.getName() + ", inactive for " + lastLoginHours + " hours", true); FUtil.adminAction("TotalFreedomMod", "Deactivating admin " + admin.getName() + ", inactive for " + lastLoginHours + " hours", true);
} }
admin.setActive(false); admin.setActive(false);
save(admin); save(admin);
} });
updateTables(); updateTables();
} }

View File

@ -0,0 +1,29 @@
package me.totalfreedom.totalfreedommod.bridge;
import net.luckperms.api.LuckPerms;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.UnknownDependencyException;
import java.util.concurrent.Executor;
public class LuckPermsBridge
{
private final LuckPerms luckPerms;
public LuckPermsBridge()
{
RegisteredServiceProvider<LuckPerms> provider = Bukkit.getServicesManager()
.getRegistration(LuckPerms.class);
if (provider == null) throw new UnknownDependencyException("LuckPerms must be present!");
this.luckPerms = provider.getProvider();
}
public LuckPerms getAPI()
{
return luckPerms;
}
}

View File

@ -2,13 +2,15 @@ package me.totalfreedom.totalfreedommod.command;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface CommandPermissions public @interface CommandPermissions
{ {
Rank rank() default Rank.NON_OP; String permission() default "default";
SourceType source() default SourceType.BOTH; SourceType source() default SourceType.BOTH;

View File

@ -1,14 +1,13 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "adminchat", source = SourceType.BOTH)
@CommandParameters(description = "Talk privately with other admins on the server.", usage = "/<command> [message]", aliases = "o,sc,ac,staffchat") @CommandParameters(description = "Talk privately with other admins on the server.", usage = "/<command> [message]", aliases = "o,sc,ac,staffchat")
public class Command_adminchat extends FreedomCommand public class Command_adminchat extends FreedomCommand
{ {
@ -27,8 +26,7 @@ public class Command_adminchat extends FreedomCommand
FPlayer userinfo = plugin.pl.getPlayer(playerSender); FPlayer userinfo = plugin.pl.getPlayer(playerSender);
userinfo.setAdminChat(!userinfo.inAdminChat()); userinfo.setAdminChat(!userinfo.inAdminChat());
msgNew("Admin chat turned <status>.", Placeholder.unparsed("status", userinfo.inAdminChat() ? "on" : "off")); msgNew("Admin chat turned <status>.", Placeholder.unparsed("status", userinfo.inAdminChat() ? "on" : "off"));
} } else
else
{ {
plugin.cm.adminChat(sender, StringUtils.join(args, " ")); plugin.cm.adminChat(sender, StringUtils.join(args, " "));
} }

View File

@ -2,12 +2,11 @@ package me.totalfreedom.totalfreedommod.command;
import java.util.List; import java.util.List;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH) @CommandPermissions(permission = "admininfo", source = SourceType.BOTH)
@CommandParameters(description = "Information on how to apply for admin.", usage = "/<command>", aliases = "si,ai,staffinfo") @CommandParameters(description = "Information on how to apply for admin.", usage = "/<command>", aliases = "si,ai,staffinfo")
public class Command_admininfo extends FreedomCommand public class Command_admininfo extends FreedomCommand
{ {

View File

@ -4,14 +4,13 @@ import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "adminmode", source = SourceType.BOTH)
@CommandParameters(description = "Denies joining of operators and only allows admins to join.", usage = "/<command> [on | off]", aliases = "staffmode") @CommandParameters(description = "Denies joining of operators and only allows admins to join.", usage = "/<command> [on | off]", aliases = "staffmode")
public class Command_adminmode extends FreedomCommand public class Command_adminmode extends FreedomCommand
{ {

View File

@ -4,7 +4,6 @@ import io.papermc.lib.PaperLib;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.world.WorldTime; import me.totalfreedom.totalfreedommod.world.WorldTime;
import me.totalfreedom.totalfreedommod.world.WorldWeather; import me.totalfreedom.totalfreedommod.world.WorldWeather;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
@ -13,7 +12,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH) @CommandPermissions(permission = "adminworld", source = SourceType.BOTH)
@CommandParameters(description = "Allows for admins to configure time, and weather of the AdminWorld, and allows for admins and ops to go to the AdminWorld.", @CommandParameters(description = "Allows for admins to configure time, and weather of the AdminWorld, and allows for admins and ops to go to the AdminWorld.",
usage = "/<command> [time <morning | noon | evening | night> | weather <off | rain | storm>]", usage = "/<command> [time <morning | noon | evening | night> | weather <off | rain | storm>]",
aliases = "sw,aw,staffworld") aliases = "sw,aw,staffworld")
@ -50,7 +49,7 @@ public class Command_adminworld extends FreedomCommand
{ {
switch (commandMode) switch (commandMode)
{ {
case TELEPORT: case TELEPORT ->
{ {
if (!(sender instanceof Player) || playerSender == null) if (!(sender instanceof Player) || playerSender == null)
{ {
@ -61,8 +60,7 @@ public class Command_adminworld extends FreedomCommand
try try
{ {
adminWorld = plugin.wm.adminworld.getWorld(); adminWorld = plugin.wm.adminworld.getWorld();
} } catch (Exception ignored)
catch (Exception ignored)
{ {
} }
@ -70,15 +68,13 @@ public class Command_adminworld extends FreedomCommand
{ {
msgNew("Going to the main world."); msgNew("Going to the main world.");
PaperLib.teleportAsync(playerSender, server.getWorlds().get(0).getSpawnLocation()); PaperLib.teleportAsync(playerSender, server.getWorlds().get(0).getSpawnLocation());
} } else
else
{ {
msgNew("Going to the AdminWorld."); msgNew("Going to the AdminWorld.");
plugin.wm.adminworld.sendToWorld(playerSender); plugin.wm.adminworld.sendToWorld(playerSender);
} }
break;
} }
case TIME: case TIME ->
{ {
assertCommandPerms(sender, playerSender); assertCommandPerms(sender, playerSender);
@ -89,20 +85,17 @@ public class Command_adminworld extends FreedomCommand
{ {
plugin.wm.adminworld.setTimeOfDay(timeOfDay); plugin.wm.adminworld.setTimeOfDay(timeOfDay);
msgNew("AdminWorld time set to: <time>", Placeholder.unparsed("time", timeOfDay.name())); msgNew("AdminWorld time set to: <time>", Placeholder.unparsed("time", timeOfDay.name()));
} } else
else
{ {
msgNew("<red>Invalid time of day. Can be: sunrise, noon, sunset, midnight"); msgNew("<red>Invalid time of day. Can be: sunrise, noon, sunset, midnight");
} }
} } else
else
{ {
return false; return false;
} }
break;
} }
case WEATHER: case WEATHER ->
{ {
assertCommandPerms(sender, playerSender); assertCommandPerms(sender, playerSender);
@ -113,20 +106,17 @@ public class Command_adminworld extends FreedomCommand
{ {
plugin.wm.adminworld.setWeatherMode(weatherMode); plugin.wm.adminworld.setWeatherMode(weatherMode);
msgNew("AdminWorld weather set to <mode>.", Placeholder.unparsed("mode", weatherMode.name())); msgNew("AdminWorld weather set to <mode>.", Placeholder.unparsed("mode", weatherMode.name()));
} } else
else
{ {
msgNew("<red>Invalid weather mode. Can be: off, rain, storm"); msgNew("<red>Invalid weather mode. Can be: off, rain, storm");
} }
} } else
else
{ {
return false; return false;
} }
break;
} }
default: default ->
{ {
return false; return false;
} }
@ -148,7 +138,7 @@ public class Command_adminworld extends FreedomCommand
// TODO: Redo this properly // TODO: Redo this properly
private void assertCommandPerms(CommandSender sender, Player playerSender) throws PermissionDeniedException private void assertCommandPerms(CommandSender sender, Player playerSender) throws PermissionDeniedException
{ {
if (!(sender instanceof Player) || playerSender == null || !isAdmin(sender)) if (!(sender instanceof Player) || playerSender == null || !sender.hasPermission("tfm.adminworld.manage"))
{ {
throw new PermissionDeniedException(); throw new PermissionDeniedException();
} }

View File

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

View File

@ -1,12 +1,11 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "announce", source = SourceType.BOTH)
@CommandParameters(description = "Make an announcement anonymously to operators.", usage = "/<command> <message>") @CommandParameters(description = "Make an announcement anonymously to operators.", usage = "/<command> <message>")
public class Command_announce extends FreedomCommand public class Command_announce extends FreedomCommand
{ {

View File

@ -1,12 +1,11 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "autoclear", source = SourceType.BOTH)
@CommandParameters(description = "Toggle whether or not a player has their inventory automatically cleared when they join", usage = "/<command> <player>") @CommandParameters(description = "Toggle whether or not a player has their inventory automatically cleared when they join", usage = "/<command> <player>")
public class Command_autoclear extends FreedomCommand public class Command_autoclear extends FreedomCommand
{ {

View File

@ -1,12 +1,11 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "autotp", source = SourceType.BOTH)
@CommandParameters(description = "Toggle whether or not a player is automatically teleported when they join", usage = "/<command> <player>") @CommandParameters(description = "Toggle whether or not a player is automatically teleported when they join", usage = "/<command> <player>")
public class Command_autotp extends FreedomCommand public class Command_autotp extends FreedomCommand
{ {

View File

@ -7,12 +7,10 @@ import me.totalfreedom.totalfreedommod.banning.Ban;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.punishments.Punishment; import me.totalfreedom.totalfreedommod.punishments.Punishment;
import me.totalfreedom.totalfreedommod.punishments.PunishmentType; import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Location; import org.bukkit.Location;
@ -20,7 +18,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH, blockHostConsole = true) @CommandPermissions(permission = "ban", source = SourceType.BOTH, blockHostConsole = true)
@CommandParameters(description = "Bans the specified player.", usage = "/<command> <username> [reason] [-nrb | -q]", aliases = "gtfo") @CommandParameters(description = "Bans the specified player.", usage = "/<command> <username> [reason] [-nrb | -q]", aliases = "gtfo")
public class Command_ban extends FreedomCommand public class Command_ban extends FreedomCommand
{ {

View File

@ -1,18 +1,15 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.banning.Ban; import me.totalfreedom.totalfreedommod.banning.Ban;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH, blockHostConsole = true) @CommandPermissions(permission = "banip", source = SourceType.BOTH, blockHostConsole = true)
@CommandParameters(description = "Bans the specified ip.", usage = "/<command> <ip> [reason] [-q]") @CommandParameters(description = "Bans the specified ip.", usage = "/<command> <ip> [reason] [-q]")
public class Command_banip extends FreedomCommand public class Command_banip extends FreedomCommand
{ {

View File

@ -1,6 +1,5 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@ -10,7 +9,7 @@ import org.bukkit.entity.Player;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH) @CommandPermissions(permission = "banlist", source = SourceType.BOTH)
@CommandParameters(description = "Shows all banned player names. Admins may optionally use 'purge' to clear the list.", usage = "/<command> [purge]") @CommandParameters(description = "Shows all banned player names. Admins may optionally use 'purge' to clear the list.", usage = "/<command> [purge]")
public class Command_banlist extends FreedomCommand public class Command_banlist extends FreedomCommand
{ {
@ -21,7 +20,7 @@ public class Command_banlist extends FreedomCommand
{ {
if (args[0].equalsIgnoreCase("purge")) if (args[0].equalsIgnoreCase("purge"))
{ {
checkRank(Rank.SENIOR_ADMIN); checkPermission("tfm.banlist.purge");
FUtil.adminAction(sender.getName(), "Purging the ban list", true); FUtil.adminAction(sender.getName(), "Purging the ban list", true);
msgNew("<green>Purged <amount> player bans.", Placeholder.unparsed("amount", String.valueOf(plugin.bm.purge()))); msgNew("<green>Purged <amount> player bans.", Placeholder.unparsed("amount", String.valueOf(plugin.bm.purge())));
return true; return true;
@ -39,6 +38,6 @@ public class Command_banlist extends FreedomCommand
@Override @Override
protected List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) protected List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
{ {
return args.length == 1 && plugin.al.isSeniorAdmin(sender) ? Collections.singletonList("purge") : Collections.emptyList(); return args.length == 1 && sender.hasPermission("tfm.banlist.purge") ? Collections.singletonList("purge") : Collections.emptyList();
} }
} }

View File

@ -1,17 +1,15 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.banning.Ban; import me.totalfreedom.totalfreedommod.banning.Ban;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH, blockHostConsole = true) @CommandPermissions(permission = "banname", source = SourceType.BOTH, blockHostConsole = true)
@CommandParameters(description = "Bans the specified name.", usage = "/<command> <name> [reason] [-q]") @CommandParameters(description = "Bans the specified name.", usage = "/<command> <name> [reason] [-q]")
public class Command_banname extends FreedomCommand public class Command_banname extends FreedomCommand
{ {

View File

@ -3,14 +3,13 @@ package me.totalfreedom.totalfreedommod.command;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.SplittableRandom; import java.util.SplittableRandom;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "bird", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Spawns a random type of fish at your location.", usage = "/<command>") @CommandParameters(description = "Spawns a random type of fish at your location.", usage = "/<command>")
public class Command_bird extends FreedomCommand public class Command_bird extends FreedomCommand
{ {

View File

@ -3,14 +3,13 @@ package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.punishments.Punishment; import me.totalfreedom.totalfreedommod.punishments.Punishment;
import me.totalfreedom.totalfreedommod.punishments.PunishmentType; import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "blockcmd", source = SourceType.BOTH)
@CommandParameters(description = "Block all commands for everyone on the server, or a specific player.", usage = "/<command> <-a | purge | <player>>", aliases = "blockcommands,blockcommand,bc,bcmd") @CommandParameters(description = "Block all commands for everyone on the server, or a specific player.", usage = "/<command> <-a | purge | <player>>", aliases = "blockcommands,blockcommand,bc,bcmd")
public class Command_blockcmd extends FreedomCommand public class Command_blockcmd extends FreedomCommand
{ {

View File

@ -3,10 +3,8 @@ package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.punishments.Punishment; import me.totalfreedom.totalfreedommod.punishments.Punishment;
import me.totalfreedom.totalfreedommod.punishments.PunishmentType; import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.HumanEntity; import org.bukkit.entity.HumanEntity;
@ -15,7 +13,7 @@ import org.bukkit.entity.Player;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "blockedit", source = SourceType.BOTH)
@CommandParameters(description = "Restricts/restores block modification abilities for everyone on the server or a certain player.", usage = "/<command> [<player> [reason] | list | purge | all]") @CommandParameters(description = "Restricts/restores block modification abilities for everyone on the server or a certain player.", usage = "/<command> [<player> [reason] | list | purge | all]")
public class Command_blockedit extends FreedomCommand public class Command_blockedit extends FreedomCommand
{ {

View File

@ -3,7 +3,6 @@ package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.punishments.Punishment; import me.totalfreedom.totalfreedommod.punishments.Punishment;
import me.totalfreedom.totalfreedommod.punishments.PunishmentType; import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@ -12,7 +11,7 @@ import org.bukkit.entity.Player;
import java.util.List; import java.util.List;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "blockpvp", source = SourceType.BOTH)
@CommandParameters(description = "Toggle PVP mode for everyone or a certain player.", usage = "/<command> [<player> | list | purge | all]", aliases = "pvpblock,pvpmode") @CommandParameters(description = "Toggle PVP mode for everyone or a certain player.", usage = "/<command> [<player> | list | purge | all]", aliases = "pvpblock,pvpmode")
public class Command_blockpvp extends FreedomCommand public class Command_blockpvp extends FreedomCommand
{ {

View File

@ -1,14 +1,13 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "blockredstone", source = SourceType.BOTH)
@CommandParameters(description = "Blocks redstone on the server.", usage = "/<command>", aliases = "bre") @CommandParameters(description = "Blocks redstone on the server.", usage = "/<command>", aliases = "bre")
public class Command_blockredstone extends FreedomCommand public class Command_blockredstone extends FreedomCommand
{ {

View File

@ -7,9 +7,7 @@ import java.util.List;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.punishments.Punishment; import me.totalfreedom.totalfreedommod.punishments.Punishment;
import me.totalfreedom.totalfreedommod.punishments.PunishmentType; import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -17,7 +15,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "cage", source = SourceType.BOTH)
@CommandParameters(description = "Place a cage around someone with certain blocks, or someone's player head.", usage = "/<command> <purge | <partialname> [head | block] [playername | blockname]") @CommandParameters(description = "Place a cage around someone with certain blocks, or someone's player head.", usage = "/<command> <purge | <partialname> [head | block] [playername | blockname]")
public class Command_cage extends FreedomCommand public class Command_cage extends FreedomCommand
{ {

View File

@ -1,6 +1,5 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@ -9,7 +8,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "cake", source = SourceType.BOTH)
@CommandParameters(description = "For the people that are still alive - gives a cake to everyone on the server.", usage = "/<command>") @CommandParameters(description = "For the people that are still alive - gives a cake to everyone on the server.", usage = "/<command>")
public class Command_cake extends FreedomCommand public class Command_cake extends FreedomCommand
{ {

View File

@ -1,13 +1,12 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "cleanchat", source = SourceType.BOTH)
@CommandParameters(description = "Clears the chat.", usage = "/<command>", aliases = "cc") @CommandParameters(description = "Clears the chat.", usage = "/<command>", aliases = "cc")
public class Command_cleanchat extends FreedomCommand public class Command_cleanchat extends FreedomCommand
{ {

View File

@ -1,11 +1,10 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.ONLY_CONSOLE) @CommandPermissions(permission = "cleardiscordqueue", source = SourceType.ONLY_CONSOLE)
@CommandParameters(description = "Clear the discord message queue.", usage = "/<command>") @CommandParameters(description = "Clear the discord message queue.", usage = "/<command>")
public class Command_cleardiscordqueue extends FreedomCommand public class Command_cleardiscordqueue extends FreedomCommand
{ {

View File

@ -1,15 +1,15 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.Collections;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH) import java.util.Collections;
import java.util.List;
@CommandPermissions(permission = "clearinventory", source = SourceType.BOTH)
@CommandParameters(description = "Clear your inventory.", usage = "/<command> [player]", aliases = "ci,clear") @CommandParameters(description = "Clear your inventory.", usage = "/<command> [player]", aliases = "ci,clear")
public class Command_clearinventory extends FreedomCommand public class Command_clearinventory extends FreedomCommand
{ {
@ -25,8 +25,7 @@ public class Command_clearinventory extends FreedomCommand
playerSender.getInventory().clear(); playerSender.getInventory().clear();
msgNew("<green>Your inventory has been cleared."); msgNew("<green>Your inventory has been cleared.");
} } else
else
{ {
if (plugin.al.isAdmin(sender)) if (plugin.al.isAdmin(sender))
{ {
@ -35,8 +34,7 @@ public class Command_clearinventory extends FreedomCommand
FUtil.adminAction(sender.getName(), "Clearing everyone's inventory", true); FUtil.adminAction(sender.getName(), "Clearing everyone's inventory", true);
server.getOnlinePlayers().forEach(player -> player.getInventory().clear()); server.getOnlinePlayers().forEach(player -> player.getInventory().clear());
msgNew("<green>Successfully cleared everyone's inventory."); msgNew("<green>Successfully cleared everyone's inventory.");
} } else
else
{ {
Player player = getPlayer(args[0]); Player player = getPlayer(args[0]);
@ -50,8 +48,7 @@ public class Command_clearinventory extends FreedomCommand
msgNew("<green>Successfully cleared <player>'s inventory.", Placeholder.unparsed("player", player.getName())); msgNew("<green>Successfully cleared <player>'s inventory.", Placeholder.unparsed("player", player.getName()));
msgNew(player, "<sender> has cleared your inventory.", Placeholder.unparsed("sender", sender.getName())); msgNew(player, "<sender> has cleared your inventory.", Placeholder.unparsed("sender", sender.getName()));
} }
} } else
else
{ {
return noPerms(); return noPerms();
} }

View File

@ -1,15 +1,12 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.api.ShopItem; import me.totalfreedom.totalfreedommod.api.ShopItem;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "clownfish", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Obtain a clown fish", usage = "/<command>") @CommandParameters(description = "Obtain a clown fish", usage = "/<command>")
public class Command_clownfish extends FreedomCommand public class Command_clownfish extends FreedomCommand
{ {

View File

@ -1,13 +1,12 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.admin.Admin; import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "cmdspy", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Spy on commands", usage = "/<command>", aliases = "commandspy") @CommandParameters(description = "Spy on commands", usage = "/<command>", aliases = "commandspy")
public class Command_cmdspy extends FreedomCommand public class Command_cmdspy extends FreedomCommand
{ {

View File

@ -2,12 +2,8 @@ package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -15,7 +11,7 @@ import org.bukkit.entity.Player;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH) @CommandPermissions(permission = "coins", source = SourceType.BOTH)
@CommandParameters(description = "Shows the amount of coins you or another player has. Also allows you to give coins to other players.", usage = "/<command> [player] | pay <player> <amount>") @CommandParameters(description = "Shows the amount of coins you or another player has. Also allows you to give coins to other players.", usage = "/<command> [player] | pay <player> <amount>")
public class Command_coins extends FreedomCommand public class Command_coins extends FreedomCommand
{ {

View File

@ -1,9 +1,6 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -11,11 +8,10 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.ONLY_CONSOLE) @CommandPermissions(permission = "consolesay", source = SourceType.ONLY_CONSOLE)
@CommandParameters(description = "Telnet/Console command - Send a chat message with chat formatting over telnet.", usage = "/<command> <message>", aliases = "csay") @CommandParameters(description = "Telnet/Console command - Send a chat message with chat formatting over telnet.", usage = "/<command> <message>", aliases = "csay")
public class Command_consolesay extends FreedomCommand public class Command_consolesay extends FreedomCommand
{ {
@Override @Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {

View File

@ -1,13 +1,9 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Random; import java.util.Random;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -15,7 +11,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "cookie", source = SourceType.BOTH)
@CommandParameters(description = "For those who have no friends - gives a cookie to everyone on the server.", usage = "/<command>") @CommandParameters(description = "For those who have no friends - gives a cookie to everyone on the server.", usage = "/<command>")
public class Command_cookie extends FreedomCommand public class Command_cookie extends FreedomCommand
{ {

View File

@ -28,7 +28,7 @@ public class Command_creative extends FreedomCommand
return true; return true;
} }
checkRank(Rank.ADMIN); checkPermission(Rank.ADMIN);
if (args[0].equals("-a")) if (args[0].equals("-a"))
{ {

View File

@ -1,7 +1,6 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.SplittableRandom; import java.util.SplittableRandom;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@ -9,7 +8,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "deafen", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Makes random sounds.", usage = "/<command>") @CommandParameters(description = "Makes random sounds.", usage = "/<command>")
public class Command_deafen extends FreedomCommand public class Command_deafen extends FreedomCommand
{ {

View File

@ -1,12 +1,9 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.format.TextDecoration;
import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -14,7 +11,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "debugstick", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Get a stick of happiness.", usage = "/<command>") @CommandParameters(description = "Get a stick of happiness.", usage = "/<command>")
public class Command_debugstick extends FreedomCommand public class Command_debugstick extends FreedomCommand
{ {

View File

@ -1,12 +1,11 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "denick", source = SourceType.BOTH)
@CommandParameters(description = "Essentials Interface Command - Remove the nickname of all players on the server.", usage = "/<command>") @CommandParameters(description = "Essentials Interface Command - Remove the nickname of all players on the server.", usage = "/<command>")
public class Command_denick extends FreedomCommand public class Command_denick extends FreedomCommand
{ {

View File

@ -1,15 +1,15 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList; import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.StringUtils; import 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.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "deop", source = SourceType.BOTH)
@CommandParameters(description = "Deop a player", usage = "/<command> <partialname>") @CommandParameters(description = "Deop a player", usage = "/<command> <partialname>")
public class Command_deop extends FreedomCommand public class Command_deop extends FreedomCommand
{ {
@ -27,32 +27,29 @@ public class Command_deop extends FreedomCommand
silent = args[1].equalsIgnoreCase("-s"); silent = args[1].equalsIgnoreCase("-s");
} }
final String targetName = args[0].toLowerCase(); Player player = Bukkit.getServer().getPlayer(args[0]);
final List<String> matchedPlayerNames = new ArrayList<>(); if (player == null)
for (Player player : server.getOnlinePlayers())
{ {
if ((player.getName().toLowerCase().contains(targetName) || player.getDisplayName().toLowerCase().contains(targetName) msg(sender, PLAYER_NOT_FOUND);
|| player.getName().contains(targetName) || player.getDisplayName().contains(targetName)) && return true;
player.isOp() && !plugin.al.isVanished(player.getUniqueId())) }
if (plugin.al.isVanished(player.getUniqueId()))
{ {
matchedPlayerNames.add(player.getName()); msgNew("<red>You cannot de-op <player>, as they are vanished.", Placeholder.unparsed("player", player.getName()));
player.setOp(false); return true;
}
User user = GroupProvider.getUser(player);
user.setPrimaryGroup(GroupProvider.NON_OP.getGroup().getLuckPermsGroup().getName());
msg(player, YOU_ARE_NOT_OP); msg(player, YOU_ARE_NOT_OP);
plugin.rm.updateDisplay(player); plugin.rm.updateDisplay(player);
}
}
if (!matchedPlayerNames.isEmpty())
{
if (!silent) if (!silent)
{ {
FUtil.adminAction(sender.getName(), "De-opping " + StringUtils.join(matchedPlayerNames, ", "), false); FUtil.adminAction(sender.getName(), "De-opping " + player.getName(), false);
}
}
else
{
msgNew("Either the player is already deopped, or the player could not be found.");
} }
return true; return true;

View File

@ -1,12 +1,13 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.luckperms.api.model.user.User;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH, blockHostConsole = true) @CommandPermissions(permission = "", source = SourceType.BOTH, blockHostConsole = true)
@CommandParameters(description = "Deop everyone on the server.", usage = "/<command>") @CommandParameters(description = "Deop everyone on the server.", usage = "/<command>")
public class Command_deopall extends FreedomCommand public class Command_deopall extends FreedomCommand
{ {
@ -16,12 +17,13 @@ public class Command_deopall extends FreedomCommand
{ {
FUtil.adminAction(sender.getName(), "De-opping all players on the server", true); FUtil.adminAction(sender.getName(), "De-opping all players on the server", true);
for (Player player : server.getOnlinePlayers()) server.getOnlinePlayers().forEach(player ->
{ {
player.setOp(false); User user = GroupProvider.getUser(player);
user.setPrimaryGroup(GroupProvider.NON_OP.getGroup().getLuckPermsGroup().getName());
msg(player, YOU_ARE_NOT_OP); msg(player, YOU_ARE_NOT_OP);
plugin.rm.updateDisplay(player); plugin.rm.updateDisplay(player);
} });
return true; return true;
} }

View File

@ -2,7 +2,6 @@ package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
@ -16,7 +15,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "dispfill", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Fill nearby dispensers with a set of items of your choice.", usage = "/<command> <radius> <comma,separated,items>") @CommandParameters(description = "Fill nearby dispensers with a set of items of your choice.", usage = "/<command> <radius> <comma,separated,items>")
public class Command_dispfill extends FreedomCommand public class Command_dispfill extends FreedomCommand
{ {

View File

@ -5,7 +5,6 @@ import me.totalfreedom.totalfreedommod.banning.Ban;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.punishments.Punishment; import me.totalfreedom.totalfreedommod.punishments.Punishment;
import me.totalfreedom.totalfreedommod.punishments.PunishmentType; import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.ArrayUtils;
@ -18,7 +17,7 @@ import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
@CommandPermissions(rank = Rank.SENIOR_ADMIN, source = SourceType.ONLY_CONSOLE, blockHostConsole = true) @CommandPermissions(permission = "doom", source = SourceType.ONLY_CONSOLE, blockHostConsole = true)
@CommandParameters(description = "Sends the specified player to their doom.", usage = "/<command> <playername> [reason]") @CommandParameters(description = "Sends the specified player to their doom.", usage = "/<command> <playername> [reason]")
public class Command_doom extends FreedomCommand public class Command_doom extends FreedomCommand
{ {

View File

@ -1,13 +1,11 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "eject", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Eject any entities that are riding you.", usage = "/<command>") @CommandParameters(description = "Eject any entities that are riding you.", usage = "/<command>")
public class Command_eject extends FreedomCommand public class Command_eject extends FreedomCommand
{ {

View File

@ -8,10 +8,8 @@ import java.util.Objects;
import java.util.stream.IntStream; import java.util.stream.IntStream;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -19,7 +17,7 @@ import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "enchant", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Enchant items.", usage = "/<command> <list | addall | reset | add <name> [level] | remove <name>>") @CommandParameters(description = "Enchant items.", usage = "/<command> <list | addall | reset | add <name> [level] | remove <name>>")
public class Command_enchant extends FreedomCommand public class Command_enchant extends FreedomCommand
{ {

View File

@ -1,11 +1,10 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.NON_OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "end", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Go to \"The End\".", usage = "/<command>") @CommandParameters(description = "Go to \"The End\".", usage = "/<command>")
public class Command_end extends FreedomCommand public class Command_end extends FreedomCommand
{ {

View File

@ -3,7 +3,6 @@ package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import me.totalfreedom.totalfreedommod.util.Groups; import me.totalfreedom.totalfreedommod.util.Groups;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
@ -13,7 +12,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "entitywipe", source = SourceType.BOTH)
@CommandParameters(description = "Remove various server entities that may cause lag, such as dropped items, minecarts, and boats.", usage = "/<command> [name | -a]", aliases = "ew,rd") @CommandParameters(description = "Remove various server entities that may cause lag, such as dropped items, minecarts, and boats.", usage = "/<command> [name | -a]", aliases = "ew,rd")
public class Command_entitywipe extends FreedomCommand public class Command_entitywipe extends FreedomCommand
{ {

View File

@ -2,7 +2,6 @@ package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
@ -12,7 +11,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "expel", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Push people away from you.", usage = "/<command> [radius] [strength]") @CommandParameters(description = "Push people away from you.", usage = "/<command> [radius] [strength]")
public class Command_expel extends FreedomCommand public class Command_expel extends FreedomCommand
{ {

View File

@ -2,7 +2,6 @@ package me.totalfreedom.totalfreedommod.command;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@ -11,7 +10,7 @@ import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
@CommandPermissions(rank = Rank.SENIOR_ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "explode", source = SourceType.BOTH)
@CommandParameters(description = "Surprise someone.", usage = "/<command> <player>") @CommandParameters(description = "Surprise someone.", usage = "/<command> <player>")
public class Command_explode extends FreedomCommand public class Command_explode extends FreedomCommand
{ {

View File

@ -1,7 +1,6 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.tag.Tag; 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.Placeholder;
@ -10,7 +9,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "explosivearrows", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Make arrows explode", usage = "/<command>", aliases = "ea") @CommandParameters(description = "Make arrows explode", usage = "/<command>", aliases = "ea")
public class Command_explosivearrows extends FreedomCommand public class Command_explosivearrows extends FreedomCommand
{ {

View File

@ -1,13 +1,12 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "findip", source = SourceType.BOTH)
@CommandParameters(description = "Shows all IPs registered to a player", usage = "/<command> <player>", aliases = "showip,listip") @CommandParameters(description = "Shows all IPs registered to a player", usage = "/<command> <player>", aliases = "showip,listip")
public class Command_findip extends FreedomCommand public class Command_findip extends FreedomCommand
{ {

View File

@ -1,13 +1,12 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.api.ShopItem; import me.totalfreedom.totalfreedommod.api.ShopItem;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "fireball", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Obtain a fire ball", usage = "/<command>") @CommandParameters(description = "Obtain a fire ball", usage = "/<command>")
public class Command_fireball extends FreedomCommand public class Command_fireball extends FreedomCommand
{ {

View File

@ -1,12 +1,11 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.NON_OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "flatlands", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Go to the Flatlands.", usage = "/<command>") @CommandParameters(description = "Go to the Flatlands.", usage = "/<command>")
public class Command_flatlands extends FreedomCommand public class Command_flatlands extends FreedomCommand
{ {
@ -17,8 +16,7 @@ public class Command_flatlands extends FreedomCommand
if (ConfigEntry.FLATLANDS_GENERATE.getBoolean()) if (ConfigEntry.FLATLANDS_GENERATE.getBoolean())
{ {
plugin.wm.flatlands.sendToWorld(playerSender); plugin.wm.flatlands.sendToWorld(playerSender);
} } else
else
{ {
msgNew("<red>Flatlands is currently disabled in the TotalFreedomMod configuration."); msgNew("<red>Flatlands is currently disabled in the TotalFreedomMod configuration.");
} }

View File

@ -1,11 +1,10 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH) @CommandPermissions(permission = "forcekill", source = SourceType.BOTH)
@CommandParameters(description = "Forcefully kill someone - for those who REALLY need to die.", usage = "/<command> <playername>") @CommandParameters(description = "Forcefully kill someone - for those who REALLY need to die.", usage = "/<command> <playername>")
public class Command_forcekill extends FreedomCommand public class Command_forcekill extends FreedomCommand
{ {
@ -13,7 +12,7 @@ public class Command_forcekill extends FreedomCommand
@Override @Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
if (!plugin.al.isAdmin(sender) && !senderIsConsole) if (!sender.hasPermission("tfm.forcekill.other") && !senderIsConsole)
{ {
playerSender.setHealth(0); playerSender.setHealth(0);
return true; return true;

View File

@ -1,20 +1,13 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.freeze.FreezeData; import me.totalfreedom.totalfreedommod.freeze.FreezeData;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import net.kyori.adventure.title.Title;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.time.Duration; @CommandPermissions(permission = "freeze", source = SourceType.BOTH)
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
@CommandParameters(description = "Freeze/Unfreeze a specified player, or all non-admins on the server.", usage = "/<command> [target | purge]", aliases = "fr") @CommandParameters(description = "Freeze/Unfreeze a specified player, or all non-admins on the server.", usage = "/<command> [target | purge]", aliases = "fr")
public class Command_freeze extends FreedomCommand public class Command_freeze extends FreedomCommand
{ {

View File

@ -1,13 +1,12 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.SENIOR_ADMIN, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "fuckoff", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "You'll never even see it coming - repeatedly push players away from you until command is untoggled.", usage = "/<command> <on [radius (default=25)] | off>") @CommandParameters(description = "You'll never even see it coming - repeatedly push players away from you until command is untoggled.", usage = "/<command> <on [radius (default=25)] | off>")
public class Command_fuckoff extends FreedomCommand public class Command_fuckoff extends FreedomCommand
{ {

View File

@ -1,15 +1,13 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH, blockHostConsole = true) @CommandPermissions(permission = "gcmd", source = SourceType.BOTH, blockHostConsole = true)
@CommandParameters(description = "Send a command as someone else.", usage = "/<command> <fromname> <outcommand>") @CommandParameters(description = "Send a command as someone else.", usage = "/<command> <fromname> <outcommand>")
public class Command_gcmd extends FreedomCommand public class Command_gcmd extends FreedomCommand
{ {

View File

@ -1,6 +1,5 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -8,7 +7,7 @@ import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "glow", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Toggles the glowing outline effect because y'all lazy as fuck", usage = "/<command>") @CommandParameters(description = "Toggles the glowing outline effect because y'all lazy as fuck", usage = "/<command>")
public class Command_glow extends FreedomCommand public class Command_glow extends FreedomCommand
{ {

View File

@ -1,13 +1,12 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.api.ShopItem; import me.totalfreedom.totalfreedommod.api.ShopItem;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "grapplinghook", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Obtain a grappling hook", usage = "/<command>") @CommandParameters(description = "Obtain a grappling hook", usage = "/<command>")
public class Command_grapplinghook extends FreedomCommand public class Command_grapplinghook extends FreedomCommand
{ {

View File

@ -1,12 +1,11 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "gravity", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Toggles player gravity on/off.", usage = "/<command>") @CommandParameters(description = "Toggles player gravity on/off.", usage = "/<command>")
public class Command_gravity extends FreedomCommand public class Command_gravity extends FreedomCommand
{ {

View File

@ -3,7 +3,6 @@ package me.totalfreedom.totalfreedommod.command;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FLog;
import org.apache.commons.lang.math.DoubleRange; import org.apache.commons.lang.math.DoubleRange;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -13,7 +12,7 @@ import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask; import org.bukkit.scheduler.BukkitTask;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH) @CommandPermissions(permission = "health", source = SourceType.BOTH)
@CommandParameters(description = "View server health, such as ticks-per-second, memory, etc.", usage = "/<command>") @CommandParameters(description = "View server health, such as ticks-per-second, memory, etc.", usage = "/<command>")
public class Command_health extends FreedomCommand public class Command_health extends FreedomCommand
{ {

View File

@ -1,11 +1,10 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.SENIOR_ADMIN, source = SourceType.ONLY_CONSOLE) @CommandPermissions(permission = "indefban", source = SourceType.ONLY_CONSOLE)
@CommandParameters(description = "Reload the indefinite ban list.", usage = "/<command> <reload>", aliases = "ib") @CommandParameters(description = "Reload the indefinite ban list.", usage = "/<command> <reload>", aliases = "ib")
public class Command_indefban extends FreedomCommand public class Command_indefban extends FreedomCommand
{ {

View File

@ -6,14 +6,13 @@ import java.util.Optional;
import java.util.stream.IntStream; import java.util.stream.IntStream;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "inspect", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Block inspector tool for operators.", usage = "/<command> [history] [page]", aliases = "ins") @CommandParameters(description = "Block inspector tool for operators.", usage = "/<command> [history] [page]", aliases = "ins")
public class Command_inspect extends FreedomCommand public class Command_inspect extends FreedomCommand
{ {

View File

@ -3,7 +3,6 @@ package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@ -11,7 +10,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH) @CommandPermissions(permission = "invis", source = SourceType.BOTH)
@CommandParameters(description = "Shows (optionally clears) invisible players", usage = "/<command> [clear]") @CommandParameters(description = "Shows (optionally clears) invisible players", usage = "/<command> [clear]")
public class Command_invis extends FreedomCommand public class Command_invis extends FreedomCommand
{ {

View File

@ -1,7 +1,6 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -9,7 +8,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "invsee", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Look into another player's inventory, or optionally take items out.", usage = "/<command> <player> [offhand | armor]", aliases = "inv,insee") @CommandParameters(description = "Look into another player's inventory, or optionally take items out.", usage = "/<command> <player> [offhand | armor]", aliases = "inv,insee")
public class Command_invsee extends FreedomCommand public class Command_invsee extends FreedomCommand
{ {
@ -51,8 +50,7 @@ public class Command_invsee extends FreedomCommand
inventory.setItem(1, offhand); inventory.setItem(1, offhand);
playerSender.openInventory(inventory); playerSender.openInventory(inventory);
return true; return true;
} } else if (args[1].equals("armor"))
else if (args[1].equals("armor"))
{ {
Inventory inventory = server.createInventory(null, 9, player.getName() + "'s armor"); Inventory inventory = server.createInventory(null, 9, player.getName() + "'s armor");
inventory.setContents(player.getInventory().getArmorContents()); inventory.setContents(player.getInventory().getArmorContents());

View File

@ -1,16 +1,16 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import me.totalfreedom.totalfreedommod.fun.Jumppads; import me.totalfreedom.totalfreedommod.fun.Jumppads;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@CommandPermissions(permission = "jumppads", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Toggles jumppads on/off, view the status of jumppads, or make them sideways.", usage = "/<command> <on | off | info | sideways <on | off>>", aliases = "launchpads,jp") @CommandParameters(description = "Toggles jumppads on/off, view the status of jumppads, or make them sideways.", usage = "/<command> <on | off | info | sideways <on | off>>", aliases = "launchpads,jp")
public class Command_jumppads extends FreedomCommand public class Command_jumppads extends FreedomCommand
{ {
@ -41,8 +41,7 @@ public class Command_jumppads extends FreedomCommand
} }
msg("Disabled your jumppads.", ChatColor.GRAY); msg("Disabled your jumppads.", ChatColor.GRAY);
plugin.jp.players.put(playerSender, Jumppads.JumpPadMode.OFF); plugin.jp.players.put(playerSender, Jumppads.JumpPadMode.OFF);
} } else
else
{ {
if (plugin.jp.players.get(playerSender) != Jumppads.JumpPadMode.OFF) if (plugin.jp.players.get(playerSender) != Jumppads.JumpPadMode.OFF)
{ {
@ -52,8 +51,7 @@ public class Command_jumppads extends FreedomCommand
msg("Enabled your jumpppads.", ChatColor.GRAY); msg("Enabled your jumpppads.", ChatColor.GRAY);
plugin.jp.players.put(playerSender, Jumppads.JumpPadMode.MADGEEK); plugin.jp.players.put(playerSender, Jumppads.JumpPadMode.MADGEEK);
} }
} } else
else
{ {
if (plugin.jp.players.get(playerSender) == Jumppads.JumpPadMode.OFF) if (plugin.jp.players.get(playerSender) == Jumppads.JumpPadMode.OFF)
{ {
@ -72,8 +70,7 @@ public class Command_jumppads extends FreedomCommand
} }
msg("Set Jumppads mode to: Normal", ChatColor.GRAY); msg("Set Jumppads mode to: Normal", ChatColor.GRAY);
plugin.jp.players.put(playerSender, Jumppads.JumpPadMode.MADGEEK); plugin.jp.players.put(playerSender, Jumppads.JumpPadMode.MADGEEK);
} } else
else
{ {
if (plugin.jp.players.get(playerSender) == Jumppads.JumpPadMode.NORMAL_AND_SIDEWAYS) if (plugin.jp.players.get(playerSender) == Jumppads.JumpPadMode.NORMAL_AND_SIDEWAYS)
{ {
@ -83,8 +80,7 @@ public class Command_jumppads extends FreedomCommand
msg("Set Jumppads mode to: Normal and Sideways", ChatColor.GRAY); msg("Set Jumppads mode to: Normal and Sideways", ChatColor.GRAY);
plugin.jp.players.put(playerSender, Jumppads.JumpPadMode.NORMAL_AND_SIDEWAYS); plugin.jp.players.put(playerSender, Jumppads.JumpPadMode.NORMAL_AND_SIDEWAYS);
} }
} } else
else
{ {
return false; return false;
} }
@ -95,15 +91,10 @@ public class Command_jumppads extends FreedomCommand
@Override @Override
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
{ {
if (!plugin.al.isAdmin(sender))
{
return Collections.emptyList();
}
if (args.length == 1) if (args.length == 1)
{ {
return Arrays.asList("on", "off", "info", "sideways"); return Arrays.asList("on", "off", "info", "sideways");
} } else if (args.length == 2)
else if (args.length == 2)
{ {
if (args[0].equals("sideways")) if (args[0].equals("sideways"))
{ {

View File

@ -2,9 +2,9 @@ package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.punishments.Punishment; import me.totalfreedom.totalfreedommod.punishments.Punishment;
import me.totalfreedom.totalfreedommod.punishments.PunishmentType; import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -12,7 +12,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "kick", source = SourceType.BOTH)
@CommandParameters(description = "Kick the specified player.", usage = "/<command> <player> [reason] [-q]") @CommandParameters(description = "Kick the specified player.", usage = "/<command> <player> [reason] [-q]")
public class Command_kick extends FreedomCommand public class Command_kick extends FreedomCommand
{ {
@ -38,17 +38,14 @@ public class Command_kick extends FreedomCommand
if (args[args.length - 1].equalsIgnoreCase("-q")) if (args[args.length - 1].equalsIgnoreCase("-q"))
{ {
silent = true; silent = true;
FLog.debug("silent");
if (args.length >= 2) if (args.length >= 2)
{ {
FLog.debug("set reason (silent)");
reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length - 1), " "); reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length - 1), " ");
} }
} }
else if (args.length > 1) else if (args.length > 1)
{ {
FLog.debug("set reason");
reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " "); reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " ");
} }
@ -74,7 +71,7 @@ public class Command_kick extends FreedomCommand
} }
else else
{ {
msg("Kicked " + player.getName() + " quietly."); msgNew("Kicked <player> quietly.", Placeholder.unparsed("player", player.getName()));
} }
player.kickPlayer(builder.toString()); player.kickPlayer(builder.toString());

View File

@ -1,6 +1,5 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
@ -8,7 +7,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "kickall", source = SourceType.BOTH)
@CommandParameters(description = "Kick all non-admins on server.", usage = "/<command>", aliases = "kickall") @CommandParameters(description = "Kick all non-admins on server.", usage = "/<command>", aliases = "kickall")
public class Command_kicknoob extends FreedomCommand public class Command_kicknoob extends FreedomCommand
{ {

View File

@ -3,8 +3,7 @@ package me.totalfreedom.totalfreedommod.command;
import java.util.Iterator; import java.util.Iterator;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.fun.Landminer.Landmine; import me.totalfreedom.totalfreedommod.fun.Landminer.Landmine;
import me.totalfreedom.totalfreedommod.rank.Rank; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
@ -12,7 +11,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "landmine", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Set a landmine trap.", usage = "/<command>") @CommandParameters(description = "Set a landmine trap.", usage = "/<command>")
public class Command_landmine extends FreedomCommand public class Command_landmine extends FreedomCommand
{ {
@ -22,13 +21,13 @@ public class Command_landmine extends FreedomCommand
{ {
if (!ConfigEntry.LANDMINES_ENABLED.getBoolean()) if (!ConfigEntry.LANDMINES_ENABLED.getBoolean())
{ {
msg("The landmine is currently disabled.", ChatColor.GREEN); msgNew("<red>Landmines are currently disabled.");
return true; return true;
} }
if (!ConfigEntry.ALLOW_EXPLOSIONS.getBoolean()) if (!ConfigEntry.ALLOW_EXPLOSIONS.getBoolean())
{ {
msg("Explosions are currently disabled.", ChatColor.GREEN); msgNew("<red>Explosions are currently disabled.");
return true; return true;
} }
@ -41,7 +40,7 @@ public class Command_landmine extends FreedomCommand
final Iterator<Landmine> landmines = plugin.lm.getLandmines().iterator(); final Iterator<Landmine> landmines = plugin.lm.getLandmines().iterator();
while (landmines.hasNext()) while (landmines.hasNext())
{ {
msg(landmines.next().toString()); msgNew(landmines.next().toString());
} }
return true; return true;
} }
@ -59,7 +58,7 @@ public class Command_landmine extends FreedomCommand
landmine.setType(Material.TNT); landmine.setType(Material.TNT);
plugin.lm.add(new Landmine(landmine.getLocation(), playerSender, radius)); plugin.lm.add(new Landmine(landmine.getLocation(), playerSender, radius));
msg("Landmine planted - Radius = " + radius + " blocks.", ChatColor.GREEN); msgNew("<green>Landmine planted - Radius: <radius> blocks.", Placeholder.unparsed("radius", String.valueOf(radius)));
return true; return true;
} }
} }

View File

@ -1,45 +0,0 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.FPlayer;
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.ADMIN, source = SourceType.BOTH)
@CommandParameters(description = "Show the last command the specified player used.", usage = "/<command> <player>")
public class Command_lastcmd extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length == 0)
{
return false;
}
final Player player = getPlayer(args[0]);
if (player == null)
{
msg(FreedomCommand.PLAYER_NOT_FOUND);
return true;
}
final FPlayer playerdata = plugin.pl.getPlayer(player);
if (playerdata != null)
{
String lastCommand = playerdata.getLastCommand();
if (lastCommand.isEmpty())
{
lastCommand = "(none)";
}
msg(player.getName() + " - Last Command: " + lastCommand, ChatColor.GRAY);
}
return true;
}
}

View File

@ -31,12 +31,12 @@ public class Command_list extends FreedomCommand
case "-s", "-a" -> listFilter = ListFilter.ADMINS; case "-s", "-a" -> listFilter = ListFilter.ADMINS;
case "-v" -> case "-v" ->
{ {
checkRank(Rank.ADMIN); checkPermission(Rank.ADMIN);
listFilter = ListFilter.VANISHED_ADMINS; listFilter = ListFilter.VANISHED_ADMINS;
} }
case "-t" -> case "-t" ->
{ {
checkRank(Rank.ADMIN); checkPermission(Rank.ADMIN);
listFilter = ListFilter.TELNET_SESSIONS; listFilter = ListFilter.TELNET_SESSIONS;
} }
default -> default ->

View File

@ -28,7 +28,7 @@ public class Command_loginmessage extends FreedomCommand
return true; return true;
} }
checkRank(Rank.ADMIN); checkPermission(Rank.ADMIN);
String message = StringUtils.join(args, " "); String message = StringUtils.join(args, " ");
if (!message.contains("%rank%") && !message.contains("%coloredrank%")) if (!message.contains("%rank%") && !message.contains("%coloredrank%"))

View File

@ -11,7 +11,6 @@ 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.Placeholder;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -40,7 +39,7 @@ public class Command_myadmin extends FreedomCommand
// -o switch // -o switch
if (args[0].equals("-o")) if (args[0].equals("-o"))
{ {
checkRank(Rank.SENIOR_ADMIN); checkPermission(Rank.SENIOR_ADMIN);
init = playerSender; init = playerSender;
targetPlayer = getPlayer(args[1]); targetPlayer = getPlayer(args[1]);
if (targetPlayer == null) if (targetPlayer == null)

View File

@ -1,23 +1,24 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import me.totalfreedom.totalfreedommod.admin.Admin; import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.DisplayableGroup;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import me.totalfreedom.totalfreedommod.util.PermissibleCompletion;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH) import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
@CommandPermissions(permission = "saconfig", source = SourceType.BOTH)
@CommandParameters(description = "List, add, remove, or set the rank of admins, clean or reload the admin list, or view admin information.", usage = "/<command> <list | clean | reload | | setrank <username> <rank> | <add | remove | info> <username>>", aliases = "slconfig") @CommandParameters(description = "List, add, remove, or set the rank of admins, clean or reload the admin list, or view admin information.", usage = "/<command> <list | clean | reload | | setrank <username> <rank> | <add | remove | info> <username>>", aliases = "slconfig")
public class Command_saconfig extends FreedomCommand public class Command_saconfig extends FreedomCommand
{ {
@ -41,7 +42,7 @@ public class Command_saconfig extends FreedomCommand
case "clean": case "clean":
{ {
checkConsole(); checkConsole();
checkRank(Rank.SENIOR_ADMIN); checkPermission("tfm.saconfig.clean");
FUtil.adminAction(sender.getName(), "Cleaning the admin list", true); FUtil.adminAction(sender.getName(), "Cleaning the admin list", true);
plugin.al.deactivateOldEntries(true); plugin.al.deactivateOldEntries(true);
@ -51,7 +52,7 @@ public class Command_saconfig extends FreedomCommand
case "reload": case "reload":
{ {
checkRank(Rank.SENIOR_ADMIN); checkPermission("tfm.saconfig.reload");
FUtil.adminAction(sender.getName(), "Reloading the admin list", true); FUtil.adminAction(sender.getName(), "Reloading the admin list", true);
plugin.al.load(); plugin.al.load();
@ -62,27 +63,22 @@ public class Command_saconfig extends FreedomCommand
case "setrank": case "setrank":
{ {
checkConsole(); checkConsole();
checkRank(Rank.SENIOR_ADMIN); checkPermission("tfm.saconfig.setrank");
if (args.length < 3) if (args.length < 3)
{ {
return false; return false;
} }
Rank rank = Rank.findRank(args[2]); DisplayableGroup rank = GroupProvider.fromArgument(args[2]).getGroup();
if (rank == null) if (rank == null)
{ {
msgNew("<red>Unknown rank: <rank>", Placeholder.unparsed("rank", args[2])); msgNew("<red>Unknown rank: <rank>", Placeholder.unparsed("rank", args[2]));
return true; return true;
} }
if (rank.isConsole())
{
msgNew("<red>What, did you think it was going to be that easy?");
return true;
}
if (!rank.isAtLeast(Rank.ADMIN)) if (!rank.isAtLeast(GroupProvider.ADMIN.getGroup()))
{ {
msgNew("<red>Rank must be Admin or higher."); msgNew("<red>Rank must be Admin or higher.");
return true; return true;
@ -111,8 +107,7 @@ public class Command_saconfig extends FreedomCommand
plugin.dc.syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID()); plugin.dc.syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID());
} }
msgNew("Set <admin>'s rank to <rank>.", Placeholder.unparsed("admin", admin.getName()), msgNew("Set <admin>'s rank to <rank>.", Placeholder.unparsed("admin", admin.getName()), Placeholder.unparsed("rank", rank.getName()));
Placeholder.unparsed("rank", rank.getName()));
return true; return true;
} }
@ -124,7 +119,7 @@ public class Command_saconfig extends FreedomCommand
return false; return false;
} }
checkRank(Rank.ADMIN); checkPermission("tfm.saconfig.info");
Admin admin = plugin.al.getEntryByName(args[1]); Admin admin = plugin.al.getEntryByName(args[1]);
@ -141,8 +136,7 @@ public class Command_saconfig extends FreedomCommand
{ {
msgNew("Unknown admin: <player>", Placeholder.unparsed("player", args[1])); msgNew("Unknown admin: <player>", Placeholder.unparsed("player", args[1]));
return true; return true;
} } else
else
{ {
msgNew(admin.toString()); msgNew(admin.toString());
} }
@ -158,7 +152,7 @@ public class Command_saconfig extends FreedomCommand
} }
checkConsole(); checkConsole();
checkRank(Rank.ADMIN); checkPermission("tfm.saconfig.add");
// Player already admin? // Player already admin?
final Player player = getPlayer(args[1]); final Player player = getPlayer(args[1]);
@ -193,8 +187,7 @@ public class Command_saconfig extends FreedomCommand
plugin.al.addAdmin(admin); plugin.al.addAdmin(admin);
plugin.rm.updateDisplay(player); plugin.rm.updateDisplay(player);
} } else // Existing admin
else // Existing admin
{ {
FUtil.adminAction(sender.getName(), "Re-adding " + player.getName() + " to the admin list", true); FUtil.adminAction(sender.getName(), "Re-adding " + player.getName() + " to the admin list", true);
admin.addIp(FUtil.getIp(player)); admin.addIp(FUtil.getIp(player));
@ -229,7 +222,7 @@ public class Command_saconfig extends FreedomCommand
} }
checkConsole(); checkConsole();
checkRank(Rank.ADMIN); checkPermission("tfm.saconfig.remove");
Player player = getPlayer(args[1]); Player player = getPlayer(args[1]);
@ -274,27 +267,19 @@ public class Command_saconfig extends FreedomCommand
{ {
if (args.length == 1) if (args.length == 1)
{ {
List<String> arguments = new ArrayList<>(); return argumentCompletions(args[0],
arguments.add("list"); PermissibleCompletion.of("tfm.saconfig.info", "info"),
if (plugin.al.isAdmin(sender)) PermissibleCompletion.of("tfm.saconfig.add", "add"),
{ PermissibleCompletion.of("tfm.saconfig.remove", "remove"),
arguments.add("info"); PermissibleCompletion.of("tfm.saconfig.reload", "reload"),
arguments.add("add"); PermissibleCompletion.of("tfm.saconfig.clean", "clean"),
arguments.add("remove"); PermissibleCompletion.of("tfm.saconfig.setrank", "setrank"));
}
if (plugin.al.isSeniorAdmin(sender))
{
arguments.add("reload");
arguments.add("clean");
arguments.add("setrank");
}
return arguments;
} }
if (args.length == 2 && (args[0].equals("add") || args[0].equals("remove") || args[0].equals("setrank") || args[0].equals("info"))) if (args.length == 2 && (args[0].equals("add") || args[0].equals("remove") || args[0].equals("setrank") || args[0].equals("info")))
{ {
return FUtil.getPlayerList(); return playerCompletions(args[1]);
} }
if (args.length == 3 && args[0].equals("setrank")) if (args.length == 3 && args[0].equals("setrank") && sender.hasPermission("tfm.saconfig.setrank"))
{ {
return Arrays.asList("ADMIN", "SENIOR_ADMIN"); return Arrays.asList("ADMIN", "SENIOR_ADMIN");
} }

View File

@ -29,7 +29,7 @@ public class Command_survival extends FreedomCommand
return true; return true;
} }
checkRank(Rank.ADMIN); checkPermission(Rank.ADMIN);
if (args[0].equals("-a")) if (args[0].equals("-a"))
{ {

View File

@ -1,15 +1,13 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.banning.Ban; import me.totalfreedom.totalfreedommod.banning.Ban;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "unbanip", source = SourceType.BOTH)
@CommandParameters(description = "Unbans the specified IP.", usage = "/<command> <ip> [-q]") @CommandParameters(description = "Unbans the specified IP.", usage = "/<command> <ip> [-q]")
public class Command_unbanip extends FreedomCommand public class Command_unbanip extends FreedomCommand
{ {

View File

@ -1,14 +1,12 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "unblockcmd", source = SourceType.BOTH)
@CommandParameters(description = "Unblocks commands for a player.", usage = "/<command> <player>", aliases = "unblockcommand,unblockcommands,ubcmds,unblockcmds,ubc") @CommandParameters(description = "Unblocks commands for a player.", usage = "/<command> <player>", aliases = "unblockcommand,unblockcommands,ubcmds,unblockcmds,ubc")
public class Command_unblockcmd extends FreedomCommand public class Command_unblockcmd extends FreedomCommand
{ {

View File

@ -1,14 +1,12 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "uncage", source = SourceType.BOTH)
@CommandParameters(description = "Uncage a player", usage = "/<command> <name>") @CommandParameters(description = "Uncage a player", usage = "/<command> <name>")
public class Command_uncage extends FreedomCommand public class Command_uncage extends FreedomCommand
{ {

View File

@ -1,12 +1,11 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "undisguiseall", source = SourceType.BOTH)
@CommandParameters(description = "Undisguise all online players on the server", usage = "/<command> [-a]", aliases = "uall") @CommandParameters(description = "Undisguise all online players on the server", usage = "/<command> [-a]", aliases = "uall")
public class Command_undisguiseall extends FreedomCommand public class Command_undisguiseall extends FreedomCommand
{ {

View File

@ -1,14 +1,12 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "unlinkdiscord", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Unlink your Discord account from your Minecraft account", usage = "/<command> [player]") @CommandParameters(description = "Unlink your Discord account from your Minecraft account", usage = "/<command> [player]")
public class Command_unlinkdiscord extends FreedomCommand public class Command_unlinkdiscord extends FreedomCommand
{ {
@ -22,7 +20,7 @@ public class Command_unlinkdiscord extends FreedomCommand
return true; return true;
} }
if (args.length != 0 && plugin.al.isAdmin(playerSender)) if (args.length != 0 && sender.hasPermission("tfm.unlinkdiscord.other"))
{ {
PlayerData playerData = plugin.pl.getData(args[0]); PlayerData playerData = plugin.pl.getData(args[0]);
if (playerData == null) if (playerData == null)

View File

@ -1,16 +1,14 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH) @CommandPermissions(permission = "unmute", source = SourceType.BOTH)
@CommandParameters(description = "Unmutes a player", usage = "/<command> [-q] <player>") @CommandParameters(description = "Unmutes a player", usage = "/<command> [-q] <player>")
public class Command_unmute extends FreedomCommand public class Command_unmute extends FreedomCommand
{ {

View File

@ -3,20 +3,17 @@ package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.admin.AdminList; import me.totalfreedom.totalfreedommod.admin.AdminList;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Displayable; import me.totalfreedom.totalfreedommod.rank.Displayable;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.ONLY_IN_GAME) @CommandPermissions(permission = "vanish", source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Vanish/unvanish yourself.", usage = "/<command> [-s[ilent]]", aliases = "v") @CommandParameters(description = "Vanish/unvanish yourself.", usage = "/<command> [-s[ilent]]", aliases = "v")
public class Command_vanish extends FreedomCommand public class Command_vanish extends FreedomCommand
{ {

View File

@ -2,16 +2,13 @@ package me.totalfreedom.totalfreedommod.command;
import java.util.List; import java.util.List;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH) @CommandPermissions(permission = "vote", source = SourceType.BOTH)
@CommandParameters(description = "Information on how to vote", usage = "/<command>") @CommandParameters(description = "Information on how to vote", usage = "/<command>")
public class Command_vote extends FreedomCommand public class Command_vote extends FreedomCommand
{ {

View File

@ -2,22 +2,15 @@ package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.punishments.Punishment; import me.totalfreedom.totalfreedommod.punishments.Punishment;
import me.totalfreedom.totalfreedommod.punishments.PunishmentType; import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import net.kyori.adventure.title.Title;
import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.time.Duration; @CommandPermissions(permission = "warn", source = SourceType.BOTH)
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH)
@CommandParameters(description = "Warns the specified player.", usage = "/<command> [-q] <player> <reason>") @CommandParameters(description = "Warns the specified player.", usage = "/<command> [-q] <player> <reason>")
public class Command_warn extends FreedomCommand public class Command_warn extends FreedomCommand
{ {

View File

@ -4,9 +4,7 @@ import java.util.*;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang3.StringUtils;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -64,7 +62,7 @@ public class Command_whitelist extends FreedomCommand
} }
// Commands below are restricted to admins // Commands below are restricted to admins
checkRank(Rank.ADMIN); checkPermission(Rank.ADMIN);
// on // on
if (args[0].equalsIgnoreCase("on")) if (args[0].equalsIgnoreCase("on"))
@ -153,7 +151,7 @@ public class Command_whitelist extends FreedomCommand
// Telnet only // Telnet only
checkConsole(); checkConsole();
checkRank(Rank.ADMIN); checkPermission(Rank.ADMIN);
// purge // purge
if (args[0].equalsIgnoreCase("purge")) if (args[0].equalsIgnoreCase("purge"))

View File

@ -1,11 +1,5 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.Material; import org.bukkit.Material;
@ -14,7 +8,11 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.HumanEntity; import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.OP, source = SourceType.BOTH) import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@CommandPermissions(permission = "whohas", source = SourceType.BOTH)
@CommandParameters(description = "See who has an item and optionally clear the specified item.", usage = "/<command> <item> [clear]", aliases = "wh") @CommandParameters(description = "See who has an item and optionally clear the specified item.", usage = "/<command> <item> [clear]", aliases = "wh")
public class Command_whohas extends FreedomCommand public class Command_whohas extends FreedomCommand
{ {
@ -49,8 +47,7 @@ public class Command_whohas extends FreedomCommand
if (players.isEmpty()) if (players.isEmpty())
{ {
msgNew("There are no players with that item."); msgNew("There are no players with that item.");
} } else
else
{ {
msgNew("Players with item <type>: <players>", Placeholder.unparsed("type", material.name()), msgNew("Players with item <type>: <players>", Placeholder.unparsed("type", material.name()),
Placeholder.unparsed("players", StringUtils.join(players.stream().map(HumanEntity::getName).toList(), ", "))); Placeholder.unparsed("players", StringUtils.join(players.stream().map(HumanEntity::getName).toList(), ", ")));

View File

@ -5,15 +5,13 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(rank = Rank.ADMIN, source = SourceType.BOTH, blockHostConsole = true) @CommandPermissions(permission = "wildcard", source = SourceType.BOTH, blockHostConsole = true)
@CommandParameters(description = "Run any command on all users, username placeholder = ?.", usage = "/<command> [fluff] ? [fluff] ?") @CommandParameters(description = "Run any command on all users, username placeholder = ?.", usage = "/<command> [fluff] ? [fluff] ?")
public class Command_wildcard extends FreedomCommand public class Command_wildcard extends FreedomCommand
{ {

View File

@ -4,9 +4,9 @@ import com.google.common.collect.Lists;
import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.admin.Admin; import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import me.totalfreedom.totalfreedommod.util.PermissibleCompletion;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
@ -42,7 +42,6 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
private final String description; private final String description;
private final String usage; private final String usage;
private final String aliases; private final String aliases;
private final Rank rank;
private final String permission; private final String permission;
private final SourceType source; private final SourceType source;
private final boolean blockHostConsole; private final boolean blockHostConsole;
@ -65,20 +64,19 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
this.description = params.description(); this.description = params.description();
this.usage = params.usage(); this.usage = params.usage();
this.aliases = params.aliases(); this.aliases = params.aliases();
this.rank = perms.rank();
this.source = perms.source(); this.source = perms.source();
this.blockHostConsole = perms.blockHostConsole(); this.blockHostConsole = perms.blockHostConsole();
this.cooldown = perms.cooldown(); this.cooldown = perms.cooldown();
this.permission = perms.rank().getPermission(); this.permission = "tfm." + perms.permission();
} }
public static FreedomCommand getFrom(Command command) public static FreedomCommand getFrom(Command command)
{ {
try try
{ {
if (command instanceof FCommand) if (command instanceof FCommand cmd)
{ {
return ((FCommand) command).getExecutor(); return cmd.getExecutor();
} }
} catch (Exception ex) } catch (Exception ex)
{ {
@ -104,9 +102,9 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
{ {
cmd.setUsage(this.usage); cmd.setUsage(this.usage);
} }
if (this.rank != null) if (this.permission != null)
{ {
cmd.setPermission(this.rank.getPermission()); cmd.setPermission(this.permission);
} }
server.getCommandMap().register("totalfreedommod", cmd); server.getCommandMap().register("totalfreedommod", cmd);
cmd.setExecutor(this); cmd.setExecutor(this);
@ -151,6 +149,23 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
msg(color + message); msg(color + message);
} }
protected List<String> argumentCompletions(String arg, PermissibleCompletion... completions)
{
return Arrays.stream(completions)
.filter(permissibleCompletion -> sender.hasPermission(permissibleCompletion.getPermission())) //Permission
.map(PermissibleCompletion::getCompletion)
.filter(completion -> completion.startsWith(arg))
.toList();
}
protected List<String> playerCompletions(String arg) {
return Bukkit.getOnlinePlayers()
.stream()
.map(Player::getName)
.filter(c -> c.startsWith(arg))
.toList();
}
protected boolean isAdmin(Player player) protected boolean isAdmin(Player player)
{ {
return plugin.al.isAdmin(player); return plugin.al.isAdmin(player);
@ -177,9 +192,9 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
} }
} }
protected void checkRank(Rank rank) protected void checkPermission(String permission)
{ {
if (!plugin.rm.getRank(sender).isAtLeast(rank)) if (!sender.hasPermission(permission))
{ {
noPerms(); noPerms();
} }
@ -290,9 +305,9 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
return aliases; return aliases;
} }
public Rank getRank() public String getPermission()
{ {
return rank; return permission;
} }
public SourceType getSource() public SourceType getSource()
@ -334,11 +349,6 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
cmd.sender = sender; cmd.sender = sender;
if (cooldownCheck())
{
return true;
}
if (checkCommandSource()) if (checkCommandSource())
{ {
return true; return true;
@ -349,6 +359,11 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
return true; return true;
} }
if (cooldownCheck())
{
return true;
}
assignApplicableCooldown(); assignApplicableCooldown();
return cmd.onCommand(sender, this, commandLabel, args); return cmd.onCommand(sender, this, commandLabel, args);
@ -373,7 +388,7 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
public boolean permissionCheck() public boolean permissionCheck()
{ {
if (!sender.hasPermission(permission)) if (!sender.hasPermission(permission) || !(sender instanceof ConsoleCommandSender))
{ {
msg(ChatColor.RED + "You do not have permission to use this command."); msg(ChatColor.RED + "You do not have permission to use this command.");
return true; return true;

View File

@ -50,7 +50,6 @@ public class FPlayer
private boolean lockedUp = false; private boolean lockedUp = false;
private boolean inAdminchat = false; private boolean inAdminchat = false;
private boolean allCommandsBlocked = false; private boolean allCommandsBlocked = false;
private String lastCommand = "";
private String tag = null; private String tag = null;
private int warningCount = 0; private int warningCount = 0;
@ -336,16 +335,6 @@ public class FPlayer
this.allCommandsBlocked = commandsBlocked; this.allCommandsBlocked = commandsBlocked;
} }
public String getLastCommand()
{
return lastCommand;
}
public void setLastCommand(String lastCommand)
{
this.lastCommand = lastCommand;
}
public String getTag() public String getTag()
{ {
return this.tag; return this.tag;

View File

@ -0,0 +1,141 @@
package me.totalfreedom.totalfreedommod.rank;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import net.luckperms.api.model.group.Group;
import net.md_5.bungee.api.ChatColor;
import org.apache.commons.lang.StringUtils;
import org.jetbrains.annotations.NotNull;
import java.util.Locale;
public class DisplayableGroup implements Displayable
{
private final Group group;
private final String name;
private final String abbr;
private final String plural;
private final String article;
private final String tag;
private final String coloredTag;
private final ChatColor color;
private final org.bukkit.ChatColor teamColor;
private final boolean hasTeam;
private final boolean hasDefaultLoginMessage;
public DisplayableGroup(String group,
String plural,
String tag,
ChatColor color,
org.bukkit.ChatColor teamColor,
boolean hasTeam,
boolean hasDefaultLoginMessage)
{
Group matched = TotalFreedomMod.getPlugin().lpb.getAPI().getGroupManager().getGroup(group);
if (matched == null) {
throw new IllegalArgumentException("Group " + group + " does not exist!");
}
this.group = matched;
this.name = (matched.getDisplayName() != null) ? matched.getDisplayName() : matched.getName();
this.plural = plural;
this.article = StringUtils.startsWithAny(this.name.toLowerCase(Locale.ROOT), new String[]{"a", "e", "i", "o", "u"}) ? "an" : "a";
this.abbr = tag;
this.tag = "[" + tag + "]";
this.color = color;
this.teamColor = teamColor;
this.hasTeam = hasTeam;
this.coloredTag = ChatColor.DARK_GRAY + "[" + getColor() + getTag() + ChatColor.DARK_GRAY + "]" + getColor();
this.hasDefaultLoginMessage = hasDefaultLoginMessage;
}
public boolean isAtLeast(@NotNull DisplayableGroup rank)
{
return rank.getLuckPermsGroup().getWeight().orElse(0)
<= getLuckPermsGroup().getWeight().orElse(0);
}
public Group getLuckPermsGroup() {
return this.group;
}
@Override
public String getArticle()
{
return this.article;
}
@Override
public String getName()
{
return name;
}
@Override
public String getTag()
{
return tag;
}
@Override
public String getAbbr()
{
return abbr;
}
@Override
public String getPlural()
{
return plural;
}
@Override
public ChatColor getColor()
{
return color;
}
@Override
public org.bukkit.ChatColor getTeamColor()
{
return teamColor;
}
@Override
public String getColoredName()
{
return color + name;
}
@Override
public String getColoredTag()
{
return coloredTag;
}
@Override
public String getColoredLoginMessage()
{
return article + ' ' + color + name;
}
@Override
public boolean hasTeam()
{
return hasTeam;
}
@Override
public boolean hasDefaultLoginMessage()
{
return hasDefaultLoginMessage;
}
}

View File

@ -0,0 +1,38 @@
package me.totalfreedom.totalfreedommod.rank;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import net.luckperms.api.model.user.User;
import net.md_5.bungee.api.ChatColor;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.util.UUID;
@FunctionalInterface
public interface GroupProvider<T extends DisplayableGroup>
{
GroupProvider<DisplayableGroup> NON_OP = () -> new DisplayableGroup("non_op", "Non-Ops", "", ChatColor.WHITE, null, false, false);
GroupProvider<DisplayableGroup> OP = () -> new DisplayableGroup("op", "Operators", "Op", ChatColor.GREEN, null, false, false);
GroupProvider<DisplayableGroup> ADMIN = () -> new DisplayableGroup("admin", "Administrators", "Admin", ChatColor.DARK_GREEN, org.bukkit.ChatColor.DARK_GREEN, true, true);
GroupProvider<DisplayableGroup> SENIOR_ADMIN = () -> new DisplayableGroup("senior", "Senior Administrators", "SrA", ChatColor.GOLD, org.bukkit.ChatColor.GOLD, true, true);
static User getUser(Player player)
{
return TotalFreedomMod.getPlugin()
.lpb.getAPI()
.getPlayerAdapter(Player.class)
.getUser(player);
}
T getGroup();
static GroupProvider<DisplayableGroup> fromArgument(String arg) {
return switch (arg.toLowerCase())
{
case "op" -> OP;
case "admin" -> ADMIN;
case "senior" -> SENIOR_ADMIN;
default -> NON_OP;
};
}
}

View File

@ -1,196 +0,0 @@
package me.totalfreedom.totalfreedommod.rank;
import net.md_5.bungee.api.ChatColor;
import org.jetbrains.annotations.NotNull;
public enum Rank implements Displayable
{
NON_OP("a", "Non-Op", "tfm.default", "", "Non-Ops", ChatColor.WHITE, null, false, false),
OP("an", "Operator", "tfm.op", "OP", "Operators", ChatColor.GREEN, null, false, false),
ADMIN("an", "Admin", "tfm.admin", "Admin", "Administrators", ChatColor.DARK_GREEN, org.bukkit.ChatColor.DARK_GREEN, true, true),
SENIOR_ADMIN("a", "Senior Admin", "tfm.senior", "SrA", "Senior Administrators", ChatColor.GOLD, org.bukkit.ChatColor.GOLD, true, true),
ADMIN_CONSOLE("the", "Console", "tfm.rcon", "Console", "Administrator Consoles", ChatColor.DARK_PURPLE, null, false, false),
SENIOR_CONSOLE("the", "Console", "tfm.rcon.senior", "Console", "Senior Consoles", ChatColor.DARK_PURPLE, null, false, false);
private final String permission;
private final String name;
private final String abbr;
private final String plural;
private final String article;
private final String tag;
private final String coloredTag;
private final ChatColor color;
private final org.bukkit.ChatColor teamColor;
private final boolean hasTeam;
private final boolean hasDefaultLoginMessage;
Rank(String article, String name, String permission, String abbr, String plural, ChatColor color, org.bukkit.ChatColor teamColor, Boolean hasTeam, Boolean hasDefaultLoginMessage)
{
this.permission = permission;
this.name = name;
this.abbr = abbr;
this.plural = plural;
this.article = article;
this.tag = abbr.isEmpty() ? "" : "[" + abbr + "]";
this.coloredTag = abbr.isEmpty() ? "" : ChatColor.DARK_GRAY + "[" + color + abbr + ChatColor.DARK_GRAY + "]" + color;
this.color = color;
this.teamColor = teamColor;
this.hasTeam = hasTeam;
this.hasDefaultLoginMessage = hasDefaultLoginMessage;
}
public static Rank findRank(String string)
{
try
{
return Rank.valueOf(string.toUpperCase());
} catch (Exception ignored)
{
}
return Rank.NON_OP;
}
@Override
public String getColoredName()
{
return color + name;
}
@Override
public String getColoredLoginMessage()
{
return article + " " + color + name;
}
@Override
public boolean hasTeam()
{
return hasTeam;
}
@Override
public boolean hasDefaultLoginMessage()
{
return hasDefaultLoginMessage;
}
@Override
public String getAbbr()
{
return abbr;
}
public String getPlural()
{
return plural;
}
public boolean isConsole()
{
return getPermission().equalsIgnoreCase("tfm.rcon") ||
getPermission().equalsIgnoreCase("tfm.rcon.senior"); // check for either console.
}
public int getLevel()
{
return ordinal();
}
public boolean isAtLeast(@NotNull Rank rank)
{
if (getLevel() < rank.getLevel())
{
return false;
}
if (!hasConsoleVariant() || !rank.hasConsoleVariant())
{
return true;
}
assert getConsoleVariant() != null;
assert rank.getConsoleVariant() != null;
return getConsoleVariant().getLevel() >= rank.getConsoleVariant().getLevel();
}
public boolean isAdmin()
{
return getPermission().equalsIgnoreCase("tfm.admin") ||
getPermission().equalsIgnoreCase("tfm.rcon");
}
public boolean hasConsoleVariant()
{
return getConsoleVariant() != null;
}
public Rank getConsoleVariant()
{
return switch (this)
{
case ADMIN, ADMIN_CONSOLE -> ADMIN_CONSOLE;
case SENIOR_ADMIN, SENIOR_CONSOLE -> SENIOR_CONSOLE;
default -> null;
};
}
public String getPermission()
{
return permission;
}
@Override
public String getName()
{
return name;
}
@Override
public String getArticle()
{
return article;
}
@Override
public String getTag()
{
return tag;
}
@Override
public String getColoredTag()
{
return coloredTag;
}
@Override
public ChatColor getColor()
{
return color;
}
@Override
public org.bukkit.ChatColor getTeamColor()
{
return teamColor;
}
public boolean isHasTeam()
{
return hasTeam;
}
public boolean isHasDefaultLoginMessage()
{
return hasDefaultLoginMessage;
}
}

View File

@ -1,15 +1,16 @@
package me.totalfreedom.totalfreedommod.rank; package me.totalfreedom.totalfreedommod.rank;
import java.util.Objects;
import me.totalfreedom.totalfreedommod.FreedomService; import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.admin.Admin; import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import net.luckperms.api.model.group.Group;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
@ -17,6 +18,8 @@ import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.scoreboard.Scoreboard; import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team; import org.bukkit.scoreboard.Team;
import java.util.Objects;
public class RankManager extends FreedomService public class RankManager extends FreedomService
{ {
@Override @Override
@ -31,30 +34,29 @@ public class RankManager extends FreedomService
public Displayable getDisplay(CommandSender sender) public Displayable getDisplay(CommandSender sender)
{ {
if (!(sender instanceof Player)) if (!(sender instanceof Player player))
{ {
return getRank(sender); // Consoles don't have display ranks return getRank(sender); // Consoles don't have display ranks
} }
final Player player = (Player)sender;
// If the player's an owner, display that // If the player's an owner, display that
if (ConfigEntry.SERVER_OWNERS.getList().contains(player.getName())) if (ConfigEntry.SERVER_OWNERS.getList().contains(player.getName()))
{ {
return Title.OWNER; return Title.OWNER;
} }
// Developers always show up // If the user is an executive, display that.
if (FUtil.isDeveloper(player))
{
return Title.DEVELOPER;
}
if (ConfigEntry.SERVER_EXECUTIVES.getList().contains(player.getName()) && plugin.al.isAdmin(player)) if (ConfigEntry.SERVER_EXECUTIVES.getList().contains(player.getName()) && plugin.al.isAdmin(player))
{ {
return Title.EXECUTIVE; return Title.EXECUTIVE;
} }
// Developers always show up after executive.
if (FUtil.isDeveloper(player))
{
return Title.DEVELOPER;
}
if (ConfigEntry.SERVER_ASSISTANT_EXECUTIVES.getList().contains(player.getName()) && plugin.al.isAdmin(player)) if (ConfigEntry.SERVER_ASSISTANT_EXECUTIVES.getList().contains(player.getName()) && plugin.al.isAdmin(player))
{ {
return Title.ASSTEXEC; return Title.ASSTEXEC;
@ -91,17 +93,22 @@ public class RankManager extends FreedomService
return admin.getRank(); return admin.getRank();
} }
public Rank getRank(CommandSender sender) public DisplayableGroup getRank(CommandSender sender)
{ {
if (sender instanceof Player) if (sender instanceof Player player)
{ {
return getRank((Player)sender); return getRank(player);
} }
// CONSOLE? // CONSOLE?
if (sender.getName().equals("CONSOLE")) if (sender instanceof ConsoleCommandSender console)
{ {
return ConfigEntry.ADMINLIST_CONSOLE_IS_ADMIN.getBoolean() ? Rank.SENIOR_CONSOLE : Rank.ADMIN_CONSOLE; if (sender.getName().equalsIgnoreCase("CONSOLE"))
{
return ConfigEntry.ADMINLIST_CONSOLE_IS_ADMIN.getBoolean()
? GroupProvider.SENIOR_ADMIN.getGroup()
: GroupProvider.ADMIN.getGroup();
}
} }
// Console admin, get by name // Console admin, get by name
@ -110,20 +117,13 @@ public class RankManager extends FreedomService
// Unknown console: RCON? // Unknown console: RCON?
if (admin == null) if (admin == null)
{ {
return Rank.SENIOR_CONSOLE; return GroupProvider.SENIOR_ADMIN.getGroup();
} }
Rank rank = admin.getRank(); return admin.getRank();
// Get console
if (rank.hasConsoleVariant())
{
rank = rank.getConsoleVariant();
}
return rank;
} }
public Rank getRank(Player player) public DisplayableGroup getRank(Player player)
{ {
final Admin entry = plugin.al.getAdmin(player); final Admin entry = plugin.al.getAdmin(player);
if (entry != null) if (entry != null)
@ -131,7 +131,13 @@ public class RankManager extends FreedomService
return entry.getRank(); return entry.getRank();
} }
return player.isOp() ? Rank.OP : Rank.NON_OP; return plugin.lpb.getAPI()
.getPlayerAdapter(Player.class)
.getUser(player)
.getPrimaryGroup()
.equalsIgnoreCase("op")
? GroupProvider.OP.getGroup()
: GroupProvider.NON_OP.getGroup();
} }
public String getTag(Player player, String defaultTag) public String getTag(Player player, String defaultTag)
@ -161,8 +167,7 @@ public class RankManager extends FreedomService
{ {
String displayName = display.getColor() + player.getName(); String displayName = display.getColor() + player.getName();
player.setPlayerListName(displayName); player.setPlayerListName(displayName);
} } else
else
{ {
fPlayer.setTag(null); fPlayer.setTag(null);
player.setPlayerListName(null); player.setPlayerListName(null);
@ -218,8 +223,7 @@ public class RankManager extends FreedomService
if (playerData.hasLoginMessage()) if (playerData.hasLoginMessage())
{ {
message = playerData.getLoginMessage(); message = playerData.getLoginMessage();
} } else
else
{ {
if (display.hasDefaultLoginMessage()) if (display.hasDefaultLoginMessage())
{ {

View File

@ -0,0 +1,28 @@
package me.totalfreedom.totalfreedommod.util;
public class PermissibleCompletion
{
private final String permission;
private final String completion;
public PermissibleCompletion(String permission, String completion)
{
this.completion = completion;
this.permission = permission;
}
public String getPermission()
{
return permission;
}
public String getCompletion()
{
return completion;
}
public static PermissibleCompletion of(String permission, String completion)
{
return new PermissibleCompletion(permission, completion);
}
}

View File

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>me.totalfreedom</groupId> <groupId>me.totalfreedom</groupId>
<artifactId>TotalFreedomMod</artifactId> <artifactId>TotalFreedomMod</artifactId>
<version>2023.02</version> <version>2023.03</version>
</parent> </parent>
<artifactId>discord</artifactId> <artifactId>discord</artifactId>
@ -27,7 +27,7 @@
<dependency> <dependency>
<groupId>me.totalfreedom</groupId> <groupId>me.totalfreedom</groupId>
<artifactId>commons</artifactId> <artifactId>commons</artifactId>
<version>2023.02</version> <version>2023.03</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
@ -36,11 +36,5 @@
<version>3.5.1</version> <version>3.5.1</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>me.totalfreedom</groupId>
<artifactId>commons</artifactId>
<version>2023.02</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -5,7 +5,7 @@
<groupId>me.totalfreedom</groupId> <groupId>me.totalfreedom</groupId>
<artifactId>TotalFreedomMod</artifactId> <artifactId>TotalFreedomMod</artifactId>
<version>2023.02</version> <version>2023.03</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<modules> <modules>
<module>commons</module> <module>commons</module>

View File

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>me.totalfreedom</groupId> <groupId>me.totalfreedom</groupId>
<artifactId>TotalFreedomMod</artifactId> <artifactId>TotalFreedomMod</artifactId>
<version>2023.02</version> <version>2023.03</version>
</parent> </parent>
<artifactId>shop</artifactId> <artifactId>shop</artifactId>
@ -15,7 +15,7 @@
<dependency> <dependency>
<groupId>me.totalfreedom</groupId> <groupId>me.totalfreedom</groupId>
<artifactId>commons</artifactId> <artifactId>commons</artifactId>
<version>2023.02</version> <version>2023.03</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
</dependencies> </dependencies>