JAutoSavePluginData

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

供 Java 用户使用的 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 JAutoSavePluginData {
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() 获取真实数据对象.

See also

Constructors

Link copied to clipboard
fun JAutoSavePluginData(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(type: KType, default: T? = null): SerializerAwareValue<T>

构造一个支持泛型的 Value.

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

创建一个 Boolean 类型的 Value, 并设置初始值为 default

fun value(default: Byte): SerializerAwareValue<Byte>

创建一个 Byte 类型的 Value, 并设置初始值为 default

fun value(default: Char): SerializerAwareValue<Char>

创建一个 Char 类型的 Value, 并设置初始值为 default

fun value(default: Double): SerializerAwareValue<Double>

创建一个 Double 类型的 Value, 并设置初始值为 default

fun value(default: Float): SerializerAwareValue<Float>

创建一个 Float 类型的 Value, 并设置初始值为 default

fun value(default: Int): SerializerAwareValue<Int>

创建一个 Int 类型的 Value, 并设置初始值为 default

fun value(default: Long): SerializerAwareValue<Long>

创建一个 Long 类型的 Value, 并设置初始值为 default

fun value(default: Short): SerializerAwareValue<Short>

创建一个 Short 类型的 Value, 并设置初始值为 default

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

创建一个 String 类型的 Value, 并设置初始值为 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 初始化的属性列表.