diff --git a/src/main/java/net/knarcraft/stargatecommand/command/CommandDial.java b/src/main/java/net/knarcraft/stargatecommand/command/CommandDial.java index c189442..751dfe6 100644 --- a/src/main/java/net/knarcraft/stargatecommand/command/CommandDial.java +++ b/src/main/java/net/knarcraft/stargatecommand/command/CommandDial.java @@ -10,6 +10,7 @@ import net.knarcraft.stargatecommand.manager.IconManager; import net.knarcraft.stargatecommand.manager.OverrideManager; import net.knarcraft.stargatecommand.property.Icon; import net.knarcraft.stargatecommand.property.StargateCommandCommand; +import net.knarcraft.stargatecommand.util.NameHelper; import net.knarcraft.stargatecommand.util.PortalFinderHelper; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -57,11 +58,10 @@ public class CommandDial implements CommandExecutor { } PermissionManager permissionManager = stargateAPI.getPermissionManager(player); - String networkName = args[0].replace(spaceReplacement, " "); String portalName = args[1].replace(spaceReplacement, " "); //Validate that the network and portal exists, and that the player can access the portal - Network network = registryAPI.getNetwork(networkName, false); + Network network = NameHelper.getNetworkFromName(registryAPI, args[0]); if (network == null) { commandSender.sendMessage(getTranslatedErrorMessage(TranslatableMessage.INVALID_NETWORK_GIVEN)); return true; diff --git a/src/main/java/net/knarcraft/stargatecommand/command/CommandVisualizer.java b/src/main/java/net/knarcraft/stargatecommand/command/CommandVisualizer.java index 8231e85..d89c30a 100644 --- a/src/main/java/net/knarcraft/stargatecommand/command/CommandVisualizer.java +++ b/src/main/java/net/knarcraft/stargatecommand/command/CommandVisualizer.java @@ -10,11 +10,10 @@ import net.knarcraft.stargatecommand.formatting.TranslatableMessage; import net.knarcraft.stargatecommand.manager.IconManager; import net.knarcraft.stargatecommand.property.Icon; import net.knarcraft.stargatecommand.property.StargateCommandCommand; -import org.bukkit.Bukkit; +import net.knarcraft.stargatecommand.util.NameHelper; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import static net.knarcraft.stargatecommand.formatting.StringFormatter.getTranslatedErrorMessage; @@ -49,17 +48,7 @@ public class CommandVisualizer implements CommandExecutor { return true; } - String networkName = args[0].trim().replace(spaceReplacement, " "); - - //Replace {playerName} with network UUID - if (networkName.matches("^\\{.*}$")) { - Player player = Bukkit.getPlayer(networkName.substring(1, networkName.length() - 1)); - if (player != null) { - networkName = player.getUniqueId().toString(); - } - } - - Network network = registryAPI.getNetwork(networkName, false); + Network network = NameHelper.getNetworkFromName(registryAPI, args[0]); if (network == null) { commandSender.sendMessage(getTranslatedErrorMessage(TranslatableMessage.INVALID_NETWORK_GIVEN)); diff --git a/src/main/java/net/knarcraft/stargatecommand/command/DialTabCompleter.java b/src/main/java/net/knarcraft/stargatecommand/command/DialTabCompleter.java index e9b1d83..6a79380 100644 --- a/src/main/java/net/knarcraft/stargatecommand/command/DialTabCompleter.java +++ b/src/main/java/net/knarcraft/stargatecommand/command/DialTabCompleter.java @@ -9,6 +9,7 @@ import net.TheDgtl.Stargate.network.portal.RealPortal; import net.knarcraft.stargatecommand.manager.IconManager; import net.knarcraft.stargatecommand.property.Icon; import net.knarcraft.stargatecommand.property.StargateCommandCommand; +import net.knarcraft.stargatecommand.util.NameHelper; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; @@ -56,7 +57,7 @@ public class DialTabCompleter implements TabCompleter { } List availableNetworks = new ArrayList<>(); - Map> availablePortals = new HashMap<>(); + Map> availablePortals = new HashMap<>(); RegistryAPI registryAPI = stargateAPI.getRegistry(); PermissionManager permissionManager = stargateAPI.getPermissionManager(player); @@ -66,15 +67,18 @@ public class DialTabCompleter implements TabCompleter { if (args.length > 2) { return new ArrayList<>(); } else if (args.length > 1) { - Network network = registryAPI.getNetwork(args[0].replace(spaceReplacement, " "), false); - if (network != null && availablePortals.containsKey(network)) { - return filterMatching(availablePortals.get(network), args[1].replace(spaceReplacement, " ")); - } else { - return new ArrayList<>(); + Network network = NameHelper.getNetworkFromName(registryAPI, args[0]); + if (network != null) { + String networkName = NameHelper.getVisualNetworkName(network); + if (availablePortals.containsKey(networkName)) { + return filterMatching(availablePortals.get(networkName), args[1].replace(spaceReplacement, " ")); + } } } else { return filterMatching(availableNetworks, args[0].replace(spaceReplacement, " ")); } + + return new ArrayList<>(); } /** @@ -85,24 +89,24 @@ public class DialTabCompleter implements TabCompleter { * @param availablePortals

