Skip to content

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.ExampleObject

With '@SerializableAs' annotation:

==: ExampleObject

An 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);
    }
}

Clone this wiki locally