Hibernate Fabric

Hibernate Fabric

让你的Minecraft Fabric服务器在空闲时休眠,大幅降低CPU占用,且不遗漏任何方块!

管理

一个 Minecraft 草方块位于冰块内,代表 Minecraft 服务器正在休眠。

Hibernate Fabric

让你的 Minecraft Fabric 服务器在空闲时休眠,大幅降低 CPU 占用,同时不丢失任何一个方块!

关于本项目

Hibernate Fabric 是一个轻量级工具,当没有玩家在线时会自动让你的 Minecraft Fabric 服务器进入休眠状态。通过在空闲时段降低 CPU 使用率,它有助于节省服务器资源、降低电费,并让你的服务器更加环保。这是一种简单的方式,让你在不必要的时候不浪费电力,同时保持 Minecraft 世界平稳运行。

构建所用技术

本项目使用以下技术构建:

  • ![Java][java-icon]
  • Gradle
  • ![Fabric][fabric-icon]

运行

你需要一个 Minecraft Fabric 服务器。

  1. 从本 README 顶部的任意一个位置下载 hibernate-fabric-x.x.x+mc2x.x.jar
  2. 将下载的 jar 文件复制到你的 Minecraft Fabric 服务器的 mods 文件夹中。

别忘了在 server.properties 文件中将 pause-when-empty-seconds 设置为 0,以禁用原版休眠系统。

通过兼容层支持 NeoForge

[!WARNING] 目前 NeoForge 仅通过 Sinytra Connector 获得支持,这是一个允许 Fabric 模组在 NeoForge 中加载的兼容层。

Hibernate Fabric 目前可以通过 Sinytra Connector 在 NeoForge 上使用,但此配置不受官方支持。 尽管可以运行,但兼容性取决于 Hibernate Fabric 和 Sinytra Connector 两者,其中任一项目的未来更新都可能导致其停止工作。

仅在 NeoForge/Sinytra Connector 上出现的问题通常不受支持,可能会在不进行调查的情况下被关闭。 如果你遇到问题,请先在 Fabric 上复现后再报告。

除上述说明外:

  1. 下载并将 Sinytra ConnectorLaunchPad 安装到你的 Minecraft NeoForge 服务器的 mods 文件夹中。
  2. 下载并将 Forgified Fabric API 安装到你的 Minecraft NeoForge 服务器的 mods 文件夹中。

开发入门

要在本地获取副本并运行,请按照以下简单步骤操作。

前置要求

确保你的机器上已安装以下内容:

  • Java 开发工具包 (JDK):版本 25 或更高。
  • Gradle:版本 9.5.1 或更高。
  • Minecraft:版本 26.3

构建

  1. 克隆仓库
git clone https://codeberg.org/VoxelBill/hibernate-fabric.git
  1. 进入项目目录
cd hibernate-fabric
  1. 使用 Gradle 构建项目
./gradlew clean build

你可以在 hibernate-fabric/build/libs/hibernate-fabric-x.x.x+mc2x.x.jar 找到构建好的模组。

配置

模组在首次运行时会自动在 config/hibernate-fabric.json 创建配置文件。以下是可用的设置:

基础设置