The map to store available portals to

*/ private void populateNetworksAndPortals(PermissionManager permissionManager, List availableNetworks, - Map> availablePortals) { + Map> availablePortals) { List networks = new LinkedList<>(stargateAPI.getRegistry().getNetworkMap().values()); //Get all available networks and portals for (Network network : networks) { + String networkName = NameHelper.getVisualNetworkName(network); Collection portals = network.getAllPortals(); for (Portal portal : portals) { if (permissionManager.hasAccessPermission((RealPortal) portal)) { //Add an empty list if the network has not been encountered before - if (!availablePortals.containsKey(network)) { - availablePortals.put(network, new LinkedList<>()); + if (!availablePortals.containsKey(networkName)) { + availablePortals.put(networkName, new LinkedList<>()); } - availablePortals.get(network).add(portal.getName().replace(" ", spaceReplacement)); + availablePortals.get(networkName).add(portal.getName().replace(" ", spaceReplacement)); } } } //Add only the network names with portals available to the player - availablePortals.keySet().forEach((item) -> availableNetworks.add(item.getName().replace(" ", - spaceReplacement))); + availableNetworks.addAll(availablePortals.keySet()); } } diff --git a/src/main/java/net/knarcraft/stargatecommand/command/VisualizerTabCompleter.java b/src/main/java/net/knarcraft/stargatecommand/command/VisualizerTabCompleter.java index 1503b0d..3889510 100644 --- a/src/main/java/net/knarcraft/stargatecommand/command/VisualizerTabCompleter.java +++ b/src/main/java/net/knarcraft/stargatecommand/command/VisualizerTabCompleter.java @@ -1,20 +1,16 @@ package net.knarcraft.stargatecommand.command; import net.TheDgtl.Stargate.network.RegistryAPI; -import net.knarcraft.stargatecommand.manager.IconManager; -import net.knarcraft.stargatecommand.property.Icon; import net.knarcraft.stargatecommand.property.StargateCommandCommand; -import org.bukkit.Bukkit; +import net.knarcraft.stargatecommand.util.NameHelper; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; -import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; -import java.util.UUID; import static net.knarcraft.stargatecommand.util.TabCompleterHelper.filterMatching; @@ -45,20 +41,7 @@ public class VisualizerTabCompleter implements TabCompleter { if (args.length < 2) { List networkNames = new ArrayList<>(); - registryAPI.getNetworkMap().values().forEach(network -> { - String networkName = network.getName().replace(" ", IconManager.getIconString( - Icon.SPACE_REPLACEMENT)); - try { - UUID userID = UUID.fromString(network.getName()); - Player player = Bukkit.getPlayer(userID); - if (player != null) { - networkName = "{" + player.getName() + "}"; - } - } catch (IllegalArgumentException exception) { - //Ignored. Not a UUID - } - networkNames.add(networkName); - }); + registryAPI.getNetworkMap().values().forEach(network -> networkNames.add(NameHelper.getVisualNetworkName(network))); return filterMatching(networkNames, args[0]); } else { return new ArrayList<>(); diff --git a/src/main/java/net/knarcraft/stargatecommand/util/NameHelper.java b/src/main/java/net/knarcraft/stargatecommand/util/NameHelper.java new file mode 100644 index 0000000..050a605 --- /dev/null +++ b/src/main/java/net/knarcraft/stargatecommand/util/NameHelper.java @@ -0,0 +1,63 @@ +package net.knarcraft.stargatecommand.util; + +import net.TheDgtl.Stargate.network.Network; +import net.TheDgtl.Stargate.network.RegistryAPI; +import net.knarcraft.stargatecommand.manager.IconManager; +import net.knarcraft.stargatecommand.property.Icon; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.UUID; + +/** + * A helper class for dealing with Portal and Network names + */ +public final class NameHelper { + + private NameHelper() { + + } + + /** + * Gets the network name to display in tab completion for the given network + * + * @param network

The network to display

+ * @return

The network name

+ */ + public static String getVisualNetworkName(Network network) { + String networkName = network.getId().replace(" ", IconManager.getIconString( + Icon.SPACE_REPLACEMENT)); + try { + UUID userID = UUID.fromString(network.getName()); + Player player = Bukkit.getPlayer(userID); + if (player != null) { + networkName = "{" + player.getName() + "}"; + } + } catch (IllegalArgumentException exception) { + //Ignored. Not a UUID + } + return networkName; + } + + /** + * Gets a network from the given network name + * + * @param registryAPI

The registry API to get the network from

+ * @param networkName

The name of the network to get

+ * @return

The network corresponding to the given name

+ */ + public static Network getNetworkFromName(RegistryAPI registryAPI, String networkName) { + networkName = networkName.trim().replace(IconManager.getIconString(Icon.SPACE_REPLACEMENT), " "); + + //Replace {playerName} with network UUID + if (networkName.matches("^\\{.*}$")) { + Player player = Bukkit.getPlayer(networkName.substring(1, networkName.length() - 1)); + if (player != null) { + networkName = player.getUniqueId().toString(); + } + } + + return registryAPI.getNetwork(networkName, false); + } + +}