Imgur 集成(imgur 段)
基本信息
| 属性 |
值 |
| 配置段名 |
imgur |
| 依赖 |
Imgur 应用 Client-ID、Gallery/Album ID |
| 离线模式 |
系统属性 -Dbls.offlineMode=true 启用 |
配置项
useImgur
- 类型:Boolean
- 默认:
false
- 作用:开启后从指定 Imgur gallery 拉取图片作为随机背景。
imgurAppClientId
- 类型:String
- 默认:
""(空)
- 作用:你自己的 Imgur 应用的 Client-ID,作为
Authorization: Client-ID <id> HTTP 头。
- 必须:需要到 imgur.com 注册一个应用获得。
imgurGalleryId
- 类型:String
- 默认:
""(空)
- 作用:要 Gallery 或 Album 的 ID(
Ks0TrYE 这种)。
- 来源:从
<https://imgur.com/a/<id> 或 <https://imgur.com/gallery/<id> 提取。
imgurRequestTimeout
- 类型:int
- 默认:
5000
- 范围:
[100, Integer.MAX_VALUE] ms
- 作用:连接 / 读取超时。
运行行为
启动流程(MinecraftDisplayer.open 末尾)
randomBackgrounds && !salt 时才执行;
- 实例化
ImgurCacheManager;
- 调
setupImgurGallery(resourceLocation -> { … }):
- 第一次回调 → 直接覆盖
background(避免要等定时切换才看见新图);
- 每次回调都把
ResourceLocation 字符串路径 add 到 imgurBackgrounds;
randomBackgroundArray = imgurBackgrounds.toArray(new String[0]);
- 配合
changing background 段进行定时切换。
ImgurClient(HTTP 客户端)
- 自定义
CloseableHttpClient:只设 Authorization 头与超时(连接/连接请求/socket 都用 requestTimeout)。
fetchGalleryImageIDs(galleryId, ignoreAds=true):GET https://api.imgur.com/3/album/<id>,解析 data.images,返回过滤后的 id 列表。
fetchImage(imageId):GET https://i.imgur.com/<id>.png(注意:imgur 允许把 jpg 当 png 请求,返回仍是 jpg)。
ImgurCacheManager(缓存)
- 磁盘缓存目录:
bls-imgur-cache/<imageID>.png。
- 同步发布:每拿到一张图就通过回调
textureLocationConsumer.accept(new ResourceLocation(IMGUR_CACHE_DIR, imageID)) 让 MinecraftDisplayer 注册新背景。
- 启动时优先本地:先扫缓存目录里所有 PNG 的 imageID,按线程局部随机起点循环(
ThreadLocalRandom.current().nextInt),firstOnly=true 时读完第一张就退出(让启动时图尽早出现);后续 gallery 流程拉到新图时再补。
- 失效图清理:gallery 流程结束后,对比当前
cachedImageIDs(不在 gallery 中的项),Files.deleteIfExists(...) 删除。
离线模式
OFFLINE_MODE = Boolean.getBoolean("bls.offlineMode"):
OFFLINE_MODE=true → 跳过 ImgurClient,仅扫描磁盘缓存(并发)。
- 用法:开发/无网环境启动参数加
-Dbls.offlineMode=true。
数值
| 字段 |
默认 |
useImgur |
false |
imgurAppClientId |
"" |
imgurGalleryId |
"" |
imgurRequestTimeout |
5000 ms |
相关条目