Implements #11 for the dial command as well
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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<String> availableNetworks = new ArrayList<>();
|
||||
Map<Network, List<String>> availablePortals = new HashMap<>();
|
||||
Map<String, List<String>> 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 <p>The map to store available portals to</p>
|
||||
*/
|
||||
private void populateNetworksAndPortals(PermissionManager permissionManager, List<String> availableNetworks,
|
||||
Map<Network, List<String>> availablePortals) {
|
||||
Map<String, List<String>> availablePortals) {
|
||||
List<Network> networks = new LinkedList<>(stargateAPI.getRegistry().getNetworkMap().values());
|
||||
//Get all available networks and portals
|
||||
for (Network network : networks) {
|
||||
String networkName = NameHelper.getVisualNetworkName(network);
|
||||
Collection<Portal> 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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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<String> 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<>();
|
||||
|
||||
@@ -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 <p>The network to display</p>
|
||||
* @return <p>The network name</p>
|
||||
*/
|
||||
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 <p>The registry API to get the network from</p>
|
||||
* @param networkName <p>The name of the network to get</p>
|
||||
* @return <p>The network corresponding to the given name</p>
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user