-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Minor
-
None
-
Affects Version/s: None
-
None
-
Environment:
Java 15, Windows 10
-
This server is running CraftBukkit version git-Spigot-a19903d-009f0ba (MC: 1.16.4) (Implementing API version 1.16.4-R0.1-SNAPSHOT)
-
Yes
enumerations that implement org.bukkit.configuration.serialization.ConfigurationSerializable aren't properly serialized to disk.
Given a configurationserializable class like this:
@SerializableAs("Hello") enum Hello implements ConfigurationSerializable { FOO, BAR; @Override public Map<String, Object> serialize() { return Collections.singletonMap("variant", name()); } public static Hello deserialize(Map<String, Object> map) { return Hello.valueOf((String) map.get("variant")); } }
and an onEnable like this:
@Override
public void onEnable() {
ConfigurationSerialization.registerClass(Hello.class, "Hello");
File dataFolder = getDataFolder();
dataFolder.mkdirs();
File saveFile = new File(dataFolder, "test.yml");
try {
if (!saveFile.exists()) saveFile.createNewFile();
YamlConfiguration yamlConfiguration = new YamlConfiguration();
yamlConfiguration.set("hello", Hello.FOO);
yamlConfiguration.save(saveFile);
yamlConfiguration = YamlConfiguration.loadConfiguration(saveFile);
Hello hello = (Hello) yamlConfiguration.get("hello");
assert hello == Hello.FOO;
} catch (IOException e) {
getLogger().log(Level.SEVERE, "could not save or load test.yml", e);
}
}
,
it is expected that the contents of the test.yml savefile looks as follows:
hello: ==: Hello variant: 'FOO'
but instead all that's there is:
hello: !!com.example.Hello 'FOO'