Resolve paths where ../ fails
This commit is contained in:
parent
63cb4784e7
commit
e1df0ac8d1
@ -176,6 +176,11 @@ public class MainUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public static File resolveRelative(File file) {
|
||||
if (!file.exists()) return new File(relativize(file.getPath()));
|
||||
return file;
|
||||
}
|
||||
|
||||
public static String relativize(String path) {
|
||||
String[] split = path.split(Pattern.quote(File.separator));
|
||||
StringBuilder out = new StringBuilder();
|
||||
|
@ -232,7 +232,7 @@ public class SchematicCommands extends MethodCommands {
|
||||
if (!filename.matches(".*\\.[\\w].*")) {
|
||||
filename += "." + format.getExtension();
|
||||
}
|
||||
f = new File(dir, filename);
|
||||
f = MainUtil.resolveRelative(new File(dir, filename));
|
||||
}
|
||||
if (f.getName().replaceAll("." + format.getExtension(), "").isEmpty()) {
|
||||
File directory = f.getParentFile();
|
||||
@ -251,10 +251,6 @@ public class SchematicCommands extends MethodCommands {
|
||||
}
|
||||
if (!f.exists() || !MainUtil.isInSubDirectory(working, f)) {
|
||||
player.printError("Schematic " + filename + " does not exist! (" + f.exists() + "|" + f + "|" + (!MainUtil.isInSubDirectory(working, f)) + ")");
|
||||
File absolute = f.getAbsoluteFile();
|
||||
player.printError("TEST0 " + absolute + " = " + absolute.exists());
|
||||
player.printError("TEST1 " + MainUtil.relativize(absolute.getPath()) + " = " + new File(MainUtil.relativize(absolute.getPath())).exists());
|
||||
player.printError("TEST1 " + MainUtil.relativize(f.getPath()) + " = " + new File(MainUtil.relativize(f.getPath())).exists());
|
||||
return;
|
||||
}
|
||||
in = new FileInputStream(f);
|
||||
@ -415,7 +411,8 @@ public class SchematicCommands extends MethodCommands {
|
||||
if (filename.equalsIgnoreCase("*")) {
|
||||
files.addAll(getFiles(session.getClipboard()));
|
||||
} else {
|
||||
files.add(new File(dir, filename));
|
||||
File f = MainUtil.resolveRelative(new File(dir, filename));
|
||||
files.add(f);
|
||||
}
|
||||
if (files.isEmpty()) {
|
||||
BBC.SCHEMATIC_NONE.send(player);
|
||||
@ -609,7 +606,7 @@ public class SchematicCommands extends MethodCommands {
|
||||
else if (hasShow) msg.text("&7[&3O&7]").command(showCmd + " " + args.getJoinedStrings(0) + " " + relFilePath).tooltip("Show");
|
||||
msg.text(color + name);
|
||||
if (isDir) {
|
||||
msg.command(list + " " + args.getJoinedStrings(0) + " " + relFilePath).tooltip("Load");
|
||||
msg.command(list + " " + relFilePath).tooltip("List");
|
||||
} else {
|
||||
msg.command(loadSingle + " " + relFilePath).tooltip("Load");
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ import com.boydti.fawe.FaweAPI;
|
||||
import com.boydti.fawe.command.FaweParser;
|
||||
import com.boydti.fawe.config.BBC;
|
||||
import com.boydti.fawe.config.Commands;
|
||||
import com.boydti.fawe.config.Settings;
|
||||
import com.boydti.fawe.object.DelegateConsumer;
|
||||
import com.boydti.fawe.object.FaweLimit;
|
||||
import com.boydti.fawe.object.FawePlayer;
|
||||
@ -706,7 +707,7 @@ public class UtilityCommands extends MethodCommands {
|
||||
String dirFilter = File.separator;
|
||||
|
||||
boolean listMine = false;
|
||||
boolean listGlobal = false;
|
||||
boolean listGlobal = !Settings.IMP.PATHS.PER_PLAYER_SCHEMATICS;
|
||||
if (len > 0) {
|
||||
int max = len;
|
||||
if (MathMan.isInteger(args.getString(len - 1))) {
|
||||
@ -733,7 +734,7 @@ public class UtilityCommands extends MethodCommands {
|
||||
if (arg.endsWith("/") || arg.endsWith(File.separator)) {
|
||||
arg = arg.replace("/", File.separator);
|
||||
String newDirFilter = dirFilter + arg;
|
||||
boolean exists = new File(dir, newDirFilter).exists() || playerFolder && new File(dir, actor.getUniqueId() + newDirFilter).exists();
|
||||
boolean exists = new File(dir, newDirFilter).exists() || playerFolder && MainUtil.resolveRelative(new File(dir, actor.getUniqueId() + newDirFilter)).exists();
|
||||
if (!exists) {
|
||||
arg = arg.substring(0, arg.length() - File.separator.length());
|
||||
if (arg.length() > 3 && arg.length() <= 16) {
|
||||
@ -795,11 +796,11 @@ public class UtilityCommands extends MethodCommands {
|
||||
}
|
||||
if (playerFolder) {
|
||||
if (listMine) {
|
||||
File playerDir = new File(dir, actor.getUniqueId() + dirFilter);
|
||||
File playerDir = MainUtil.resolveRelative(new File(dir, actor.getUniqueId() + dirFilter));
|
||||
if (playerDir.exists()) allFiles(playerDir.listFiles(), false, forEachFile);
|
||||
}
|
||||
if (listGlobal) {
|
||||
File rel = new File(dir, dirFilter);
|
||||
File rel = MainUtil.resolveRelative(new File(dir, dirFilter));
|
||||
forEachFile = new DelegateConsumer<File>(forEachFile) {
|
||||
@Override
|
||||
public void accept(File f) {
|
||||
@ -815,7 +816,7 @@ public class UtilityCommands extends MethodCommands {
|
||||
if (rel.exists()) allFiles(rel.listFiles(), false, forEachFile);
|
||||
}
|
||||
} else {
|
||||
File rel = new File(dir, dirFilter);
|
||||
File rel = MainUtil.resolveRelative(new File(dir, dirFilter));
|
||||
if (rel.exists()) allFiles(rel.listFiles(), false, forEachFile);
|
||||
}
|
||||
if (!filters.isEmpty() && !toFilter.isEmpty()) {
|
||||
|
Loading…
Reference in New Issue
Block a user