JavaAutoSavePluginData

供 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

Inheritors

Constructors

Link copied to clipboard
constructor(saveName: String)

Types

Link copied to clipboard
object Companion

Functions

Link copied to clipboard

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

Link copied to clipboard

当所属于这个 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

创建一个名称为 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.

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

创建一个名称为 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.

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

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

Link copied to clipboard

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

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

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

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

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

inline fun <T> PluginData.value(apply: T.() -> Unit = {}): SerializerAwareValue<T>

通过具体化类型创建一个 SerializerAwareValue.

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

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

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

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

inline fun <T> PluginData.value(default: T, crossinline apply: T.() -> Unit = {}): SerializerAwareValue<T>

通过具体化类型创建一个 SerializerAwareValue, 并设置初始值.

Link copied to clipboard

通过一个特定的 KType 创建 Value, 并设置初始值.

Properties

Link copied to clipboard

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

Link copied to clipboard

决定这个 PluginData 序列化时使用的格式, 默认为 YAML. 具体实现格式由 PluginDataStorage 决定.

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 初始化的属性列表.