BetterConfig

一个非常强大且易于使用的基于命令的配置库,适用于服务器和客户端。

资源图片
# BetterConfig 一个非常强大且易于使用的基于命令的配置库,适用于服务器和客户端。 ## 创建一个简单的配置 首先,创建一个新的类。这将是存放所有配置的类。在这个例子中,我们将 将这个类命名为 `Configs`。请确保这个类是 `public`!接下来,为你的配置条目创建一个字段。该 字段不应该是 final。使用 `@Config` 注解标记这个字段。字段的初始值将用作 默认(回退)值。你可以通过设置 `comment` 属性来添加注释。 ```java public class Configs { @Config(comment = "This is an example!") public static String exampleString = "default"; } ``` 最后,注册你的 `Configs` 类。 - 对于 Fabric 用户,在你的 mod 的 `onInitialize(Client)` 方法中注册 `Configs` 类。将 `` 替换为你的 mod 的 id。有时你可能省略泛型,只用 `<>`。 - 在客户端: ```java new ModConfigBuilder(, Configs.class).build(); ``` - 在服务器: ```java new ModConfigBuilder(, Configs.class).build(); ``` - 对于 Paper 用户,在你的插件的 `onEnable` 方法中注册 `Configs` 类。将 `` 替换为你的 插件的名称。 ```java new ModConfigBuilder<>(, Configs.class).build(); ``` 就这样!现在你可以通过 `Configs.exampleString` 访问 `exampleString`。你可以使用 config 命令编辑 `exampleString`。 - 在 Fabric 中,客户端和服务器有不同的命令。对于两者,将 `` 替换为你的 mod 的 id。 - 在客户端,执行 `/cconfig exampleString set `。 - 在服务器,执行 `/config exampleString set `。 - 在 Paper 服务器上,执行 `/config exampleString set `。将 `` 替换为你的 插件的名称。 ## 这还不是全部! 此 mod 还原生支持使用 `Collection` 和 `Map` 作为变量类型。这些配置将拥有 可用选项 `add`、`put` 和 `remove`。此外,你可以定义你自己的 (de)serialisers 来创建 具有任意类型的配置。要做到这一点,你只需要在构建配置时注册 (de)serialiser。例如,要创建 具有 `Block` 类型的配置,你可以 ```java new ModConfigBuilder<>(, Configs.class) .registerTypeHierarchy(Block.class, new BlockAdapter(), BlockArgumentType::block) .build(); ``` 其中 `BlockAdapter` 扩展了 `TypeAdapter`,并且 `BlockArgumentType` 实现了 `ArgumentType`。参阅 [这些测试](fabric/src/testmod/java/dev/xpple/betterconfig) 以获得完整的了解。一个相同的设置适用于 Paper 可以在 [这里](paper/src/testplugin/java/dev/xpple/betterconfig) 找到。 此外,你可以通过创建你自己的方法来完全改变更新你的配置值行为。只需 将 `setter`、`adder`、`putter` 或 `remover` 作为属性添加到你的 `@Config` 注解中即可。 一个很好的用途是根据单个值将条目键值对添加到 `Map`。考虑以下配置。 ```java @Config(putter = @Config.Putter("none"), adder = @Config.Adder("customMapAdder")) public static Map exampleMapAdder = new HashMap<>(Map.of("a", "A", "b", "B")); public static void customMapAdder(String string) { exampleMapAdder.put(string.toLowerCase(Locale.ROOT), string.toUpperCase(Locale.ROOT)); } ``` 对于 `putter` 的 `"none"` 值表示将不会有 putter 可用。这样,你可以像往常一样在你的 代码中使用此 `Map`,并通过 `/(c)config exampleMapAdder add ` 向其中添加值。 更多细节请参阅 [@Config 的 JavaDocs](common/src/main/java/dev/xpple/betterconfig/api/Config.java)。 更新方法的参数也可以进行定制。 ```java @Config(adder = @Config.Adder(value = "customTypeAdder", type = int.class)) public static Collection exampleCustomType = new ArrayList<>(List.of("%", "@")); public static void customTypeAdder(int codepoint) { exampleCustomType.add(Character.toString(codepoint)); } ``` 对于 putters,有单独的 key 和 value 类型属性。 还有更多东西!为了获得一些说明性示例,请参阅 [Fabric](fabric/src/testmod/java/dev/xpple/betterconfig/Configs.java) 和 [Paper](paper/src/testplugin/java/dev/xpple/betterconfig/Configs.java) 中 `Configs` 类。 ## 安装 将 `${betterconfig_version}` 替换为 artifact 版本。 你可以选择我的 maven 仓库和 GitHub 的 package 仓库。 ### 我的 maven 仓库 ```gradle repositories { maven { url 'https://maven.xpple.dev/maven2' } } ``` ### GitHub packages ```gradle repositories { maven { url 'https://maven.pkg.github.com/xpple/BetterConfig' credentials { username = project.findProperty("gpr.user") ?: System.getenv("USERNAME") password = project.findProperty("gpr.key") ?: System.getenv("TOKEN") } } } ``` 导入它: ```gradle dependencies { // Fabric include modImplementation('dev.xpple:betterconfig-fabric:${betterconfig_version}') // Paper (也包含插件文件夹内的 JAR) compileOnly 'dev.xpple:betterconfig-paper:${betterconfig_version}' } ```