permission system

This commit is contained in:
ZeroEpoch1969
2020-04-13 23:40:22 -07:00
parent e23bfa7f87
commit bc8ff3cd7f
44 changed files with 662 additions and 378 deletions

View File

@ -21,7 +21,7 @@ public class Command_cartsit extends FreedomCommand
targetPlayer = getPlayer(args[0]);
if (targetPlayer == null || Command_vanish.VANISHED.contains(targetPlayer) && !plugin.al.isAdmin(sender))
if (targetPlayer == null || plugin.al.vanished.contains(targetPlayer) && !plugin.al.isAdmin(sender))
{
sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND);
return true;

View File

@ -1,50 +1,59 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.DepreciationAggregator;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.OfflinePlayer;
import org.apache.commons.lang.StringUtils;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.BOTH)
@CommandParameters(description = "Deop a player.", usage = "/<command> <playername>")
@CommandParameters(description = "Deop a player", usage = "/<command> <partialname>")
public class Command_deop extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length != 1)
if (args.length < 1)
{
return false;
}
OfflinePlayer player = null;
for (Player onlinePlayer : server.getOnlinePlayers())
boolean silent = false;
if (args.length == 2)
{
if (args[0].equalsIgnoreCase(onlinePlayer.getName()))
silent = args[1].equalsIgnoreCase("-s");
}
final String targetName = args[0].toLowerCase();
final List<String> matchedPlayerNames = new ArrayList<>();
for (final Player player : server.getOnlinePlayers())
{
if (player.getName().toLowerCase().contains(targetName) || player.getDisplayName().toLowerCase().contains(targetName))
{
player = onlinePlayer;
if (player.isOp() && !plugin.al.vanished.contains(player))
{
matchedPlayerNames.add(player.getName());
player.setOp(false);
player.sendMessage(FreedomCommand.YOU_ARE_NOT_OP);
}
}
}
// if the player is not online
if (player == null)
if (!matchedPlayerNames.isEmpty())
{
player = DepreciationAggregator.getOfflinePlayer(server, args[0]);
if (!silent)
{
FUtil.adminAction(sender.getName(), "De-opping " + StringUtils.join(matchedPlayerNames, ", "), false);
}
}
FUtil.adminAction(sender.getName(), "De-opping " + player.getName(), false);
player.setOp(false);
if (player.isOnline())
else
{
Player p = (Player)player;
p.sendMessage(YOU_ARE_NOT_OP);
msg("No targets matched.");
}
return true;

View File

