diff --git a/src/main/java/net/knarcraft/stargate/LanguageLoader.java b/src/main/java/net/knarcraft/stargate/LanguageLoader.java index 9b6ab3f..4367eae 100644 --- a/src/main/java/net/knarcraft/stargate/LanguageLoader.java +++ b/src/main/java/net/knarcraft/stargate/LanguageLoader.java @@ -42,7 +42,7 @@ public class LanguageLoader { File tmp = new File(languageFolder, chosenLanguage + ".txt"); if (!tmp.exists()) { if (tmp.getParentFile().mkdirs() && Stargate.debuggingEnabled) { - Stargate.log.info("[stargate] Created language folder"); + Stargate.logger.info("[stargate] Created language folder"); } } updateLanguage(chosenLanguage); @@ -54,7 +54,7 @@ public class LanguageLoader { loadedBackupStrings = load("en", inputStream); } else { loadedBackupStrings = null; - Stargate.log.severe("[stargate] Error loading backup language. There may be missing text in-game"); + Stargate.logger.severe("[stargate] Error loading backup language. There may be missing text in-game"); } } @@ -110,10 +110,10 @@ public class LanguageLoader { InputStream inputStream = getClass().getResourceAsStream("/lang/" + language + ".txt"); if (inputStream == null) { - Stargate.log.info("[stargate] The language " + language + " is not available. Falling back to " + + Stargate.logger.info("[stargate] The language " + language + " is not available. Falling back to " + "english, You can add a custom language by creating a new text file in the lang directory."); if (Stargate.debuggingEnabled) { - Stargate.log.info("[stargate] Unable to load /lang/" + language + ".txt"); + Stargate.logger.info("[stargate] Unable to load /lang/" + language + ".txt"); } return; } @@ -157,7 +157,7 @@ public class LanguageLoader { } } if (updated) { - Stargate.log.info("[stargate] Your language file (" + language + ".txt) has been updated"); + Stargate.logger.info("[stargate] Your language file (" + language + ".txt) has been updated"); } } @@ -243,7 +243,7 @@ public class LanguageLoader { readLanguageFile(inputStreamReader, strings); } catch (Exception e) { if (Stargate.debuggingEnabled) { - Stargate.log.info("Unable to load chosen language"); + Stargate.logger.info("Unable to load chosen language"); } return null; } finally { diff --git a/src/main/java/net/knarcraft/stargate/Stargate.java b/src/main/java/net/knarcraft/stargate/Stargate.java index 7962c7d..12cc3dc 100644 --- a/src/main/java/net/knarcraft/stargate/Stargate.java +++ b/src/main/java/net/knarcraft/stargate/Stargate.java @@ -3,7 +3,6 @@ package net.knarcraft.stargate; import net.knarcraft.stargate.command.CommandStarGate; import net.knarcraft.stargate.command.StarGateTabCompleter; import net.knarcraft.stargate.container.BlockChangeRequest; -import net.knarcraft.stargate.event.StargateAccessEvent; import net.knarcraft.stargate.listener.BlockEventListener; import net.knarcraft.stargate.listener.BungeeCordListener; import net.knarcraft.stargate.listener.EntityEventListener; @@ -18,7 +17,6 @@ import net.knarcraft.stargate.portal.PortalHandler; import net.knarcraft.stargate.thread.BlockChangeThread; import net.knarcraft.stargate.thread.StarGateThread; import net.knarcraft.stargate.utility.EconomyHandler; -import net.knarcraft.stargate.utility.PermissionHelper; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Server; @@ -27,7 +25,6 @@ import org.bukkit.block.Sign; import org.bukkit.command.CommandSender; import org.bukkit.command.PluginCommand; import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; @@ -47,47 +44,51 @@ import java.util.logging.Logger; @SuppressWarnings("unused") public class Stargate extends JavaPlugin { - public static final ConcurrentLinkedQueue openList = new ConcurrentLinkedQueue<>(); + //Used for changing gate open/closed material. + public static final Queue blockChangeRequestQueue = new LinkedList<>(); + public static final ConcurrentLinkedQueue openPortalsQueue = new ConcurrentLinkedQueue<>(); + public static final ConcurrentLinkedQueue activePortalsQueue = new ConcurrentLinkedQueue<>(); + + //Amount of seconds before deactivating/closing portals private static final int activeTime = 10; private static final int openTime = 10; - public static Logger log; + + public static Logger logger; public static Server server; public static Stargate stargate; public static LanguageLoader languageLoader; - public static int maxGates = 0; + + public static int maxGatesEachNetwork = 0; public static boolean rememberDestination = false; public static boolean handleVehicles = true; public static boolean sortNetworkDestinations = false; public static boolean protectEntrance = false; public static boolean enableBungee = true; public static boolean verifyPortals = true; - public static ChatColor signColor; - // Temp workaround for snowmen, don't check gate entrance + private static boolean destroyExplosion = false; + //Temp workaround for snowmen, don't check gate entrance public static boolean ignoreEntrance = false; + + public static ChatColor signColor; // Used for debug public static boolean debuggingEnabled = false; public static boolean permissionDebuggingEnabled = false; - public static final ConcurrentLinkedQueue activeList = new ConcurrentLinkedQueue<>(); - // Used for populating gate open/closed material. - public static final Queue blockChangeRequestQueue = new LinkedList<>(); + // HashMap of player names for Bungee support public static final Map bungeeQueue = new HashMap<>(); //World names that contain stargates public static final HashSet managedWorlds = new HashSet<>(); + private static String pluginVersion; private static String portalFolder; private static String gateFolder; + private static String defaultGateNetwork = "central"; - private static boolean destroyExplosion = false; private static String languageName = "en"; + private FileConfiguration newConfig; private PluginManager pluginManager; - public Stargate() { - super(); - - } - /** * Special constructor used for MockBukkit * @@ -100,152 +101,148 @@ public class Stargate extends JavaPlugin { super(loader, descriptionFile, dataFolder, file); } + /** + * Gets the version of this plugin + * + * @return

This plugin's version

+ */ public static String getPluginVersion() { return pluginVersion; } + /** + * Gets whether portals should be destroyed by explosions + * + * @return

True if portals should be destroyed

+ */ public static boolean destroyedByExplosion() { return destroyExplosion; } + /** + * Gets the amount of seconds a portal should be open before automatically closing + * + * @return

The open time of a gate

+ */ public static int getOpenTime() { return openTime; } + /** + * Gets the amount of seconds a portal should be active before automatically deactivating + * + * @return

The active time of a gate

+ */ public static int getActiveTime() { return activeTime; } - public static void debug(String rout, String msg) { + /** + * Sends a debug message + * + * @param route

The class name/route where something happened

+ * @param message

A message describing what happened

+ */ + public static void debug(String route, String message) { if (Stargate.debuggingEnabled) { - log.info("[stargate::" + rout + "] " + msg); + logger.info("[stargate::" + route + "] " + message); } else { - log.log(Level.FINEST, "[stargate::" + rout + "] " + msg); + logger.log(Level.FINEST, "[stargate::" + route + "] " + message); } } - public static void sendMessage(CommandSender player, String message) { + /** + * Sends an error message to a player + * + * @param player

The player to send the message to

+ * @param message

The message to send

+ */ + public static void sendErrorMessage(CommandSender player, String message) { sendMessage(player, message, true); } - public static void sendMessage(CommandSender player, String message, boolean error) { - if (message.isEmpty()) return; - message = message.replaceAll("(&([a-f0-9]))", "\u00A7$2"); - if (error) - player.sendMessage(ChatColor.RED + Stargate.getString("prefix") + ChatColor.WHITE + message); - else - player.sendMessage(ChatColor.GREEN + Stargate.getString("prefix") + ChatColor.WHITE + message); + /** + * Sends a success message to a player + * + * @param player

The player to send the message to

+ * @param message

The message to send

+ */ + public static void sendSuccessMessage(CommandSender player, String message) { + sendMessage(player, message, false); } + /** + * Sends a message to a player + * + * @param player

The player to send the message to

+ * @param message

The message to send

+ * @param error

Whether the message sent is an error

+ */ + private static void sendMessage(CommandSender player, String message, boolean error) { + if (message.isEmpty()) return; + //Replace color codes with green? What's the deal with the dollar sign? + message = message.replaceAll("(&([a-f0-9]))", "\u00A7$2"); + if (error) { + player.sendMessage(ChatColor.RED + Stargate.getString("prefix") + ChatColor.WHITE + message); + } else { + player.sendMessage(ChatColor.GREEN + Stargate.getString("prefix") + ChatColor.WHITE + message); + } + } + + /** + * Sets a line on a sign, adding the chosen sign color + * + * @param sign

The sign to update

+ * @param index

The index of the sign line to change

+ * @param text

The new text on the sign

+ */ public static void setLine(Sign sign, int index, String text) { sign.setLine(index, Stargate.signColor + text); } + /** + * Gets the folder for saving created portals + * + *

The returned String path is the full path to the folder

+ * + * @return

The folder for storing the portal database

+ */ public static String getSaveLocation() { return portalFolder; } + /** + * Gets the folder storing gate files + * + *

The returned String path is the full path to the folder

+ * + * @return

The folder storing gate files

+ */ public static String getGateFolder() { return gateFolder; } + /** + * Gets the default network for gates where a network is not specified + * + * @return

The default network

+ */ public static String getDefaultNetwork() { return defaultGateNetwork; } + /** + * Gets a translated string given its string key + * + *

The name/key is the string before the equals sign in the language files

+ * + * @param name

The name/key of the string to get

+ * @return

The full translated string

+ */ public static String getString(String name) { return languageLoader.getString(name); } - public static void openPortal(Player player, Portal portal) { - Portal destination = portal.getDestination(); - - // Always-open gate -- Do nothing - if (portal.isAlwaysOn()) { - return; - } - - // Random gate -- Do nothing - if (portal.isRandom()) - return; - - // Invalid destination - if ((destination == null) || (destination == portal)) { - Stargate.sendMessage(player, Stargate.getString("invalidMsg")); - return; - } - - // Gate is already open - if (portal.isOpen()) { - // Close if this player opened the gate - if (portal.getActivePlayer() == player) { - portal.close(false); - } - return; - } - - // Gate that someone else is using -- Deny access - if ((!portal.isFixed()) && portal.isActive() && (portal.getActivePlayer() != player)) { - Stargate.sendMessage(player, Stargate.getString("denyMsg")); - return; - } - - // Check if the player can use the private gate - if (portal.isPrivate() && !PermissionHelper.canPrivate(player, portal)) { - Stargate.sendMessage(player, Stargate.getString("denyMsg")); - return; - } - - // Destination blocked - if ((destination.isOpen()) && (!destination.isAlwaysOn())) { - Stargate.sendMessage(player, Stargate.getString("blockMsg")); - return; - } - - // Open gate - portal.open(player, false); - } - - /** - * Creates a StargateAccessPortal and gives the result - * - *

The event is used for other plugins to bypass the permission checks

- * - * @param player

The player trying to use the portal

- * @param portal

The portal the player is trying to use

- * @param deny

Whether the player's access has already been denied by a check

- * @return

False if the player should be allowed through the portal

- */ - public static boolean cannotAccessPortal(Player player, Portal portal, boolean deny) { - StargateAccessEvent event = new StargateAccessEvent(player, portal, deny); - Stargate.server.getPluginManager().callEvent(event); - return event.getDeny(); - } - - /** - * Checks whether a given user cannot travel between two portals - * - * @param player

The player to check

- * @param entrancePortal

The portal the user wants to enter

- * @param destination

The portal the user wants to exit

- * @return

False if the user is allowed to access the portal

- */ - public static boolean cannotAccessPortal(Player player, Portal entrancePortal, Portal destination) { - boolean deny = false; - // Check if player has access to this server for Bungee gates - if (entrancePortal.isBungee() && !PermissionHelper.canAccessServer(player, entrancePortal.getNetwork())) { - Stargate.debug("cannotAccessPortal", "Cannot access server"); - deny = true; - } else if (PermissionHelper.cannotAccessNetwork(player, entrancePortal.getNetwork())) { - Stargate.debug("cannotAccessPortal", "Cannot access network"); - deny = true; - } else if (!entrancePortal.isBungee() && PermissionHelper.cannotAccessWorld(player, destination.getWorld().getName())) { - Stargate.debug("cannotAccessPortal", "Cannot access world"); - deny = true; - } - return Stargate.cannotAccessPortal(player, entrancePortal, deny); - } - /** * Replaces a list of variables in a string in the order they are given * @@ -289,7 +286,7 @@ public class Stargate extends JavaPlugin { PluginDescriptionFile pluginDescriptionFile = this.getDescription(); pluginManager = getServer().getPluginManager(); newConfig = this.getConfig(); - log = Logger.getLogger("Minecraft"); + logger = Logger.getLogger("Minecraft"); Stargate.server = getServer(); Stargate.stargate = this; @@ -301,7 +298,7 @@ public class Stargate extends JavaPlugin { pluginVersion = pluginDescriptionFile.getVersion(); - log.info(pluginDescriptionFile.getName() + " v." + pluginDescriptionFile.getVersion() + " is enabled."); + logger.info(pluginDescriptionFile.getName() + " v." + pluginDescriptionFile.getVersion() + " is enabled."); //Register events before loading gates to stop weird things happening. registerEventListeners(); @@ -390,7 +387,7 @@ public class Stargate extends JavaPlugin { private void loadGateConfig() { String defaultNetwork = newConfig.getString("gates.defaultGateNetwork"); defaultGateNetwork = defaultNetwork != null ? defaultNetwork.trim() : null; - maxGates = newConfig.getInt("gates.maxGatesEachNetwork"); + maxGatesEachNetwork = newConfig.getInt("gates.maxGatesEachNetwork"); //Functionality handleVehicles = newConfig.getBoolean("gates.functionality.handleVehicles"); @@ -434,7 +431,7 @@ public class Stargate extends JavaPlugin { } catch (IllegalArgumentException | NullPointerException ignored) { } } - log.warning(getString("prefix") + "You have specified an invalid color in your config.yml. Defaulting to BLACK"); + logger.warning(getString("prefix") + "You have specified an invalid color in your config.yml. Defaulting to BLACK"); Stargate.signColor = ChatColor.BLACK; } @@ -443,7 +440,7 @@ public class Stargate extends JavaPlugin { */ public void closeAllPortals() { // Close all gates prior to reloading - for (Portal openPortal : openList) { + for (Portal openPortal : openPortalsQueue) { openPortal.close(true); } } @@ -453,7 +450,7 @@ public class Stargate extends JavaPlugin { */ public void loadGates() { GateHandler.loadGates(gateFolder); - log.info(Stargate.getString("prefix") + "Loaded " + GateHandler.getGateCount() + " gate layouts"); + logger.info(Stargate.getString("prefix") + "Loaded " + GateHandler.getGateCount() + " gate layouts"); } /** @@ -475,13 +472,13 @@ public class Stargate extends JavaPlugin { File newPortalDir = new File(portalFolder); if (!newPortalDir.exists()) { if (!newPortalDir.mkdirs()) { - log.severe("Unable to create portal directory"); + logger.severe("Unable to create portal directory"); } } File newFile = new File(portalFolder, getServer().getWorlds().get(0).getName() + ".db"); if (!newFile.exists() && !newFile.getParentFile().exists()) { if (!newFile.getParentFile().mkdirs()) { - log.severe("Unable to create portal database folder: " + newFile.getParentFile().getPath()); + logger.severe("Unable to create portal database folder: " + newFile.getParentFile().getPath()); } } } @@ -493,14 +490,14 @@ public class Stargate extends JavaPlugin { */ public void reload(CommandSender sender) { // Deactivate portals - for (Portal activePortal : activeList) { + for (Portal activePortal : activePortalsQueue) { activePortal.deactivate(); } // Close portals closeAllPortals(); // Clear all lists - activeList.clear(); - openList.clear(); + activePortalsQueue.clear(); + openPortalsQueue.clear(); managedWorlds.clear(); PortalHandler.clearGates(); GateHandler.clearGates(); @@ -522,7 +519,7 @@ public class Stargate extends JavaPlugin { startStopBungeeListener(enableBungee); } - sendMessage(sender, "stargate reloaded"); + sendErrorMessage(sender, "stargate reloaded"); } /** @@ -543,7 +540,7 @@ public class Stargate extends JavaPlugin { private void setupVaultEconomy() { if (EconomyHandler.setupEconomy(pluginManager) && EconomyHandler.economy != null) { String vaultVersion = EconomyHandler.vault.getDescription().getVersion(); - log.info(Stargate.getString("prefix") + Stargate.replaceVars( + logger.info(Stargate.getString("prefix") + Stargate.replaceVars( Stargate.getString("vaultLoaded"), "%version%", vaultVersion)); } } diff --git a/src/main/java/net/knarcraft/stargate/command/CommandReload.java b/src/main/java/net/knarcraft/stargate/command/CommandReload.java index dfd3d74..79ba7fe 100644 --- a/src/main/java/net/knarcraft/stargate/command/CommandReload.java +++ b/src/main/java/net/knarcraft/stargate/command/CommandReload.java @@ -29,7 +29,7 @@ public class CommandReload implements CommandExecutor { if (commandSender instanceof Player) { Player player = (Player) commandSender; if (!player.hasPermission("stargate.reload")) { - Stargate.sendMessage(commandSender, "Permission Denied"); + Stargate.sendErrorMessage(commandSender, "Permission Denied"); return true; } } diff --git a/src/main/java/net/knarcraft/stargate/listener/BlockEventListener.java b/src/main/java/net/knarcraft/stargate/listener/BlockEventListener.java index ae9f314..63fa088 100644 --- a/src/main/java/net/knarcraft/stargate/listener/BlockEventListener.java +++ b/src/main/java/net/knarcraft/stargate/listener/BlockEventListener.java @@ -54,7 +54,7 @@ public class BlockEventListener implements Listener { return; } - Stargate.sendMessage(player, Stargate.getString("createMsg"), false); + Stargate.sendSuccessMessage(player, Stargate.getString("createMsg")); Stargate.debug("onSignChange", "Initialized stargate: " + portal.getName()); Stargate.server.getScheduler().scheduleSyncDelayedTask(Stargate.stargate, portal::drawSign, 1); } @@ -88,7 +88,7 @@ public class BlockEventListener implements Listener { if (!PermissionHelper.canDestroyPortal(player, portal)) { denyMsg = Stargate.getString("denyMsg"); deny = true; - Stargate.log.info(Stargate.getString("prefix") + player.getName() + " tried to destroy gate"); + Stargate.logger.info(Stargate.getString("prefix") + player.getName() + " tried to destroy gate"); } int cost = EconomyHandler.getDestroyCost(player, portal.getGate()); @@ -103,7 +103,7 @@ public class BlockEventListener implements Listener { //Destroy denied if (destroyEvent.getDeny()) { - Stargate.sendMessage(player, destroyEvent.getDenyReason()); + Stargate.sendErrorMessage(player, destroyEvent.getDenyReason()); event.setCancelled(true); return; } @@ -114,7 +114,7 @@ public class BlockEventListener implements Listener { } PortalHandler.unregisterPortal(portal, true); - Stargate.sendMessage(player, Stargate.getString("destroyMsg"), false); + Stargate.sendSuccessMessage(player, Stargate.getString("destroyMsg")); } /** diff --git a/src/main/java/net/knarcraft/stargate/listener/PlayerEventListener.java b/src/main/java/net/knarcraft/stargate/listener/PlayerEventListener.java index 028fe60..bea32d7 100644 --- a/src/main/java/net/knarcraft/stargate/listener/PlayerEventListener.java +++ b/src/main/java/net/knarcraft/stargate/listener/PlayerEventListener.java @@ -122,7 +122,7 @@ public class PlayerEventListener implements Listener { } else { destination.teleport(player, entrancePortal, event); } - Stargate.sendMessage(player, Stargate.getString("teleportMsg"), false); + Stargate.sendSuccessMessage(player, Stargate.getString("teleportMsg")); entrancePortal.close(false); } @@ -157,7 +157,7 @@ public class PlayerEventListener implements Listener { //Decide if the user should be teleported to another bungee server if (entrancePortal.isBungee()) { if (bungeeTeleport(player, entrancePortal, event)) { - Stargate.sendMessage(player, Stargate.getString("teleportMsg"), false); + Stargate.sendSuccessMessage(player, Stargate.getString("teleportMsg")); } return false; } @@ -236,8 +236,8 @@ public class PlayerEventListener implements Listener { private boolean cannotAccessPortal(Player player, Portal portal) { boolean deny = PermissionHelper.cannotAccessNetwork(player, portal.getNetwork()); - if (Stargate.cannotAccessPortal(player, portal, deny)) { - Stargate.sendMessage(player, Stargate.getString("denyMsg")); + if (PermissionHelper.cannotAccessPortal(player, portal, deny)) { + Stargate.sendErrorMessage(player, Stargate.getString("denyMsg")); return true; } return false; @@ -277,7 +277,7 @@ public class PlayerEventListener implements Listener { return; } - Stargate.openPortal(player, portal); + PermissionHelper.openPortal(player, portal); if (portal.isOpenFor(player)) { event.setUseInteractedBlock(Event.Result.ALLOW); } @@ -319,7 +319,7 @@ public class PlayerEventListener implements Listener { private boolean bungeeTeleport(Player player, Portal entrancePortal, PlayerMoveEvent event) { //Check if bungee is actually enabled if (!Stargate.enableBungee) { - player.sendMessage(Stargate.getString("bungeeDisabled")); + Stargate.sendErrorMessage(player, Stargate.getString("bungeeDisabled")); entrancePortal.close(false); return false; } @@ -362,7 +362,7 @@ public class PlayerEventListener implements Listener { // Not open for this player if (!entrancePortal.isOpenFor(player)) { - Stargate.sendMessage(player, Stargate.getString("denyMsg")); + Stargate.sendErrorMessage(player, Stargate.getString("denyMsg")); entrancePortal.teleport(player, entrancePortal, event); return false; } @@ -373,8 +373,8 @@ public class PlayerEventListener implements Listener { } //Player cannot access portal - if (Stargate.cannotAccessPortal(player, entrancePortal, destination)) { - Stargate.sendMessage(player, Stargate.getString("denyMsg")); + if (PermissionHelper.cannotAccessPortal(player, entrancePortal, destination)) { + Stargate.sendErrorMessage(player, Stargate.getString("denyMsg")); entrancePortal.teleport(player, entrancePortal, event); entrancePortal.close(false); return false; diff --git a/src/main/java/net/knarcraft/stargate/listener/VehicleEventListener.java b/src/main/java/net/knarcraft/stargate/listener/VehicleEventListener.java index 55a7986..ec87539 100644 --- a/src/main/java/net/knarcraft/stargate/listener/VehicleEventListener.java +++ b/src/main/java/net/knarcraft/stargate/listener/VehicleEventListener.java @@ -6,6 +6,7 @@ import net.knarcraft.stargate.portal.PortalHandler; import net.knarcraft.stargate.utility.EconomyHandler; import net.knarcraft.stargate.utility.EconomyHelper; import net.knarcraft.stargate.utility.EntityHelper; +import net.knarcraft.stargate.utility.PermissionHelper; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.entity.Vehicle; @@ -59,13 +60,13 @@ public class VehicleEventListener implements Listener { */ private static void teleportVehicle(List passengers, Portal entrancePortal, Vehicle vehicle) { if (!passengers.isEmpty() && passengers.get(0) instanceof Player) { - Stargate.log.info(Stargate.getString("prefox") + "Found passenger vehicle"); + Stargate.logger.info(Stargate.getString("prefox") + "Found passenger vehicle"); teleportPlayerAndVehicle(entrancePortal, vehicle, passengers); } else { - Stargate.log.info(Stargate.getString("prefox") + "Found empty vehicle"); + Stargate.logger.info(Stargate.getString("prefox") + "Found empty vehicle"); Portal destinationPortal = entrancePortal.getDestination(); if (destinationPortal == null) { - Stargate.log.warning(Stargate.getString("prefox") + "Unable to find portal destination"); + Stargate.logger.warning(Stargate.getString("prefox") + "Unable to find portal destination"); return; } Stargate.debug("vehicleTeleport", destinationPortal.getWorld() + " " + destinationPortal.getId()); @@ -83,7 +84,7 @@ public class VehicleEventListener implements Listener { private static void teleportPlayerAndVehicle(Portal entrancePortal, Vehicle vehicle, List passengers) { Player player = (Player) passengers.get(0); if (!entrancePortal.isOpenFor(player)) { - Stargate.sendMessage(player, Stargate.getString("denyMsg")); + Stargate.sendErrorMessage(player, Stargate.getString("denyMsg")); return; } @@ -93,8 +94,8 @@ public class VehicleEventListener implements Listener { } //Make sure the user can access the portal - if (Stargate.cannotAccessPortal(player, entrancePortal, destinationPortal)) { - Stargate.sendMessage(player, Stargate.getString("denyMsg")); + if (PermissionHelper.cannotAccessPortal(player, entrancePortal, destinationPortal)) { + Stargate.sendErrorMessage(player, Stargate.getString("denyMsg")); entrancePortal.close(false); return; } @@ -107,7 +108,7 @@ public class VehicleEventListener implements Listener { } } - Stargate.sendMessage(player, Stargate.getString("teleportMsg"), false); + Stargate.sendSuccessMessage(player, Stargate.getString("teleportMsg")); destinationPortal.teleport(vehicle, entrancePortal); entrancePortal.close(false); } diff --git a/src/main/java/net/knarcraft/stargate/portal/Gate.java b/src/main/java/net/knarcraft/stargate/portal/Gate.java index 5f56701..51ae9d2 100644 --- a/src/main/java/net/knarcraft/stargate/portal/Gate.java +++ b/src/main/java/net/knarcraft/stargate/portal/Gate.java @@ -302,7 +302,7 @@ public class Gate { bufferedWriter.close(); } catch (IOException ex) { - Stargate.log.log(Level.SEVERE, "Could not save Gate " + filename + " - " + ex.getMessage()); + Stargate.logger.log(Level.SEVERE, "Could not save Gate " + filename + " - " + ex.getMessage()); } } diff --git a/src/main/java/net/knarcraft/stargate/portal/GateHandler.java b/src/main/java/net/knarcraft/stargate/portal/GateHandler.java index 0aac91b..3b5d700 100644 --- a/src/main/java/net/knarcraft/stargate/portal/GateHandler.java +++ b/src/main/java/net/knarcraft/stargate/portal/GateHandler.java @@ -102,7 +102,7 @@ public class GateHandler { try (Scanner scanner = new Scanner(file)) { return loadGate(file.getName(), file.getParent(), scanner); } catch (Exception ex) { - Stargate.log.log(Level.SEVERE, "Could not load Gate " + file.getName() + " - " + ex.getMessage()); + Stargate.logger.log(Level.SEVERE, "Could not load Gate " + file.getName() + " - " + ex.getMessage()); return null; } } @@ -180,13 +180,13 @@ public class GateHandler { */ private static boolean validateGate(Gate gate, String fileName) { if (gate.getLayout().getControls().length != 2) { - Stargate.log.log(Level.SEVERE, "Could not load Gate " + fileName + + Stargate.logger.log(Level.SEVERE, "Could not load Gate " + fileName + " - Gates must have exactly 2 control points."); return false; } if (!MaterialHelper.isButtonCompatible(gate.getPortalButton())) { - Stargate.log.log(Level.SEVERE, "Could not load Gate " + fileName + + Stargate.logger.log(Level.SEVERE, "Could not load Gate " + fileName + " - Gate button must be a type of button."); return false; } @@ -253,7 +253,7 @@ public class GateHandler { } } } catch (Exception ex) { - Stargate.log.log(Level.SEVERE, "Could not load Gate " + fileName + " - " + ex.getMessage()); + Stargate.logger.log(Level.SEVERE, "Could not load Gate " + fileName + " - " + ex.getMessage()); return -1; } finally { if (scanner != null) { @@ -283,7 +283,7 @@ public class GateHandler { for (Character symbol : line.toCharArray()) { if ((symbol.equals('?')) || (!types.containsKey(symbol))) { - Stargate.log.log(Level.SEVERE, "Could not load Gate " + fileName + " - Unknown symbol '" + symbol + "' in diagram"); + Stargate.logger.log(Level.SEVERE, "Could not load Gate " + fileName + " - Unknown symbol '" + symbol + "' in diagram"); return -1; } row.add(symbol); @@ -334,7 +334,7 @@ public class GateHandler { try { return Integer.parseInt(config.get(key)); } catch (NumberFormatException ex) { - Stargate.log.log(Level.WARNING, String.format("%s reading %s: %s is not numeric", ex.getClass().getName(), fileName, key)); + Stargate.logger.log(Level.WARNING, String.format("%s reading %s: %s is not numeric", ex.getClass().getName(), fileName, key)); } } @@ -356,7 +356,7 @@ public class GateHandler { if (material != null) { return material; } else { - Stargate.log.log(Level.WARNING, String.format("Error reading %s: %s is not a material", fileName, key)); + Stargate.logger.log(Level.WARNING, String.format("Error reading %s: %s is not a material", fileName, key)); } } return defaultMaterial; diff --git a/src/main/java/net/knarcraft/stargate/portal/Portal.java b/src/main/java/net/knarcraft/stargate/portal/Portal.java index b4f33f2..6245300 100644 --- a/src/main/java/net/knarcraft/stargate/portal/Portal.java +++ b/src/main/java/net/knarcraft/stargate/portal/Portal.java @@ -511,8 +511,8 @@ public class Portal { //Update the open state of this portal isOpen = true; openTime = System.currentTimeMillis() / 1000; - Stargate.openList.add(this); - Stargate.activeList.remove(this); + Stargate.openPortalsQueue.add(this); + Stargate.activePortalsQueue.remove(this); //Open remote portal if (!isAlwaysOn()) { @@ -561,8 +561,8 @@ public class Portal { //Update the closed state of this portal player = null; isOpen = false; - Stargate.openList.remove(this); - Stargate.activeList.remove(this); + Stargate.openPortalsQueue.remove(this); + Stargate.activePortalsQueue.remove(this); //Close remote portal if (!isAlwaysOn()) { @@ -714,7 +714,7 @@ public class Portal { if (vehicle instanceof RideableMinecart || vehicle instanceof Boat) { World vehicleWorld = exit.getWorld(); if (vehicleWorld == null) { - Stargate.log.warning(Stargate.getString("prefix") + "Unable to get the world to teleport the vehicle to"); + Stargate.logger.warning(Stargate.getString("prefix") + "Unable to get the world to teleport the vehicle to"); return; } putPassengersInNewVehicle(vehicle, passengers, vehicleWorld, exit, newVelocity); @@ -803,7 +803,7 @@ public class Portal { } } } else { - Stargate.log.log(Level.WARNING, Stargate.getString("prefix") + "Missing destination point in .gate file " + gate.getFilename()); + Stargate.logger.log(Level.WARNING, Stargate.getString("prefix") + "Missing destination point in .gate file " + gate.getFilename()); } return adjustExitLocation(traveller, exitLocation); @@ -895,7 +895,7 @@ public class Portal { exitLocation.setPitch(traveller.getPitch()); return exitLocation; } else { - Stargate.log.log(Level.WARNING, Stargate.getString("prefix") + "Unable to generate exit location"); + Stargate.logger.log(Level.WARNING, Stargate.getString("prefix") + "Unable to generate exit location"); } return traveller; } @@ -1026,7 +1026,7 @@ public class Portal { private boolean activate(Player player) { destinations.clear(); destination = ""; - Stargate.activeList.add(this); + Stargate.activePortalsQueue.add(this); activePlayer = player; String network = getNetwork(); destinations = PortalHandler.getDestinations(this, player, network); @@ -1040,7 +1040,7 @@ public class Portal { StargateActivateEvent event = new StargateActivateEvent(this, player, destinations, destination); Stargate.server.getPluginManager().callEvent(event); if (event.isCancelled()) { - Stargate.activeList.remove(this); + Stargate.activePortalsQueue.remove(this); return false; } destination = event.getDestination(); @@ -1059,7 +1059,7 @@ public class Portal { return; } - Stargate.activeList.remove(this); + Stargate.activePortalsQueue.remove(this); if (isFixed()) { return; } @@ -1110,7 +1110,7 @@ public class Portal { } if (destinations.size() == 0) { - Stargate.sendMessage(player, Stargate.getString("destEmpty")); + Stargate.sendErrorMessage(player, Stargate.getString("destEmpty")); return; } @@ -1147,7 +1147,7 @@ public class Portal { public final void drawSign() { BlockState state = id.getBlock().getState(); if (!(state instanceof Sign)) { - Stargate.log.warning(Stargate.getString("prefix") + "Sign block is not a Sign object"); + Stargate.logger.warning(Stargate.getString("prefix") + "Sign block is not a Sign object"); Stargate.debug("Portal::drawSign", "Block: " + id.getBlock().getType() + " @ " + id.getBlock().getLocation()); return; } diff --git a/src/main/java/net/knarcraft/stargate/portal/PortalHandler.java b/src/main/java/net/knarcraft/stargate/portal/PortalHandler.java index afd1e43..8996cca 100644 --- a/src/main/java/net/knarcraft/stargate/portal/PortalHandler.java +++ b/src/main/java/net/knarcraft/stargate/portal/PortalHandler.java @@ -34,6 +34,9 @@ import java.util.Scanner; import java.util.UUID; import java.util.logging.Level; +/** + * Keeps track of all loaded portals, and handles portal creation + */ public class PortalHandler { // Static variables used to store portal lists private static final Map lookupBlocks = new HashMap<>(); @@ -92,7 +95,7 @@ public class PortalHandler { } // Check if this player can access the dest world if (PermissionHelper.cannotAccessWorld(player, portal.getWorld().getName())) { - Stargate.log.info("cannot access world"); + Stargate.logger.info("cannot access world"); continue; } // Visible to this player. @@ -316,16 +319,16 @@ public class PortalHandler { //If the player is trying to create a Bungee gate without permissions, drop out here if (options.indexOf(PortalOption.BUNGEE.getCharacterRepresentation()) != -1) { if (!PermissionHelper.hasPermission(player, "stargate.admin.bungee")) { - Stargate.sendMessage(player, Stargate.getString("bungeeDeny")); + Stargate.sendErrorMessage(player, Stargate.getString("bungeeDeny")); return null; } } if (portalOptions.get(PortalOption.BUNGEE)) { if (!Stargate.enableBungee) { - Stargate.sendMessage(player, Stargate.getString("bungeeDisabled")); + Stargate.sendErrorMessage(player, Stargate.getString("bungeeDisabled")); return null; } else if (destinationName.isEmpty() || network.isEmpty()) { - Stargate.sendMessage(player, Stargate.getString("bungeeEmpty")); + Stargate.sendErrorMessage(player, Stargate.getString("bungeeEmpty")); return null; } } @@ -351,7 +354,7 @@ public class PortalHandler { network = player.getName(); if (network.length() > 11) network = network.substring(0, 11); Stargate.debug("createPortal", "Creating personal portal"); - Stargate.sendMessage(player, Stargate.getString("createPersonal")); + Stargate.sendErrorMessage(player, Stargate.getString("createPersonal")); } else { Stargate.debug("createPortal", "Player does not have access to network"); deny = true; @@ -387,7 +390,7 @@ public class PortalHandler { BlockLocation b = topLeft.modRelative(v.getRight(), v.getDepth(), v.getDistance(), modX, 1, modZ); if (getByBlock(b.getBlock()) != null) { Stargate.debug("createPortal", "Gate conflicts with existing gate"); - Stargate.sendMessage(player, Stargate.getString("createConflict")); + Stargate.sendErrorMessage(player, Stargate.getString("createConflict")); return null; } } @@ -406,7 +409,7 @@ public class PortalHandler { return null; } if (cEvent.getDeny()) { - Stargate.sendMessage(player, cEvent.getDenyReason()); + Stargate.sendErrorMessage(player, cEvent.getDenyReason()); return null; } @@ -415,7 +418,7 @@ public class PortalHandler { // Name & Network can be changed in the event, so do these checks here. if (portal.getName().length() < 1 || portal.getName().length() > 11) { Stargate.debug("createPortal", "Name length error"); - Stargate.sendMessage(player, Stargate.getString("createNameLength")); + Stargate.sendErrorMessage(player, Stargate.getString("createNameLength")); return null; } @@ -423,20 +426,20 @@ public class PortalHandler { if (portal.isBungee()) { if (bungeePortals.get(portal.getName().toLowerCase()) != null) { Stargate.debug("createPortal::Bungee", "Gate Exists"); - Stargate.sendMessage(player, Stargate.getString("createExists")); + Stargate.sendErrorMessage(player, Stargate.getString("createExists")); return null; } } else { if (getByName(portal.getName(), portal.getNetwork()) != null) { Stargate.debug("createPortal", "Name Error"); - Stargate.sendMessage(player, Stargate.getString("createExists")); + Stargate.sendErrorMessage(player, Stargate.getString("createExists")); return null; } // Check if there are too many gates in this network List netList = allPortalNetworks.get(portal.getNetwork().toLowerCase()); - if (Stargate.maxGates > 0 && netList != null && netList.size() >= Stargate.maxGates) { - Stargate.sendMessage(player, Stargate.getString("createFull")); + if (Stargate.maxGatesEachNetwork > 0 && netList != null && netList.size() >= Stargate.maxGatesEachNetwork) { + Stargate.sendErrorMessage(player, Stargate.getString("createFull")); return null; } } @@ -715,7 +718,7 @@ public class PortalHandler { bw.close(); } catch (Exception e) { - Stargate.log.log(Level.SEVERE, "Exception while writing stargates to " + loc + ": " + e); + Stargate.logger.log(Level.SEVERE, "Exception while writing stargates to " + loc + ": " + e); } } @@ -783,7 +786,7 @@ public class PortalHandler { if (database.exists()) { return loadGates(world, database); } else { - Stargate.log.info(Stargate.getString("prefix") + "{" + world.getName() + "} No stargates for world "); + Stargate.logger.info(Stargate.getString("prefix") + "{" + world.getName() + "} No stargates for world "); } return false; } @@ -811,7 +814,7 @@ public class PortalHandler { //Check if the min. required portal data is present String[] portalData = line.split(":"); if (portalData.length < 8) { - Stargate.log.info(Stargate.getString("prefix") + "Invalid line - " + lineIndex); + Stargate.logger.info(Stargate.getString("prefix") + "Invalid line - " + lineIndex); continue; } @@ -822,12 +825,12 @@ public class PortalHandler { // Open any always-on gates. Do this here as it should be more efficient than in the loop. TwoTuple portalCounts = openAlwaysOpenGates(); - Stargate.log.info(String.format("%s{%s} Loaded %d stargates with %d set as always-on", + Stargate.logger.info(String.format("%s{%s} Loaded %d stargates with %d set as always-on", Stargate.getString("prefix"), world.getName(), portalCounts.getSecondValue(), portalCounts.getFirstValue())); return true; } catch (Exception e) { - Stargate.log.log(Level.SEVERE, "Exception while reading stargates from " + database.getName() + ": " + lineIndex); + Stargate.logger.log(Level.SEVERE, "Exception while reading stargates from " + database.getName() + ": " + lineIndex); e.printStackTrace(); } return false; @@ -851,7 +854,7 @@ public class PortalHandler { BlockLocation topLeft = new BlockLocation(world, portalData[6]); Gate gate = GateHandler.getGateByName(portalData[7]); if (gate == null) { - Stargate.log.info(Stargate.getString("prefix") + "Gate layout on line " + lineIndex + + Stargate.logger.info(Stargate.getString("prefix") + "Gate layout on line " + lineIndex + " does not exist [" + portalData[7] + "]"); return; } @@ -949,14 +952,14 @@ public class PortalHandler { } } PortalHandler.unregisterPortal(portal, false); - Stargate.log.info(Stargate.getString("prefix") + "Destroying stargate at " + portal); + Stargate.logger.info(Stargate.getString("prefix") + "Destroying stargate at " + portal); } /** * Closes all star gate portals */ public static void closeAllGates() { - Stargate.log.info("Closing all stargates."); + Stargate.logger.info("Closing all stargates."); for (Portal portal : allPortals) { if (portal != null) { portal.close(true); diff --git a/src/main/java/net/knarcraft/stargate/thread/StarGateThread.java b/src/main/java/net/knarcraft/stargate/thread/StarGateThread.java index 65984b5..4b202df 100644 --- a/src/main/java/net/knarcraft/stargate/thread/StarGateThread.java +++ b/src/main/java/net/knarcraft/stargate/thread/StarGateThread.java @@ -14,7 +14,7 @@ public class StarGateThread implements Runnable { public void run() { long time = System.currentTimeMillis() / 1000; // Close open portals - for (Iterator iterator = Stargate.openList.iterator(); iterator.hasNext(); ) { + for (Iterator iterator = Stargate.openPortalsQueue.iterator(); iterator.hasNext(); ) { Portal portal = iterator.next(); // Skip always open and non-open gates if (portal.isAlwaysOn() || !portal.isOpen()) { @@ -26,7 +26,7 @@ public class StarGateThread implements Runnable { } } // Deactivate active portals - for (Iterator iterator = Stargate.activeList.iterator(); iterator.hasNext(); ) { + for (Iterator iterator = Stargate.activePortalsQueue.iterator(); iterator.hasNext(); ) { Portal portal = iterator.next(); if (!portal.isActive()) { continue; diff --git a/src/main/java/net/knarcraft/stargate/utility/BungeeHelper.java b/src/main/java/net/knarcraft/stargate/utility/BungeeHelper.java index 64e1a4b..2939bae 100644 --- a/src/main/java/net/knarcraft/stargate/utility/BungeeHelper.java +++ b/src/main/java/net/knarcraft/stargate/utility/BungeeHelper.java @@ -48,7 +48,7 @@ public final class BungeeHelper { dataOutputStream.writeBytes(message); player.sendPluginMessage(Stargate.stargate, bungeeChannel, byteArrayOutputStream.toByteArray()); } catch (IOException ex) { - Stargate.log.severe(Stargate.getString("prefix") + "Error sending BungeeCord teleport packet"); + Stargate.logger.severe(Stargate.getString("prefix") + "Error sending BungeeCord teleport packet"); ex.printStackTrace(); return false; } @@ -72,7 +72,7 @@ public final class BungeeHelper { player.sendPluginMessage(Stargate.stargate, bungeeChannel, byteArrayOutputStream.toByteArray()); byteArrayOutputStream.reset(); } catch (IOException ex) { - Stargate.log.severe(Stargate.getString("prefix") + "Error sending BungeeCord connect packet"); + Stargate.logger.severe(Stargate.getString("prefix") + "Error sending BungeeCord connect packet"); ex.printStackTrace(); return false; } @@ -99,7 +99,7 @@ public final class BungeeHelper { data = new byte[dataLength]; dataInputStream.readFully(data); } catch (IOException ex) { - Stargate.log.severe(Stargate.getString("prefix") + "Error receiving BungeeCord message"); + Stargate.logger.severe(Stargate.getString("prefix") + "Error receiving BungeeCord message"); ex.printStackTrace(); return null; } @@ -127,7 +127,7 @@ public final class BungeeHelper { Portal destinationPortal = PortalHandler.getBungeeGate(destination); // Specified an invalid gate. For now we'll just let them connect at their current location if (destinationPortal == null) { - Stargate.log.info(Stargate.getString("prefix") + "Bungee gate " + destination + " does not exist"); + Stargate.logger.info(Stargate.getString("prefix") + "Bungee gate " + destination + " does not exist"); return; } destinationPortal.teleport(player, destinationPortal, null); diff --git a/src/main/java/net/knarcraft/stargate/utility/EconomyHandler.java b/src/main/java/net/knarcraft/stargate/utility/EconomyHandler.java index bb5150f..616e347 100644 --- a/src/main/java/net/knarcraft/stargate/utility/EconomyHandler.java +++ b/src/main/java/net/knarcraft/stargate/utility/EconomyHandler.java @@ -152,10 +152,10 @@ public final class EconomyHandler { EconomyHandler.vault = vault; return true; } else { - Stargate.log.info(Stargate.getString("prefix") + Stargate.getString("ecoLoadError")); + Stargate.logger.info(Stargate.getString("prefix") + Stargate.getString("ecoLoadError")); } } else { - Stargate.log.info(Stargate.getString("prefix") + Stargate.getString("vaultLoadError")); + Stargate.logger.info(Stargate.getString("prefix") + Stargate.getString("vaultLoadError")); } economyEnabled = false; return false; diff --git a/src/main/java/net/knarcraft/stargate/utility/EconomyHelper.java b/src/main/java/net/knarcraft/stargate/utility/EconomyHelper.java index 54ec4a0..31519ef 100644 --- a/src/main/java/net/knarcraft/stargate/utility/EconomyHelper.java +++ b/src/main/java/net/knarcraft/stargate/utility/EconomyHelper.java @@ -68,7 +68,7 @@ public final class EconomyHelper { public static void sendObtainMessage(String portalName, Player portalOwner, int earnings) { String obtainedMsg = Stargate.getString("ecoObtain"); obtainedMsg = replaceVars(obtainedMsg, portalName, earnings); - Stargate.sendMessage(portalOwner, obtainedMsg, false); + Stargate.sendSuccessMessage(portalOwner, obtainedMsg); } /** @@ -81,7 +81,7 @@ public final class EconomyHelper { public static void sendDeductMessage(String portalName, Player player, int cost) { String deductMsg = Stargate.getString("ecoDeduct"); deductMsg = replaceVars(deductMsg, portalName, cost); - Stargate.sendMessage(player, deductMsg, false); + Stargate.sendSuccessMessage(player, deductMsg); } /** @@ -94,7 +94,7 @@ public final class EconomyHelper { public static void sendInsufficientFundsMessage(String portalName, Player player, int cost) { String inFundMsg = Stargate.getString("ecoInFunds"); inFundMsg = replaceVars(inFundMsg, portalName, cost); - Stargate.sendMessage(player, inFundMsg); + Stargate.sendErrorMessage(player, inFundMsg); } /** @@ -107,7 +107,7 @@ public final class EconomyHelper { public static void sendRefundMessage(String portalName, Player player, int cost) { String refundMsg = Stargate.getString("ecoRefund"); refundMsg = replaceVars(refundMsg, portalName, -cost); - Stargate.sendMessage(player, refundMsg, false); + Stargate.sendSuccessMessage(player, refundMsg); } /** diff --git a/src/main/java/net/knarcraft/stargate/utility/PermissionHelper.java b/src/main/java/net/knarcraft/stargate/utility/PermissionHelper.java index 37965b2..9c6eacb 100644 --- a/src/main/java/net/knarcraft/stargate/utility/PermissionHelper.java +++ b/src/main/java/net/knarcraft/stargate/utility/PermissionHelper.java @@ -1,6 +1,7 @@ package net.knarcraft.stargate.utility; import net.knarcraft.stargate.Stargate; +import net.knarcraft.stargate.event.StargateAccessEvent; import net.knarcraft.stargate.portal.Portal; import net.knarcraft.stargate.portal.PortalOption; import org.bukkit.entity.Player; @@ -14,6 +15,102 @@ public final class PermissionHelper { } + /** + * Opens a portal if the given player is allowed to, and if the portal is not already open + * + * @param player

The player opening the portal

+ * @param portal

The portal to open

+ */ + public static void openPortal(Player player, Portal portal) { + Portal destination = portal.getDestination(); + + //Always-open gate -- Do nothing + if (portal.isAlwaysOn()) { + return; + } + + //Random gate -- Do nothing + if (portal.isRandom()) { + return; + } + + //Invalid destination + if ((destination == null) || (destination == portal)) { + Stargate.sendErrorMessage(player, Stargate.getString("invalidMsg")); + return; + } + + //Gate is already open + if (portal.isOpen()) { + // Close if this player opened the gate + if (portal.getActivePlayer() == player) { + portal.close(false); + } + return; + } + + //Gate that someone else is using -- Deny access + if ((!portal.isFixed()) && portal.isActive() && (portal.getActivePlayer() != player)) { + Stargate.sendErrorMessage(player, Stargate.getString("denyMsg")); + return; + } + + //Check if the player can use the private gate + if (portal.isPrivate() && !PermissionHelper.canPrivate(player, portal)) { + Stargate.sendErrorMessage(player, Stargate.getString("denyMsg")); + return; + } + + //Destination blocked + if ((destination.isOpen()) && (!destination.isAlwaysOn())) { + Stargate.sendErrorMessage(player, Stargate.getString("blockMsg")); + return; + } + + //Open gate + portal.open(player, false); + } + + /** + * Creates a StargateAccessPortal and gives the result + * + *

The event is used for other plugins to bypass the permission checks

+ * + * @param player

The player trying to use the portal

+ * @param portal

The portal the player is trying to use

+ * @param deny

Whether the player's access has already been denied by a check

+ * @return

False if the player should be allowed through the portal

+ */ + public static boolean cannotAccessPortal(Player player, Portal portal, boolean deny) { + StargateAccessEvent event = new StargateAccessEvent(player, portal, deny); + Stargate.server.getPluginManager().callEvent(event); + return event.getDeny(); + } + + /** + * Checks whether a given user cannot travel between two portals + * + * @param player

The player to check

+ * @param entrancePortal

The portal the user wants to enter

+ * @param destination

The portal the user wants to exit

+ * @return

False if the user is allowed to access the portal

+ */ + public static boolean cannotAccessPortal(Player player, Portal entrancePortal, Portal destination) { + boolean deny = false; + // Check if player has access to this server for Bungee gates + if (entrancePortal.isBungee() && !PermissionHelper.canAccessServer(player, entrancePortal.getNetwork())) { + Stargate.debug("cannotAccessPortal", "Cannot access server"); + deny = true; + } else if (PermissionHelper.cannotAccessNetwork(player, entrancePortal.getNetwork())) { + Stargate.debug("cannotAccessPortal", "Cannot access network"); + deny = true; + } else if (!entrancePortal.isBungee() && PermissionHelper.cannotAccessWorld(player, destination.getWorld().getName())) { + Stargate.debug("cannotAccessPortal", "Cannot access world"); + deny = true; + } + return cannotAccessPortal(player, entrancePortal, deny); + } + /** * Checks whether a player has the given permission * @@ -55,8 +152,9 @@ public final class PermissionHelper { /** * Checks whether a player can access the given world + * * @param player

The player trying to access the world

- * @param world

The world the player is trying to access

+ * @param world

The world the player is trying to access

* @return

False if the player should be allowed to access the world

*/ public static boolean cannotAccessWorld(Player player, String world) { @@ -96,6 +194,7 @@ public final class PermissionHelper { /** * Checks whether a player can access the given bungee server + * * @param player

The player trying to teleport

* @param server

The server the player is trying to connect to

* @return

True if the player is allowed to access the given server