详细的说明请见 Github 仓库 :https://github.com/Bottle-M/PotatoPeeler , 欢迎点 Star。
以下为精简介绍。
[MD] 这是一个简单的小工具,用于移除 Minecraft **Java 版**存档中的无用区块,以腾出部分硬盘空间。 * 可以看作是 Java 语言实现的 [Thanos](https://github.com/aternosorg/thanos)。 * 仅支持 [Anvil](https://minecraft.wiki/w/Anvil_file_format) 文件格式(自 Minecraft JE 1.2.1 起)。 * 较好的情况下可以把游戏存档的硬盘占用减少**超过 50%**。 * 支持用区块坐标、区块坐标范围(支持通配符)配置每个世界的**受保护区块**,阻止某些区块被移除。 ## 基本工作原理 区块存储在 [Anvil](https://minecraft.wiki/w/Anvil_file_format) 文件内,Minecraft Java 版会为每个区块存储一个字段 `InhabitedTime`,以记录玩家在这个区块内停留的累计时间刻(tick)数。 本工具通过 `InhabitedTime` 值筛选出玩家几乎没有停留的的区块,以进行移除。其既可以在本地游戏存档上使用,也可以在服务器存档上使用。 ## 使用前一定要注意 1. 如果你采用的是 Paper 端,或者是以 Paper 为上游的服务端(比如 Purpur),请**不要**在 Paper 的世界配置文件中把 `fixed-chunk-inhabited-time`([详见文档](https://docs.papermc.io/paper/reference/world-configuration#chunks_fixed_chunk_inhabited_time))这一项设置为 >= 0 的值,否则区块的 `InhabitedTime` 会被固定,从而影响工具功能。 2. 如果你的存档是通过**模组 / 外部软件**编辑得到的,而不是人为建造的,其中的区块的 `InhabitedTime` 值难以预料,这种情况下不建议使用本工具。(当然,你也可以配置受保护的区块以防止某些区块被移除。) 3. 本工具可以对区域区块 Anvil 文件进行**原地处理**,原地写入每个文件前会进行备份,若写入出错则会自动还原。尽管如此,还是建议时不时对存档做一下手动备份。 ## 使用 你可以在命令行运行此工具程序: ```bash java [jvmOptions...] -jar PotatoPeeler*.jar [--world-dirs <worldPath1>,<worldPath2>,...] [--output-dirs <outputWorldPath1>,<outputWorldPath2>,...] [--server-jar <serverJarPath>] [--min-inhabited <ticks>] [--help] [--cool-down <minutes>] [--threads-num <number>] [--max-log-size <size>] [--retain-log-files <number>] [--verbose] [--dry-run] [--skip-peeler] [additionalOptions...] ``` [/MD]
以下为参数说明截图:
关于受保护区块的配置请见原文档:
https://github.com/Bottle-M/PotatoPeeler/blob/main/README.zh_CN.md#5-受保护的区块
受保护的区块不会被移除。
[MD] ## 使用示例 ### 作为独立工具使用 ```bash # 从指定的三个世界中移除掉玩家总停留时间 <= 5 秒的区块 java -jar PotatoPeeler*.jar --min-inhabited 100 --world-dirs world,world_nether,/opt/server/world_the_end # 或者可以更简单点,只指定世界路径。默认情况下只移除玩家总停留时间 = 0 秒的区块 java -jar PotatoPeeler*.jar --world-dirs world,world_nether,/opt/server/world_the_end ``` ### 作为服务端前置程序使用 ```bash # 从指定的两个世界中移除掉玩家总停留时间 <= 5 秒的区块 # 移除完成后会在当前 JVM 中启动 purpur.jar # JVM 参数 -Xms1G -Xmx4G 会被沿用 # 其他参数 / 标志 --nogui --forceUpgrade 会被传递给 purpur.jar java -Xms1G -Xmx4G -jar PotatoPeeler*.jar --min-inhabited 100 --world-dirs world,world_nether --server-jar purpur.jar --nogui --forceUpgrade ``` [/MD]
更多示例见原文档:
https://github.com/Bottle-M/PotatoPeeler/blob/main/README.zh_CN.md#7-例子
以下为精简介绍。
[MD] 这是一个简单的小工具,用于移除 Minecraft **Java 版**存档中的无用区块,以腾出部分硬盘空间。 * 可以看作是 Java 语言实现的 [Thanos](https://github.com/aternosorg/thanos)。 * 仅支持 [Anvil](https://minecraft.wiki/w/Anvil_file_format) 文件格式(自 Minecraft JE 1.2.1 起)。 * 较好的情况下可以把游戏存档的硬盘占用减少**超过 50%**。 * 支持用区块坐标、区块坐标范围(支持通配符)配置每个世界的**受保护区块**,阻止某些区块被移除。 ## 基本工作原理 区块存储在 [Anvil](https://minecraft.wiki/w/Anvil_file_format) 文件内,Minecraft Java 版会为每个区块存储一个字段 `InhabitedTime`,以记录玩家在这个区块内停留的累计时间刻(tick)数。 本工具通过 `InhabitedTime` 值筛选出玩家几乎没有停留的的区块,以进行移除。其既可以在本地游戏存档上使用,也可以在服务器存档上使用。 ## 使用前一定要注意 1. 如果你采用的是 Paper 端,或者是以 Paper 为上游的服务端(比如 Purpur),请**不要**在 Paper 的世界配置文件中把 `fixed-chunk-inhabited-time`([详见文档](https://docs.papermc.io/paper/reference/world-configuration#chunks_fixed_chunk_inhabited_time))这一项设置为 >= 0 的值,否则区块的 `InhabitedTime` 会被固定,从而影响工具功能。 2. 如果你的存档是通过**模组 / 外部软件**编辑得到的,而不是人为建造的,其中的区块的 `InhabitedTime` 值难以预料,这种情况下不建议使用本工具。(当然,你也可以配置受保护的区块以防止某些区块被移除。) 3. 本工具可以对区域区块 Anvil 文件进行**原地处理**,原地写入每个文件前会进行备份,若写入出错则会自动还原。尽管如此,还是建议时不时对存档做一下手动备份。 ## 使用 你可以在命令行运行此工具程序: ```bash java [jvmOptions...] -jar PotatoPeeler*.jar [--world-dirs <worldPath1>,<worldPath2>,...] [--output-dirs <outputWorldPath1>,<outputWorldPath2>,...] [--server-jar <serverJarPath>] [--min-inhabited <ticks>] [--help] [--cool-down <minutes>] [--threads-num <number>] [--max-log-size <size>] [--retain-log-files <number>] [--verbose] [--dry-run] [--skip-peeler] [additionalOptions...] ``` [/MD]
以下为参数说明截图:
关于受保护区块的配置请见原文档:
https://github.com/Bottle-M/PotatoPeeler/blob/main/README.zh_CN.md#5-受保护的区块
受保护的区块不会被移除。
[MD] ## 使用示例 ### 作为独立工具使用 ```bash # 从指定的三个世界中移除掉玩家总停留时间 <= 5 秒的区块 java -jar PotatoPeeler*.jar --min-inhabited 100 --world-dirs world,world_nether,/opt/server/world_the_end # 或者可以更简单点,只指定世界路径。默认情况下只移除玩家总停留时间 = 0 秒的区块 java -jar PotatoPeeler*.jar --world-dirs world,world_nether,/opt/server/world_the_end ``` ### 作为服务端前置程序使用 ```bash # 从指定的两个世界中移除掉玩家总停留时间 <= 5 秒的区块 # 移除完成后会在当前 JVM 中启动 purpur.jar # JVM 参数 -Xms1G -Xmx4G 会被沿用 # 其他参数 / 标志 --nogui --forceUpgrade 会被传递给 purpur.jar java -Xms1G -Xmx4G -jar PotatoPeeler*.jar --min-inhabited 100 --world-dirs world,world_nether --server-jar purpur.jar --nogui --forceUpgrade ``` [/MD]
更多示例见原文档:
https://github.com/Bottle-M/PotatoPeeler/blob/main/README.zh_CN.md#7-例子