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