# GuestViewer
一个Minecraft插件,限制非白名单玩家进入旁观者模式,并限制其移动能力。

## 下载
### 稳定版
**[下载最新稳定版](https://github.com/nfacha/GuestViewer/releases)**
### 前沿版
**[下载最新前沿版](https://github.com/nfacha/GuestViewer/actions/workflows/build.yml)**
⚠️ 需要登录GitHub才能从GitHub Actions下载工件。
## 服务器兼容性
- 已在Minecraft 1.21.x上测试并通过
- 应该适用于Paper/Spigot 服务器
## 功能
- 基于权限的白名单系统 - 没有 `guestviewer.bypass` 权限的玩家将自动设置为旁观者模式
- 具有 `guestviewer.bypass` 权限的玩家将自动设置为生存模式
- 旁观者只能在他们正在观察的玩家周围 100 个方块内移动
- 基于权限的附近世界生成自由漫游 (`guestviewer.freeroam`)
- 除非他们具有 `guestviewer.chat` 权限,否则对旁观者的聊天进行限制
- 可配置的欢迎消息,适用于普通玩家和旁观者
- 可配置的普通玩家和旁观者的加入/离开广播消息
- 简单轻量级
## 安装
1. 从上述链接下载最新版本
2. 将 JAR 文件放在服务器的 `plugins` 目录中
3. 重新启动服务器或运行 `/reload`
4. 根据需要配置插件(请参阅配置部分)
## 使用方法
### 权限
- `guestviewer.bypass` - 具有此权限的玩家可以正常游戏 (默认: op)
- `guestviewer.admin` - 使用admin命令(如重新加载)所需的权限 (默认: op)
- `guestviewer.freeroam` - 允许旁观者在世界生成点周围的配置距离内自由漫游 (默认: false)
- `guestviewer.chat` - 允许旁观者使用聊天 (默认: false)
### 命令
- `/guestviewer` 或 `/gview` - 显示插件信息
- `/guestviewer reload` 或 `/gview reload` - 重新加载插件配置
## 配置
插件的配置存储在 `plugins/GuestViewer/config.yml`:
```yaml
# 旁观者可以远离目标的最大距离(方块)
max-distance: 100
# 消息
messages:
# 当玩家加入并被设置为旁观者模式时显示的提示信息
spectator-join: "&c您不在白名单中!您已被设置为旁观者模式。"
# 当玩家加入且具有 bypass 权限时显示的提示信息
player-join: "&a欢迎回来!您正在以生存模式游戏。"
# 当旁观者尝试移动超出最大距离时显示的提示信息
distance-warning: "&c您不能移动超过 100 个方块远离您正在观察的玩家!"
# 当没有聊天权限的旁观者尝试聊天时显示的提示信息
chat-restricted: "&c您没有聊天权限。您处于旁观者模式。"
# 聊天设置
chat:
# 是否限制没有权限的旁观者的聊天
restrict-spectator-chat: true
# 广播通知
broadcast:
# 是否广播具有 bypass 权限的玩家加入
player-join-enabled: true
player-join-message: "&e%player% &a已加入服务器。"
# 是否广播具有 bypass 权限的玩家离开
player-quit-enabled: true
player-quit-message: "&e%player% &c已离开服务器。"
# 是否广播旁观者加入
spectator-join-enabled: true
spectator-join-message: "&7Guest &e%player% &7已作为旁观者加入。"
# 是否广播旁观者离开
spectator-quit-enabled: true
spectator-quit-message: "&7Guest &e%player% &7已离开服务器。"
```
## 工作原理
1. 当玩家加入时,插件会检查他们是否具有 `guestviewer.bypass` 权限
2. 如果他们具有该权限,他们将被设置为生存模式
3. 如果他们没有该权限,他们将被设置为旁观者模式
4. 旁观者被限制在他们正在观察的玩家周围 100 个方块(可配置)的半径内
5. 具有 `guestviewer.freeroam` 权限的旁观者可以移动到世界生成点周围的配置距离内
6. 没有 `guestviewer.chat` 权限的旁观者不能使用聊天
7. 如果他们尝试移动到允许的边界之外,他们将被传送到回来
## 支持
如果您遇到任何问题或有任何建议,请在 GitHub 存储库中提出问题。
## 授权许可
此插件使用 MIT 许可证发布。
## 开发
### 从源码构建
该项目使用 Maven 进行构建自动化。 要从源码构建:
```bash
mvn clean package
```
构建后的 jar 文件将位于 `target` 目录中。
### 持续集成
该项目使用 GitHub Actions 自动构建插件。 工作流:
- 在 main/master 分支中的每次推送和拉取请求时构建插件
- 使用 JDK 21 进行编译
- 创建可以从 Actions 选项卡下载的工件