# 排列

## 启用

要开启排列，你必须在 config.yml 设置为：

```
scoreboard-teams:
  enabled: true
```

为什么这个是必须的已经在 [名称标签](https://docs.superiormc.cn/tab-wiki/ming-cheng-biao-qian#jie-shao) 页面中介绍过了，这里不再赘述。\
要 **验证** 你启用的排列，请使用指令 `/tab debug`。如果一切正常，它将会显示 `Sorting type:` 除了 `DISABLED` 的其他内容。

你可以在 `scoreboard-teams` 部分下的 `sorting-types` 配置分列模式。 各种的排列模式决定我们如何分类玩家。例如，如果你想设置为 `GROUPS` （组）分类模式，并设置了 `owner`, `admin`, `mod`, 和 `default` 组，那么你的配置文件应该像这样 `GROUPS:owner,admin,mod,default`。

此外，如果你希望排列区分大小写，请启用 `case-sensitive-sorting`。\
如果这个选项被启用，输入到每个排列类型的排列选项的大小写很重要。例如，当排序区分大小写时，`Joe` 将被认为与 `joe` 不同，并且根据排列类型，可能会出现在不同的位置。

### 排列类型

* `GROUPS` - 由玩家的组的优先级排列
* `PERMISSIONS` - 由权限节点排列
* `PLACEHOLDER` - 由指定的变量符排列
* `PLACEHOLDER_A_TO_Z` - 通过变量符的字母顺序从小到大排列，同时所有字符都有其对应的 ID，因此也支持非英文字母的字符。
* `PLACEHOLDER_Z_TO_A` - 通过变量符的字母顺序从大到小排列。不支持除英语字母外的字母。
* `PLACEHOLDER_LOW_TO_HIGH` - 通过变量符的数字顺序从小到大排列。要求变量符的输出值必须是纯数字。
* `PLACEHOLDER_HIGH_TO_LOW` - 通过变量符的数字顺序从大到小排列。要求变量符的输出值必须是纯数字。

## 排列方法

下面是你在 TAB 可以用的排列方法。

### 使用权限组设置优先级排列

这是 TAB 默认使用的方法。TAB 会获取你的玩家所在的权限组的组并根据组的优先级进行排列。

#### 步骤 1 - 配置优先级组

将你的玩家分配到不同的组中，这在 [分组](https://docs.superiormc.cn/tab-wiki/getting-start/fen-zu) 页面中已经介绍。 \
**验证** 玩家所在的组，你可以使用指令 `/tab debug <玩家>`. 它将提示 `Primary permission group:` 跟着玩家所在的组。如果没有，那么说明你的配置存在问题。

#### 步骤 2 - 配置排列

将所有你的组将所有组按优先级顺序放入逗号分隔的列表中。例如，如果您有组 `owner`, `admin`, `mod`, 和 `default`，，并且希望按该顺序分配组，您的配置应该像这样: `GROUPS:owner,admin,mod,default`.\
这行应该放置到 `sorting-types` 部分下，而该部分又在 `scoreboard-teams` 下。也就是说应该像这样:

```
scoreboard-teams:
  sorting-types:
    - "GROUPS:owner,admin,mod,default"
```

如果你希望有 2 个或者更多的同一级优先度的组，请使用 `|` 符号分开。例如:

```
scoreboard-teams:
  sorting-types:
    - "GROUPS:owner,admin,vip1|vip2,default"
```

在这里， `vip1` 和 `vip2` 将拥有相同的优先度 (3)。

### 使用权限节点排列

这是不建议的，因为许多低质量的服务器只是给他们的协管 OP 权限而不知道如何取消权限，这使得这个方法并没有按照预期工作。如果你认为你有足够的能力并且根据组来排列不是一个很好的选择，那么你就可以尝试这个方法。\
但是，在尝试对指定玩家进行排列而不将其分配到组时，此方法非常方便。

#### 步骤 1 - 配置权限

根据您希望他们的排序方式给予您的玩家权限。如果您不知道如何给予权限，可以在各自的权限组插件文档中找到。如果您不知道权限组插件是什么，甚至不知道权限是什么，请不要使用此方法。

#### 步骤 2 - 配置分类

将您的所有权限按优先级顺序放入逗号分隔的列表中。\
例如，如果你想把 `my.permission.1`, `my.permission.2`, `my.permission.3`, 和 `my.permission.4`, 权限作为排列玩家的权限，你的配置文件就应该像这样：`PERMISSIONS:my.permission.1,my.permission.2,my.permission.3,my.permission.4`.\
这行应该放置到 `sorting-types` 部分下，而该部分又在 `scoreboard-teams` 下。也就是说应该像这样:

```
scoreboard-teams:
  sorting-types:
    - "PERMISSIONS:my.permission.1,my.permission.2,my.permission.3,my.permission.4"
```

### 使用变量符排列 - 预设值

此方法使用变量符的输出对玩家进行排列，并将其与预设值进行比较。

要配置这种排列方法，请先填写你想要使用的变量符，然后填写 (`:`)，再然后就是预设值了。\
例如，如果你想要通过 `%afk%` 变量符排列玩家，即根据他们是否在挂机，即输出值是 `yes` 还是 `no`，你的配置应该像这样： `PLACEHOLDER:%afk%:yes,no`，这样输出 `yes` 的玩家将会排列在输出 `no` 的玩家的前面，具体配置应该像这样:

```
scoreboard-teams:
  sorting-types:
    - "PLACEHOLDER:%afk%:yes,no"
```

### 使用变量符排列 - 从 A 到 Z

此方法使用变量符的输出对玩家进行排列。

要配置这种排列方法，只需填写你要使用的变量符。就这样。\
例如，你想根据玩家的 `%displayname%` 变量符排列，你的配置应该像这样：`PLACEHOLDER_A_TO_Z:%displayname%`。具体的配置应该像这样:

```
scoreboard-teams:
  sorting-types:
    - "PLACEHOLDER_A_TO_Z:%displayname%"
```

### 使用变量符排列 - 从 Z 到 A

此方法使用变量符的输出对玩家进行排列。\
这与上面的从 A 到 Z 排序相同，只是字母表是向后的，所以 Z 排在第一位，A 排在最后。

要配置这种排列方法，只需填写你要使用的变量符。就这样。\
例如，你想根据玩家的 `%displayname%` 变量符排列，你的配置应该像这样：`PLACEHOLDER_Z_TO_A:%displayname%`。具体的配置应该像这样:

```
scoreboard-teams:
  sorting-types:
    - "PLACEHOLDER_Z_TO_A:%displayname%"
```

### 使用变量符排列 - 从高到低

此方法使用变量符的输出的数字的自然顺序对玩家进行排列。\
**只有纯数字输出的变量符才能使用！**

要配置这种排列方法，只需填写你要使用的变量符。就这样。\
例如，你想根据玩家的 `%health%` 变量符排列，你的配置应该像这样：`PLACEHOLDER_Z_TO_A:%health%`。具体的配置应该像这样:

```
scoreboard-teams:
  sorting-types:
    - "PLACEHOLDER_HIGH_TO_LOW:%health%"
```

### 使用变量符排列 - 从低到高

此方法使用变量符的输出的数字的自然相反的顺序对玩家进行排列。\
**只有纯数字输出的变量符才能使用！**\
要配置这种排列方法，只需填写你要使用的变量符。就这样。\
例如，你想根据玩家的 `%health%` 变量符排列，你的配置应该像这样：`PLACEHOLDER_Z_TO_A:%health%`。具体的配置应该像这样:

```
scoreboard-teams:
  sorting-types:
    - "PLACEHOLDER_LOW_TO_HIGH:%health%"
```

## 额外设置

`case-sensitive-sorting: true`\
当开启后，玩家将会以 A-Z a-z 排列. 禁用后，则是, Aa-Zz.

## 附加信息

### 附加信息 1 - 限制

所有的排列要素和玩家名称必须共同构成一个最长 16 字符的队伍名称。因为如此，减少变量符的输出是必要的。TAB 本身已经尽可能为所有的排列方法使用最短的值 - 值在内部被替换为 1-9（01-99 如果有超过 10 个结果）以帮助你解决这个限制。当你尝试使用一个长字符输出的变量符或者使用多个变量符排列时，第二个变量符会被完全切断。要解决这个问题，请剪切你的变量符，尝试只使用所有变量符的前 4 个字符。如果可能的话，请使用 `PLACEHOLDER` 排列方法，并设置预设值，以解决这个问题。

### 附加信息 2 - 各世界排列

目前不支持配置各世界排列。然而，这可以通过 [条件变量符](https://docs.superiormc.cn/tab-wiki/functions/tiao-jian-bian-liang-fu) 实现。只需w检查 %world% ，如果匹配则返回一个变量符，否则返回另一个。这适用于任何事物，而不仅仅是世界（服务器、区域等）。

### 附加信息 3 - 与其他插件兼容

正如我们前面提到的，排列由计分板队伍实现（他们的名称还需要不同），而玩家只能成为一个队伍的成员。话句话说，同时只能有一个插件管理计分板队伍。多个插件同时管理计分板队伍将会导致灾难。

幸运的是，TAB 包含阻止其他插件分配玩家计分板队伍的功能。这可以通过修改配置文件的 `anti-override` （位于 `scoreboard-teams`下）来开关。但我们非常推荐你保持开启该功能。当一个插件尝试覆盖 TAB 的计分板队伍是，这个操作将会被记录到 `anti-override.log` 文件。如果你的文件是空的或者不存在，这意味着你没有冲突的插件并且你可以关闭该功能， 这可以稍稍提高你的服务器性能。如果这个文件存在，大部分时候你可以通过队伍的名称来猜测是哪个插件导致的问题。\
以下是一些常见的队伍和它们的来源：

* `collideRule-xxxx` - 这来自 Paper。 我不打算解释原因，但是避免这问题的办法是在 paper 配置文件中设置 collision 为 true，然后在 TAB 的配置中将该配置设置为 false。
* `CMIxxxx` - CMI，在它的配置文件中禁用队伍。
* `CIT-xxxx` - 某个 Citizens NPC 和一位在线玩家名称相同，请尝试修改NPC 的名称或者使用浮空字代替 NPC 名称。 (/npc name 或者其他)

然而，这种检测不是 100% 的。 因此，即使启用了反覆盖，您仍可能遇到兼容性问题。 要确定此类问题，请检查使用 /tab reload 质量是否修复了您的排列问题。 如果是这样，那是某种兼容性问题。 如果不是，则很可能是配置错误问题。 兼容性问题的最常见原因是与 TAB 挂钩的插件，可能已过时。 最近的兼容性问题与过时的 eGlow 版本有关。
