permission system

This commit is contained in:
ZeroEpoch1969 2020-04-13 23:40:22 -07:00
parent e23bfa7f87
commit bc8ff3cd7f
No known key found for this signature in database
GPG key ID: A7BAB4E14F089CF3
44 changed files with 662 additions and 378 deletions

View file

@ -61,58 +61,7 @@
<orderEntry type="library" scope="PROVIDED" name="Maven: com.comphenix.protocol:ProtocolLib:4.5.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: cglib:cglib-nodep:3.2.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.comphenix.executors:BukkitExecutors:1.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.TFPatches:TF-WorldEdit:fd3f56f015" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.TFPatches.TF-WorldEdit:ap:fd3f56f015" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.TFPatches.TF-WorldEdit:bukkit:fd3f56f015" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.TFPatches.TF-WorldEdit:core:fd3f56f015" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.TFPatches.TF-WorldEdit:worldedit-bukkit:fd3f56f015" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.logging.log4j:log4j-slf4j-impl:2.8.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bstats:bstats-bukkit:1.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.TFPatches.TF-WorldEdit:worldedit-core:fd3f56f015" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: de.schlichtherle:truezip:6.8.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-profile-default_2.13:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.scala-lang:scala-library:2.13.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-http:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-kernel-spec:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-annotations:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.findbugs:annotations:3.0.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-cio:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-io:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-services:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-logging:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.inject:javax.inject:1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.httpcomponents:httpclient:4.5.10" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.httpcomponents:httpcore:4.4.12" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:jcl-over-slf4j:1.7.28" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-odf:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-zipdriver:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-zip:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bouncycastle:bcprov-jdk15on:1.63" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-tar:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-tardriver:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.commons:commons-compress:1.19" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-tar-bzip2:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-tar-gzip:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-tar-xz:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.tukaani:xz:1.8" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-zip-raes:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-profile-base_2.13:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-access-swing:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-access:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-file:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-jar:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-zip:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-ibm437:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-kernel-impl_2.13:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-console:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-default:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-swing:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-macosx:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-spec:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-shed:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.mozilla:rhino:1.7.11" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: it.unimi.dsi:fastutil:8.2.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.antlr:antlr4-runtime:4.7.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldedit:worldguard-bukkit:7.0.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.ess3:EssentialsX:2.16.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: io.papermc:paperlib:1.0.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.ess3:NMSProvider:2.16.1" level="project" />
@ -142,14 +91,16 @@
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldedit:worldedit-bukkit:7.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldedit:worldedit-core:7.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldedit.worldedit-libs:core:7.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: de.schlichtherle:truezip:6.8.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: rhino:js:1.7R2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldedit.worldedit-libs:bukkit:7.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.TFPatches:TF-WorldGuard:bb12813214" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.TFPatches.TF-WorldGuard:core:bb12813214" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.TFPatches.TF-WorldGuard:worldguard-bukkit:bb12813214" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q:commandbook:2.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.TFPatches.TF-WorldGuard:worldguard-core:bb12813214" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.logging.log4j:log4j-slf4j-impl:2.8.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldguard:worldguard-bukkit:7.0.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldguard:worldguard-core:7.0.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldguard.worldguard-libs:core:7.0.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.flywaydb:flyway-core:3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q:commandbook:2.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bstats:bstats-bukkit:1.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.destroystokyo.paper:paper-api:1.15.1-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-lang:commons-lang:2.6" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.googlecode.json-simple:json-simple:1.1.1" level="project" />

19
pom.xml
View file

@ -5,7 +5,7 @@
<groupId>me.totalfreedom</groupId>
<artifactId>TotalFreedomMod</artifactId>
<version>5.4</version>
<version>5.5</version>
<packaging>jar</packaging>
<properties>
@ -49,6 +49,11 @@
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
<repository>
<id>enginehub</id>
<url>https://maven.enginehub.org/repo/</url>
</repository>
<repository>
<id>elmakers-repo</id>
<url>http://maven.elmakers.com/repository/</url>
@ -159,9 +164,9 @@
</dependency>
<dependency>
<groupId>com.github.TFPatches</groupId>
<artifactId>TF-WorldEdit</artifactId>
<version>fd3f56f015</version>
<groupId>com.sk89q.worldedit</groupId>
<artifactId>worldedit-bukkit</artifactId>
<version>7.1.0</version>
<scope>provided</scope>
</dependency>
@ -187,9 +192,9 @@
</dependency>
<dependency>
<groupId>com.github.TFPatches</groupId>
<artifactId>TF-WorldGuard</artifactId>
<version>bb12813214</version>
<groupId>com.sk89q.worldguard</groupId>
<artifactId>worldguard-bukkit</artifactId>
<version>7.0.2</version>
<scope>provided</scope>
</dependency>