{
  "startEnabled": true,
  "ticksToSkip": 400,
  "permissionLevel": 2,
  "sleepTimeMs": 75,
  ...
设置 默认值 描述
startEnabled true 当服务器启动且没有玩家时,是否自动激活休眠
ticksToSkip 400 休眠期间应用睡眠前要处理的刻数
permissionLevel 2 使用休眠命令所需的权限等级(0=所有人,4=服主)
sleepTimeMs 75 每个刻处理周期之间的睡眠毫秒数

内存优化

  ...
  "enableMemoryOptimization": true,
  "memoryCleanupIntervalSeconds": 30,
  "memoryThresholdPercent": 80.0,
  "forceGarbageCollection": true,
  "gcIntervalSeconds": 30,
  "saveBeforeHibernation": true,
  "removeEntities": [
    "minecraft:item",
    "minecraft:firework_rocket",
    "minecraft:arrow",
    "minecraft:experience_orb"
  ],
  "droppedItemMaxAgeSeconds": 300,
  "logMemoryInfo": false,
  ...
设置 默认值 描述
enableMemoryOptimization true 在休眠期间启用内存清理
memoryCleanupIntervalSeconds 30 运行内存清理例程的频率
memoryThresholdPercent 80.0 触发清理的内存使用百分比
forceGarbageCollection true 在休眠期间强制进行 Java 垃圾回收
gcIntervalSeconds 30 垃圾回收运行之间的最短时间
saveBeforeHibernation true 在进入休眠前保存世界数据
removeEntities itemfirework_rocketarrowexperience_orb 休眠期间要移除的实体列表(忽略带有自定义名称的实体)
droppedItemMaxAgeSeconds 300 物品被移除前的存在时间(秒)(5 分钟)
logMemoryInfo false 将内存使用情况和垃圾回收器信息记录到控制台

CPU 优化

  ...
  "aggressiveCpuSaving": true,
  "minSleepInterval": 1500,
  "highLoadSleepMultiplier": 1.5,
  "yieldInterval": 8,
  ...
设置 默认值 描述
aggressiveCpuSaving true 启用更激进的 CPU 节省措施
minSleepInterval 1500 睡眠周期之间的最短时间(毫秒)
highLoadSleepMultiplier 1.5 系统负载高时睡眠时间的倍数
yieldInterval 8 将 CPU 让给其他线程的频率(每 N 刻)

服务器唤醒时的游戏规则值

  ...
  "awakeGameRules": {
    "advance_time": true,
    "advance_weather": true,
    "random_tick_speed": 3,
    "spawn_mobs": true,
    "fire_spread_radius_around_player": 128
  },
  ...
设置 默认值 描述
advance_time true 退出休眠时设置游戏规则 advance_time 的值
advance_weather true 退出休眠时设置游戏规则 advance_weather 的值
random_tick_speed 3 退出休眠时设置游戏规则 random_tick_speed 的值
spawn_mobs true 退出休眠时设置游戏规则 spawn_mobs 的值
fire_spread_radius_around_player 128 退出休眠时设置游戏规则 fire_spread_radius_around_player 的值

服务器休眠时的游戏规则值

  ...
  "hibernatingGameRules": {
    "advance_time": false,
    "advance_weather": false,
    "random_tick_speed": 0,
    "spawn_mobs": false,
    "fire_spread_radius_around_player": 0
  }
}
设置 默认值 描述
advance_time false 进入休眠时设置游戏规则 advance_time 的值
advance_weather false 进入休眠时设置游戏规则 advance_weather 的值
random_tick_speed 0 进入休眠时设置游戏规则 random_tick_speed 的值
spawn_mobs false 进入休眠时设置游戏规则 spawn_mobs 的值
fire_spread_radius_around_player 0 进入休眠时设置游戏规则 fire_spread_radius_around_player 的值

贡献

贡献正是让开源社区成为一个学习、启发和创造的绝佳场所的原因。你所做的任何贡献都深受感谢。 如果你没有任何编程经验,测试其他平台和配置也非常欢迎!

如果你有能让它变得更好的建议,请 fork 仓库并创建 pull request。你也可以简单地开一个带有 "enhancement" 标签的 issue。 别忘了给项目点个星!再次感谢!

  1. Fork 项目
  2. 创建你的功能分支(git checkout -b feature/AmazingFeature
  3. 提交你的更改(git commit -m 'Add some AmazingFeature'
  4. 推送到分支(git push origin feature/AmazingFeature
  5. 打开一个 Pull Request

许可证

基于 GNU 较宽松通用公共许可证 v3.0 或更高版本 (LGPL-3.0-or-later) 分发。

本项目是 Hibernateforge 的 fork,后者基于 欧盟公共许可证 v1.2 (EUPL-1.2) 分发。 重新许可已按照 EUPL 的兼容性条款(第 5 条)完成。

更多信息请参阅 LICENSE

[java-icon]: https://img.shields.io/badge/Java-D5D5D5.svg?style=for-the-badge&logo=[已省略Base64资源][fabric-icon]: https://img.shields.io/badge/Fabric-DBD0B4.svg?style=for-the-badge&logo=[已省略Base64资源]