世界存档过于庞大是长期以来困扰许多服主的问题,而Thanos将通过删除无用的废弃区块解决这一问题!
概述
Thanos是一个PHP库,可以自动检测并删除Minecraft世界中未使用的废弃区块。这可以将世界的文件大小减少50%以上。
除游戏已有的工具外,此库不需要使用额外的插件。玩家在区块活跃的时间值用于确定是否使用区块。这可以防止使用过的区块有时被意外删除,并使该库与大多数模组和插件兼容。
目前,仅支持 Minecraft Anvil 世界格式(Minecraft Java Edition)。
安装(linux)
composer require aternos/thanos
用法
命令行工具
此库包含一个简单的 cli 工具。
./thanos.php /path/to/world/directory [/path/to/output/directory]
世界对象
世界对象表示 Minecraft 世界存档及其所有附属文件。它允许对所有区块进行迭代,并提供一个将所有非区域文件复制到输出目录的函数。
$world = new Aternos\Thanos\World\AnvilWorld("/path/to/world/directory", "/path/to/output/directory");
$world->copyOtherFiles(); //copy non-region files
foreach ($world as $chunk){
echo $chunk->getInhabitedTime() . "\n"; //output inhabited time for each chunk
}
循环访问区域文件的所有区块后,它将自动保存到输出目录中。
方法
getPath() : string获取世界目录路径
getDestination() : string获取世界输出目录
getOtherFiles() : string[]获取所有文件,这些文件不是区域目录
copyOtherFiles() : void将所有不是区域目录的文件复制到输出目录
static isWorld(string $path) : bool检查是否为世界目录$path
区块
区块对象表示 Minecraft 世界区块。由于性能原因,区块数据不会完全解析,而仅用于查找有助于确定是否使用区块的元数据。
if($chunk->getInhabitedTime() > 0){
$chunk->save();
}
如果区块未标记为已保存,则不会将其写入输出目录。
方法
getOffset() : int获取区域文件中区块数据的偏移量
getLength() : int获取原始区块数据的长度
getData() : string获取原始区块数据
getInhabitedTime() : int从区块数据中获取居住时间价值。如果无法读取 InhabitedTime,则返回 -1。
getLastUpdate() : int从区区块数据中获取上次更新值。如果无法读取 LastUpdate,则返回 -1。
setTimestamp(int $timestamp) : void设置上次修改时间
getTimestamp() : int获取上次修改时间
save() : void将区区块标记为已保存
isSaved() : bool检查此区区块是否标记为已保存
Thanos会自动在一个世界中找到未使用的区块,并将它们简化为原子。
$thanos = new Aternos\Thanos\Thanos();
$thanos->setMaxInhabitedTime(0);
$world = new Aternos\Thanos\World\AnvilWorld("/path/to/world/directory", "/path/to/output/directory");
$removedChunks = $thanos->snap($world);
echo "Removed $removedChunks chunks\n";
方法
setMinInhabitedTime(int $minInhabitedTime) : void设置最小居住时间,以便不删除区块
getMinInhabitedTime() : int获取最短的居住时间
snap(WorldInterface $world) : int删除未使用的区块,返回已删除的区块数
概述
Thanos是一个PHP库,可以自动检测并删除Minecraft世界中未使用的废弃区块。这可以将世界的文件大小减少50%以上。
除游戏已有的工具外,此库不需要使用额外的插件。玩家在区块活跃的时间值用于确定是否使用区块。这可以防止使用过的区块有时被意外删除,并使该库与大多数模组和插件兼容。
目前,仅支持 Minecraft Anvil 世界格式(Minecraft Java Edition)。
安装(linux)
composer require aternos/thanos
用法
命令行工具
此库包含一个简单的 cli 工具。
./thanos.php /path/to/world/directory [/path/to/output/directory]
世界对象
世界对象表示 Minecraft 世界存档及其所有附属文件。它允许对所有区块进行迭代,并提供一个将所有非区域文件复制到输出目录的函数。
$world = new Aternos\Thanos\World\AnvilWorld("/path/to/world/directory", "/path/to/output/directory");
$world->copyOtherFiles(); //copy non-region files
foreach ($world as $chunk){
echo $chunk->getInhabitedTime() . "\n"; //output inhabited time for each chunk
}
循环访问区域文件的所有区块后,它将自动保存到输出目录中。
方法
getPath() : string获取世界目录路径
getDestination() : string获取世界输出目录
getOtherFiles() : string[]获取所有文件,这些文件不是区域目录
copyOtherFiles() : void将所有不是区域目录的文件复制到输出目录
static isWorld(string $path) : bool检查是否为世界目录$path
区块
区块对象表示 Minecraft 世界区块。由于性能原因,区块数据不会完全解析,而仅用于查找有助于确定是否使用区块的元数据。
if($chunk->getInhabitedTime() > 0){
$chunk->save();
}
如果区块未标记为已保存,则不会将其写入输出目录。
方法
getOffset() : int获取区域文件中区块数据的偏移量
getLength() : int获取原始区块数据的长度
getData() : string获取原始区块数据
getInhabitedTime() : int从区块数据中获取居住时间价值。如果无法读取 InhabitedTime,则返回 -1。
getLastUpdate() : int从区区块数据中获取上次更新值。如果无法读取 LastUpdate,则返回 -1。
setTimestamp(int $timestamp) : void设置上次修改时间
getTimestamp() : int获取上次修改时间
save() : void将区区块标记为已保存
isSaved() : bool检查此区区块是否标记为已保存
Thanos会自动在一个世界中找到未使用的区块,并将它们简化为原子。
$thanos = new Aternos\Thanos\Thanos();
$thanos->setMaxInhabitedTime(0);
$world = new Aternos\Thanos\World\AnvilWorld("/path/to/world/directory", "/path/to/output/directory");
$removedChunks = $thanos->snap($world);
echo "Removed $removedChunks chunks\n";
方法
setMinInhabitedTime(int $minInhabitedTime) : void设置最小居住时间,以便不删除区块
getMinInhabitedTime() : int获取最短的居住时间
snap(WorldInterface $world) : int删除未使用的区块,返回已删除的区块数