@ -42,7 +42,7 @@ public class Command_invis extends FreedomCommand
for (Player player : server.getOnlinePlayers())
{
if (player.hasPotionEffect(PotionEffectType.INVISIBILITY) && !Command_vanish.VANISHED.contains(player))
if (player.hasPotionEffect(PotionEffectType.INVISIBILITY) && !plugin.al.vanished.contains(player))
{
players.add(player.getName());
if (clear && !plugin.al.isAdmin(player))

View File

@ -23,7 +23,7 @@ public class Command_invsee extends FreedomCommand
Player player = getPlayer(args[0]);
if (player == null || Command_vanish.VANISHED.contains(player) && !plugin.al.isAdmin(sender))
if (player == null || plugin.al.vanished.contains(player) && !plugin.al.isAdmin(sender))
{
msg("This player is not online.");
return false;

View File

@ -71,7 +71,7 @@ public class Command_list extends FreedomCommand
}
StringBuilder onlineStats = new StringBuilder();
StringBuilder onlineUsers = new StringBuilder();
onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(server.getOnlinePlayers().size() - Command_vanish.VANISHED.size())
onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(server.getOnlinePlayers().size() - plugin.al.vanished.size())
.append(ChatColor.BLUE)
.append(" out of a maximum ")
.append(ChatColor.RED)
@ -85,11 +85,11 @@ public class Command_list extends FreedomCommand
{
continue;
}
if (listFilter == ListFilter.ADMINS && Command_vanish.VANISHED.contains(p))
if (listFilter == ListFilter.ADMINS && plugin.al.vanished.contains(p))
{
continue;
}
if (listFilter == ListFilter.VANISHED_ADMINS && !Command_vanish.VANISHED.contains(p))
if (listFilter == ListFilter.VANISHED_ADMINS && !plugin.al.vanished.contains(p))
{
continue;
}
@ -101,7 +101,7 @@ public class Command_list extends FreedomCommand
{
continue;
}
if (listFilter == ListFilter.PLAYERS && Command_vanish.VANISHED.contains(p))
if (listFilter == ListFilter.PLAYERS && plugin.al.vanished.contains(p))
{
continue;
}

View File

@ -6,6 +6,7 @@ import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldguard.domains.DefaultDomain;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.flags.RegionGroup;
import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
@ -23,14 +24,15 @@ import org.bukkit.entity.Player;
public class Command_makeopregion extends FreedomCommand
{
final Map<Flag<?>, Object> flags = new HashMap<Flag<?>, Object>() {{
put(Flags.BLOCK_PLACE, StateFlag.State.DENY);
put(Flags.BLOCK_BREAK, StateFlag.State.DENY);
put(Flags.BUILD, StateFlag.State.DENY);
put(Flags.PLACE_VEHICLE, StateFlag.State.DENY);
put(Flags.DESTROY_VEHICLE, StateFlag.State.DENY);
put(Flags.ENTITY_ITEM_FRAME_DESTROY, StateFlag.State.DENY);
put(Flags.ENTITY_PAINTING_DESTROY, StateFlag.State.DENY);
final Map<Flag<?>, Object> flags = new HashMap<Flag<?>, Object>()
{{
put(Flags.BLOCK_PLACE, StateFlag.State.ALLOW);
put(Flags.BLOCK_BREAK, StateFlag.State.ALLOW);
put(Flags.BUILD, StateFlag.State.ALLOW);
put(Flags.PLACE_VEHICLE, StateFlag.State.ALLOW);
put(Flags.DESTROY_VEHICLE, StateFlag.State.ALLOW);
put(Flags.ENTITY_ITEM_FRAME_DESTROY, StateFlag.State.ALLOW);
put(Flags.ENTITY_PAINTING_DESTROY, StateFlag.State.ALLOW);
}};
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, final String[] args, final boolean senderIsConsole)
@ -78,7 +80,12 @@ public class Command_makeopregion extends FreedomCommand
region.setOwners(owners);
region.setFlags(flags);
RegionManager regionManager = plugin.wgb.getWorldGuardPlugin().getRegionManager(playerSender.getWorld());
for (Flag flag : flags.keySet())
{
region.setFlag(flag.getRegionGroupFlag(), RegionGroup.MEMBERS);
}
RegionManager regionManager = plugin.wgb.getRegionManager(playerSender.getWorld());
regionManager.addRegion(region);

View File

@ -41,11 +41,11 @@ public class Command_nickfilter extends FreedomCommand
player = getPlayerByDisplayName(displayName);
if (player == null || Command_vanish.VANISHED.contains(player) && !plugin.al.isAdmin(sender))
if (player == null || plugin.al.vanished.contains(player) && !plugin.al.isAdmin(sender))
{
player = getPlayerByDisplayNameAlt(displayName);
if (player == null || Command_vanish.VANISHED.contains(player) && !plugin.al.isAdmin(sender))
if (player == null || !plugin.al.vanished.contains(player) && !plugin.al.isAdmin(sender))
{
sender.sendMessage(ChatColor.GRAY + "Can't find player by nickname: " + displayName);
return true;

View File

@ -1,64 +1,59 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.DepreciationAggregator;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.apache.commons.lang.StringUtils;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH, cooldown = 5)
@CommandParameters(description = "OPs the specified player.", usage = "/<command> <playername>")
@CommandParameters(description = "OP a player", usage = "/<command> <partialname>")
public class Command_op extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length != 1)
if (args.length < 1)
{
return false;
}
if (args[0].equalsIgnoreCase("all") || args[0].equalsIgnoreCase("everyone"))
boolean silent = false;
if (args.length == 2)
{
msg("Correct usage: /opall");
return true;
silent = args[1].equalsIgnoreCase("-s");
}
OfflinePlayer player = null;
for (Player onlinePlayer : server.getOnlinePlayers())
final String targetName = args[0].toLowerCase();
final List<String> matchedPlayerNames = new ArrayList<>();
for (final Player player : server.getOnlinePlayers())
{
if (args[0].equalsIgnoreCase(onlinePlayer.getName()))
if (player.getName().toLowerCase().contains(targetName) || player.getDisplayName().toLowerCase().contains(targetName))
{
player = onlinePlayer;
if (!player.isOp() && !plugin.al.vanished.contains(player))
{
matchedPlayerNames.add(player.getName());
player.setOp(true);
player.sendMessage(FreedomCommand.YOU_ARE_OP);
}
}
}
// if the player is not online or is vanished
if (player == null || Command_vanish.VANISHED.contains(player) && !plugin.al.isAdmin(sender))
if (!matchedPlayerNames.isEmpty())
{
if (plugin.al.isAdmin(sender) || senderIsConsole)
if (!silent)
{
player = DepreciationAggregator.getOfflinePlayer(server, args[0]);
}
else
{
msg("That player is not online.");
msg("You don't have permissions to OP offline players.", ChatColor.RED);
return true;
FUtil.adminAction(sender.getName(), "Opping " + StringUtils.join(matchedPlayerNames, ", "), false);
}
}
FUtil.adminAction(sender.getName(), "Opping " + player.getName(), false);
player.setOp(true);
if (player.isOnline())
else
{
Player p = (Player)player;
p.sendMessage(YOU_ARE_OP);
msg("No targets matched.");
}
return true;

View File

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

View File

@ -62,7 +62,7 @@ public class Command_potion extends FreedomCommand
{
target = getPlayer(args[1]);
if (target == null || Command_vanish.VANISHED.contains(target) && !plugin.al.isAdmin(sender))
if (target == null || plugin.al.vanished.contains(target) && !plugin.al.isAdmin(sender))
{
msg(FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED);
return true;
@ -105,7 +105,7 @@ public class Command_potion extends FreedomCommand
{
target = getPlayer(args[4]);
if (target == null || Command_vanish.VANISHED.contains(target) && !plugin.al.isAdmin(sender))
if (target == null || plugin.al.vanished.contains(target) && !plugin.al.isAdmin(sender))
{
msg(FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED);
return true;

View File

@ -1,61 +0,0 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.StringUtils;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.BOTH)
@CommandParameters(description = "Quickly deop someone based on only their partial name.", usage = "/<command> <partialname>")
public class Command_qdeop extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length < 1)
{
return false;
}
boolean silent = false;
if (args.length == 2)
{
silent = args[1].equalsIgnoreCase("-s");
}
final String targetName = args[0].toLowerCase();
final List<String> matchedPlayerNames = new ArrayList<>();
for (final Player player : server.getOnlinePlayers())
{
if (player.getName().toLowerCase().contains(targetName) || player.getDisplayName().toLowerCase().contains(targetName))
{
if (player.isOp() && !Command_vanish.VANISHED.contains(player))
{
matchedPlayerNames.add(player.getName());
player.setOp(false);
player.sendMessage(FreedomCommand.YOU_ARE_NOT_OP);
}
}
}
if (!matchedPlayerNames.isEmpty())
{
if (!silent)
{
FUtil.adminAction(sender.getName(), "De-opping " + StringUtils.join(matchedPlayerNames, ", "), false);
}
}
else
{
msg("No targets matched.");
}
return true;
}
}

View File

@ -1,61 +0,0 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.StringUtils;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH, cooldown = 5)
@CommandParameters(description = "Quickly OP someone based on only their partial name.", usage = "/<command> <partialname>")
public class Command_qop extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length < 1)
{
return false;
}
boolean silent = false;
if (args.length == 2)
{
silent = args[1].equalsIgnoreCase("-s");
}
final String targetName = args[0].toLowerCase();
final List<String> matchedPlayerNames = new ArrayList<>();
for (final Player player : server.getOnlinePlayers())
{
if (player.getName().toLowerCase().contains(targetName) || player.getDisplayName().toLowerCase().contains(targetName))
{
if (!player.isOp() && !Command_vanish.VANISHED.contains(player))
{
matchedPlayerNames.add(player.getName());
player.setOp(true);
player.sendMessage(FreedomCommand.YOU_ARE_OP);
}
}
}
if (!matchedPlayerNames.isEmpty())
{
if (!silent)
{
FUtil.adminAction(sender.getName(), "Opping " + StringUtils.join(matchedPlayerNames, ", "), false);
}
}
else
{
msg("No targets matched.");
}
return true;
}
}

