H-RAMWatch

H-RAMWatch是一个轻量级的PaperMC插件,它通过将不活跃(AFK)玩家踢出服务器来保护服务器性能,从而减少高资源占用,并提供实时仪表盘和简单的管理员控制。

资源图片
# H-RAMWatch ![API](https://img.shields.io/badge/API-Paper_1.21-red.svg) ![Java](https://img.shields.io/badge/Java-17+-blue.svg) H-RAMWatch 是一个轻量级但功能强大的 PaperMC 服务器管理插件,专为保护资源受限硬件上的服务器性能而设计。其核心功能是作为“智能资源限制器”来识别并温柔地移除那些同时空闲(AFK)且位于消耗大量服务器资源区域的玩家。 该插件的核心理念是只针对那些**空闲(AFK)**且位于**资源密集型区域**的玩家。活跃玩家将不受影响。 ## 功能 - **智能 AFK 限制器:** 自动将那些 AFK 且加载了过多的区块或靠近高实体浓度区域的玩家踢出服务器。 - **游戏内资源仪表盘:** 一个公共命令 (`/hrw dashboard`),显示服务器、世界和玩家的实时性能指标。 - **实时管理控制:** - 使用 `/hrw toggle` 随时启用或禁用 AFK 踢出功能。 - 在不重启服务器的情况下使用 `/hrw reload` 重新加载配置文件。 - **完全可配置:** 配置文件 `config.yml` 中的几乎所有方面都可以更改。 - **基于权限:** 细粒度的权限允许你控制谁可以使用管理命令以及谁应该免于被踢出。 - **轻量级:** 该插件被设计为具有最小的性能影响,异步运行其检查并为安全起见在主线程上安排 API 调用。 ## 工作原理:技术分解 该插件的逻辑周期是一个多阶段的过程,旨在确保安全和效率。这可以确保插件本身不会导致服务器卡顿。 1. **异步 AFK 检测:** 该插件运行一个低影响的异步任务来监控玩家活动(移动、聊天等)。如果玩家的非活动时间超过配置时间,则将其标记为 AFK。此检查发生在主服务器线程之外。 2. **同步资源扫描:** 一旦玩家被标记为 AFK,就会在主服务器线程上安排一个新的任务以安全地查询游戏世界。它会测量两个关键的服务器负载代理: * **已加载的区块:** 计算玩家客户端视野范围内的区块数量。这是内存(RAM)和 CPU 滴答成本的强劲指标。 * **附近的实体:** 计算配置半径内的实体数量。这是直接的 AI 处理负载指标。 3. **决策与行动:** 将扫描结果与配置阈值进行比较。如果玩家超过任何一个限制,插件将启动配置中定义的警告或踢出过程。所有后续操作,例如发送消息或踢出玩家,也都在主线程上安全地处理。 ## 安装 1. 下载最新的发布 JAR 文件。 2. 将 `H-RAMWatch-X.X.X.jar` 文件放入你的服务器的 `/plugins` 目录。 3. 启动你的服务器以生成 `plugins/H-RAMWatch/config.yml` 文件。 4. 停止服务器,编辑 `config.yml` 到你喜欢的方式,然后重新启动它。 ## 命令 & 权限 | 命令 | 权限 | 默认 | 描述 | | ------------------------------------- | -------------------------- | ---------- | ----------------------------------------------------------- | | `/hrw dashboard [server\|worlds\|players]` | `hramwatch.dashboard` | `true` | 显示资源使用仪表盘。 | | `/hrw toggle` | `hramwatch.toggle` | `op` | 实时切换 AFK 踢出功能。 | | `/hrw reload` | `hramwatch.reload` | `op` | 重新加载插件的配置文件。 | | *(无命令)* | `hramwatch.bypass` | `op` | 授予免受 AFK 限制器踢出的免疫力。 | ## 配置文件 (`config.yml`) 默认配置文件经过精心平衡,但你可以自定义它以适应你的服务器。 ```yml # --- H-RAMWatch 配置文件 --- # 插件应该多久(以秒为单位)检查玩家的高资源使用情况。 check-interval-seconds: 30 afk-kick: # 服务器启动时是否启用 AFK 踢出功能? enabled-by-default: true # 玩家必须非活动多长时间(分钟)才被认为是 AFK。 afk-time-minutes: 10 # 如果 AFK 玩家加载的区块数量超过此数量,他们将成为踢出候选者。 chunk-threshold: 500 # 如果 AFK 玩家在其检查半径内有超过此数量的实体,他们将成为踢出候选者。 entity-threshold: 250 # 检查实体所使用的半径(以区块为单位)。 entity-check-radius: 64 # 设置为 true 以在踢出玩家之前发送警告消息。 warning-enabled: true # 如果 warning-enabled 为 true,则向玩家发送的消息。 warning-message: "&c[警告] 你在资源密集型区域 AFK,可能会被踢出。" # 踢出玩家时显示的提示信息。 kick-message: "&c你因在资源密集型区域 AFK 而被踢出。\n&e这样做是为了让服务器对每个人都运行得更流畅!" ``` ## 从源代码构建 要自己构建插件,你需要: - Java 17 (或更新) - Apache Maven 克隆存储库并在项目根目录中运行以下命令: ```bash mvn clean package ``` 编译好的 JAR 文件将位于 `target/` 目录中。