> For the complete documentation index, see [llms.txt](https://leawinds-organization.gitbook.io/yetanotherconfiglib-jian-ti-zhong-wen-fei-guan-fang/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://leawinds-organization.gitbook.io/yetanotherconfiglib-jian-ti-zhong-wen-fei-guan-fang/tu-xing-jie-mian-de-gou-jian-gui-builder/kong-zhi-qi-controllers.md).

# 控制器（Controllers）

深入了解控制器

{% hint style="danger" %}
这不是官方文档！官方文档位于 [https://docs.isxander.dev](https://docs.isxander.dev/yet-another-config-lib/)
{% endhint %}

## 内置控制器

{% hint style="warning" %}
这个关于控制器的列表还没有完成！
{% endhint %}

有许多不同的内置控制器可以让你快速设置。

<details>

<summary><code>BooleanController</code></summary>

一个可切换的控制器，根据选项的状态显示不同的文本。

```java
.controller(BooleanControllerBuilder::create)
```

* `valueFormatter`参数是一个函数，根据选项状态返回Text（可选）
* `coloured`参数是一个布尔值，根据选项状态设置`Text`为红色或绿色（可选）

要传递额外参数，你需要如下所示构建一个`BooleanController`。

```java
.controller(opt -> BooleanControllerBuilder.create(opt)
        .valueFormatter(val -> val ? Component.literal("Amazing") : Component.literal("Not Amazing"))
        .coloured(true))
```

![](https://1519116863-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiUFZnUcH6D7I7YlJC1P%2Fuploads%2FfePP9i8NQRW0gH1paSol%2Fspaces_s4yG60a7UCSjUx5DT1wQ_uploads_XWcEa1kjdFXu0DuWdjMU_java_VROI8U8sCh.webp?alt=media\&token=52ea7599-0253-4542-aecf-2f590d9345be)![](https://1519116863-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiUFZnUcH6D7I7YlJC1P%2Fuploads%2FuHrxLWwmcMePlchYTwnq%2Fspaces_s4yG60a7UCSjUx5DT1wQ_uploads_wjxEpGaM1rS2UjBdO4F6_java_GQGtXD1SRJ.webp?alt=media\&token=7ee98192-8e44-4f59-96ed-db28ce03befa)

</details>

<details>

<summary><code>TickBoxController</code></summary>

一个可以切换的控制器，显示一个tick box。

```java
.controller(TickBoxControllerBuilder::create)
```

这个控制器没有可选参数。

![](https://1519116863-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiUFZnUcH6D7I7YlJC1P%2Fuploads%2FXCTBG7EzlXC7RBlCG66I%2Fspaces_s4yG60a7UCSjUx5DT1wQ_uploads_IcQqGBjwyKeLQVxDnTbL_java_4DLHxyCy5h.webp?alt=media\&token=551bbfd3-4080-47fb-a28b-7c506a69deb6)

</details>

<details>

<summary><code>&#x3C;Number>SliderController</code></summary>

将`<Number>` 替换为`Double`, `Float`, `Integer` 或 `Long`。

滑块控制器需要一个最小值、最大值和一个步长。

```java
.controller(opt -> FloatSliderController.create(opt)
        .range(0, 10)
        .step(1)
        .valueFormatter(val -> Component.literal(val + " ticks"))) // 滑块也接受格式化器
```

![](https://1519116863-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiUFZnUcH6D7I7YlJC1P%2Fuploads%2FWPSp2p3iLjsfNVPurGxc%2Fjava_0tiJ9ys7yG.png?alt=media\&token=03239c5b-7c97-4462-b103-65a54836840d)![](https://1519116863-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiUFZnUcH6D7I7YlJC1P%2Fuploads%2Fg6y4pyCD7V7d0NN8SfwT%2Fjava_qku1qm9wDC.png?alt=media\&token=4e8e6e73-f368-4002-b8b9-6da3e19c6671)![](https://1519116863-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiUFZnUcH6D7I7YlJC1P%2Fuploads%2FmE2TmsEnCyKOyUq1yqKL%2Fjava_ysYlg7hxGU.png?alt=media\&token=a10eea08-010b-4a55-ba4b-3319881db7c5)![](https://1519116863-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiUFZnUcH6D7I7YlJC1P%2Fuploads%2FmOawoALEfF4FRZVrPqzn%2Fjava_wgfnQitV2T.png?alt=media\&token=81053d3e-9bee-4c63-b1c8-6e027fd19d4b)

![](https://1519116863-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiUFZnUcH6D7I7YlJC1P%2Fuploads%2FarlplHyfHnJY7t9isQh3%2Fjava_33thNIC5OK.png?alt=media\&token=f21b082c-5126-4228-b12e-ed5113e5c218)![](https://1519116863-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiUFZnUcH6D7I7YlJC1P%2Fuploads%2F9BKHeevqFCBIMqZXO0t5%2Fjava_7bigpV0mxD.png?alt=media\&token=10a9d2c2-e517-41fc-9670-30833b4287ff)![](https://1519116863-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiUFZnUcH6D7I7YlJC1P%2Fuploads%2FBqdVVtkLJVzsN9GZPqIB%2Fjava_cnGgxbcjdi.png?alt=media\&token=9d25008f-ef14-4cdc-97e7-0a4720b0b132)![](https://1519116863-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiUFZnUcH6D7I7YlJC1P%2Fuploads%2FsmDNHFaoKvt9v8yEoeG8%2Fjava_NvztjD91sj.png?alt=media\&token=7317653f-f177-4884-ba61-8077acba5e92)

</details>

<details>

<summary><code>EnumController</code></summary>

这个控制器使你可以在枚举常量间循环。

```java
.controller(opt -> EnumControllerBuilder.create(opt)
        .enumClass(Alphabet.class))
```

枚举可以继承`NameableEnum`接口来自动命名每个常量，不需要格式化器。

```java
public interface Alphabet implements NameableEnum {
    A,
    B,
    C;
    
    @Override
    public Component getDisplayName() {
        return Component.translatable("mymod.alphabet." + name().toLowerCase());
    }
}
```

或者，像往常一样将`valueFormatter`传递给控制器；

```java
.controller(opt -> EnumControllerBuilder.create(opt)
        .enumClass(Alphabet.class)
        .valueFormatter(v -> Component.translatable("mymod.alphabet." + v.name().toLowerCase())))
```

![](https://1519116863-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiUFZnUcH6D7I7YlJC1P%2Fuploads%2FgBJE90xe4Y2cT0NN5ptM%2Fjava_cFqi0yTGBc.png?alt=media\&token=69ccb677-9c58-41d6-8eb5-286f0701ac74)

</details>

<details>

<summary><code>StringController</code></summary>

一个允许用户输入字符串（`String`）的输入框。这允许使用键盘突出显示文本和比选项本身长的字符串，类似于Minecraft的`EditBox`。

```java
.controller(StringControllerBuilder::create)
```

该控制器没有参数，但可以通过创建自己的控制器、实现`IStringController`来扩展其功能，更多信息请参见此处。

![](https://1519116863-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiUFZnUcH6D7I7YlJC1P%2Fuploads%2F688EvikPCPB5UYsIY6wg%2Fjava_q3pKUNj5ph.png?alt=media\&token=b77f67bd-81b7-4783-933a-6c0a9427595d)

</details>

<details>

<summary><code>ColorController</code></summary>

一个允许用户输入十六进制RGB格式的控制器，带有预览。

```java
.controller(ColorControllerBuilder::create)
```

* `allowAlpha`参数为十六进制格式添加alpha通道，这样就变成了RGBA。

```java
.controller(opt -> ColorControllerBuilder.create(opt)
        .alpha(true))
```

![](https://1519116863-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiUFZnUcH6D7I7YlJC1P%2Fuploads%2FQebUrpRaygMcWTLPWRuL%2Fjava_yG4eNdRHPO.png?alt=media\&token=3ffb46e3-2722-418e-9243-ac9a3e43e562)

</details>

<details>

<summary><code>&#x3C;Number>FieldController</code></summary>

将`<Number>` 替换为`Double`, `Float`, `Integer` 或 `Long`。

类似于StringController，但是强制为数值格式，单/双精度浮点数允许小数，但是长整型和整型不允许。

```java
.controller(opt -> <Number>SliderControllerBuilder.create(opt)
        .min(0).max(10)
        .valueFormatter(...))
```

</details>

## 创建一个自定义控制器 <a href="#creating-a-custom-controller" id="creating-a-custom-controller"></a>