View File

@ -37,7 +37,7 @@ public class Command_rank extends FreedomCommand
final Player player = getPlayer(args[0]);
if (player == null || Command_vanish.VANISHED.contains(player) && !plugin.al.isAdmin(sender))
if (player == null || plugin.al.vanished.contains(player) && !plugin.al.isAdmin(sender))
{
sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND);
return true;

View File

@ -0,0 +1,25 @@
package me.totalfreedom.totalfreedommod.command;
import com.connorlinfoot.actionbarapi.ActionBarAPI;
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(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Brings the current reaction string up on your action bar", usage = "/<command>")
public class Command_reactionbar extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (!plugin.sh.reactionString.isEmpty())
{
ActionBarAPI.sendActionBar(playerSender, ChatColor.BOLD + plugin.sh.reactionString, 15 * 20);
}
return true;
}
}

View File

@ -23,7 +23,7 @@ public class Command_report extends FreedomCommand
Player player = getPlayer(args[0]);
if (player == null || Command_vanish.VANISHED.contains(player) && !plugin.al.isAdmin(sender))
if (player == null || plugin.al.vanished.contains(player) && !plugin.al.isAdmin(sender))
{
msg(PLAYER_NOT_FOUND);
return true;

View File

@ -84,7 +84,7 @@ public class Command_ride extends FreedomCommand
}
final Player player = getPlayer(args[0]);
if (player == null || Command_vanish.VANISHED.contains(player) && !plugin.al.isAdmin(sender))
if (player == null || plugin.al.vanished.contains(player) && !plugin.al.isAdmin(sender))
{
msg(PLAYER_NOT_FOUND);
return true;

View File

@ -53,7 +53,7 @@ public class Command_tag extends FreedomCommand
for (final Player player : server.getOnlinePlayers())
{
if (Command_vanish.VANISHED.contains(player) && !plugin.al.isAdmin(sender))
if (plugin.al.vanished.contains(player) && !plugin.al.isAdmin(sender))
{
continue;
}

View File

@ -19,7 +19,6 @@ import static me.totalfreedom.totalfreedommod.util.FUtil.playerMsg;
@CommandParameters(description = "Vanish/unvanish yourself.", usage = "/<command> [-s[ilent]]", aliases = "v")
public class Command_vanish extends FreedomCommand
{
public static ArrayList<Player> VANISHED = new ArrayList<>();
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, final String[] args, final boolean senderIsConsole)
{
@ -36,7 +35,7 @@ public class Command_vanish extends FreedomCommand
silent = true;
}
}
if (VANISHED.contains(playerSender))
if (plugin.al.vanished.contains(playerSender))
{
msg(ChatColor.GOLD + "You have been unvanished.");
if (admin.hasLoginMessage())
@ -68,7 +67,7 @@ public class Command_vanish extends FreedomCommand
}
plugin.esb.setVanished(playerSender.getName(), false);
playerSender.setPlayerListName(StringUtils.substring(displayName, 0, 16));
VANISHED.remove(playerSender);
plugin.al.vanished.remove(playerSender);
}
else
{
@ -89,7 +88,7 @@ public class Command_vanish extends FreedomCommand
}
}
plugin.esb.setVanished(playerSender.getName(), true);
VANISHED.add(playerSender);
plugin.al.vanished.add(playerSender);
}
return true;
}

View File

@ -40,7 +40,7 @@ public class Command_whohas extends FreedomCommand
for (final Player player : server.getOnlinePlayers())
{
if (!plugin.al.isAdmin(sender) && Command_vanish.VANISHED.contains(player))
if (!plugin.al.isAdmin(sender) && plugin.al.vanished.contains(player))
{
continue;
}