API Flags 文档

简介

地块 Flags 是可以分配给地块的任何属性,它会以某种方式改变其功能。用户大多数可以在游戏内或通过配置文件(对于地块区域)分配这些属性。

要创建新的 Flags ,只需扩展 PlotFlag,或以下默认类型之一:

Flags 类型:

Flags 本质上是不可变的值容器。 Flags 值必须能够从字符串解析,并稍后序列化为字符串。

查询 Flags 状态

如果您想知道地块上 Flags 的当前值,只需写入

boolean pvp = plot.getFlag(PvpFlag.class);

在这个例子中,我们正在查询 PvpFlag 的状态,这是一个 BooleanFlag,该方法直接返回我们要使用的值。

创建 Flags

每个 Flags 包含一个不可变的值。这个值的类型作为一个通用参数提供给 PlotFlag 类,如下所示:

import com.plotsquared.core.plot.flag.FlagParseException;
import com.plotsquared.core.plot.flag.PlotFlag;

public class YourFlag extends PlotFlag<YourValueType, YourFlag> {
// ...
}

Flags 可以实现 com.plotsquared.core.plot.flag.InternalFlag,在这种情况下, Flags 对用户不可见。这允许你使用 Flags 框架存储与地块关联的信息。

PlotFlag 构造函数需要三个参数:

  • (非 null)不可变的 Flags 值
  • Flags 类别
  • Flags 描述

类别和描述应该是一个 TranslatableCaption com.plotsquared.core.configuration.caption.TranslatableCaption。 可以使用 com.plotsquared.core.configuration.caption.StaticCaption 创建 Caption 实例。

你的 Flags 构造函数应该看起来像这样:

public YourFlag(final YourValueType value) {
super(value, TranslatableCaption.of("flags.your_flag"), TranslatableCaption.of("flags.your_description"));
}

你的 Flags 类需要重写以下方法:

  • YourFlag parse(@NotNull String input) throws FlagParseException
  • YourFlag merge(@NotNull YourValueType newValue)
  • String toString():返回当前值的字符串序列化。
  • String getExample():返回一个示例参数。
  • YourFlag flagOf(@NotNull YourValueType value):返回你的 Flags 的新实例。

parse(String input) 方法解析一个字符串输入,并返回一个新的 Flags 实例。 如果输入无效,则抛出 FlagParseException。它应该看起来像这样:

@Override
public YourFlag parse(@NotNull final String input) throws FlagParseException {
if (isValid(input)) {
YourValueType type = convertSomehow(input);
return flagOf(type);
}
throw new FlagParseException(this, input, TranslatableCaption.of("flags.caption_message"));
}

标题的创建方法与构造函数相同。在 message_en.json 文件中,有一些预制的错误标题,前缀为 lags.flag_error_。FlagParseException 可以接受进一步的参数,这些参数将替换标题中的占位符值(+<{value}>+),如果需要的话。

这个方法永远不应该返回 null。如果无法解析值,就抛出异常。

merge 方法允许你合并两个不同的 Flags 实例,从而允许用户在 Flags 上使用 /plot flag add <flag> <value> 命令。如果不支持合并,只需返回 flagOf(newValue)

由于值是不可变的,可以(也鼓励)重复使用 Flags 实例。

有关示例,请参见此处

注册 Flags

所有 Flags 都必须在 GlobalFlagContainer 中注册,否则它们将无法在游戏中使用。 每个 Flags 将应用于每个地块,因此必须选择适当的默认 Flags 值。

要注册 Flags ,使用: com.plotsquared.plot.flags.GlobalFlagContainer().getInstance().addFlag(flagInstance)

添加 Flags 到地块

要将 Flags 添加到地块,使用 plot.setFlag(flagInstance)。如果你需要一个新的 Flags 实例,并且只有 Flags 类型,可以使用 plot.addFlag(GlobalFlagContainer.getInstance().getFlag(flagInstance).createFlagInstance(flagValue)) 添加 Flags 。