Skip to content
Zec-EtchPublic

About

High-performance Minecraft slime chunk finder

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

Repository files navigation

Slipet

高性能 Minecraft 史莱姆区块(Slime Chunk)查找器,Rust 实现。

算法原型采用「行分片 + 列缓存 + N 行/u64 位打包」,掩码定义与 slimy 对齐:每行是一个 (2r+1) × (2r+1) 的圆盘窗口,中心对齐,可排除内圈。

特性

  • 位打包:每个 u64 打包 N 行(默认 N=3),约束 N × (2r+1) ≤ 64; N 与掩码维宽为编译期常量(const generic 特化),热路径循环全展开。
  • Residue 掩码计数:按候选 base mod N 选择掩码布局,每字一次 popcount,无需逐行逐格计数。
  • Eager 垂直填充:垂直步在「组首行」一次填整个 N 行组,其余 N-1 步跳过。
  • 多线程行分片:按 band_height 切分 z 轴,线程间无共享状态。
  • 与 slimy 判定语义一致:复刻 Java 的整数溢出语义(wrapping_*), 并支持 exclude_inner 开关(true = slimy 圆环,false = 实心圆)。

构建

需要 Rust 2021+(edition = "2021"),无外部依赖,离线即可构建:

cargo build --release

产物位于 target/release/slipet。

用法

slipet [选项]
选项 默认值 说明
--search-radius <n> 10000 搜索半径 R(半开区间,候选范围 [−R, R),每轴 2R 格)
--radius <n> 8 史莱姆掩码半径 r(掩码 (2r+1)×(2r+1))
--threads <n> 16 线程数
--eager 开 启用 eager 垂直填充
--no-eager — 关闭 eager,逐行填充
--iters <n> 1 每轮重复次数,取最快一轮
--ab 关 AB 对比 eager / non-eager 两种模式
--exclude-inner 开 slimy 圆环(排除内圈,1 < d² ≤ r²)
--filled — 实心圆(d² ≤ r²,含内圈)
--band-height <n> 自动 列缓存分片高(0 = 按预算/线程数推导)
--rows-per-word <n> 3 每个 u64 打包的行数(需满足 N × (2r+1) ≤ 64 且有编译期特化)

示例:

# 默认参数跑一轮(半径 10000、8 格史莱姆掩码、16 线程)
slipet

# 更大范围、指定线程数
slipet --search-radius 20000 --radius 8 --threads 16

# eager 与非 eager 对比
slipet --ab --iters 3

# 实心圆掩码,自定义打包行数
slipet --filled --rows-per-word 4 --radius 7

输出示例(--ab 模式会额外打印两者相对差异):

eager: radius=10000 threads=16 0.5s -> 400M 候选/s (每线程 25M/s, ~168 周期/候选 @4.2GHz)

测试

cargo test

测试覆盖:与逐格计算参考实现对拍、eager 与非 eager 一致性、多线程与单线程 一致性、exclude_inner 切换的计数差异,以及超出打包约束时的 panic 行为。

matches_slimy_oracle 以本地 slimy.exe 作为裁判进行逐候选对照(固定半径 8)。可通过 SLIMY_EXE 环境变量指定路径;找不到该可执行文件时测试自动跳过, 因此 CI 三端均可通过。

许可证

AGPLv3

About

High-performance Minecraft slime chunk finder

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages