JavaAutoSavePluginData

abstract class JavaAutoSavePluginData(saveName: String) : AutoSavePluginData, PluginConfig

供 Java 用户使用的 PluginData. 参考 PluginData 以获取更多信息.

仍然更推荐在项目中混用 Java 和 Kotlin, 使用 Kotlin 编写 PluginData. 也可以使用其他持久化库替代 PluginData.

JvmPlugin 的典型实现方式:

// PluginMain.java
public final class PluginMain extends JavaPlugin {
public static PluginMain INSTANCE;
public PluginMain() {
INSTANCE = this;
}
@Override
public onLoad() {
this.reloadPluginData(MyPluginData.INSTANCE); // 读取文件等
}
}

// MyPluginData.java
public class MyPluginData extends JavaAutoSavePluginData {
public static final MyPluginData INSTANCE = new MyPluginData();

public final Value<String> string = value("test"); // 默认值 "test"

public final Value<List<String>> list = typedValue(createKType(List.class, createKType(String.class))); // 无默认值, 自动创建空 List

public final Value<Map<Long, Object>> custom = typedValue(
createKType(Map.class, createKType(Long.class), createKType(Object.class)),
new HashMap<Long, Object>() {{ // 带默认值
put(123L, "ok");
}}
);
}

使用时, 需要使用 .get(), 如:

Value<List<String>> theList = MyPluginData.INSTANCE.list; // 获取 Value 实例. Value 代表一个追踪自动保存的值.
List<String> actualList = theList.get();
theList.set();

注意: 由于实现特殊, 请不要在初始化 Value 时就使用 .get(). 这可能会导致自动保存追踪失效. 必须在使用时才调用 .get() 获取真实数据对象.

Since

2.11

See also

Constructors

Link copied to clipboard
fun JavaAutoSavePluginData(saveName: String)

Types

Link copied to clipboard
object Companion

Functions

Link copied to clipboard
open override fun onInit(owner: PluginDataHolder, storage: PluginDataStorage)

当这个 PluginData 被放入一个 PluginDataStorage 时调用

Link copied to clipboard
override fun onValueChanged(value: Value<*>)

当所属于这个 PluginDataValue 被修改时被调用.

Link copied to clipboard
operator fun <T : SerializerAwareValue<*>> T.provideDelegate(thisRef: Any?, property: KProperty<*>): T

使用 by value() 时自动调用此方法, 添加对 Value 的值修改的跟踪, 并创建 ValueNode 加入 valueNodes

Link copied to clipboard
open fun <T : SerializerAwareValue<*>> track(    value: T,     valueName: String,     annotations: List<Annotation>): T

供手动实现时值跟踪使用 (如 Java 用户). 一般 Kotlin 用户需使用 provideDelegate

Link copied to clipboard
fun <T : Any> typedValue(    name: String,     type: KType,     default: T? = null): SerializerAwareValue<T>

创建一个支持泛型的 Value.

Link copied to clipboard
fun value(name: String, default: Boolean): SerializerAwareValue<Boolean>

创建一个名称为 name, 类型为 BooleanValue, 并设置初始值为 default.

fun value(name: String, default: Byte): SerializerAwareValue<Byte>

创建一个名称为 name, 类型为 ByteValue, 并设置初始值为 default.

fun value(name: String, default: Char): SerializerAwareValue<Char>

创建一个名称为 name, 类型为 CharValue, 并设置初始值为 default.

fun value(name: String, default: Double): SerializerAwareValue<Double>

创建一个名称为 name, 类型为 DoubleValue, 并设置初始值为 default.

fun value(name: String, default: Float): SerializerAwareValue<Float>

创建一个名称为 name, 类型为 FloatValue, 并设置初始值为 default.

fun value(name: String, default: Int): SerializerAwareValue<Int>

创建一个名称为 name, 类型为 IntValue, 并设置初始值为 default.

fun value(name: String, default: Long): SerializerAwareValue<Long>

创建一个名称为 name, 类型为 LongValue, 并设置初始值为 default.

fun value(name: String, default: Short): SerializerAwareValue<Short>

创建一个名称为 name, 类型为 ShortValue, 并设置初始值为 default.

fun value(name: String, default: String): SerializerAwareValue<String>

创建一个名称为 name, 类型为 StringValue, 并设置初始值为 default.

Properties

Link copied to clipboard
override val saveName: String

这个 PluginData 保存时使用的名称.

Link copied to clipboard
open override val serializersModule: SerializersModule

序列化本对象数据时使用的 SerializersModule. 用于支持多态序列化等. 在序列化时会先使用 PluginData.serializersModule, 再对无法找到 serializer 的类型使用 MessageSerializers.serializersModule.

Link copied to clipboard
override val updaterSerializer: KSerializer<Unit>

所有 valueNodes 更新和保存序列化器.

Link copied to clipboard

添加了追踪的 ValueNode 列表, 即通过 by value 初始化的属性列表.

Inheritors

Link copied to clipboard