Refactors a lot of code, and extracts permission-related functions to the PermissionHelper class

This commit is contained in:
Kristian Knarvik 2021-09-20 13:56:30 +02:00
parent b57f988b62
commit f681db629f
23 changed files with 497 additions and 381 deletions

View File

@ -15,10 +15,10 @@ import net.knarcraft.stargate.listener.WorldEventListener;
import net.knarcraft.stargate.portal.GateHandler; import net.knarcraft.stargate.portal.GateHandler;
import net.knarcraft.stargate.portal.Portal; import net.knarcraft.stargate.portal.Portal;
import net.knarcraft.stargate.portal.PortalHandler; import net.knarcraft.stargate.portal.PortalHandler;
import net.knarcraft.stargate.portal.PortalOption;
import net.knarcraft.stargate.thread.BlockChangeThread; import net.knarcraft.stargate.thread.BlockChangeThread;
import net.knarcraft.stargate.thread.StarGateThread; import net.knarcraft.stargate.thread.StarGateThread;
import net.knarcraft.stargate.utility.EconomyHandler; import net.knarcraft.stargate.utility.EconomyHandler;
import net.knarcraft.stargate.utility.PermissionHelper;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Server; import org.bukkit.Server;
@ -28,7 +28,6 @@ import org.bukkit.command.CommandSender;
import org.bukkit.command.PluginCommand; import org.bukkit.command.PluginCommand;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@ -192,7 +191,7 @@ public class Stargate extends JavaPlugin {
} }
// Check if the player can use the private gate // Check if the player can use the private gate
if (portal.isPrivate() && !Stargate.canPrivate(player, portal)) { if (portal.isPrivate() && !PermissionHelper.canPrivate(player, portal)) {
Stargate.sendMessage(player, Stargate.getString("denyMsg")); Stargate.sendMessage(player, Stargate.getString("denyMsg"));
return; return;
} }
@ -207,103 +206,8 @@ public class Stargate extends JavaPlugin {
portal.open(player, false); portal.open(player, false);
} }
/*
* Check whether the player has the given permissions.
*/
/** /**
* Checks whether a player has the given permission * Creates a StargateAccessPortal and gives the result
*
* <p>This is the same as player.hasPermission(), but this function allows for printing permission debugging info.</p>
*
* @param player <p>The player to check</p>
* @param perm <p>The permission to check</p>
* @return <p>True if the player has the permission</p>
*/
public static boolean hasPermission(Player player, String perm) {
if (permissionDebuggingEnabled) {
Stargate.debug("hasPerm::SuperPerm(" + player.getName() + ")", perm + " => " + player.hasPermission(perm));
}
return player.hasPermission(perm);
}
/**
* Check a deep permission, this will check to see if the permissions is defined for this use
*
* <p>If using Permissions it will return the same as hasPerm. If using SuperPerms will return true if the node
* isn't defined, or the value of the node if it is</p>
*
* @param player <p>The player to check</p>
* @param permission <p>The permission to check</p>
* @return <p>True if the player has the permission or it is not set</p>
*/
public static boolean hasPermDeep(Player player, String permission) {
if (!player.isPermissionSet(permission)) {
if (permissionDebuggingEnabled) {
Stargate.debug("hasPermDeep::SuperPerm", permission + " => true");
}
return true;
}
if (permissionDebuggingEnabled) {
Stargate.debug("hasPermDeep::SuperPerms", permission + " => " + player.hasPermission(permission));
}
return player.hasPermission(permission);
}
/*
* Check whether player can teleport to dest world
*/
public static boolean cannotAccessWorld(Player player, String world) {
// Can use all stargate player features or access all worlds
if (hasPermission(player, "stargate.use") || hasPermission(player, "stargate.world")) {
// Do a deep check to see if the player lacks this specific world node
return !hasPermDeep(player, "stargate.world." + world);
}
// Can access dest world
return !hasPermission(player, "stargate.world." + world);
}
/**
* Checks whether a player can access the given network
* @param player <p>The player to check</p>
* @param network <p>The network to check</p>
* @return <p>True if the player is denied from accessing the network</p>
*/
public static boolean cannotAccessNetwork(Player player, String network) {
// Can user all stargate player features, or access all networks
if (hasPermission(player, "stargate.use") || hasPermission(player, "stargate.network")) {
// Do a deep check to see if the player lacks this specific network node
return !hasPermDeep(player, "stargate.network." + network);
}
//Check if the player can access this network
if (hasPermission(player, "stargate.network." + network)) {
return false;
}
// Is able to create personal gates (Assumption is made they can also access them)
String playerName = player.getName();
if (playerName.length() > 11) playerName = playerName.substring(0, 11);
return !network.equals(playerName) || !hasPermission(player, "stargate.create.personal");
}
/*
* Check whether the player can access this server
*/
public static boolean canAccessServer(Player player, String server) {
// Can user all stargate player features, or access all servers
if (hasPermission(player, "stargate.use") || hasPermission(player, "stargate.servers")) {
// Do a deep check to see if the player lacks this specific server node
return hasPermDeep(player, "stargate.server." + server);
}
// Can access this server
return hasPermission(player, "stargate.server." + server);
}
/*
* Call the StargateAccessPortal event, used for other plugins to bypass Permissions checks
*/
/**
* Creates a stargate access event and gives the result
* *
* <p>The event is used for other plugins to bypass the permission checks</p> * <p>The event is used for other plugins to bypass the permission checks</p>
* *
@ -329,138 +233,19 @@ public class Stargate extends JavaPlugin {
public static boolean cannotAccessPortal(Player player, Portal entrancePortal, Portal destination) { public static boolean cannotAccessPortal(Player player, Portal entrancePortal, Portal destination) {
boolean deny = false; boolean deny = false;
// Check if player has access to this server for Bungee gates // Check if player has access to this server for Bungee gates
if (entrancePortal.isBungee() && !Stargate.canAccessServer(player, entrancePortal.getNetwork())) { if (entrancePortal.isBungee() && !PermissionHelper.canAccessServer(player, entrancePortal.getNetwork())) {
Stargate.debug("cannotAccessPortal", "Cannot access server"); Stargate.debug("cannotAccessPortal", "Cannot access server");
deny = true; deny = true;
} else if (Stargate.cannotAccessNetwork(player, entrancePortal.getNetwork())) { } else if (PermissionHelper.cannotAccessNetwork(player, entrancePortal.getNetwork())) {
Stargate.debug("cannotAccessPortal", "Cannot access network"); Stargate.debug("cannotAccessPortal", "Cannot access network");
deny = true; deny = true;
} else if (!entrancePortal.isBungee() && Stargate.cannotAccessWorld(player, destination.getWorld().getName())) { } else if (!entrancePortal.isBungee() && PermissionHelper.cannotAccessWorld(player, destination.getWorld().getName())) {
Stargate.debug("cannotAccessPortal", "Cannot access world"); Stargate.debug("cannotAccessPortal", "Cannot access world");
deny = true; deny = true;
} }
return Stargate.cannotAccessPortal(player, entrancePortal, deny); return Stargate.cannotAccessPortal(player, entrancePortal, deny);
} }
/*
* Return true if the portal is free for the player
*/
public static boolean isFree(Player player, Portal src, Portal dest) {
// This gate is free
if (src.isFree()) return true;
// Player gets free use
if (hasPermission(player, "stargate.free") || Stargate.hasPermission(player, "stargate.free.use")) return true;
// Don't charge for free destination gates
return dest != null && !EconomyHandler.chargeFreeDestination && dest.isFree();
}
/*
* Check whether the player can see this gate (Hidden property check)
*/
/**
* Checks whether the player can see this gate (Hidden property check)
*
* <p>This decides if the player can see the gate on the network selection screen</p>
*
* @param player <p>The player to check</p>
* @param portal <p>The portal to check</p>
* @return <p>True if the given player can see the given portal</p>
*/
public static boolean canSee(Player player, Portal portal) {
// The gate is not hidden
if (!portal.isHidden()) {
return true;
}
// The player is an admin with the ability to see hidden gates
if (hasPermission(player, "stargate.admin") || hasPermission(player, "stargate.admin.hidden")) {
return true;
}
// The player is the owner of the gate
return portal.isOwner(player);
}
/*
* Check if the player can use this private gate
*/
public static boolean canPrivate(Player player, Portal portal) {
// Check if the player is the owner of the gate
if (portal.isOwner(player)) return true;
// The player is an admin with the ability to use private gates
return hasPermission(player, "stargate.admin") || hasPermission(player, "stargate.admin.private");
}
/*
* Check if the player has access to {option}
*/
public static boolean canOption(Player player, PortalOption option) {
// Check if the player can use all options
if (hasPermission(player, "stargate.option") || option == PortalOption.BUNGEE) {
return true;
}
// Check if they can use this specific option
return hasPermission(player, option.getPermissionString());
}
/*
* Check if the player can create gates on {network}
*/
public static boolean canCreate(Player player, String network) {
// Check for general create
if (hasPermission(player, "stargate.create")) return true;
// Check for all network create permission
if (hasPermission(player, "stargate.create.network")) {
// Do a deep check to see if the player lacks this specific network node
return hasPermDeep(player, "stargate.create.network." + network);
}
// Check for this specific network
return hasPermission(player, "stargate.create.network." + network);
}
/*
* Check if the player can create a personal gate
*/
public static boolean canCreatePersonal(Player player) {
// Check for general create
if (hasPermission(player, "stargate.create")) return true;
// Check for personal
return hasPermission(player, "stargate.create.personal");
}
/*
* Check if the player can create this gate layout
*/
public static boolean canCreateGate(Player player, String gate) {
// Check for general create
if (hasPermission(player, "stargate.create")) return true;
// Check for all gate create permissions
if (hasPermission(player, "stargate.create.gate")) {
// Do a deep check to see if the player lacks this specific gate node
return hasPermDeep(player, "stargate.create.gate." + gate);
}
// Check for this specific gate
return hasPermission(player, "stargate.create.gate." + gate);
}
/*
* Check if the player can destroy this gate
*/
public static boolean canDestroy(Player player, Portal portal) {
String network = portal.getNetwork();
// Check for general destroy
if (hasPermission(player, "stargate.destroy")) return true;
// Check for all network destroy permission
if (hasPermission(player, "stargate.destroy.network")) {
// Do a deep check to see if the player lacks permission for this network node
return hasPermDeep(player, "stargate.destroy.network." + network);
}
// Check for this specific network
if (hasPermission(player, "stargate.destroy.network." + network)) return true;
// Check for personal gate
return portal.isOwner(player) && hasPermission(player, "stargate.destroy.personal");
}
/** /**
* Replaces a list of variables in a string in the order they are given * Replaces a list of variables in a string in the order they are given
* *
@ -519,14 +304,7 @@ public class Stargate extends JavaPlugin {
log.info(pluginDescriptionFile.getName() + " v." + pluginDescriptionFile.getVersion() + " is enabled."); log.info(pluginDescriptionFile.getName() + " v." + pluginDescriptionFile.getVersion() + " is enabled.");
//Register events before loading gates to stop weird things happening. //Register events before loading gates to stop weird things happening.
pluginManager.registerEvents(new PlayerEventListener(), this); registerEventListeners();
pluginManager.registerEvents(new BlockEventListener(), this);
pluginManager.registerEvents(new VehicleEventListener(), this);
pluginManager.registerEvents(new EntityEventListener(), this);
pluginManager.registerEvents(new PortalEventListener(), this);
pluginManager.registerEvents(new WorldEventListener(), this);
pluginManager.registerEvents(new PluginEventListener(this), this);
this.loadConfig(); this.loadConfig();
@ -538,19 +316,37 @@ public class Stargate extends JavaPlugin {
// It is important to load languages here, as they are used during reloadGates() // It is important to load languages here, as they are used during reloadGates()
languageLoader = new LanguageLoader(languageFolder, Stargate.languageName); languageLoader = new LanguageLoader(languageFolder, Stargate.languageName);
this.migrate(); this.createMissingFolders();
this.loadGates(); this.loadGates();
this.loadAllPortals(); this.loadAllPortals();
// Check to see if Economy is loaded yet. // Check to see if Economy is loaded yet.
setupVaultEconomy(); setupVaultEconomy();
//Run necessary threads
getServer().getScheduler().runTaskTimer(this, new StarGateThread(), 0L, 100L); getServer().getScheduler().runTaskTimer(this, new StarGateThread(), 0L, 100L);
getServer().getScheduler().runTaskTimer(this, new BlockChangeThread(), 0L, 1L); getServer().getScheduler().runTaskTimer(this, new BlockChangeThread(), 0L, 1L);
this.registerCommands(); this.registerCommands();
} }
/**
* Registers all event listeners
*/
private void registerEventListeners() {
pluginManager.registerEvents(new PlayerEventListener(), this);
pluginManager.registerEvents(new BlockEventListener(), this);
pluginManager.registerEvents(new VehicleEventListener(), this);
pluginManager.registerEvents(new EntityEventListener(), this);
pluginManager.registerEvents(new PortalEventListener(), this);
pluginManager.registerEvents(new WorldEventListener(), this);
pluginManager.registerEvents(new PluginEventListener(this), this);
}
/**
* Registers a command for this plugin
*/
private void registerCommands() { private void registerCommands() {
PluginCommand stargateCommand = this.getCommand("stargate"); PluginCommand stargateCommand = this.getCommand("stargate");
if (stargateCommand != null) { if (stargateCommand != null) {
@ -559,34 +355,63 @@ public class Stargate extends JavaPlugin {
} }
} }
/**
* Loads all config values
*/
public void loadConfig() { public void loadConfig() {
reloadConfig(); this.reloadConfig();
newConfig = this.getConfig(); newConfig = this.getConfig();
// Copy default values if required // Copy default values if required
newConfig.options().copyDefaults(true); newConfig.options().copyDefaults(true);
// Load values into variables //Language
languageName = newConfig.getString("language");
//Folders
portalFolder = newConfig.getString("folders.portalFolder"); portalFolder = newConfig.getString("folders.portalFolder");
gateFolder = newConfig.getString("folders.gateFolder"); gateFolder = newConfig.getString("folders.gateFolder");
String defaultNetwork = newConfig.getString("gates.defaultGateNetwork");
defaultGateNetwork = defaultNetwork != null ? defaultNetwork.trim() : null;
destroyExplosion = newConfig.getBoolean("gates.destroyedByExplosion");
maxGates = newConfig.getInt("gates.maxGatesEachNetwork");
languageName = newConfig.getString("language");
rememberDestination = newConfig.getBoolean("gates.cosmetic.rememberDestination");
ignoreEntrance = newConfig.getBoolean("gates.integrity.ignoreEntrance");
handleVehicles = newConfig.getBoolean("gates.functionality.handleVehicles");
sortNetworkDestinations = newConfig.getBoolean("gates.cosmetic.sortNetworkDestinations");
protectEntrance = newConfig.getBoolean("gates.integrity.protectEntrance");
enableBungee = newConfig.getBoolean("gates.functionality.enableBungee");
verifyPortals = newConfig.getBoolean("gates.integrity.verifyPortals");
// Sign color
loadSignColor(newConfig.getString("gates.cosmetic.signColor"));
//Debug //Debug
debuggingEnabled = newConfig.getBoolean("debugging.debug"); debuggingEnabled = newConfig.getBoolean("debugging.debug");
permissionDebuggingEnabled = newConfig.getBoolean("debugging.permissionDebug"); permissionDebuggingEnabled = newConfig.getBoolean("debugging.permissionDebug");
//Gates
loadGateConfig();
//Economy //Economy
loadEconomyConfig();
this.saveConfig();
}
/**
* Loads all config values related to gates
*/
private void loadGateConfig() {
String defaultNetwork = newConfig.getString("gates.defaultGateNetwork");
defaultGateNetwork = defaultNetwork != null ? defaultNetwork.trim() : null;
maxGates = newConfig.getInt("gates.maxGatesEachNetwork");
//Functionality
handleVehicles = newConfig.getBoolean("gates.functionality.handleVehicles");
enableBungee = newConfig.getBoolean("gates.functionality.enableBungee");
//Integrity
protectEntrance = newConfig.getBoolean("gates.integrity.protectEntrance");
verifyPortals = newConfig.getBoolean("gates.integrity.verifyPortals");
ignoreEntrance = newConfig.getBoolean("gates.integrity.ignoreEntrance");
destroyExplosion = newConfig.getBoolean("gates.integrity.destroyedByExplosion");
//Cosmetic
sortNetworkDestinations = newConfig.getBoolean("gates.cosmetic.sortNetworkDestinations");
rememberDestination = newConfig.getBoolean("gates.cosmetic.rememberDestination");
loadSignColor(newConfig.getString("gates.cosmetic.signColor"));
}
/**
* Loads all config values related to economy
*/
private void loadEconomyConfig() {
EconomyHandler.economyEnabled = newConfig.getBoolean("economy.useEconomy"); EconomyHandler.economyEnabled = newConfig.getBoolean("economy.useEconomy");
EconomyHandler.setCreateCost(newConfig.getInt("economy.createCost")); EconomyHandler.setCreateCost(newConfig.getInt("economy.createCost"));
EconomyHandler.setDestroyCost(newConfig.getInt("economy.destroyCost")); EconomyHandler.setDestroyCost(newConfig.getInt("economy.destroyCost"));
@ -594,12 +419,11 @@ public class Stargate extends JavaPlugin {
EconomyHandler.toOwner = newConfig.getBoolean("economy.toOwner"); EconomyHandler.toOwner = newConfig.getBoolean("economy.toOwner");
EconomyHandler.chargeFreeDestination = newConfig.getBoolean("economy.chargeFreeDestination"); EconomyHandler.chargeFreeDestination = newConfig.getBoolean("economy.chargeFreeDestination");
EconomyHandler.freeGatesGreen = newConfig.getBoolean("economy.freeGatesGreen"); EconomyHandler.freeGatesGreen = newConfig.getBoolean("economy.freeGatesGreen");
this.saveConfig();
} }
/** /**
* Loads the correct sign color given a sign color string * Loads the correct sign color given a sign color string
*
* @param signColor <p>A string representing a sign color</p> * @param signColor <p>A string representing a sign color</p>
*/ */
private void loadSignColor(String signColor) { private void loadSignColor(String signColor) {
@ -614,18 +438,27 @@ public class Stargate extends JavaPlugin {
Stargate.signColor = ChatColor.BLACK; Stargate.signColor = ChatColor.BLACK;
} }
/**
* Forces all open portals to close
*/
public void closeAllPortals() { public void closeAllPortals() {
// Close all gates prior to reloading // Close all gates prior to reloading
for (Portal p : openList) { for (Portal openPortal : openList) {
p.close(true); openPortal.close(true);
} }
} }
/**
* Loads all available gates
*/
public void loadGates() { public void loadGates() {
GateHandler.loadGates(gateFolder); GateHandler.loadGates(gateFolder);
log.info(Stargate.getString("prefix") + "Loaded " + GateHandler.getGateCount() + " gate layouts"); log.info(Stargate.getString("prefix") + "Loaded " + GateHandler.getGateCount() + " gate layouts");
} }
/**
* Loads all portals in all un-managed worlds
*/
public void loadAllPortals() { public void loadAllPortals() {
for (World world : getServer().getWorlds()) { for (World world : getServer().getWorlds()) {
if (!managedWorlds.contains(world.getName())) { if (!managedWorlds.contains(world.getName())) {
@ -635,8 +468,10 @@ public class Stargate extends JavaPlugin {
} }
} }
private void migrate() { /**
// Only migrate if new file doesn't exist. * Creates missing folders
*/
private void createMissingFolders() {
File newPortalDir = new File(portalFolder); File newPortalDir = new File(portalFolder);
if (!newPortalDir.exists()) { if (!newPortalDir.exists()) {
if (!newPortalDir.mkdirs()) { if (!newPortalDir.mkdirs()) {
@ -651,22 +486,6 @@ public class Stargate extends JavaPlugin {
} }
} }
/*
* Check if a plugin is loaded/enabled already. Returns the plugin if so, null otherwise
*/
private Plugin checkPlugin(String p) {
Plugin plugin = pluginManager.getPlugin(p);
return checkPlugin(plugin);
}
private Plugin checkPlugin(Plugin plugin) {
if (plugin != null && plugin.isEnabled()) {
log.info(Stargate.getString("prefix") + "Found " + plugin.getDescription().getName() + " (v" + plugin.getDescription().getVersion() + ")");
return plugin;
}
return null;
}
/** /**
* Reloads all portals and files * Reloads all portals and files
* *

View File

@ -16,11 +16,16 @@ public class StarGateTabCompleter implements TabCompleter {
@Override @Override
public @Nullable List<String> onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, public @Nullable List<String> onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command,
@NotNull String s, @NotNull String[] strings) { @NotNull String s, @NotNull String[] args) {
List<String> commands = new ArrayList<>(); List<String> commands = new ArrayList<>();
commands.add("about"); commands.add("about");
commands.add("reload"); commands.add("reload");
if (args.length == 1) {
return commands; return commands;
} else {
return new ArrayList<>();
}
} }
} }

View File

@ -1,12 +1,13 @@
package net.knarcraft.stargate.listener; package net.knarcraft.stargate.listener;
import net.knarcraft.stargate.portal.Portal;
import net.knarcraft.stargate.portal.PortalHandler;
import net.knarcraft.stargate.Stargate; import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.event.StargateDestroyEvent; import net.knarcraft.stargate.event.StargateDestroyEvent;
import net.knarcraft.stargate.portal.Portal;
import net.knarcraft.stargate.portal.PortalHandler;
import net.knarcraft.stargate.utility.EconomyHandler; import net.knarcraft.stargate.utility.EconomyHandler;
import net.knarcraft.stargate.utility.EconomyHelper; import net.knarcraft.stargate.utility.EconomyHelper;
import net.knarcraft.stargate.utility.MaterialHelper; import net.knarcraft.stargate.utility.MaterialHelper;
import net.knarcraft.stargate.utility.PermissionHelper;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.data.type.WallSign; import org.bukkit.block.data.type.WallSign;
@ -84,7 +85,7 @@ public class BlockEventListener implements Listener {
String denyMsg = ""; String denyMsg = "";
//Decide if the user can destroy the portal //Decide if the user can destroy the portal
if (!Stargate.canDestroy(player, portal)) { if (!PermissionHelper.canDestroyPortal(player, portal)) {
denyMsg = Stargate.getString("denyMsg"); denyMsg = Stargate.getString("denyMsg");
deny = true; deny = true;
Stargate.log.info(Stargate.getString("prefix") + player.getName() + " tried to destroy gate"); Stargate.log.info(Stargate.getString("prefix") + player.getName() + " tried to destroy gate");

View File

@ -1,8 +1,8 @@
package net.knarcraft.stargate.listener; package net.knarcraft.stargate.listener;
import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.portal.Portal; import net.knarcraft.stargate.portal.Portal;
import net.knarcraft.stargate.portal.PortalHandler; import net.knarcraft.stargate.portal.PortalHandler;
import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.utility.EntityHelper; import net.knarcraft.stargate.utility.EntityHelper;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;

View File

@ -1,13 +1,14 @@
package net.knarcraft.stargate.listener; package net.knarcraft.stargate.listener;
import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.container.BlockLocation; import net.knarcraft.stargate.container.BlockLocation;
import net.knarcraft.stargate.portal.Portal; import net.knarcraft.stargate.portal.Portal;
import net.knarcraft.stargate.portal.PortalHandler; import net.knarcraft.stargate.portal.PortalHandler;
import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.utility.BungeeHelper; import net.knarcraft.stargate.utility.BungeeHelper;
import net.knarcraft.stargate.utility.EconomyHandler; import net.knarcraft.stargate.utility.EconomyHandler;
import net.knarcraft.stargate.utility.EconomyHelper; import net.knarcraft.stargate.utility.EconomyHelper;
import net.knarcraft.stargate.utility.MaterialHelper; import net.knarcraft.stargate.utility.MaterialHelper;
import net.knarcraft.stargate.utility.PermissionHelper;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Block; import org.bukkit.block.Block;
@ -127,6 +128,7 @@ public class PlayerEventListener implements Listener {
/** /**
* Checks whether a player move event is relevant for this plugin * Checks whether a player move event is relevant for this plugin
*
* @param event <p>The player move event to check</p> * @param event <p>The player move event to check</p>
* @param player <p>The player which moved</p> * @param player <p>The player which moved</p>
* @param fromLocation <p>The location the player is moving from</p> * @param fromLocation <p>The location the player is moving from</p>
@ -232,7 +234,7 @@ public class PlayerEventListener implements Listener {
* @return <p>True if the player should be denied</p> * @return <p>True if the player should be denied</p>
*/ */
private boolean cannotAccessPortal(Player player, Portal portal) { private boolean cannotAccessPortal(Player player, Portal portal) {
boolean deny = Stargate.cannotAccessNetwork(player, portal.getNetwork()); boolean deny = PermissionHelper.cannotAccessNetwork(player, portal.getNetwork());
if (Stargate.cannotAccessPortal(player, portal, deny)) { if (Stargate.cannotAccessPortal(player, portal, deny)) {
Stargate.sendMessage(player, Stargate.getString("denyMsg")); Stargate.sendMessage(player, Stargate.getString("denyMsg"));

View File

@ -1,7 +1,7 @@
package net.knarcraft.stargate.listener; package net.knarcraft.stargate.listener;
import net.knarcraft.stargate.utility.EconomyHandler;
import net.knarcraft.stargate.Stargate; import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.utility.EconomyHandler;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.server.PluginDisableEvent; import org.bukkit.event.server.PluginDisableEvent;
@ -28,6 +28,7 @@ public class PluginEventListener implements Listener {
* This event listens for and announces that the vault plugin was detected and enabled * This event listens for and announces that the vault plugin was detected and enabled
* *
* <p>Each time this event is called, the economy handler will try to enable vault</p> * <p>Each time this event is called, the economy handler will try to enable vault</p>
*
* @param ignored <p>The actual event called. This is currently not used</p> * @param ignored <p>The actual event called. This is currently not used</p>
*/ */
@EventHandler @EventHandler

View File

@ -1,8 +1,8 @@
package net.knarcraft.stargate.listener; package net.knarcraft.stargate.listener;
import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.portal.Portal; import net.knarcraft.stargate.portal.Portal;
import net.knarcraft.stargate.portal.PortalHandler; import net.knarcraft.stargate.portal.PortalHandler;
import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.utility.EconomyHandler; import net.knarcraft.stargate.utility.EconomyHandler;
import net.knarcraft.stargate.utility.EconomyHelper; import net.knarcraft.stargate.utility.EconomyHelper;
import net.knarcraft.stargate.utility.EntityHelper; import net.knarcraft.stargate.utility.EntityHelper;

View File

@ -1,7 +1,7 @@
package net.knarcraft.stargate.listener; package net.knarcraft.stargate.listener;
import net.knarcraft.stargate.portal.PortalHandler;
import net.knarcraft.stargate.Stargate; import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.portal.PortalHandler;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;

View File

@ -1,8 +1,8 @@
package net.knarcraft.stargate.portal; package net.knarcraft.stargate.portal;
import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.container.BlockLocation; import net.knarcraft.stargate.container.BlockLocation;
import net.knarcraft.stargate.container.RelativeBlockVector; import net.knarcraft.stargate.container.RelativeBlockVector;
import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.utility.DirectionHelper; import net.knarcraft.stargate.utility.DirectionHelper;
import net.knarcraft.stargate.utility.EconomyHandler; import net.knarcraft.stargate.utility.EconomyHandler;
import org.bukkit.Material; import org.bukkit.Material;

View File

@ -1,10 +1,11 @@
package net.knarcraft.stargate.portal; package net.knarcraft.stargate.portal;
import net.knarcraft.stargate.utility.EconomyHandler;
import net.knarcraft.stargate.Stargate; import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.utility.EconomyHandler;
import net.knarcraft.stargate.utility.MaterialHelper; import net.knarcraft.stargate.utility.MaterialHelper;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import java.io.File; import java.io.File;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
@ -322,6 +323,7 @@ public class GateHandler {
/** /**
* Reads an integer configuration key * Reads an integer configuration key
*
* @param config <p>The configuration to read</p> * @param config <p>The configuration to read</p>
* @param fileName <p>The filename of the config file</p> * @param fileName <p>The filename of the config file</p>
* @param key <p>The config key to read</p> * @param key <p>The config key to read</p>

View File

@ -1,9 +1,9 @@
package net.knarcraft.stargate.portal; package net.knarcraft.stargate.portal;
import net.knarcraft.stargate.container.BlockLocation;
import net.knarcraft.stargate.container.BlockChangeRequest;
import net.knarcraft.stargate.container.RelativeBlockVector;
import net.knarcraft.stargate.Stargate; import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.container.BlockChangeRequest;
import net.knarcraft.stargate.container.BlockLocation;
import net.knarcraft.stargate.container.RelativeBlockVector;
import net.knarcraft.stargate.event.StargateActivateEvent; import net.knarcraft.stargate.event.StargateActivateEvent;
import net.knarcraft.stargate.event.StargateCloseEvent; import net.knarcraft.stargate.event.StargateCloseEvent;
import net.knarcraft.stargate.event.StargateDeactivateEvent; import net.knarcraft.stargate.event.StargateDeactivateEvent;
@ -921,6 +921,7 @@ public class Portal {
/** /**
* Loads one chunk * Loads one chunk
*
* @param chunk <p>The chunk to load</p> * @param chunk <p>The chunk to load</p>
*/ */
private void loadOneChunk(Chunk chunk) { private void loadOneChunk(Chunk chunk) {

View File

@ -3,5 +3,4 @@ package net.knarcraft.stargate.portal;
public class PortalDirection { public class PortalDirection {
} }

View File

@ -1,13 +1,14 @@
package net.knarcraft.stargate.portal; package net.knarcraft.stargate.portal;
import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.container.BlockLocation; import net.knarcraft.stargate.container.BlockLocation;
import net.knarcraft.stargate.container.RelativeBlockVector; import net.knarcraft.stargate.container.RelativeBlockVector;
import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.container.TwoTuple; import net.knarcraft.stargate.container.TwoTuple;
import net.knarcraft.stargate.event.StargateCreateEvent; import net.knarcraft.stargate.event.StargateCreateEvent;
import net.knarcraft.stargate.utility.DirectionHelper; import net.knarcraft.stargate.utility.DirectionHelper;
import net.knarcraft.stargate.utility.EconomyHandler; import net.knarcraft.stargate.utility.EconomyHandler;
import net.knarcraft.stargate.utility.EconomyHelper; import net.knarcraft.stargate.utility.EconomyHelper;
import net.knarcraft.stargate.utility.PermissionHelper;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
@ -90,12 +91,12 @@ public class PortalHandler {
continue; continue;
} }
// Check if this player can access the dest world // Check if this player can access the dest world
if (Stargate.cannotAccessWorld(player, portal.getWorld().getName())) { if (PermissionHelper.cannotAccessWorld(player, portal.getWorld().getName())) {
Stargate.log.info("cannot access world"); Stargate.log.info("cannot access world");
continue; continue;
} }
// Visible to this player. // Visible to this player.
if (Stargate.canSee(player, portal)) { if (PermissionHelper.canSeePortal(player, portal)) {
destinations.add(portal.getName()); destinations.add(portal.getName());
} }
} }
@ -314,7 +315,7 @@ public class PortalHandler {
//If the player is trying to create a Bungee gate without permissions, drop out here //If the player is trying to create a Bungee gate without permissions, drop out here
if (options.indexOf(PortalOption.BUNGEE.getCharacterRepresentation()) != -1) { if (options.indexOf(PortalOption.BUNGEE.getCharacterRepresentation()) != -1) {
if (!Stargate.hasPermission(player, "stargate.admin.bungee")) { if (!PermissionHelper.hasPermission(player, "stargate.admin.bungee")) {
Stargate.sendMessage(player, Stargate.getString("bungeeDeny")); Stargate.sendMessage(player, Stargate.getString("bungeeDeny"));
return null; return null;
} }
@ -344,9 +345,9 @@ public class PortalHandler {
String denyMsg = ""; String denyMsg = "";
// Check if the player can create gates on this network // Check if the player can create gates on this network
if (!portalOptions.get(PortalOption.BUNGEE) && !Stargate.canCreate(player, network)) { if (!portalOptions.get(PortalOption.BUNGEE) && !PermissionHelper.canCreateNetworkGate(player, network)) {
Stargate.debug("createPortal", "Player doesn't have create permissions on network. Trying personal"); Stargate.debug("createPortal", "Player doesn't have create permissions on network. Trying personal");
if (Stargate.canCreatePersonal(player)) { if (PermissionHelper.canCreatePersonalGate(player)) {
network = player.getName(); network = player.getName();
if (network.length() > 11) network = network.substring(0, 11); if (network.length() > 11) network = network.substring(0, 11);
Stargate.debug("createPortal", "Creating personal portal"); Stargate.debug("createPortal", "Creating personal portal");
@ -362,7 +363,7 @@ public class PortalHandler {
// Check if the player can create this gate layout // Check if the player can create this gate layout
String gateName = gate.getFilename(); String gateName = gate.getFilename();
gateName = gateName.substring(0, gateName.indexOf('.')); gateName = gateName.substring(0, gateName.indexOf('.'));
if (!deny && !Stargate.canCreateGate(player, gateName)) { if (!deny && !PermissionHelper.canCreateGate(player, gateName)) {
Stargate.debug("createPortal", "Player does not have access to gate layout"); Stargate.debug("createPortal", "Player does not have access to gate layout");
deny = true; deny = true;
denyMsg = Stargate.getString("createGateDeny"); denyMsg = Stargate.getString("createGateDeny");
@ -373,8 +374,8 @@ public class PortalHandler {
Portal p = getByName(destinationName, network); Portal p = getByName(destinationName, network);
if (p != null) { if (p != null) {
String world = p.getWorld().getName(); String world = p.getWorld().getName();
if (Stargate.cannotAccessWorld(player, world)) { if (PermissionHelper.cannotAccessWorld(player, world)) {
Stargate.debug("canCreate", "Player does not have access to destination world"); Stargate.debug("canCreateNetworkGate", "Player does not have access to destination world");
deny = true; deny = true;
denyMsg = Stargate.getString("createWorldDeny"); denyMsg = Stargate.getString("createWorldDeny");
} }
@ -506,7 +507,7 @@ public class PortalHandler {
Map<PortalOption, Boolean> portalOptions = new HashMap<>(); Map<PortalOption, Boolean> portalOptions = new HashMap<>();
for (PortalOption option : PortalOption.values()) { for (PortalOption option : PortalOption.values()) {
portalOptions.put(option, options.indexOf(option.getCharacterRepresentation()) != -1 && portalOptions.put(option, options.indexOf(option.getCharacterRepresentation()) != -1 &&
Stargate.canOption(player, option)); PermissionHelper.canUseOption(player, option));
} }
// Can not create a non-fixed always-on gate. // Can not create a non-fixed always-on gate.

View File

@ -1,7 +1,7 @@
package net.knarcraft.stargate.thread; package net.knarcraft.stargate.thread;
import net.knarcraft.stargate.container.BlockChangeRequest;
import net.knarcraft.stargate.Stargate; import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.container.BlockChangeRequest;
import org.bukkit.Axis; import org.bukkit.Axis;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
@ -44,6 +44,7 @@ public class BlockChangeThread implements Runnable {
/** /**
* Prevents end gateway portal from behaving strangely * Prevents end gateway portal from behaving strangely
*
* @param block <p>The block to fix</p> * @param block <p>The block to fix</p>
*/ */
private void fixEndGatewayGate(Block block) { private void fixEndGatewayGate(Block block) {
@ -55,6 +56,7 @@ public class BlockChangeThread implements Runnable {
/** /**
* Sets the orientation axis of the placed block * Sets the orientation axis of the placed block
*
* @param block <p>The block to orient</p> * @param block <p>The block to orient</p>
* @param axis <p>The axis to use for orienting the block</p> * @param axis <p>The axis to use for orienting the block</p>
*/ */

View File

@ -1,7 +1,7 @@
package net.knarcraft.stargate.thread; package net.knarcraft.stargate.thread;
import net.knarcraft.stargate.portal.Portal;
import net.knarcraft.stargate.Stargate; import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.portal.Portal;
import java.util.Iterator; import java.util.Iterator;

View File

@ -1,8 +1,8 @@
package net.knarcraft.stargate.utility; package net.knarcraft.stargate.utility;
import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.portal.Portal; import net.knarcraft.stargate.portal.Portal;
import net.knarcraft.stargate.portal.PortalHandler; import net.knarcraft.stargate.portal.PortalHandler;
import net.knarcraft.stargate.Stargate;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;

View File

@ -41,6 +41,7 @@ public final class DirectionHelper {
/** /**
* Gets a block face given a yaw * Gets a block face given a yaw
*
* @param yaw <p>The yaw to use</p> * @param yaw <p>The yaw to use</p>
* @return <p>The block face the yaw corresponds to</p> * @return <p>The block face the yaw corresponds to</p>
*/ */
@ -63,6 +64,7 @@ public final class DirectionHelper {
/** /**
* Gets a direction vector given a yaw * Gets a direction vector given a yaw
*
* @param yaw <p>The yaw to use</p> * @param yaw <p>The yaw to use</p>
* @return <p>The direction vector of the yaw</p> * @return <p>The direction vector of the yaw</p>
*/ */
@ -95,6 +97,7 @@ public final class DirectionHelper {
/** /**
* Adds a relative block vector to a location, accounting for direction * Adds a relative block vector to a location, accounting for direction
*
* @param location <p>The location to adjust</p> * @param location <p>The location to adjust</p>
* @param right <p>The amount of blocks to the right to adjust</p> * @param right <p>The amount of blocks to the right to adjust</p>
* @param depth <p>The amount of blocks upward to adjust</p> * @param depth <p>The amount of blocks upward to adjust</p>
@ -110,6 +113,7 @@ public final class DirectionHelper {
/** /**
* Normalizes a yaw to make it positive and no larger than 360 degrees * Normalizes a yaw to make it positive and no larger than 360 degrees
*
* @param yaw <p>The yaw to normalize</p> * @param yaw <p>The yaw to normalize</p>
* @return <p>The normalized yaw</p> * @return <p>The normalized yaw</p>
*/ */

View File

@ -90,6 +90,7 @@ public final class EconomyHandler {
/** /**
* Charges the player for an action, if required * Charges the player for an action, if required
*
* @param player <p>The player to take money from</p> * @param player <p>The player to take money from</p>
* @param cost <p>The cost of the transaction</p> * @param cost <p>The cost of the transaction</p>
* @return <p>True if the player was charged successfully</p> * @return <p>True if the player was charged successfully</p>
@ -104,6 +105,7 @@ public final class EconomyHandler {
/** /**
* Charges the player for an action, if required * Charges the player for an action, if required
*
* @param player <p>The player to take money from</p> * @param player <p>The player to take money from</p>
* @param target <p>The target to pay</p> * @param target <p>The target to pay</p>
* @param cost <p>The cost of the transaction</p> * @param cost <p>The cost of the transaction</p>
@ -170,6 +172,7 @@ public final class EconomyHandler {
/** /**
* Checks whether a payment transaction should be skipped * Checks whether a payment transaction should be skipped
*
* @param cost <p>The cost of the transaction</p> * @param cost <p>The cost of the transaction</p>
* @return <p>True if the transaction should be skipped</p> * @return <p>True if the transaction should be skipped</p>
*/ */
@ -199,7 +202,8 @@ public final class EconomyHandler {
return 0; return 0;
} }
//Player gets free gate use //Player gets free gate use
if (Stargate.hasPermission(player, "stargate.free") || Stargate.hasPermission(player, "stargate.free.use")) { if (PermissionHelper.hasPermission(player, "stargate.free") ||
PermissionHelper.hasPermission(player, "stargate.free.use")) {
return 0; return 0;
} }
@ -208,6 +212,7 @@ public final class EconomyHandler {
/** /**
* Gets the cost of creating the given gate * Gets the cost of creating the given gate
*
* @param player <p>The player creating the gate</p> * @param player <p>The player creating the gate</p>
* @param gate <p>The gate type used</p> * @param gate <p>The gate type used</p>
* @return <p>The cost of creating the gate</p> * @return <p>The cost of creating the gate</p>
@ -222,6 +227,7 @@ public final class EconomyHandler {
/** /**
* Gets the cost of destroying the given gate * Gets the cost of destroying the given gate
*
* @param player <p>The player creating the gate</p> * @param player <p>The player creating the gate</p>
* @param gate <p>The gate type used</p> * @param gate <p>The gate type used</p>
* @return <p>The cost of destroying the gate</p> * @return <p>The cost of destroying the gate</p>
@ -236,13 +242,14 @@ public final class EconomyHandler {
/** /**
* Determines if a player can do a gate action for free * Determines if a player can do a gate action for free
*
* @param player <p>The player to check</p> * @param player <p>The player to check</p>
* @param permissionNode <p>The free.permissionNode necessary to allow free gate {action}</p> * @param permissionNode <p>The free.permissionNode necessary to allow free gate {action}</p>
* @return <p></p> * @return <p></p>
*/ */
private static boolean isFree(Player player, String permissionNode) { private static boolean isFree(Player player, String permissionNode) {
return !EconomyHandler.useEconomy() || Stargate.hasPermission(player, "stargate.free") || return !EconomyHandler.useEconomy() || PermissionHelper.hasPermission(player, "stargate.free") ||
Stargate.hasPermission(player, "stargate.free." + permissionNode); PermissionHelper.hasPermission(player, "stargate.free." + permissionNode);
} }
/** /**

View File

@ -1,7 +1,7 @@
package net.knarcraft.stargate.utility; package net.knarcraft.stargate.utility;
import net.knarcraft.stargate.portal.Portal;
import net.knarcraft.stargate.Stargate; import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.portal.Portal;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
/** /**

View File

@ -0,0 +1,272 @@
package net.knarcraft.stargate.utility;
import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.portal.Portal;
import net.knarcraft.stargate.portal.PortalOption;
import org.bukkit.entity.Player;
/**
* Helper class for deciding which actions a player is allowed to perform
*/
public final class PermissionHelper {
private PermissionHelper() {
}
/**
* Checks whether a player has the given permission
*
* <p>This is the same as player.hasPermission(), but this function allows for printing permission debugging info.</p>
*
* @param player <p>The player to check</p>
* @param perm <p>The permission to check</p>
* @return <p>True if the player has the permission</p>
*/
public static boolean hasPermission(Player player, String perm) {
if (Stargate.permissionDebuggingEnabled) {
Stargate.debug("hasPerm::SuperPerm(" + player.getName() + ")", perm + " => " + player.hasPermission(perm));
}
return player.hasPermission(perm);
}
/**
* Check a deep permission, this will check to see if the permissions is defined for this use
*
* <p>If using Permissions it will return the same as hasPerm. If using SuperPerms will return true if the node
* isn't defined, or the value of the node if it is</p>
*
* @param player <p>The player to check</p>
* @param permission <p>The permission to check</p>
* @return <p>True if the player has the permission or it is not set</p>
*/
public static boolean hasPermDeep(Player player, String permission) {
if (!player.isPermissionSet(permission)) {
if (Stargate.permissionDebuggingEnabled) {
Stargate.debug("hasPermDeep::SuperPerm", permission + " => true");
}
return true;
}
if (Stargate.permissionDebuggingEnabled) {
Stargate.debug("hasPermDeep::SuperPerms", permission + " => " + player.hasPermission(permission));
}
return player.hasPermission(permission);
}
/**
* Checks whether a player can access the given world
* @param player <p>The player trying to access the world</p>
* @param world <p>The world the player is trying to access</p>
* @return <p>False if the player should be allowed to access the world</p>
*/
public static boolean cannotAccessWorld(Player player, String world) {
// Can use all stargate player features or access all worlds
if (hasPermission(player, "stargate.use") || hasPermission(player, "stargate.world")) {
// Do a deep check to see if the player lacks this specific world node
return !hasPermDeep(player, "stargate.world." + world);
}
// Can access dest world
return !hasPermission(player, "stargate.world." + world);
}
/**
* Checks whether a player can access the given network
*
* @param player <p>The player to check</p>
* @param network <p>The network to check</p>
* @return <p>True if the player is denied from accessing the network</p>
*/
public static boolean cannotAccessNetwork(Player player, String network) {
// Can user all stargate player features, or access all networks
if (hasPermission(player, "stargate.use") || hasPermission(player, "stargate.network")) {
// Do a deep check to see if the player lacks this specific network node
return !hasPermDeep(player, "stargate.network." + network);
}
//Check if the player can access this network
if (hasPermission(player, "stargate.network." + network)) {
return false;
}
//Is able to create personal gates (Assumption is made they can also access them)
String playerName = player.getName();
if (playerName.length() > 11) {
playerName = playerName.substring(0, 11);
}
return !network.equals(playerName) || !hasPermission(player, "stargate.create.personal");
}
/**
* Checks whether a player can access the given bungee server
* @param player <p>The player trying to teleport</p>
* @param server <p>The server the player is trying to connect to</p>
* @return <p>True if the player is allowed to access the given server</p>
*/
public static boolean canAccessServer(Player player, String server) {
//Can user all stargate player features, or access all servers
if (hasPermission(player, "stargate.use") || hasPermission(player, "stargate.servers")) {
//Do a deep check to see if the player lacks this specific server node
return hasPermDeep(player, "stargate.server." + server);
}
//Can access this server
return hasPermission(player, "stargate.server." + server);
}
/**
* Checks whether the given player can teleport the given stretch for free
*
* @param player <p>The player trying to teleport</p>
* @param src <p>The portal the player is entering</p>
* @param dest <p>The portal the player wants to teleport to</p>
* @return <p>True if the player can travel for free</p>
*/
public static boolean isFree(Player player, Portal src, Portal dest) {
// This gate is free
if (src.isFree()) {
return true;
}
// Player gets free use
if (hasPermission(player, "stargate.free") || hasPermission(player, "stargate.free.use")) {
return true;
}
// Don't charge for free destination gates
return dest != null && !EconomyHandler.chargeFreeDestination && dest.isFree();
}
/**
* Checks whether the player can see this gate (Hidden property check)
*
* <p>This decides if the player can see the gate on the network selection screen</p>
*
* @param player <p>The player to check</p>
* @param portal <p>The portal to check</p>
* @return <p>True if the given player can see the given portal</p>
*/
public static boolean canSeePortal(Player player, Portal portal) {
// The gate is not hidden
if (!portal.isHidden()) {
return true;
}
// The player is an admin with the ability to see hidden gates
if (hasPermission(player, "stargate.admin") || hasPermission(player, "stargate.admin.hidden")) {
return true;
}
// The player is the owner of the gate
return portal.isOwner(player);
}
/**
* Checks if the given player is allowed to use the given private portal
*
* @param player <p>The player trying to use the portal</p>
* @param portal <p>The private portal used</p>
* @return <p>True if the player is allowed to use the portal</p>
*/
public static boolean canPrivate(Player player, Portal portal) {
//Check if the player is the owner of the gate
if (portal.isOwner(player)) {
return true;
}
//The player is an admin with the ability to use private gates
return hasPermission(player, "stargate.admin") || hasPermission(player, "stargate.admin.private");
}
/**
* Checks if the given player has access to the given portal option
*
* @param player <p>The player trying to use the option</p>
* @param option <p>The option the player is trying to use</p>
* @return <p>True if the player is allowed to create a portal with the given option</p>
*/
public static boolean canUseOption(Player player, PortalOption option) {
//Check if the player can use all options
if (hasPermission(player, "stargate.option") || option == PortalOption.BUNGEE) {
return true;
}
//Check if they can use this specific option
return hasPermission(player, option.getPermissionString());
}
/**
* Checks if the given player is allowed to create gates on the given network
*
* @param player <p>The player trying to create a new gate</p>
* @param network <p>The network the player is trying to create a gate on</p>
* @return <p>True if the player is allowed to create the new gate</p>
*/
public static boolean canCreateNetworkGate(Player player, String network) {
//Check for general create
if (hasPermission(player, "stargate.create")) {
return true;
}
//Check for all network create permission
if (hasPermission(player, "stargate.create.network")) {
// Do a deep check to see if the player lacks this specific network node
return hasPermDeep(player, "stargate.create.network." + network);
}
//Check for this specific network
return hasPermission(player, "stargate.create.network." + network);
}
/**
* Checks whether the given player is allowed to create a personal gate
*
* @param player <p>The player trying to create the new gate</p>
* @return <p>True if the player is allowed</p>
*/
public static boolean canCreatePersonalGate(Player player) {
//Check for general create
if (hasPermission(player, "stargate.create")) {
return true;
}
//Check for personal
return hasPermission(player, "stargate.create.personal");
}
/**
* Checks if the given player can create a portal with the given gate layout
*
* @param player <p>The player trying to create a portal</p>
* @param gate <p>The gate type of the new portal</p>
* @return <p>True if the player is allowed to create a portal with the given gate layout</p>
*/
public static boolean canCreateGate(Player player, String gate) {
//Check for general create
if (hasPermission(player, "stargate.create")) {
return true;
}
//Check for all gate create permissions
if (hasPermission(player, "stargate.create.gate")) {
// Do a deep check to see if the player lacks this specific gate node
return hasPermDeep(player, "stargate.create.gate." + gate);
}
//Check for this specific gate
return hasPermission(player, "stargate.create.gate." + gate);
}
/**
* Checks if the given player can destroy the given portal
*
* @param player <p>The player trying to destroy the portal</p>
* @param portal <p>The portal to destroy</p>
* @return <p>True if the player is allowed to destroy the portal</p>
*/
public static boolean canDestroyPortal(Player player, Portal portal) {
String network = portal.getNetwork();
//Check for general destroy
if (hasPermission(player, "stargate.destroy")) {
return true;
}
//Check for all network destroy permission
if (hasPermission(player, "stargate.destroy.network")) {
//Do a deep check to see if the player lacks permission for this network node
return hasPermDeep(player, "stargate.destroy.network." + network);
}
//Check for this specific network
if (hasPermission(player, "stargate.destroy.network." + network)) {
return true;
}
//Check for personal gate
return portal.isOwner(player) && hasPermission(player, "stargate.destroy.personal");
}
}

View File

@ -7,7 +7,7 @@ import org.bukkit.ChatColor;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
/** /**
* This class helps drawing the sign on a portal as it's a bit too complicated to be contained within the portal class * This class helps to draw the sign on a portal as it's a bit too complicated to be contained within the portal class
*/ */
public final class SignHelper { public final class SignHelper {
@ -41,7 +41,7 @@ public final class SignHelper {
} }
/** /**
* Draws a sign with chooseable network locations * Draws a sign with choose-able network locations
* *
* @param sign <p>The sign to draw on</p> * @param sign <p>The sign to draw on</p>
*/ */
@ -51,7 +51,7 @@ public final class SignHelper {
int destinationIndex = portal.getDestinations().indexOf(portal.getDestinationName()); int destinationIndex = portal.getDestinations().indexOf(portal.getDestinationName());
boolean freeGatesGreen = EconomyHandler.useEconomy() && EconomyHandler.freeGatesGreen; boolean freeGatesGreen = EconomyHandler.useEconomy() && EconomyHandler.freeGatesGreen;
//Last entry, and not only entry. Draw the entry two previously //Last, and not only entry. Draw the entry two back
if ((destinationIndex == maxIndex) && (maxIndex > 1)) { if ((destinationIndex == maxIndex) && (maxIndex > 1)) {
drawNetworkSignLine(freeGatesGreen, sign, ++signLineIndex, destinationIndex - 2, portal); drawNetworkSignLine(freeGatesGreen, sign, ++signLineIndex, destinationIndex - 2, portal);
} }
@ -62,8 +62,8 @@ public final class SignHelper {
//Draw the chosen entry (line 2 or 3) //Draw the chosen entry (line 2 or 3)
drawNetworkSignChosenLine(freeGatesGreen, sign, ++signLineIndex, portal); drawNetworkSignChosenLine(freeGatesGreen, sign, ++signLineIndex, portal);
//Has another entry and space on the sign //Has another entry and space on the sign
if ((maxIndex >= destinationIndex + 1) && (++signLineIndex <= 3)) { if ((maxIndex >= destinationIndex + 1)) {
drawNetworkSignLine(freeGatesGreen, sign, signLineIndex, destinationIndex + 1, portal); drawNetworkSignLine(freeGatesGreen, sign, ++signLineIndex, destinationIndex + 1, portal);
} }
//Has another entry and space on the sign //Has another entry and space on the sign
if ((maxIndex >= destinationIndex + 2) && (++signLineIndex <= 3)) { if ((maxIndex >= destinationIndex + 2) && (++signLineIndex <= 3)) {
@ -81,7 +81,7 @@ public final class SignHelper {
private static void drawNetworkSignChosenLine(boolean freeGatesGreen, Sign sign, int signLineIndex, Portal portal) { private static void drawNetworkSignChosenLine(boolean freeGatesGreen, Sign sign, int signLineIndex, Portal portal) {
if (freeGatesGreen) { if (freeGatesGreen) {
Portal destination = PortalHandler.getByName(portal.getDestinationName(), portal.getNetwork()); Portal destination = PortalHandler.getByName(portal.getDestinationName(), portal.getNetwork());
boolean green = Stargate.isFree(portal.getActivePlayer(), portal, destination); boolean green = PermissionHelper.isFree(portal.getActivePlayer(), portal, destination);
Stargate.setLine(sign, signLineIndex, (green ? ChatColor.DARK_GREEN : "") + ">" + portal.getDestinationName() + "<"); Stargate.setLine(sign, signLineIndex, (green ? ChatColor.DARK_GREEN : "") + ">" + portal.getDestinationName() + "<");
} else { } else {
Stargate.setLine(sign, signLineIndex, " >" + portal.getDestinationName() + "< "); Stargate.setLine(sign, signLineIndex, " >" + portal.getDestinationName() + "< ");
@ -100,7 +100,7 @@ public final class SignHelper {
Portal portal) { Portal portal) {
if (freeGatesGreen) { if (freeGatesGreen) {
Portal destination = PortalHandler.getByName(portal.getDestinations().get(destinationIndex), portal.getNetwork()); Portal destination = PortalHandler.getByName(portal.getDestinations().get(destinationIndex), portal.getNetwork());
boolean green = Stargate.isFree(portal.getActivePlayer(), portal, destination); boolean green = PermissionHelper.isFree(portal.getActivePlayer(), portal, destination);
Stargate.setLine(sign, signLineIndex, (green ? ChatColor.DARK_GREEN : "") + portal.getDestinations().get(destinationIndex)); Stargate.setLine(sign, signLineIndex, (green ? ChatColor.DARK_GREEN : "") + portal.getDestinations().get(destinationIndex));
} else { } else {
Stargate.setLine(sign, signLineIndex, portal.getDestinations().get(destinationIndex)); Stargate.setLine(sign, signLineIndex, portal.getDestinations().get(destinationIndex));