
# ChunkAnalyzer
**ChunkAnalyzer** 是一个适用于运行 **Spigot/Paper 1.16.x - 1.21.1** 的 Minecraft 服务器的轻量级且高效的插件。它赋予服务器管理员监控和优化服务器性能的能力,通过分析已加载区块中的潜在滞后源,例如实体数量过多、红石装置或资源密集型方块。ChunkAnalyzer 具有用户友好的 GUI、可配置的设置和多语言支持,是维护流畅且无滞后的服务器体验的必备工具。
## ✨ 特点
- ✅ **区块监控**: 跟踪已加载区块中的实体、玩家、瓦片实体、盔甲架、红石组件、漏斗等等。
- 🚨 **滞后机器检测**: 识别存在过多实体(>500)、盔甲架(>50)、红石方块(>100)或漏斗(>20)的麻烦区块。
- 📊 **GUI 菜单**: 以加载得分显示区块数据,提供世界过滤器(主世界、下界、末地),并可点击传送至区块进行检查。
- 🌍 **多语言支持**: 包含英语 (`en`) 和俄语 (`ru`) 翻译,可通过 `config.yml` 自定义。
- 🔎 **深度分析选项**: 扫描红石、漏斗、可更新方块和光源以获取详细的性能洞察(可切换)。
- 💾 **数据缓存**: 将区块数据保存在 `cache.yml` 中,以便快速访问并减少服务器负载。
- 🔄 **后台扫描**: 每秒扫描 5 个批次的区块,每个区块冷却时间为 30 秒,以最大程度地减少性能影响。
- 📡 **事件跟踪**: 监控实体生成、消灭、传送以及区块加载/卸载事件,以获得实时准确性。
- ⚙️ **可配置**: 在 `config.yml` 中调整扫描行为、语言和显示选项。
## 📜 指令
| 指令 | 描述 | 权限 |
|--------------|---------------------------------------|------------------------|
| `/ca menu` | 打开区块分析 GUI。 | `chunkanalyzer.menu` |
## 🔍 示例用法
- **打开 GUI**: 使用 `/ca menu` 查看区块列表,按加载得分进行颜色编码(绿色表示低,黄色/橙色/红色表示中/高,岩浆色表示滞后机器)。
- **按世界过滤**: 点击主世界、下界或末地的按钮以专注于特定世界。
- **检查详情**: 悬停在区块项目上以查看其实体数量、玩家数量、瓦片实体以及(如果启用)红石/漏斗详情。
- **传送**: 点击区块以传送至其中心(安全最高的 Y 坐标)。 示例消息:*传送至区块 [12, -34]*。
- **识别滞后**: 被标记为滞后机器的区块会显示警告: *警告:可能存在滞后机器在 [12, -34]*。
## ⚙️ 配置
插件将会在 `plugins/ChunkAnalyzer` 目录下生成一个 `config.yml` 文件,其中包含以下设置:
```yaml
show-green-chunks: false
deep-analyze: true
language: en
messages:
en:
player_only: "This command is for players only!"
usage: "Usage: /ca menu"
teleport: "Teleported to chunk [%s, %s]"
lag_machine_warning: "Warning: Possible lag machine at [%s, %s]"
menu_title: "Chunk Analyzer - %d"
world_overworld: "Overworld"
world_nether: "Nether"
world_the_end: "The End"
button_previous: "Previous page"
button_next: "Next page"
button_current_world: "Current world"
chunk_info: "Chunk [%s, %s]"
world: "World: %s"
coordinates: "Coordinates: %s, %s"
entities: "Entities: %s"
players: "Players: %s"
tile_entities: "Tile Entities: %s"
armor_stands: "Armor Stands: %s"
redstone_blocks: "Redstone blocks: %s"
hoppers: "Hoppers: %s"
updatable_blocks: "Updatable blocks: %s"
light_sources: "Light sources: %s"
load_score: "Load score: %s"
click_to_teleport: "Click to teleport"
ru:
player_only: "Эта команда только для игроков!"
usage: "Использование: /ca menu"
teleport: "Телепортирован в чанк [%s, %s]"
lag_machine_warning: "Предупреждение: Возможная лаг-машина в [%s, %s]"
menu_title: "Анализатор чанков - %d"
world_overworld: "Верхний мир"
world_nether: "Ад"
world_the_end: "Энд"
button_previous: "Предыдущая страница"
button_next: "Следующая страница"
button_current_world: "Текущий мир"
chunk_info: "Чанк [%s, %s]"
world: "Мир: %s"
coordinates: "Координаты: %s, %s"
entities: "Сущности: %s"
players: "Игроки: %s"
tile_entities: "Tile Entities: %s"
armor_stands: "Armor Stands: %s"
redstone_blocks: "Редстоун блоки: %s"
hoppers: "Воронки: %s"
updatable_blocks: "Обновляемые блоки: %s"
light_sources: "Источники света: %s"
load_score: "Оценка нагрузки: %s"
click_to_teleport: "Нажмите для телепортации"
```
### 关键设置
- **show-green-chunks**: 设置为 `true` 以显示低影响区块(得分 ≤ 50)。默认:`false` 以专注于问题区块。
- **deep-analyze**: 启用 (`true`) 以扫描红石、漏斗、可更新方块和光源以获取详细的性能洞察。禁用以提高大型服务器的性能。
- **language**: 选择 `en` (英语)、`ru` (俄语) 或在 `messages` 下添加自定义语言。
## 📥 安装
1. 下载 ChunkAnalyzer `.jar` 文件,来自 [SpigotMC/Modrinth,如果可用]。
2. 将 `.jar` 文件放入服务器的 `plugins` 文件夹中。
3. 重新启动服务器或使用插件管理器加载插件。
4. 编辑 `plugins/ChunkAnalyzer` 中的 `config.yml` 以自定义设置。
5. 将 `chunkanalyzer.menu` 权限授予管理员(例如,使用 LuckPerms)。
## 🛠️ 工作原理
- **后台扫描器**: 每秒扫描 5 个区块,并以 30 秒的区块冷却时间来避免滞后。
- **加载得分**:
- 玩家:每个 20 分
- 非玩家实体:每个 1 分
- 瓦片实体:每个 10 分
- (启用 `deep-analyze` 时):红石方块:3 分,漏斗:5 分,可更新方块:2 分,光源:1 分
- **滞后检测**: 如果实体、盔甲架、红石或漏斗超过阈值,则将区块标记为滞后机器。
- **GUI**: 按分数排序显示区块,并使用分页和世界过滤器进行颜色编码(绿色/黄色/橙色/红色/岩浆色)。
- **缓存**: 将数据保存到 `cache.yml` 中以实现持久性。
## 💡 管理员技巧
- 在实体数量成千上万的服务器上禁用 `deep-analyze` 以降低 CPU 使用率。
- 在 GUI 中优先处理岩浆区块,因为它们表示严重的滞后风险。
- 使用世界过滤器来专注于主世界等高流量区域。
- 在高峰玩家时段期间检查 GUI 以尽早发现滞后源。
## 🌐 添加语言
要添加新的语言(例如,西班牙语):
1. 在 `config.yml` 中,添加一个 `messages.es` 部分。
2. 复制 `en` 或 `ru` 消息并进行翻译。
3. 设置 `language: es`。
示例:
```yaml
messages:
es:
player_only: "¡Este comando es solo para jugadores!"
usage: "Uso: /ca menu"
teleport: "Teletransportado al chunk [%s, %s]"
# ... 其他翻译
```
## 🐞 支持和问题
如果您有任何问题、错误报告或功能请求,请联系:**mr_catcraft** 在 Discord 上。请提供:
- 服务器版本(例如,Paper 1.20.4)
- 插件版本
- 问题描述
- 从 `logs/latest.log` 中的相关日志
## ⚙️ 技术说明
- **依赖项**: 无。适用于 Spigot/Paper 1.16.x - 1.21.1。
- **性能**: 使用 `ConcurrentHashMap` 和 `ConcurrentLinkedQueue` 实现线程安全。分批扫描和冷却时间最大限度地减少了影响。
- **事件**: 监听实体生成/消灭、传送以及区块加载/卸载。
- **存储**: 区块数据被缓存到 `cache.yml` 中,以实现持久性。
## 📄 许可证
ChunkAnalyzer 遵循 [MIT 许可证]。 详情请参阅 `LICENSE` 文件。