Handle exceptions thrown by location deserialization. Move invalid gates (e.g. world does not exist anymore) into 'invalid_gates.yml' file.
This commit is contained in:
parent
0cd67f3488
commit
50dad81876
@ -27,7 +27,6 @@ public class Gate extends BaseGate implements ConfigurationSerializable
|
|||||||
|
|
||||||
protected static Map<String, Gate> instances = new HashMap<String, Gate>();
|
protected static Map<String, Gate> instances = new HashMap<String, Gate>();
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CONSTRUCTORS
|
* CONSTRUCTORS
|
||||||
*/
|
*/
|
||||||
@ -74,16 +73,27 @@ public class Gate extends BaseGate implements ConfigurationSerializable
|
|||||||
public Gate(Map<String, Object> map)
|
public Gate(Map<String, Object> map)
|
||||||
{
|
{
|
||||||
id = (String)map.get(idKey);
|
id = (String)map.get(idKey);
|
||||||
location = LocationSerializer.deserializeLocation((Map<String, Object>) map.get(locationKey));
|
|
||||||
exit = LocationSerializer.deserializeLocation((Map<String, Object>) map.get(exitKey));
|
|
||||||
isHidden = (Boolean)map.get(isHiddenKey);
|
isHidden = (Boolean)map.get(isHiddenKey);
|
||||||
isOpen = (Boolean)map.get(isOpenKey);
|
isOpen = (Boolean)map.get(isOpenKey);
|
||||||
|
|
||||||
gateBlockLocations = new HashSet<Location>();
|
try {
|
||||||
List<Map<String, Object>> serializedGateBlocks = (List<Map<String, Object>>)map.get(gateBlocksKey);
|
location = LocationSerializer.deserializeLocation((Map<String, Object>) map.get(locationKey));
|
||||||
|
exit = LocationSerializer.deserializeLocation((Map<String, Object>) map.get(exitKey));
|
||||||
|
|
||||||
for (Map<String, Object> sgb : serializedGateBlocks) {
|
gateBlockLocations = new HashSet<Location>();
|
||||||
gateBlockLocations.add(LocationSerializer.deserializeLocation(sgb));
|
List<Map<String, Object>> serializedGateBlocks = (List<Map<String, Object>>)map.get(gateBlocksKey);
|
||||||
|
|
||||||
|
for (Map<String, Object> sgb : serializedGateBlocks) {
|
||||||
|
gateBlockLocations.add(LocationSerializer.deserializeLocation(sgb));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
Plugin.log("ERROR: Failed to load gate '" + id + "'! (" + e.getMessage() + ")");
|
||||||
|
Plugin.log("NOTE: This gate will be removed from 'gates.yml' and added to 'invalid_gates.yml'!");
|
||||||
|
|
||||||
|
Plugin.instance.storeInvalidGate(map);
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
instances.put(id, this);
|
instances.put(id, this);
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package de.craftinc.gates;
|
package de.craftinc.gates;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -17,7 +18,6 @@ import org.bukkit.configuration.serialization.ConfigurationSerialization;
|
|||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
|
||||||
import de.craftinc.gates.commands.*;
|
import de.craftinc.gates.commands.*;
|
||||||
import de.craftinc.gates.listeners.PluginBlockListener;
|
import de.craftinc.gates.listeners.PluginBlockListener;
|
||||||
import de.craftinc.gates.listeners.PluginPlayerListener;
|
import de.craftinc.gates.listeners.PluginPlayerListener;
|
||||||
@ -190,4 +190,60 @@ public class Plugin extends JavaPlugin
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void storeInvalidGate(Map<String, Object> map)
|
||||||
|
{
|
||||||
|
File invalidGatesFile = new File(getDataFolder(), "invalid_gates.yml");
|
||||||
|
Boolean invalidGatesFileExists = invalidGatesFile.exists();
|
||||||
|
|
||||||
|
try {
|
||||||
|
FileWriter fileWriter = new FileWriter(invalidGatesFile, true);
|
||||||
|
|
||||||
|
if (!invalidGatesFileExists) {
|
||||||
|
fileWriter.write("gates:\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
fileWriter.write("- ==: ");
|
||||||
|
fileWriter.write(map.get("==").toString() + "\n");
|
||||||
|
map.remove("==");
|
||||||
|
|
||||||
|
fileWriter.write("\topen: false\n");
|
||||||
|
map.remove("open");
|
||||||
|
|
||||||
|
fileWriter.write("\tgateBlocks: []\n");
|
||||||
|
map.remove("gateBlocks");
|
||||||
|
|
||||||
|
|
||||||
|
for (String key : map.keySet()) {
|
||||||
|
Object value = map.get(key);
|
||||||
|
|
||||||
|
fileWriter.write("\t" + key + ": ");
|
||||||
|
|
||||||
|
if (value instanceof Map) {
|
||||||
|
fileWriter.write("\n");
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
Map<String, Object> valueMap = (Map<String, Object>)value;
|
||||||
|
|
||||||
|
for (String k : valueMap.keySet()) {
|
||||||
|
Object v = valueMap.get(k);
|
||||||
|
|
||||||
|
fileWriter.write("\t\t" + k + ": " + v.toString() + "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fileWriter.write(value.toString() + "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fileWriter.close();
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
log("ERROR: Could not save invalid gates to disk.");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user