服务器被人炸了怎么办?这个插件能记录方块变化,还能一键回滚
Minecraft 服务器管理员最怕遇到的事情之一,就是玩家恶意破坏,也就是常说的 griefing。建筑被炸毁、箱子被搬空、地面被点燃,甚至整片区域都被 TNT 夷为平地。如果服务器没有日志和恢复工具,管理员往往只能依靠备份,或者手动一点点重建。
CoreProtect 正是为此设计的服务器日志与反破坏插件。它会记录方块变化、容器操作、物品移动以及玩家行为,并提供查询、检查、回滚和恢复功能。项目从 2012 年初开始持续开发,采用 Artistic-2.0 协议,GitHub 仓库目前显示有 963 个 Star。官方 README 当前列出的支持范围包括 MC 1.14 至 26.2,同时保留 1.8 至 1.12 的旧版构建。
项目 README 还引用 bStats,将 CoreProtect 列为第一名反破坏插件。需要注意的是,这类排名只代表公开统计口径,不等于所有服务器的完整普查,但足以说明它在 Bukkit 系服务器中的普及程度。
简单来说,CoreProtect 做的事情就是:记录服务器发生过什么,告诉管理员是谁做的,并在需要时把世界恢复到指定时间之前的状态。
记录了什么
CoreProtect 的记录范围很广,官方文档把它分成方块与世界变化、容器与物品、实体和玩家活动等多个类别。
方块层面包括玩家放置和破坏方块、支撑被移除后附着方块自然掉落、沙子和砂砾下落、活塞移动方块、水和岩浆流动、火焰点燃与熄灭,以及 TNT、苦力怕、恶魂等实体造成的爆炸。
末影人搬运方块、树叶凋谢、树木生长、蘑菇和藤蔓生长、紫水晶与竹子生长、下界传送门生成、玩家踩坏农作物、海龟蛋被踩坏、雪傀儡造雪、水流形成黑曜石和圆石、龙蛋传送,也都在记录范围内。种植树苗的玩家还可以被追溯到后续树木生长记录中。
物品方面,CoreProtect 会记录箱子、发射器、投掷器、漏斗以及其他受支持容器中的取放操作,也会记录玩家丢弃、投掷、拾取、存入和取出物品的行为。
漏斗、发射器和投掷器之间的物品传输同样可以进入日志。追查自动化农场、分类机或仓库物品流向时,这类记录尤其有用。玩家物品栏中的物品变化、物品损坏、合成、村民交易、讲台书籍交互、雕纹书架、装饰罐、书架和捆绑袋操作,也属于可查询内容。
实体和玩家行为同样不会被忽略。插件可以记录实体死亡及死亡原因、玩家击杀动物和怪物、盔甲架与末地水晶的放置和破坏、村民被雷击杀、鸡蛋、雪球、药水、末影珍珠、三叉戟和风弹的投掷。
玩家使用门、按钮、拉杆、容器、唱片机等方块的行为,告示牌文字、颜色、发光和打蜡,聊天消息、命令、登录、登出、死亡以及用户名变更,也可以被记录。部分服务端还支持记录头颅皮肤纹理和自定义头颅纹理。
CoreProtect 还支持记录 WorldEdit 和受支持版本的 FastAsyncWorldEdit(FAWE)操作。管理员执行一次 //set stone,可能会在几秒内修改数万个方块。如果没有相关日志,误把整座城市铺成石头之后,通常只能恢复备份。使用 CoreProtect 后,可以结合时间、玩家和 WorldEdit 选区进行查询或回滚,处理这类批量误操作会方便很多。
查询和检查工具
记录数据只是第一步,能不能快速找到问题才是关键。
CoreProtect 提供了交互式检查模式。输入 /co inspect 或 /co i 后,左键点击方块可以查看是谁放置了它;右键点击方块,可以查看附近曾经被移除的方块;在放置方块的同时右键,还能查询这个位置之前是什么。右键点击门、按钮、拉杆、容器等可交互方块,则可以查看最后使用它的玩家。
比如某个玩家的家刚被炸毁,管理员可以开启检查模式,走到爆炸坑附近点击残留方块,查看相关玩家、时间和爆炸记录。继续检查周围区域,还能确认被移除的原始方块,判断这次破坏究竟是 TNT、苦力怕,还是玩家直接挖掉的。
除了检查模式,CoreProtect 还提供命令行查询。/co lookup 可以按照时间、玩家、方块或实体、行为类型、半径、世界以及 WorldEdit 选区等条件组合过滤。
例如,管理员站在出生点附近,可以查询过去一天内某名玩家在半径 100 格内的方块操作:
/co lookup u:Player123 t:1d a:block r:100
如果要查询 WorldEdit 选区内的记录,可以使用:
/co lookup u:Player123 t:1d a:block r:#worldedit
查询结果支持分页,也可以通过点击聊天中的分页按钮切换内容。官方文档还说明,/co lookup 默认执行全局查询,而回滚命令在没有指定半径时通常会使用 10 格范围。
回滚和恢复
CoreProtect 最重要的功能是回滚和恢复。
/co rollback 可以撤销指定时间、玩家、区域或行为类型产生的记录。比如只回滚 Player123 在过去一小时内破坏的方块,可以使用:
/co rollback u:Player123 t:1h a:-block r:100
如果要在整个世界中处理,则可以把范围改成:
/co rollback u:Player123 t:1h a:-block r:#global
这里有一个容易误解的地方:a:kill 只表示实体或动物被击杀,并不代表玩家进行的全部破坏行为。建筑被炸毁或方块被挖掉,通常应该使用 a:block、a:-block 等过滤条件;库存变化则应使用 a:inventory。
回滚不仅可以处理方块,也支持库存和容器记录。玩家从箱子里拿走的物品、物品栏中新增或减少的物品,都可以按照相应日志进行恢复。在日志完整、操作范围明确的情况下,被破坏方块可以恢复,因破坏行为获得的物品也能从相关库存或容器记录中撤销。
不过,库存回滚比方块回滚更容易误伤正常交易。服务器管理员最好先用 /co lookup 确认时间、玩家和物品流向,再单独执行 a:inventory 或容器相关回滚。
/co restore 是回滚的反向操作,可以重新执行之前被回滚的记录。如果管理员误把范围设得太大,或者发现某些正常建筑也被恢复掉了,就可以使用 restore 尝试还原之前的操作。官方文档也提供了 /co undo 这个别名,用于执行相反方向的恢复操作。
CoreProtect 还支持预览回滚。只需要在命令末尾加入 #preview:
/co rollback u:Player123 t:1h a:-block r:100 #preview
预览会把预计变化显示给管理员,但不会立即修改世界数据。确认范围和结果都没有问题后,再去掉 #preview 执行正式回滚。这个步骤很重要,特别是处理大型爆炸或 WorldEdit 误操作时。
数据库和性能
日志插件会持续写入数据,因此性能和数据库设计直接影响服务器体验。如果记录系统本身让主线程卡顿,管理员很快就会发现,追查破坏行为的代价比破坏事件本身还高。
CoreProtect 使用多线程处理日志和查询。主线程负责捕获玩家放置方块、破坏方块或移动物品等事件,后续写入和消费任务交给后台队列处理。官方 README 也明确把多线程处理和低延迟回滚列为核心特性,不过实际效果仍取决于日志量、回滚范围、硬件和数据库后端。
数据库方面,当前版本默认使用内嵌 DuckDB 的列式存储,同时支持 ClickHouse、SQLite 和 MySQL。对按时间、玩家、方块类型等字段进行筛选的分析型查询来说,列式数据库比较适合;如果服务器已经有稳定的 MySQL 或 ClickHouse 环境,也可以根据部署规模选择对应后端。
数据库并不会无限期保持小体积。/co purge 可以按照时间、世界和方块类型清理旧日志。例如:
/co purge t:90d
这会删除早于 90 天的数据,只保留最近 90 天的记录。也可以只清理某个世界,或者只清理指定的方块类型。官方文档提醒,清理操作会永久删除对应日志,执行前应确认保留周期是否满足服务器的纠纷处理和审计需求。
多平台支持
CoreProtect 并不绑定某一种 Bukkit 系服务端。官方 README 列出的兼容平台包括 Bukkit、Spigot、Paper、Folia 和 MultiPaper 等,同时还提供 Fabric 与 Hytale 相关入口。
不过,多平台支持不代表所有服务端都能共用同一个文件。安装前仍然要根据 Minecraft 版本、服务端类型和 CoreProtect 构建版本进行匹配。旧版本服务器也不能直接套用面向新版本的构建,否则可能出现启动失败、事件无法记录或回滚数据异常。
命令一览
CoreProtect 的命令前缀是 /co,也就是 /coreprotect 的简写。
/co help 查看帮助
/co inspect 或 /co i 开关检查模式
/co lookup 或 /co l 查询日志
/co rollback 或 /co rb 执行回滚
/co restore 或 /co rs 执行恢复
/co purge 清理旧日志
/co reload 重载配置
/co status 查看插件状态与版本
/co consumer 暂停或恢复后台队列处理
/co migrate-db 迁移数据库后端
参数采用 key:value 形式。常见参数包括:
u:<user> 玩家名
t:<time> 时间范围
a:<action> 行为类型
r:<radius> 半径、世界或 WorldEdit 选区
i:<include> 包含指定方块、物品或实体
e:<exclude> 排除指定方块、物品、实体或玩家
时间可以写成 30m、2h、1d,也支持组合时间和时间区间。行为类型包括 block、container、inventory、item、kill、chat、command、session、sign 和 username 等。
例如:
/co lookup u:Player123 t:1d a:block r:#worldedit
表示查询 Player123 在过去一天内、当前 WorldEdit 选区中的方块操作。
命令末尾还可以加入额外标签,例如 #preview 用于预览回滚,#count 用于统计查询结果数量,#verbose 显示更详细的处理信息,#silent 减少回滚过程中的提示。
和竞品的对比
CoreProtect 经常被拿来和 Prism、Hawkeye 等日志插件比较。
Prism 属于较早一代的服务器日志工具,功能同样覆盖查询和回滚。社区中常见的评价是 CoreProtect 使用起来更快、更简单,但这并不是统一硬件、统一数据量下的基准测试。实际差异还会受到数据库类型、日志规模、服务器版本和查询范围影响。
CoreProtect 目前默认使用 DuckDB,也支持 ClickHouse、SQLite 和 MySQL,并持续跟进 Paper、Folia、MultiPaper 以及新 Minecraft 版本。因此,拿不同数据库配置下的 Prism 和 CoreProtect 直接比较,结论并不一定适用于所有服务器。
Hawkeye,也被称为 Hawk,是另一类定位相近的老牌日志工具,但它在新版本适配和当前维护活跃度方面已经不如 CoreProtect。对于新建服务器来说,CoreProtect 的优势主要在于文档、版本支持、WorldEdit/FAWE 日志、库存回滚和持续更新,而不是单纯依靠历史知名度。
CoreProtect 不是防火墙,也不会阻止玩家使用外挂或破坏服务器。它解决的是另一个问题:事情发生之后,管理员能不能查清楚、找出责任人,并尽可能恢复现场。
如果你运营的是多人公共服务器,日志、定期备份和权限管理最好同时配置。CoreProtect 可以处理许多建筑破坏、物品盗取和误操作,但它依赖持续运行的日志数据库,已经被清理的数据、未被插件捕获的操作,以及某些第三方插件造成的变化,都不能保证完全恢复。
就目前的功能范围和维护状态来看,CoreProtect 仍然是 Minecraft Bukkit 系服务器中值得优先考虑的日志与回滚工具。
项目地址:PlayPro/CoreProtect
评论互动区
理性讨论,友好交流,让观点更有价值
登录后即可参与讨论、点赞和回复,打造更有质量的社区互动。
立即登录参与互动正在加载评论...