View file

@ -227,7 +227,7 @@ public class LoginProcess extends FreedomService
player.setPlayerListFooter(FUtil.colorize(ConfigEntry.SERVER_TABLIST_FOOTER.getString()).replace("\\n", "\n"));
}
for (Player p : Command_vanish.VANISHED)
for (Player p : plugin.al.vanished)
{
if (!plugin.al.isAdmin(player))
{

View file

@ -41,6 +41,8 @@ import me.totalfreedom.totalfreedommod.httpd.HTTPDaemon;
import me.totalfreedom.totalfreedommod.masterbuilder.MasterBuilder;
import me.totalfreedom.totalfreedommod.masterbuilder.MasterBuilderList;
import me.totalfreedom.totalfreedommod.masterbuilder.MasterBuilderWorldRestrictions;
import me.totalfreedom.totalfreedommod.permissions.PermissionConfig;
import me.totalfreedom.totalfreedommod.permissions.PermissionManager;
import me.totalfreedom.totalfreedommod.player.PlayerList;
import me.totalfreedom.totalfreedommod.playerverification.PlayerVerification;
import me.totalfreedom.totalfreedommod.punishments.PunishmentList;
@ -72,6 +74,7 @@ public class TotalFreedomMod extends AeroPlugin<TotalFreedomMod>
public static String pluginVersion;
//
public MainConfig config;
public PermissionConfig permissions;
//
// Services
public ServiceManager<TotalFreedomMod> services;
@ -100,6 +103,7 @@ public class TotalFreedomMod extends AeroPlugin<TotalFreedomMod>
public PunishmentList pul;
public BanManager bm;
public PermbanList pm;
public PermissionManager pem;
public VPNBanList vn;
public ProtectArea pa;
public GameRuleHandler gr;
@ -176,6 +180,7 @@ public class TotalFreedomMod extends AeroPlugin<TotalFreedomMod>
backups.createBackups(TotalFreedomMod.CONFIG_FILENAME, true);
backups.createBackups(AdminList.CONFIG_FILENAME);
backups.createBackups(PermbanList.CONFIG_FILENAME);
backups.createBackups(PermissionConfig.PERMISSIONS_FILENAME, true);
backups.createBackups(VPNBanList.CONFIG_FILENAME);
backups.createBackups(MasterBuilder.CONFIG_FILENAME);
backups.createBackups(PunishmentList.CONFIG_FILENAME);
@ -183,6 +188,9 @@ public class TotalFreedomMod extends AeroPlugin<TotalFreedomMod>
config = new MainConfig(this);
config.load();
permissions = new PermissionConfig(this);
permissions.load();
// Start services
services = new ServiceManager<>(plugin);
si = services.registerService(ServerInterface.class);
@ -213,6 +221,7 @@ public class TotalFreedomMod extends AeroPlugin<TotalFreedomMod>
pul = services.registerService(PunishmentList.class);
bm = services.registerService(BanManager.class);
pm = services.registerService(PermbanList.class);
pem = services.registerService(PermissionManager.class);
vn = services.registerService(VPNBanList.class);
pa = services.registerService(ProtectArea.class);
gr = services.registerService(GameRuleHandler.class);

View file

@ -38,6 +38,7 @@ public class AdminList extends FreedomService
private final Map<String, Admin> ipTable = Maps.newHashMap();
public final List<String> verifiedNoAdmins = new ArrayList<>();
public final Map<String, List<String>> verifiedNoAdminIps = Maps.newHashMap();
public static ArrayList<Player> vanished = new ArrayList<>();
//
private final YamlConfig config;

View file

@ -4,7 +4,6 @@ import com.earth2me.essentials.Essentials;
import com.earth2me.essentials.User;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.command.Command_vanish;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FLog;
@ -40,7 +39,6 @@ public class EssentialsBridge extends FreedomService
@Override
protected void onStop()
{
Command_vanish.VANISHED.clear();
}
public Essentials getEssentialsPlugin()
@ -215,10 +213,6 @@ public class EssentialsBridge extends FreedomService
public void onPlayerQuit(PlayerQuitEvent event)
{
Player player = event.getPlayer();
if (Command_vanish.VANISHED.contains(player))
{
Command_vanish.VANISHED.remove(player);
}
}
public boolean isEnabled()

View file

@ -12,26 +12,22 @@ import org.bukkit.plugin.Plugin;
public class WorldEditBridge extends FreedomService
{
private final WorldEditListener listener;
//
private WorldEditPlugin worldeditPlugin = null;
public WorldEditBridge(TotalFreedomMod plugin)
{
super(plugin);
listener = new WorldEditListener(plugin);
}
@Override
protected void onStart()
{
listener.register();
}
@Override
protected void onStop()
{
listener.unregister();
}
public WorldEditPlugin getWorldEditPlugin()

View file

@ -1,63 +0,0 @@
package me.totalfreedom.totalfreedommod.bridge;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.util.FUtil;
import me.totalfreedom.worldedit.LimitChangedEvent;
import me.totalfreedom.worldedit.SelectionChangedEvent;
import net.pravian.aero.component.PluginListener;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
public class WorldEditListener extends PluginListener<TotalFreedomMod>
{
public WorldEditListener(TotalFreedomMod plugin)
{
super(plugin);
}
@EventHandler
public void onSelectionChange(final SelectionChangedEvent event)
{
final Player player = event.getPlayer();
if (plugin.al.isAdmin(player))
{
return;
}
if (plugin.pa.isInProtectedArea(
event.getMinVector(),
event.getMaxVector(),
event.getWorld().getName()))
{
player.sendMessage(ChatColor.RED + "The region that you selected contained a protected area. Selection cleared.");
event.setCancelled(true);
}
}
@EventHandler
public void onLimitChanged(LimitChangedEvent event)
{
final Player player = event.getPlayer();
if (plugin.al.isAdmin(player))
{
return;
}
if (!event.getPlayer().equals(event.getTarget()))
{
player.sendMessage(ChatColor.RED + "Only admins can change the limit for other players!");
event.setCancelled(true);
}
if (event.getLimit() < 0 || event.getLimit() > 200000)
{
event.setCancelled(true);
player.sendMessage(ChatColor.RED + "You cannot set your limit higher than 200000 or to -1!");
}
}
}

View file

@ -1,20 +1,19 @@
package me.totalfreedom.totalfreedommod.bridge;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.protection.regions.RegionContainer;
import java.util.Map;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.util.FLog;
import org.bukkit.World;
import org.bukkit.plugin.Plugin;
public class WorldGuardBridge extends FreedomService
{
private WorldGuardPlugin worldGuardPlugin;
public WorldGuardBridge(TotalFreedomMod plugin)
{
super(plugin);
@ -30,31 +29,16 @@ public class WorldGuardBridge extends FreedomService
{
}
public WorldGuardPlugin getWorldGuardPlugin()
public RegionManager getRegionManager(World world)
{
if (worldGuardPlugin == null)
{
try
{
final Plugin worldGuard = server.getPluginManager().getPlugin("WorldGuard");
if (worldGuard != null && worldGuard instanceof WorldGuardPlugin)
{
worldGuardPlugin = (WorldGuardPlugin)worldGuard;
}
}
catch (Exception ex)
{
FLog.severe(ex);
}
}
return worldGuardPlugin;
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
return container.get(BukkitAdapter.adapt(world));
}
public int wipeRegions(World world)
{
int count = 0;
RegionManager regionManager = getWorldGuardPlugin().getRegionManager(world);
RegionManager regionManager = getRegionManager(world);
if (regionManager != null)
{
Map<String, ProtectedRegion> regions = regionManager.getRegions();
@ -69,8 +53,8 @@ public class WorldGuardBridge extends FreedomService
public boolean isEnabled()
{
final WorldGuardPlugin wg = getWorldGuardPlugin();
Plugin plugin = server.getPluginManager().getPlugin("WorldGuard");
return wg != null && wg.isEnabled();
return plugin != null && plugin.isEnabled();
}
}

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;
}

View file

@ -20,15 +20,12 @@ public class Module_permbans extends HTTPDModule
{
File permbanFile = new File(plugin.getDataFolder(), PermbanList.CONFIG_FILENAME);
// if people get mad that opening the permban list to the public causes a mass DDoS attack on the server due to ip
// leaks, it wasnt my idea
/*final String remoteAddress = socket.getInetAddress().getHostAddress();
final String remoteAddress = socket.getInetAddress().getHostAddress();
if (!isAuthorized(remoteAddress))
{
return new NanoHTTPD.Response(NanoHTTPD.Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT,
"You may not view the permban list. Your IP, " + remoteAddress + ", is not registered to an admin on the server.");
}*/
}
if (permbanFile.exists())
{
return HTTPDaemon.serveFileBasic(new File(plugin.getDataFolder(), PermbanList.CONFIG_FILENAME));

View file

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

View file

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

View file

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

View file

@ -175,6 +175,7 @@ public class RankManager extends FreedomService
fPlayer.setTag(null);
player.setPlayerListName(null);
}
plugin.pem.setPermissions(player);
}
@EventHandler(priority = EventPriority.MONITOR)

View file

@ -51,7 +51,7 @@ public class FUtil
//
public static final String SAVED_FLAGS_FILENAME = "savedflags.dat";
// See https://github.com/TotalFreedom/License - None of the listed names may be removed.
public static final List<String> DEVELOPERS = Arrays.asList("Madgeek1450", "Prozza", "WickedGamingUK", "Wild1145", "Demonic_Mario", "RobinGall2910", "smartnt");
public static final List<String> DEVELOPERS = Arrays.asList("Madgeek1450", "Prozza", "WickedGamingUK", "Wild1145", "Demonic_Mario", "OxLemonxO");
public static String DATE_STORAGE_FORMAT = "EEE, d MMM yyyy HH:mm:ss Z";
public static final Map<String, ChatColor> CHAT_COLOR_NAMES = new HashMap<>();
public static final List<ChatColor> CHAT_COLOR_POOL = Arrays.asList(

View file

@ -1,3 +1,3 @@
#
# TotalFreedomMod 5.2 Activity Log
# TotalFreedomMod 5.5 Activity Log
#

View file

@ -1,5 +1,5 @@
#
# TotalFreedomMod 5.2 Admin List
# TotalFreedomMod 5.5 Admin List
#
prozza:

View file

@ -1,3 +1,3 @@
#
# TotalFreedomMod 5.2 Player Bans
# TotalFreedomMod 5.5 Player Bans
#

View file

@ -1,5 +1,5 @@
#
# TotalFreedomMod 5.2 Configuration
# TotalFreedomMod 5.5 Configuration
# by Madgeek1450 and Prozza
#

View file

@ -1,3 +1,3 @@
#
# TotalFreedomMod 5.2 Master Builder List
# TotalFreedomMod 5.5 Master Builder List
#

View file

@ -1,5 +1,5 @@
#
# TotalFreedomMod 5.2 Permanent Bans
# TotalFreedomMod 5.5 Permanent Bans
#
badplayer1:

View file

@ -0,0 +1,78 @@
#
# TotalFreedomMod 5.5 Permissions
# by ZeroEpoch1969
#
# Note that every group inherits the previous groups' permissions
# Meaning Telnet Admins have the permissions of Operators and Super Admins, and etc
# This is used to remove all permission begging with the root node
# This is useful when a plugin gives all permissions to a player because they are opped
remove:
- "coreprotect"
# Operator permission nodes
operators:
# WorldEdit
- "worldedit.help"
- "worldedit.history.undo.self"
- "worldedit.history.redo.self"
- "worldedit.history.clear"
- "worldedit.limit"
- "worldedit.reorder"
- "worldedit.drawsel"
- "worldedit.searchitem"
- "worldedit.navigation.*"
- "worldedit.selection.*"
- "worldedit.wand"
- "worldedit.wand.*"
- "worldedit.region.*"
- "worldedit.generation.*"
- "worldedit.clipboard.*"
- "worldedit.tool.info"
- "worldedit.biome.*"
- "worldedit.removeabove"
- "worldedit.removebelow"
- "worldedit.removenear"
- "worldedit.replacenear"
# CoreProtect
- "coreprotect.inspect"
- "coreprotect.lookup"
- "coreprotect.help"
- "coreprotect.status"
- "coreprotect.lookup.block"
- "coreprotect.lookup.click"
- "coreprotect.lookup.container"
- "coreprotect.container"
- "coreprotect.core"
- "coreprotect.coreprotect"
- "coreprotect.co"
# WorldGuard
- "worldgyardregion.list.own"
- "worldguard.region.addmember.own.*"
- "worldguard.region.removemember.own.*"
- "worldguard.region.info.*"
# Master Builder permission nodes
master_builders:
- "worldedit.tool.*"
- "worldedit.brush.*"
- "worldedit.snow"
- "worldedit.green"
- "worldedit.extinguish"
- "worldedit.thaw"
# Super Admin permission nodes
super_admins:
- "coreprotect.*"
- "worldedit.*"
- "worldguard.*"
# Telnet Admin permission nodes
telnet_admins: []
# Senior Admin permission nodes
senior_admins: []

View file

@ -5,4 +5,4 @@ description: Plugin for the Total Freedom server.
depend: [Aero]
softdepend: [BukkitTelnet, Essentials, LibsDisguises, WorldEdit]
authors: [Madgeek1450, Prozza]
api-version: 1.14
api-version: 1.15

View file

@ -1,3 +1,3 @@
#
# TotalFreedomMod 5.2 Player Punishments
# TotalFreedomMod 5.5 Player Punishments
#

View file

@ -1,5 +1,5 @@
#
# TotalFreedomMod 5.2 VPN Bans
# TotalFreedomMod 5.5 VPN Bans
#
badnetwork1: