-
Notifications
You must be signed in to change notification settings - Fork 0
Complex objects
Xezard edited this page Oct 18, 2020
·
5 revisions
To serialize complex objects, such objects must implement the 'ru.xezard.configurations.bukkit.serialization.ConfigurationSerializable' interface. You can also specify the annotation "ru.xezard.configurations.bukkit.serialization.SerializableAs("ClassName")" to change the key to your object in the configuration from the full name along with the package to the annotation value.
Without '@SerializableAs' annotation:
==: ru.xezard.example.data.ExampleObjectWith '@SerializableAs' annotation:
==: ExampleObjectAn example of a serializable class:
@Data
@AllArgsConstructor
@SerializableAs("Pojo")
public class POJO
implements ConfigurationSerializable
{
private String name;
private int id;
@Override
public Map<String, Object> serialize()
{
Map<String, Object> serlialized = new HashMap<> ();
serlialized.put("Name", this.name);
serlialized.put("Id", this.id);
return serlialized;
}
public static POJO deserialize(Map<String, Object> serialized)
{
return new POJO((String) serialized.get("Name"), (int) serialized.get("Id"));
}
}In configuration class:
@Getter
public class MessagesConfiguration
extends Configuration
{
public MessagesConfiguration(File folder)
{
super(folder.getAbsolutePath() + File.separator + "messages.yml");
}
@ConfigurationField("POJO")
public POJO pojo = new POJO("pojo", 1);
}Don't forget to register your class in the ru.xezard.configurations.bukkit.serialization.ConfigurationSerialization class:
public class YourPlugin
extends JavaPlugin
{
static
{
ConfigurationSerialization.registerClass(POJO.class);
}
}