BuildContest

BuildContest插件会自动创建Minecraft子服务器,使用Docker,并将玩家转移到各自的比赛服务器。

资源图片
# BuildContest 插件 BuildContest 是一个 Velocity 插件,它简化了为建筑比赛中的每个团队设置专用服务器的过程。该插件使用 Docker Compose 来启动子服务器,并自动将玩家转移到相应的子服务器进行比赛。团队配置和服务器信息持久存储。 ## 特性 - **自动子服务器创建**: 使用 HTTP API 调用和 Docker Compose 创建团队服务器,并在 Velocity 中注册它们。 - **自动玩家转移**: 当玩家加入主服务器时,他们将自动转移到相应的子服务器。 - **权限控制**: 使用 Bearer Token 验证 HTTP 请求。 - **防止重复参与**: 在添加团队时,如果玩家已存在于另一个团队中,则他们无法加入其他团队。 ## 安装步骤 1. **准备环境** - 安装 [Velocity](https://velocitypowered.com/) 代理服务器。 - 确保 Docker 和 Docker Compose 已安装且配置正确。 2. **创建 Minecraft 比赛服务器镜像 (子服务器)** - 建议使用 [Little Wrench](https://www.minebbs.com/resources/1-20-4.8372/) 作为服务器基础。 - 将端口设置为 `25565`,并确保其可以通过代理正确访问,包括适当的 `forwarding-mode` 设置。 - 创建一个 Dockerfile 来构建服务器镜像。 - 构建镜像,例如 `docker build -t minecraft-contest:latest .` - 创建一个 `docker-compose.yml` 文件来启动子服务器。 3. **下载插件** - 跳转到 [版本页面](https://github.com/Hanamizu2002/BuildContest/releases) 4. **配置插件** - 将插件 jar 文件放在 Velocity 的 `plugins/` 目录下。 - 启动 Velocity 服务器一次以生成配置文件,然后停止服务器以调整设置。 5. **配置文件** - 修改 `plugins/BuilderContest/` 目录下的 `config.yml` 文件来设置端口和其他设置。 - 将 `docker-compose-default.yml` 放在插件目录下作为启动子服务器的模板。 6. **启动服务器** - 启动服务器,并从生成的 `config.yml` 文件中检索 `bearer-token`。 ## 配置文件描述 **config.yml** ```yaml ktor: http-port: 8080 # HTTP 服务端口。 port-start: 30000 # 子服务器的起始端口。 bearer-token: # Bearer Token;首次使用时,留空此字段。 allow-host: "*" # 允许的主机地址。 ``` **docker-compose-default.yml 示例** - 使用 `#SERVER_NAME_PLACEHOLDER` 作为 Docker 容器名称的占位符。 - 使用 `#SERVER_PORT_PLACEHOLDER` 作为端口的占位符。 ```yaml version: '3.8' services: minecraft_server: image: minecraft-contest:latest container_name: "#SERVER_NAME_PLACEHOLDER" ports: - #SERVER_PORT_PLACEHOLDER:25565 volumes: # 将本地世界目录挂载到容器中指定的路径 - ./worlds/#SERVER_NAME_PLACEHOLDER/world:/app/world environment: EULA: "TRUE" restart: unless-stopped ``` ## 使用说明 ### HTTP API - 插件启动后,将在端口 `8080` 上启动一个 HTTP 服务(默认)。 - 主要 API 端点: - **添加团队**: `POST /team/add`,需要 Bearer Token 身份验证,`teamId`、`teamName` 和 `members` 作为有效负载字段。 ### 示例请求 ```bash curl --location --request POST 'http://localhost:8080/team/add' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer sSCj4piDoEfV2zIo_C8lD7S4ul0YlVOyBr2BkKpdsTI (从 config.yml 中检索此值)' \ --data-raw '{ "teamId": "team_1", "teamName": "Team 1", "members": ["Hanamizu_", "user1"] }' ```