NekoAntiXray - 完整文档
版本: AllPlatform-2.1.1 Minecraft: 1.21.10+ (Paper/Folia) 作者: SakuyaAyane Ghost Java: 17+
目录
概览
NekoAntiXray 是一款专为 Minecraft Folia/Paper 服务器设计的综合反作弊插件,专门用于通过多个独立的检测层来检测和防止 X-Ray(透视)作弊行为:
检测层级
| 层级 | 系统名称 | 方式 | 描述 |
|---|---|---|---|
| 1 | AlgoAntiXray | 行为分析 | 挖矿路径追踪、矿脉聚类、模式识别 |
| 2 | XRayCheck | 陷阱式 | 假矿石生成与监控 |
| 3 | Enhanced Anti-Xray | 数据包修改 | 基于射线追踪的区块混淆 |
| 4 | DeepLearn | 深度学习 | ONNX 模型推理用于行为分析 |
附加功能
- 反种子破解 (Anti-Seed Cracker): 通过数据包修改防止世界种子被提取
- 回放系统: 使用盔甲架可视化挖矿路径回放
- 矿石统计: 玩家挖矿统计和排行榜
- 大规模挖掘检测: 对合法的大规模挖掘行为进行智能检测
- BungeeCord 集成: 跨服务器公告
架构概览
NekoAntiXray.java (主插件类)
├── AlgoAntiXray.java (行为检测)
├── XRayCheck.java (假矿石检测)
├── enhanced/ (数据包修改系统)
│ ├── EnhancedPacketListener.java
│ ├── RayTraceCallable.java
│ └── ChunkPacketBlockControllerAntiXray.java
├── antiseedcracker/ (种子保护)
├── deeplearn/ (ML 推理)
├── replay/ (挖矿回放)
└── Utils/ (工具与配置)
安装指南
要求
- 服务端: Paper 1.21.10+ 或 Folia 1.20.6+
- Java: Java 17 或更高版本
- 前置插件: ProtocolLib 5.3.0+
- 可选: ONNX Runtime (用于深度学习模块)
分步安装
-
下载插件
NekoAntiXray-AllPlatform-2.1.1.jar -
安装 ProtocolLib
- 下载地址: https://www.spigotmc.org/resources/protocollib.1997/
- 放入
plugins/文件夹
-
安装 NekoAntiXray
- 将
NekoAntiXray-AllPlatform-2.1.1.jar放入plugins/文件夹
- 将
-
启动服务器
- 启动你的服务器
- 插件将在
plugins/NekoAntiXray/中生成config.yml
-
配置 (可选)
- 编辑
plugins/NekoAntiXray/config.yml - 使用
/nax reload应用更改
- 编辑
可选: 深度学习设置
-
安装 ONNX Runtime
- 下载地址: https://onnxruntime.ai/
- 添加到服务器的类路径 (classpath) 中
-
准备模型文件
plugins/NekoAntiXray/
├── model.onnx # 训练好的模型
└── feature_stats.json # 特征归一化统计数据 -
在配置中启用
deeplearn:
enable: true
配置指南
配置文件位置
plugins/NekoAntiXray/config.yml
主要配置部分
1. 挖矿行为分析器 (AlgoAntiXray)
check:
mining-behavior-analyzer:
active: false # 总开关
# 世界特定设置
world-configs:
world: { enabled: true, y-limit: 32 }
world_nether: { enabled: true, y-limit: 128 }
world_the_end: { enabled: false, y-limit: -1 }
_default: { enabled: false, y-limit: -1 }
# 监控的目标矿石
target-blocks:
- ANCIENT_DEBRIS
- EMERALD_ORE
- DEEPSLATE_EMERALD_ORE
- DIAMOND_ORE
- DEEPSLATE_DIAMOND_ORE
# 数据收集设置
data-collection:
path-max-blocks: 500 # 每个挖矿路径的最大方块数
cleanup-after-minutes: 15 # VL=0 后的清理延迟
vein-cluster:
distance: 5 # 矿脉聚类距离
small-size: 4 # 小矿脉阈值
trigger-count: 3 # 触发分析的矿脉数量
# 模式分析阈值
pattern-analyzer:
turning-limit: 10 # 转向次数阈值
branching-limit: 6 # 分支数量阈值
y-shift-limit: 4 # Y 轴变化阈值
y-shift-min: 3 # 每次位移的最小 Y 变化
# 环境过滤器 (减少误报)
environment-filters:
apply-filters: true
cave:
air-count: 14 # 洞穴检测的空气方块数
cave-air-multiplier: 5 # 洞穴空气 (CAVE_AIR) 权重
radius: 3 # 扫描半径
reduce-vl: true # 在洞穴中减少 VL
# 违规处理系统
violation-system:
auto-decay:
enabled: true
interval-minutes: 3
amount: 1
threshold-commands:
10: 'say %player% triggered detection [VL: 10]'
30:
- 'kick %player% Abnormal mining detected'
2. 假矿石检测 (XRayCheck)
check:
xray:
enable: true # 总开关
same-chunk-detection: true # 同区块豁免
line-break:
length: 3 # 直线挖掘检测
spawn:
ore: 30 # 每次触发的生成尝试次数
time: 225 # 假矿石存活时间 (秒)
distance-limit:
ore: 12 # 假矿石之间的最小距离
player: 12 # 距离玩家的最小距离
x-change: { min: -10, max: 15 }
z-change: { min: -10, max: 15 }
y-change: { min: -10, max: 8 }
amount: { min: 5, max: 7 } # 每个位置的假矿石数量
mining-count-threshold: 3 # 触发生成的挖掘计数
vl:
add:
break-self: 1.0 # 破坏自己生成的假矿石增加的 VL
break-other: 2.0 # 破坏他人生成的假矿石增加的 VL
ban:
enable: true
threshold: 10.0 # 自动封禁 VL 阈值
command: "ban %player% %duration% X-Ray detected"
3. 增强型反矿透 (Enhanced Anti-Xray / 数据包修改)
world-settings:
default:
enabled: true
anti-xray:
ray-trace-third-person: true # 第三人称射线追踪
ray-trace-distance: 80.0 # 最大射线追踪距离
rehide-blocks: true # 方块破坏后重新隐藏
rehide-distance: 80.0 # 重新隐藏检查距离
max-ray-trace-block-count-per-chunk: 100
ray-trace-blocks: [] # 空列表 = 使用 Paper 默认值
ray-trace-threads: 4 # 线程池大小
4. 深度学习模块
deeplearn:
enable: false
debug: false
sequence_length: 50 # 每次推理的事件数
prediction_threshold: 0.5 # 作弊概率阈值
cooldown_ms: 5000 # 推理冷却时间
mining_time_window_ms: 600000 # 10 分钟
vein_detection:
max_distance: 2.0
max_time_ms: 3000
max_consecutive_skips: 15
max_vertical_distance: 3.0
violations:
enable-punishment: true
vl-multiplier: 10.0
min-vl-increase: 1
max-vl-increase: 15
valuable_materials:
- DIAMOND_ORE
- DEEPSLATE_DIAMOND_ORE
- EMERALD_ORE
# ... 更多材质
5. 反种子破解 (Anti-Seed Cracker)
antiSeedCracker:
enable: true
modifyHashedSeed:
enable: true # 随机化种子数据包
modifyEndStructures:
enable: true
worlds:
- world_the_end
endSpikes:
enable: true
mode: "swap" # "swap" (交换) 或 "move" (移动)
endCities:
enable: true # 修改洋红色玻璃
6. 其他设置
# 黑名单
blacklist:
ores:
- COAL_ORE
- IRON_ORE
worlds:
- world_test
# 封禁设置
ban-announcement:
message: "§c玩家 %player% 因作弊被封禁!"
ban-duration: 30 # 天数,-1 为永久
enable-ban-announcement: true
# 回放系统
replay:
enabled: true
record-duration: 300 # 5 分钟
# 矿石统计
ore-stats:
enabled: true
track-all-ores: true
检测系统
1. AlgoAntiXray (行为分析)
工作原理
- 路径追踪: 记录玩家挖掘位置到路径列表中
- 矿脉聚类: 使用 BFS 将相邻矿石方块分组为矿脉
- 模式分析: 分析路径特征:
- 转向频率 (如果频繁改变方向则可疑)
- 分支数量 (如果呈锯齿状则可疑)
- Y 轴变化 (如果垂直跳跃则可疑)
- 环境过滤: 在自然洞穴、水域、岩浆中降低 VL
- 违规管理: 累积 VL,在达到阈值时触发动作
检测流程
BlockBreakEvent (方块破坏事件) → handleBlockBreak()
├── 检查是否为目标矿石
├── 添加到挖掘路径
├── 矿脉聚类
│ └── 如果新矿脉计数 >= 阈值
│ ├── 分析路径平滑度
│ ├── 检查自然环境
│ └── 计算 VL 增加值
└── 检查阈值命令
关键阈值
| 参数 | 默认值 | 描述 |
|---|---|---|
| turning-limit | 10 | 被视为可疑前的最大转向次数 |
| branching-limit | 6 | 被视为可疑前的最大分支数 |
| y-shift-limit | 4 | 最大 Y 轴变化次数 |
| vein-cluster.distance | 5 | 同一矿脉的最大距离 |
| vein-cluster.trigger-count | 3 | 触发分析的矿脉数 |
2. XRayCheck (假矿石系统)
工作原理
- 触发: 玩家连续挖掘矿石 (计数 >= 阈值)
- 生成: 在玩家周围生成隐形假矿石
- 监控: 追踪玩家是否破坏假矿石
- 惩罚: 每破坏一个假矿石增加 VL
假矿石生命周期
玩家挖掘矿石 → 挖掘计数++
└── 如果计数 >= 阈值
├── 计算生成位置
├── 检查距离限制
└── 放置假矿石 (225秒后过期)
玩家破坏方块 → 检查是否为假矿石
└── 如果是假矿石
├── VL += break-self (破坏自己生成的) 或 break-other (破坏他人生成的)
├── 检查连续违规
└── 检查封禁阈值
3. Enhanced Anti-Xray (增强型/射线追踪)
工作原理
- 数据包拦截: 通过 ProtocolLib 拦截 MAP_CHUNK (区块地图) 数据包
- 缓存区块数据: 存储混淆后的方块位置
- 射线追踪: 计算玩家眼部位置的方块可见性
- 更新数据包: 可见时发送真实方块,隐藏时发送混淆方块
线程模型
主线程 (Main Thread) 射线追踪线程池 (Ray-Trace Thread Pool)
│ │
├─ MAP_CHUNK 数据包 ──────────→ 缓存 ChunkBlocks
│ │
│ 定时器 (50ms) ──────────────→ RayTraceCallable.call()
│ ├── 对每个区块
│ │ ├── DDA 射线追踪
│ │ └── 队列结果
│ │
│ 更新 (1 tick) ←──────────── 轮询结果
├── 发送 BlockUpdate (方块更新) 数据包
│
性能调优
| 设置 | 默认值 | 范围 | 影响 |
|---|---|---|---|
| ray-trace-threads | 4 | 2-8 | CPU 使用率 |
| ray-trace-distance | 80 | 40-120 | 精度 vs 性能 |
| max-ray-trace-block-count-per-chunk | 100 | 50-200 | 单区块负载 |
4. DeepLearn (深度学习检测)
工作原理
- 特征提取: 从挖掘事件中生成特征:
- 旋转差异 (相对于上一个矿石的角度)
- 与上一个矿石的距离
- 破坏前矿石是否暴露
- 近期矿石数量
- 序列构建: 每个玩家缓冲 50 个事件
- 推理: 序列完成后运行 ONNX 模型
- VL 计算:
VL = (概率 - 阈值) * 倍率
训练数据收集
使用 /nax record <玩家> start cheater|legit 收集带标签的数据用于模型训练。
命令参考
主命令: /nax
| 子命令 | 用法 | 描述 |
|---|---|---|
reload | /nax reload | 重载配置 |
ban | /nax ban <玩家> [原因] | 因透视封禁玩家 |
resetviolation | /nax resetviolation <玩家> | 清除玩家的 VL |
replay | /nax replay [play|stop|pause] | 挖掘回放控制 |
orestats | /nax orestats <玩家> | 查看矿石统计 |
oretop | /nax oretop | 查看矿石排行榜 |
oretrack | /nax oretrack <玩家> | 切换矿石通知 |
record | /nax record <玩家> <start|stop> [标签] | ML 训练数据收集 |
internalbypass | /nax internalbypass <grant|remove|list> | 管理绕过 |
realseed | /nax realseed [world] | 查看真实世界种子 |
cleanup | /nax cleanup | 清理回放盔甲架 |
togglemassexcavation | /nax togglemassexcavation | 切换大规模挖掘检测 |
announcement | /nax announcement <stats|announce> | 封禁公告 |
回放子命令
| 命令 | 描述 |
|---|---|
/nax replay | 打开回放 GUI |
/nax replay play <文件> | 开始回放 |
/nax replay stop | 停止回放 |
/nax replay pause | 暂停/继续回放 |
/nax replay forward | 快进 |
/nax replay backward | 倒退 |
/nax replay tp | 传送到回放位置 |
/nax replay delete <文件> | 删除回放文件 |
内部绕过子命令
| 命令 | 描述 |
|---|---|
/nax internalbypass grant <玩家> <秒数> [原因] | 授予检测豁免 |
/nax internalbypass remove <玩家> | 移除绕过 |
/nax internalbypass list | 列出活跃的绕过 |
/nax internalbypass clear | 清除所有绕过 |
/nax internalbypass info <玩家> | 查看绕过详情 |
/nax internalbypass extend <玩家> <秒数> | 延长绕过时间 |
权限
| 权限 | 描述 | 默认 |
|---|---|---|
nekoantixray.admin | 所有管理员命令 | OP |
nekoantixray.reload | 重载配置 | OP |
nekoantixray.ban | 封禁玩家 | OP |
nekoantixray.resetviolation | 重置 VL | OP |
nekoantixray.replay | 回放命令 | OP |
nekoantixray.orestats | 查看统计 | OP |
nekoantixray.oretrack | 追踪玩家 | OP |
nekoantixray.cleanup | 清理盔甲架 | OP |
nekoantixray.realseed | 查看真实种子 | OP |
nekoantixray.update | 更新插件 | OP |
nekoantixray.bypass | 绕过检测 | false |
nekoantixray.alerts | 接收警报 | OP |
nekoantixray.massexcavation | 大规模挖掘控制 | OP |
nekoantixray.locate.bypass | 使用 /locate 命令 | OP |
fakeseed.viewreal | 查看真实种子 | OP |
fakeseed.reload | 重载假种子 | OP |
API 参考
公共类
NekoAntiXray (主插件类)
public class NekoAntiXray extends JavaPlugin {
// 获取插件实例
public static NekoAntiXray getInstance()
// 获取 FoliaLib 用于调度
public FoliaLib getFoliaLib()
// 获取子系统
public AlgoAntiXray getAlgoAntiXray()
public XRayCheck getXRayCheck()
public ConfigManager getConfigManager()
public ReplayManager getReplayManager()
public InferenceManager getInferenceManager()
public OreStatsManager getOreStatsManager()
// 验证
public boolean validatePlayerData(Player player, String operation)
}
AlgoAntiXray (行为检测)
public class AlgoAntiXray {
// 检测入口点
public void handleBlockBreak(Player player, Block block)
public void handleBlockPlace(Player player, Block block)
public void handleExplosion(List<Block> explodedBlocks, Entity sourceEntity)
// VL 管理
public int getViolationLevel(UUID playerId)
public void increaseViolationLevelFromAI(Player player, float probability)
// 查询方法
public List<Location> getMiningPath(UUID playerId, String worldName)
public int countVeinBlocks(Location startLocation, Material type)
}
XRayCheck (假矿石检测)
public class XRayCheck {
// 检测
public void checkXRay(Player player, Block block)
public boolean isFakeOre(Block block)
public void processFakeOreBreak(Player player, Block block)
// 管理
public void addNoCheckBlock(Location location)
public void removeFakeOre(Location location)
// 查询
public Map<Location, Material> getFakeOreTypes()
public double getPlayerViolation(Player player)
// 清理
public void cleanupMiningCounts()
public void cleanupFakeOres()
public void decreaseViolations()
}
ConfigManager (配置管理)
public class ConfigManager {
// 生命周期
public void loadConfig()
public void reloadConfig()
// AlgoAntiXray 设置
public boolean isWorldDetectionEnabled(String worldName)
public int getWorldMaxHeight(String worldName)
public List<String> getAlgoRareOres()
public int getMaxPathLength()
// XRay 设置
public boolean isXRayEnabled()
public double getBanThreshold()
public int getMiningCountThreshold()
// DeepLearn 设置
public boolean isDeepLearnEnabled()
public int getDeepLearnSequenceLength()
public double getDeepLearnPredictionThreshold()
}
InferenceManager (ML 检测)
public class InferenceManager {
// 生命周期
public InferenceManager(NekoAntiXray plugin)
public void close()
// 检测
public Map<String, Object> onPlayerBlockBreak(Player player, Block block)
// 状态
public boolean isReady()
}
OreStatsManager (矿石统计)
public class OreStatsManager {
// 记录
public void recordOreMined(Player player, Material oreType)
// 查询
public Map<String, Integer> getPlayerStats(String playerName)
public List<Map.Entry<String, Integer>> getTopPlayers(int limit)
public boolean hasStats(String playerName)
// 管理
public void clearPlayerStats(String playerName)
public void saveStats()
public void reload()
}
事件钩子
插件使用标准的 Bukkit 事件:
// 方块事件
@EventHandler
public void onBlockBreak(BlockBreakEvent event)
@EventHandler
public void onBlockPlace(BlockPlaceEvent event)
// 爆炸事件
@EventHandler
public void onBlockExplode(BlockExplodeEvent event)
@EventHandler
public void onEntityExplode(EntityExplodeEvent event)
// 玩家事件
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event)
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event)
开发者指南
项目结构
src/main/java/sakuyaayane/nekoantixray/
├── NekoAntiXray.java # 插件主类
├── AlgoAntiXray.java # 行为检测
├── XRayCheck.java # 假矿石检测
├── XRayListener.java # 事件协调器
├── commands/ # 命令处理器 (18 个文件)
├── enhanced/ # 数据包修改 (20 个文件)
│ ├── listeners/ # ProtocolLib 监听器
│ ├── tasks/ # 异步射线追踪任务
│ └── utils/ # 数据结构
├── antiseedcracker/ # 种子保护 (15 个文件)
├── deeplearn/ # ML 推理 (3 个文件)
├── replay/ # 挖掘回放 (6 个文件)
└── Utils/ # 工具类 (22 个文件)
构建说明
# 克隆仓库
git clone https://github.com/MelodyAyane/NekoAntiXray.git
cd NekoAntiXray
# 使用 Maven 构建
mvn clean package
# 输出 JAR
target/NekoAntiXray-AllPlatform-2.1.1.jar
依赖项
| 依赖 | 版本 | 范围 | 用途 |
|---|---|---|---|
| Paper API | 1.21.10-R0.1 | provided | Bukkit/Paper API |
| Folia API | 1.20.6-R0.1 | provided | Folia 支持 |
| ProtocolLib | 5.3.0 | provided | 数据包操作 |
| FoliaLib | 0.5.0 | compile+shade | 调度器抽象 |
| bStats | 3.0.2 | compile+shade | 统计 |
| ONNX Runtime | 1.18.0 | provided | ML 推理 |
| Gson | 2.10.1 | compile | JSON 解析 |
编码规范
Folia 兼容性
始终使用 FoliaLib 进行调度:
// 良好 - 兼容 Folia
plugin.getFoliaLib().getImpl().runTimer(task, delay, period, TimeUnit.SECONDS);
plugin.getFoliaLib().getImpl().runAsync(task);
plugin.getFoliaLib().getImpl().runAtEntity(player, task);
// 糟糕 - 在 Folia 上会崩溃
Bukkit.getScheduler().runTask(plugin, task);
线程安全
使用并发数据结构:
// 玩家数据映射
private final Map<UUID, Data> playerData = new ConcurrentHashMap<>();
// 方块位置追踪
private final LongBooleanHashMap blockCache = new LongBooleanHashMap();
空值安全
始终验证玩家数据:
public void handleBlockBreak(Player player, Block block) {
if (!plugin.validatePlayerData(player, "handleBlockBreak")) {
return;
}
// 可以安全继续
}
添加检测功能
- 根据策略选择检测系统
- 向
config.yml添加配置键 - 使用 getter 更新 ConfigManager
- 实现检测逻辑
- 在 Folia 服务器上测试
测试
- 部署到 Folia/Paper 1.21.10+ 测试服务器
- 使用 X-Ray 资源包进行测试
- 监控控制台的违规信息
- 检查 TPS 影响
- 验证 VL 衰减和清理
故障排除
常见问题
插件无法加载
症状: 插件加载失败,控制台报错
解决方案:
- 验证是否安装了 Java 17+
- 确保 ProtocolLib 已安装且为最新版本
- 检查控制台的具体错误信息
- 验证服务器是否为 Paper/Folia 1.21.10+
CPU 使用率高
症状: 插件激活时服务器 TPS 下降
解决方案:
- 在配置中减少
ray-trace-threads - 增加
ms-per-ray-trace-tick(降低更新频率) - 减少
ray-trace-distance - 在次要世界中禁用增强型反矿透 (enhanced anti-xray)
误报
症状: 合法玩家被标记为 X-Ray
解决方案:
- 启用环境过滤器 (洞穴, 水, 岩浆)
- 提高检测阈值
- 将矿石添加到黑名单
- 为生存服务器启用大规模挖掘检测
内存泄漏
症状: 内存使用量随时间增加
解决方案:
- 验证清理任务是否正在运行 (检查日志)
- 减小
cleanup-after-minutes值 - 确保玩家正确断开连接 (无挂起数据)
调试模式
启用调试日志:
deeplearn:
debug: true
检查控制台以获取详细的检测日志。
获取帮助
- GitHub Issues: https://github.com/MelodyAyane/NekoAntiXray/issues
- 文档: https://www.nekoantixray.link/tutorial
附录
A. 矿石类型参考
| 材质 | 检测层级 | 默认状态 |
|---|---|---|
| DIAMOND_ORE (钻石矿) | Algo, XRay, Deep | 启用 |
| DEEPSLATE_DIAMOND_ORE (深层钻石矿) | Algo, XRay, Deep | 启用 |
| EMERALD_ORE (绿宝石矿) | Algo, XRay, Deep | 启用 |
| ANCIENT_DEBRIS (远古残骸) | Algo, XRay, Deep | 启用 |
| GOLD_ORE (金矿) | Deep | 黑名单 |
| IRON_ORE (铁矿) | Deep | 黑名单 |
| COAL_ORE (煤矿) | - | 黑名单 |
| COPPER_ORE (铜矿) | - | 黑名单 |
B. VL 计算参考
AlgoAntiXray VL
每条可疑路径的基础 VL: 1
洞穴修正: -50% (如果 reduce-vl: true)
爆炸加成: suspicious_rate × penalty_multiplier
AI 加成: (probability - threshold) × vl_multiplier
XRayCheck VL
破坏自己的假矿石: +1.0
破坏他人的假矿石: +2.0
连续违规加成: +1.0 (在 60秒内达到 3次后)
C. 性能基准测试
| 设置 | 内存 | CPU | 准确率 |
|---|---|---|---|
| 仅 Enhanced | 50MB | 5% | 高 |
| Enhanced + Algo | 80MB | 10% | 极高 |
| 全部 (含 ML) | 150MB | 15% | 最高 |
D. 配置模板
严格模式 (低容忍度)
check:
mining-behavior-analyzer:
active: true
pattern-analyzer:
turning-limit: 8
branching-limit: 4
y-shift-limit: 3
environment-filters:
apply-filters: false
xray:
enable: true
mining-count-threshold: 2
vl:
ban:
threshold: 5.0
宽松模式 (低误报)
check:
mining-behavior-analyzer:
active: true
pattern-analyzer:
turning-limit: 15
branching-limit: 10
y-shift-limit: 6
environment-filters:
apply-filters: true
cave:
reduce-vl: true
xray:
enable: false
E. 文件位置
| 文件 | 位置 | 用途 |
|---|---|---|
| config.yml | plugins/NekoAntiXray/ | 主配置 |
| ore-stats.yml | plugins/NekoAntiXray/ | 矿石统计 |
| ban-statistics.yml | plugins/NekoAntiXray/ | 封禁记录 |
| model.onnx | plugins/NekoAntiXray/ | ML 模型 |
| feature_stats.json | plugins/NekoAntiXray/ | 特征归一化 |
| *.replay | plugins/NekoAntiXray/replays/ | 回放文件 |
| recording_*.csv | plugins/NekoAntiXray/training_data/ | 训练数据 |
文档生成于 NekoAntiXray v2.1.1 最后更新: 2025-12-17