# NoxesiumUtils
与 [Noxesium Mod](https://github.com/Noxcrew/noxesium) 轻松通信。



🇺🇦 在乌克兰制造! 制作于乌克兰!\
❤️ 在 [Patreon](https://patreon.com/SuperNeon4ik) 支持我
> 随着 **NoxesiumUtils 2.0.0** 我将改为使用 [com.noxcrew.noxesium.paper](https://github.com/Noxcrew/noxesium/tree/main/paper)
> 实现,而不是我自己的实现。 这使得维护 NoxesiumUtils 更容易。
### Noxesium 是什么?为什么它需要 Utils?
[Noxesium Mod](https://github.com/Noxcrew/noxesium) _(由 Noxcrew 提供)_ 是一个 Fabric mod,具有功能增强、错误修复和性能改进。
它允许服务器通过访问超出 vanilla 限制的附加功能为客户端提供更好的体验。
但是,服务器需要一个插件来与 mod 通信才能实际使用它的功能,而 **NoxesiumUtils** 正是为此目的而设计的。
它允许服务器所有者通过命令轻松与 mod 通信,也可以作为插件开发者的依赖项使用。
### 功能
- 在加入时发送服务器规则
- 使用命令向玩家发送服务器规则
- 检查玩家的客户端设置。
- 还有一些其他的, lol。
- 也许很快会有更多 🤔
### 要求
- Paper 1.20+
- [CommandAPI](https://modrinth.com/plugin/commandapi)
- _该插件不会对没有 mod 的玩家做任何操作_
### 命令
**发送服务器规则。** 将服务器规则发送给一系列玩家。
#### 为玩家设置服务器规则
```
/noxesiumutils serverrule <规则> <玩家: 选择器> <值>
/noxesiumutils serverrule <规则> <玩家: 选择器> 重置
```
#### 为实体设置实体规则
```
/noxesiumutils entityrule <规则> <实体: 选择器> <值>
/noxesiumutils entityrule <规则> <实体: 选择器> 重置
```
#### 检查玩家的 Noxesium 协议版本。
```
/noxesiumutils check <玩家: 玩家>
/noxesiumutils check <玩家: 选择器>
```
#### 检查玩家的设置。
```
/noxesiumutils clientSettings <玩家: 玩家>
```
有关此处所有内容的更多详细信息,请参阅 [Noxesium Mod README](https://github.com/Noxcrew/noxesium/#readme)!
### 配置
默认配置如下所示。
目前它仅包含一个设置,用于在玩家加入时向其发送服务器规则。
```yaml
# 在此处查看协议文档和有关 mod 的信息:
# https://github.com/Noxcrew/noxesium
# 针对调试目的添加一些额外的输出
extraDebugOutput: false
# 如果为 true,则会不时检查插件的版本。
checkForUpdates: true
# 如果为 true,则会将默认值发送给 Noxesium 玩家加入时。
sendDefaultsOnJoin: false
# 如果您不想发送该规则,请注释掉该行。
defaults:
#cameraLocked: false
#disableBoatCollisions: false
#disableDeferredChunkUpdates: false
#disableMapUi: false
#disableSpinAttackCollisions: false
#disableUiOptimizations: false
#disableVanillaMusic: false
#enableSmootherClientTrident: false
#heldItemNameOffset: 0
#overrideGraphicsMode: FAST
#riptideCoyoteTime: 0
#showMapInUi: false
#qibDefinitions:
#customCreativeItems: []
```
#### 加入时的默认设置
例如,以下更改将导致该插件自动向玩家发送
`disableSpinAttackCollisions = true`。
```yaml
sendDefaultsOnJoin: true
defaults:
disableSpinAttackCollisions: true
```
#### Qib 定义
什么是 Qibs? 好问题。 我不会完美地解释它,
所以请阅读 [Noxcrew/noxesium 中的此文件中的注释](https://github.com/Noxcrew/noxesium/blob/main/api/src/main/java/com/noxcrew/noxesium/api/qib/QibDefinition.java)。
`qibDefinitions` 列表是一个定义占位符的地方,这些定义由 QibEffects ([在此处查看效果列表](https://github.com/Noxcrew/noxesium/blob/main/api/src/main/java/com/noxcrew/noxesium/api/qib/QibEffect.java)) 组成。
以下是一个配置中的 QibDefinition 示例:
```yaml
qibDefinitions:
ding:
onEnter: 'play_ding'
onLeave: 'play_ding'
triggerEnterLeaveOnSwitch: false
```
现在是吓人的部分:**编写 QibEffects**。\
每个 QibEffect 都保存在其自己的 json 文件中,该文件保存在 `plugins/NoxesiumUtils/qibs` 文件夹中。
一个播放 ding 声音的 QibEffect 的示例 (`plugins/NoxesiumUtils/qibs/play_ding.json`):
```json
{
"type": "PlaySound",
"effect": {
"namespace": "minecraft",
"path": "entity.experience_orb.pickup",
"volume": 1.0,
"pitch": 1.0
}
}
```
_(可能对某些人很有用)_ 一个 jumpPad QibEffect 示例:
```json
{
"type": "Multiple",
"effect": {
"effects": [
{
"type": "PlaySound",
"effect": {
"namespace": "minecraft",
"path": "entity.experience_orb.pickup",
"volume": 1.0,
"pitch": 1.0
}
},
{
"type": "Wait",
"effect": {
"ticks": 1,
"effect": {
"type": "SetVelocityYawPitch",
"effect": {
"yaw": 0,
"yawRelative": true,
"pitch": -45,
"pitchRelative": false,
"strength": 2.0,
"limit": 2.5
}
}
}
}
]
}
}
```
在制作了 QibEffect 之后,您可以使用 QibEffect 文件的名称作为 ID 在 QibDefinition 部分 (所有字段都是可选的):
```yaml
qibDefinitions:
ding:
onEnter: 'QIB_EFFECT_ID'
onLeave: 'QIB_EFFECT_ID'
whileInside: 'QIB_EFFECT_ID'
onJump: 'QIB_EFFECT_ID'
triggerEnterLeaveOnSwitch: false
```
之后,您可以重新加载服务器并将规则应用于实体:
```
/noxesiumutils entityRules qibBehavior [实体] ding
```
并为所有玩家启用 Qib:
```
/noxesiumutils serverRules qibBehaviors @a ding
```
### 供开发者使用
在 [GitHub](https://github.com/SuperNeon4ik/NoxesiumUtils#readme) 上查看