Fix schematic load with no specified format

This commit is contained in:
Jesse Boyd
2018-08-17 02:55:41 +10:00
parent c2a1fbf7cc
commit 20feefcab2
5 changed files with 85 additions and 38 deletions

View File

@ -31,7 +31,7 @@ public class BuiltInClipboardFormat {
@Deprecated
public static final ClipboardFormat[] values() {
return ClipboardFormat.values();
return ClipboardFormat.values;
}
@Deprecated

View File

@ -48,6 +48,7 @@ import com.sk89q.worldedit.session.ClipboardHolder;
import com.sk89q.worldedit.world.block.BlockTypes;
import java.io.*;
import java.lang.reflect.Array;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
@ -243,6 +244,8 @@ public enum ClipboardFormat {
;
public static final ClipboardFormat[] values;
private static final Map<String, ClipboardFormat> aliasMap;
static {
@ -252,6 +255,7 @@ public enum ClipboardFormat {
aliasMap.put(alias, emum);
}
}
values = values();
}
private IClipboardFormat format;
@ -560,6 +564,18 @@ public enum ClipboardFormat {
return aliasMap.get(alias.toLowerCase(Locale.ENGLISH).trim());
}
@Nullable
public static ClipboardFormat findByExtension(String extension) {
checkNotNull(extension);
extension = extension.toLowerCase();
for (ClipboardFormat format : values) {
if (format.getFileExtensions().contains(extension)) {
return format;
}
}
return null;
}
/**
* Detect the format given a file.
*
@ -584,6 +600,17 @@ public enum ClipboardFormat {
for (String alias : newEnum.getAliases()) {
aliasMap.put(alias, newEnum);
}
ArrayList<ClipboardFormat> newValues = new ArrayList<>(Arrays.asList(values));
newValues.add(newEnum);
ClipboardFormat[] newValuesArray = newValues.toArray(new ClipboardFormat[newValues.size()]);
try {
ReflectionUtils.setFailsafeFieldValue(ClipboardFormat.class.getDeclaredField("values"), null, newValuesArray);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return newEnum;
}

View File

@ -53,7 +53,7 @@ public class ClipboardFormats {
public static ClipboardFormat findByFile(File file) {
checkNotNull(file);
for (ClipboardFormat format : ClipboardFormat.values()) {
for (ClipboardFormat format : ClipboardFormat.values) {
if (format.isFormat(file)) {
return format;
}
@ -67,7 +67,7 @@ public class ClipboardFormats {
*/
public static Multimap<String, ClipboardFormat> getFileExtensionMap() {
HashMultimap<String, ClipboardFormat> map = HashMultimap.create();
for (ClipboardFormat format : ClipboardFormat.values()) {
for (ClipboardFormat format : ClipboardFormat.values) {
for (String ext : format.getFileExtensions()) {
map.put(ext, format);
}
@ -76,7 +76,7 @@ public class ClipboardFormats {
}
public static Collection<ClipboardFormat> getAll() {
return Arrays.asList(ClipboardFormat.values());
return Arrays.asList(ClipboardFormat.values);
}
/**
@ -86,7 +86,7 @@ public class ClipboardFormats {
public static String[] getFileExtensionArray() {
List<String> exts = new ArrayList<>();
HashMultimap<String, ClipboardFormat> map = HashMultimap.create();
for (ClipboardFormat format : ClipboardFormat.values()) {
for (ClipboardFormat format : ClipboardFormat.values) {
exts.addAll(format.getFileExtensions());
}
return exts.toArray(new String[exts.size()]);