详细的说明请见 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>,...]
[--server-jar <serverJarPath>]
[--min-inhabited <ticks>]
[--help]
[--cool-down <minutes>]
[--threads-num <number>]
[--verbose]
[--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>,...]
[--server-jar <serverJarPath>]
[--min-inhabited <ticks>]
[--help]
[--cool-down <minutes>]
[--threads-num <number>]
[--verbose]
[--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-例子