dsh-ui-web/packages/skins/minecraft

34Star2Fork0Issue0Watching

为 DSH Web GUI 打造的《我的世界》主题皮肤,注入程序化绘制的像素全景天空盒、方块按钮与告示牌输入框。

语言
TypeScript
License
Apache-2.0
分支
main
dsh-plugindsh-plugin-marketdsh-plugins

安装

$ dsh plugin --profile web add github:CAPTAIN1275/dsh-ui-web/packages/skins/minecraft

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

一句话定位

为 DeepSeek Harness(DSH)Web GUI 提供《我的世界》主界面氛围的皮肤插件:在界面背后放一个会缓慢旋转的程序化绘制的像素全景天空盒,把按钮做成灰石板方块,把输入框做成带钉子的木告示牌,整体配色落在青金石蓝、草地绿、石灰与金沙上。

核心能力

  • 在主界面背后注入一个由 6 个程序化绘制 SVG 像素场景构成的 3D 全景天空盒(村庄、湖岸、密林、雪峰 + 天空 + 草地方块),绕 Y 轴 90 秒转一圈,复刻《我的世界》主菜单的镜头感
  • 把按钮渲染成 MC 风格的灰色石板方块:黑色描边、明亮顶面、深色底面;悬停文字变黄、按下时整块下沉 1 像素
  • 把输入框和文本域渲染成带四角铁钉的木板告示牌:原木色渐变 + 木纹 + 深色边框;聚焦时边框变亮、文字变白
  • 把面板和侧栏改成半透明深色石板背景,配合数据透视让旋转的全景天空盒在面板后面透出来
  • 顺带重写 --dsw-static-*--dsw-alias-* 调色板,把官方深蓝色系重映射为青金石蓝、绿色映射为草地绿,让组件读取 token 时也落在方块世界
  • 把浏览器标签页的文档标题改成 Minecraft · DeepSeek 在线,卸载皮肤时恢复原标题

技术实现

  • 语言: TypeScript
  • 关键依赖: @deepseek-ai/cordis(effect 生命周期)、lightningcss(CSS Modules 编译)、tsdown(打包)
  • 架构模式: 纯客户端注入;样式全部挂在 body[data-dsh-minecraft] 下(暗色变体追加 [data-ds-dark-theme]),通过 Cordis ctx.effect() disposer 完整回收自己写入的内容;不挂 cordis 服务、不发事件、不触模型请求
  • 入口文件: src/index.ts(宿主侧空壳 apply)+ src/client/index.ts(浏览器侧 apply(ctx),含 DOM 写入、全景天空盒组装、SVG 数据 URI 生成)

适用场景

适合想让 DSH Web 界面看起来像在《我的世界》里运行的玩家或学生用户——把 AI 对话工具的整块工作区染上像素方块天空和石板 UI。如果你已经在用其他皮肤,需要先决定切换到这一款;皮肤之间不能叠加。

前置依赖与兼容性

依赖最低版本说明
DSH Web已运行 dsh web 服务(默认 http://127.0.0.1:3080)仅作用于 DSH Web GUI,不影响其他 profile
Node.js>= 18(构建期)仓库使用 pnpm + tsdown 构建;运行时浏览器即可
pnpm>= 10包管理与构建工具;从源码安装需执行 pnpm install && pnpm -r build
平台跨平台(macOS / Windows / Linux)纯前端注入,无原生模块依赖

安装方式

dsh plugin --profile web add github:CAPTAIN1275/dsh-ui-web/packages/skins/minecraft

配置项

本插件无需额外配置。皮肤启用互斥,皮肤之间的切换由仓库根目录的 scripts/dsh-skin 工具统一管理:

  • dsh-skin use minecraft 启用本皮肤
  • dsh-skin use official 恢复官方默认外观
  • dsh-skin list 查看皮肤与当前激活项

切换后 config watcher 会在几秒内热重载,刷新页面即可生效。

常见问题

Q: 装上以后怎么换回官方默认外观?

A: 在终端执行 dsh-skin use official,config watcher 会在几秒内热重载,刷新页面即可恢复原貌。

Q: 这个皮肤会和别的皮肤同时生效吗?

A: 不会。皮肤之间是互斥的,由仓库内的 scripts/dsh-skin 统一管理,同时只会有一个皮肤处于激活状态。

Q: 卸载后页面元素会留下残留吗?

A: 不会。apply() 通过 Cordis effect disposer 完整回收自己写入的内容,包括 body 上的 data-dsh-minecraft 属性、注入的全景天空盒(stage/skybox 6 个面)、遮罩以及文档标题。

Q: 全身动起来我头晕怎么办?

A: 浏览器勾选「减少动态效果」(prefers-reduced-motion)后皮肤会自动停掉全景旋转,并把所有按钮和输入框的过渡动画归零,画面恢复静态。

Q: 全景天空盒的素材是官方原版贴图吗?

A: 不是。原版 Mojang 全景贴图有版权,皮肤里所有像素场景都是用 SVG 在 8px 方块上程序化绘制出来的(方块山、像素云、方块树、蘑菇、南瓜、小鸟、花朵等),每个面的素材都由种子的伪随机散点生成,保证每次刷新画面稳定一致。

Q: 这个皮肤会影响 DSH Web 的功能吗?

A: 不影响。皮肤只改 body 上的属性、注入 DOM 元素和改写 document.title,既不挂载 cordis 服务、也不发事件、更不触及模型请求;和右侧文件面板(aionui)、Git 图谱这些自带 token 体系都通过 CSS 变量对接互不干扰。

上手难度

入门 — 一行安装命令加一行 dsh-skin use minecraft 即可生效;全景天空盒、按钮样式、配色全部内置,无需任何配置或写代码。

已知问题与限制

  • 本子包 LICENSE 文件为 BSD-3-Clause,package.jsonlicense 字段却填了 Apache-2.0,两处声明不一致;以 LICENSE 文件实际内容为准(BSD-3-Clause),二次分发前建议统一两处
  • 皮肤之间的互斥切换依赖仓库根目录的 scripts/dsh-skin 脚本,仅在从同一仓库链接安装时可用,单独克隆本子目录时需要手动维护 ~/.dsh/cordis.patch.yml 的 managed 区段
  • 安装命令原 README 给出的是 link:<本仓库绝对路径>,本百科按插件市场标准命令提供 GitHub 安装形式,两者效果等价
  • 从 GitHub 安装时 pnpm ≥10 会拦截构建脚本,需要先把打印出来的包 key 加进 profile 的 pnpm-workspace.yaml allowBuilds 列表再重试
  • 暂无其他已知问题