[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fMQKrmkc7Er04sMgEbQQAJ7Ldp0n3DF97OHWJ-lx4RR0":3,"$fzP30Xvlvw4C2DOvM6yDGFH53cdXkCcqNwKqPrQzq-4E":43},[4],{"id":5,"type":6,"title":7,"slug":8,"summary":9,"body":10,"coverUrl":11,"productScreenshots":12,"productLinks":13,"authorName":14,"authorUrl":15,"authorSubject":16,"category":17,"tags":22,"sourceLabel":35,"sourceName":35,"sourceUrl":35,"status":36,"seoTitle":35,"seoDescription":35,"canonicalUrl":35,"isFeatured":37,"sno":38,"sortOrder":39,"publishedAt":40,"updatedAt":41,"createdAt":42},"ea23e2ef-cc1b-4977-ad38-bf95b363c953","article","SQLite复兴：从一个文件到边缘数据库","sqlite-libsql-turso-edge-database","SQLite 是没有服务器、就是一个文件的嵌入式数据库，零运维、极低延迟。借助 libSQL \u002F Turso，它正走向「边缘 + 多副本」，让读多写少的应用全球低延迟。","提到数据库，很多人第一反应是「要单独部署一台服务器、要连接、要运维」。但有一类数据库反其道而行——它没有服务器，就是一个文件。它就是 SQLite。你手机里的 App、浏览器、甚至飞机的黑匣子都在用它。\n\n而到 2026 年，借助 libSQL \u002F Turso 这样的项目，SQLite 正从「本地小工具」走向「边缘数据库」。\n\n## 背景：SQLite 到底特别在哪\n\n先说清概念。绝大多数数据库（MySQL、Postgres）是「客户端-服务器」模式：数据库是一个独立进程，你的程序通过网络连接去访问它。SQLite 不一样，它是**嵌入式**的——整个数据库就是磁盘上的一个文件，你的程序直接把它当函数库调用，没有网络、没有单独的服务器进程。\n\n这带来两个好处：**零运维**（不用部署和维护数据库服务器）和**极低延迟**（读写就是本地文件操作，没有网络往返）。代价是它传统上更适合单机、读多写少的场景。\n\n## libSQL 与 Turso：把 SQLite 搬到边缘\n\nSQLite 的短板是「天生单机」。libSQL 是 SQLite 的一个开源分支，Turso 则在它之上提供托管服务，核心思路是：把 SQLite 的「简单」保留下来，同时解决「多地访问」和「可扩展」的问题。\n\n它的杀手锏是「边缘 + 多副本」：把数据库的副本放到全球各地靠近用户的节点，用户读数据时就近读本地副本，延迟极低。这对「读多写少」的应用（内容站、配置、用户资料）特别合适。此外还流行一种「按租户一库」的模式——给每个客户开一个独立的 SQLite 数据库，天然隔离，非常适合多租户 SaaS。\n\n```mermaid\nflowchart TD\n    A[用户请求] --> B{读还是写?}\n    B -->|读| C[就近读边缘副本\u003Cbr\u002F>低延迟]\n    B -->|写| D[写主库]\n    D --> E[异步同步到各边缘副本]\n    E --> C\n```\n\n## 一个最小可运行的例子\n\n在本地，SQLite 用起来就是「打开一个文件」：\n\n```python\nimport sqlite3\ncon = sqlite3.connect(\"app.db\")   # 就是一个文件，没有服务器\ncon.execute(\"CREATE TABLE IF NOT EXISTS note(id INTEGER PRIMARY KEY, text TEXT)\")\ncon.execute(\"INSERT INTO note(text) VALUES (?)\", (\"你好，SQLite\",))\ncon.commit()\nfor row in con.execute(\"SELECT * FROM note\"):\n    print(row)\n```\n\n换成 Turso（libSQL），代码几乎一样，只是把「本地文件」换成「远程边缘数据库的地址 + 令牌」：\n\n```javascript\nimport { createClient } from \"@libsql\u002Fclient\";\n\nconst db = createClient({\n  url: \"libsql:\u002F\u002Fyour-db.turso.io\",   \u002F\u002F 边缘数据库地址\n  authToken: process.env.TURSO_TOKEN, \u002F\u002F 令牌从环境变量读取，切勿写死\n});\n\nawait db.execute(\"SELECT * FROM note\");\n```\n\n注意：令牌等凭证要放环境变量，别硬编码进代码或提交到仓库。\n\n## 取舍与边界\n\n- **写扩展有限**：SQLite\u002FlibSQL 的强项是读，高并发写入不是它的主场——需要海量并发写，仍应考虑 Postgres 等。\n- **同步一致性**：多副本是「最终一致」，写完的数据同步到各边缘节点需要一点时间，强一致场景要留意。\n- **单库体量**：单个 SQLite 文件适合中小体量数据；超大数据集或复杂分析型查询，专用数据库更合适。\n- **它不是万能替代**：把它用在「读多写少、要低延迟、要零运维」的场景，才最能发挥价值。\n\n## 你能马上用起来的收获清单\n\n- 原型、桌面端、移动端、CLI 工具，优先考虑 SQLite——零部署，一个文件搞定。\n- 读多写少、要全球低延迟的 Web 应用，评估 Turso\u002FlibSQL 的边缘副本方案。\n- 多租户 SaaS 可以试试「一租户一库」，天然隔离、备份和迁移都简单。\n- 凭证（authToken）一律走环境变量，别写进代码或提交仓库。\n- 记住它的适用边界：读多写少 + 低延迟 + 零运维时最香，高并发写要另选。","https:\u002F\u002Foxqtewbrpuiouqqjrvdv.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fpublic-media\u002F2026-07-19\u002F611d83bb-2a21-4271-a183-155a89a5bb81.jpg",[],[],"Foundit AI","https:\u002F\u002Ffoundit.cn","f39339b1-aaa6-4e86-b0c2-a6e6a21113b5",{"id":18,"name":19,"slug":20,"description":21},"6179d3b6-dc34-4483-9ded-3cd9f1b37a47","科普","abbreviation","介绍各领域新兴概念",[23,27,31],{"id":24,"name":25,"slug":26},"7c76bfc2-f80f-4ee0-a95d-27bd8708b434","技术","slug",{"id":28,"name":29,"slug":30},"a202d639-99a6-488a-a712-4d4c6ffd7e15","开发","dev",{"id":32,"name":33,"slug":34},"144abe77-0dc6-4f66-a176-20bddb1c0bfa","编程","coding",null,"published",false,70,0,"2026-07-17T00:00:00.000Z","2026-07-19T17:47:27.408Z","2026-07-19T17:10:52.499Z",[44,61,87],{"id":45,"type":6,"title":46,"slug":47,"summary":48,"body":49,"coverUrl":50,"productScreenshots":51,"productLinks":52,"authorName":14,"authorUrl":15,"authorSubject":16,"category":53,"tags":54,"sourceLabel":35,"sourceName":35,"sourceUrl":35,"status":36,"seoTitle":35,"seoDescription":35,"canonicalUrl":35,"isFeatured":37,"sno":58,"sortOrder":39,"publishedAt":40,"updatedAt":59,"createdAt":60},"974096b9-8c0e-431e-bab6-8cd58e2af97f","Passkey通行密钥：为什么用指纹登录比密码更安全","passkeys-webauthn-passwordless-login","Passkey 基于 WebAuthn\u002FFIDO，用非对称加密让私钥不出设备、并与域名绑定，从原理上防钓鱼。","你有没有算过自己记了多少个密码？又有多少次因为「忘记密码」而走找回流程？\n\n密码这套用了几十年的登录方式，正在被一种更安全也更省心的机制取代——它叫 Passkey（通行密钥）。用指纹或面容一刷就登录，且从原理上就防钓鱼。\n\n本文讲清它是什么、怎么工作、怎么落地。\n\n## 密码为什么该退休\n\n先说清问题。密码有三个老毛病：容易被猜\u002F被撞库、容易在钓鱼网站被骗走、还要用户自己记。即便加了短信验证码，也挡不住实时钓鱼（攻击者把你输入的验证码即时转发到真网站）。\n\nPasskey 换了个思路。它基于 WebAuthn \u002F FIDO 标准，用的是「非对称加密」——注册时你的设备生成一对钥匙：**私钥**永远留在你的设备里（受指纹\u002F面容\u002FPIN 保护，绝不外传），**公钥**交给网站保存。登录时网站发来一个随机「挑战」，你的设备用私钥签名，网站用公钥验证。整个过程没有任何「秘密」在网络上传输。\n\n## 为什么它天生防钓鱼\n\n这是 Passkey 最关键的优势。每个 Passkey 都和一个具体的网站域名「绑定」。如果你被骗到一个仿冒域名，浏览器根本不会拿出对应的 Passkey——因为域名对不上。也就是说，就算你想上当，技术上也交不出凭证。\n\n```mermaid\nflowchart LR\n    A[注册: 设备生成密钥对] --> B[私钥留设备\u003Cbr\u002F>公钥给网站]\n    B --> C[登录: 网站发随机挑战]\n    C --> D[设备用私钥签名\u003Cbr\u002F>需指纹\u002F面容解锁]\n    D --> E[网站用公钥验证]\n    E --> F((登录成功\u003Cbr\u002F>无秘密上网))\n```\n\n## 一个最小可运行的例子\n\n在网页里，浏览器通过 `navigator.credentials` API 直接对接系统的生物识别。注册和登录各是一次调用：\n\n```javascript\n\u002F\u002F 1) 注册：创建一个 Passkey（options 由你的服务端生成）\nconst cred = await navigator.credentials.create({\n  publicKey: {\n    challenge: serverChallenge,          \u002F\u002F 服务端下发的随机值\n    rp: { name: \"示例站点\", id: \"example.com\" },\n    user: { id: userId, name: \"user@example.com\", displayName: \"小明\" },\n    pubKeyCredParams: [{ type: \"public-key\", alg: -7 }], \u002F\u002F ES256\n    authenticatorSelection: { residentKey: \"required\", userVerification: \"required\" },\n  },\n});\n\u002F\u002F 把 cred 里的公钥等信息发回服务端保存\n\n\u002F\u002F 2) 登录：用已有 Passkey 签名挑战\nconst assertion = await navigator.credentials.get({\n  publicKey: { challenge: serverChallenge, rpId: \"example.com\" },\n});\n\u002F\u002F 把 assertion 发回服务端，用之前存的公钥验证签名\n```\n\n注意：客户端只负责「唤起系统验证 + 拿到签名」，真正的**挑战生成**和**签名验证**必须在服务端完成，且 `challenge` 必须一次性、随机、有时效——这是安全的关键。\n\n## 取舍与边界\n\n- **设备同步与找回**：现代 Passkey 可通过平台账号（如系统钥匙串）在你的设备间同步，换手机不至于全丢；但仍要设计好账号恢复流程，避免用户彻底被锁在外面。\n- **跨生态**：在不同厂商设备\u002F浏览器之间使用时，通常靠「扫码 + 手机」的跨设备流程衔接，体验在持续改善。\n- **过渡期共存**：多数网站会让 Passkey 与密码并存一段时间，逐步引导用户迁移，而不是一刀切。\n- **它保护的是「登录」**：Passkey 解决身份验证，不替代授权、会话管理等其它安全环节。\n\n## Tips\n\n- 新系统做登录，优先支持 Passkey，把密码作为过渡兜底而非唯一选项。\n- 服务端务必保证 `challenge` 随机、一次性、有时效，验证逻辑放服务端。\n- 一定要设计好账号恢复路径（备用邮箱、多设备等），别让用户丢设备就丢账号。\n- 向用户解释「用指纹登录 = 更安全」，降低迁移心理门槛。\n- 记住 Passkey 的核心卖点：私钥不出设备 + 与域名绑定，从原理上防钓鱼。","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1614064641938-3bbee52942c7?w=1200",[],[],{"id":18,"name":19,"slug":20,"description":21},[55,56,57],{"id":32,"name":33,"slug":34},{"id":28,"name":29,"slug":30},{"id":24,"name":25,"slug":26},71,"2026-07-19T17:55:56.818Z","2026-07-19T17:10:50.027Z",{"id":62,"type":6,"title":63,"slug":64,"summary":65,"body":66,"coverUrl":67,"productScreenshots":68,"productLinks":69,"authorName":14,"authorUrl":15,"authorSubject":16,"category":70,"tags":75,"sourceLabel":35,"sourceName":35,"sourceUrl":35,"status":36,"seoTitle":35,"seoDescription":35,"canonicalUrl":35,"isFeatured":37,"sno":83,"sortOrder":39,"publishedAt":84,"updatedAt":85,"createdAt":86},"8b883dd6-d112-4adc-ab3c-e5fa1c71bdc1","长上下文 vs RAG：什么时候还需要检索，什么时候直接塞","long-context-vs-rag-decision","模型支持百万 token 上下文后，RAG 还有必要吗？本文用一张决策图讲清长上下文与 RAG 的成本、信噪比、实时性、可溯源差异，并给出「RAG 粗筛 + 长上下文精读」的混用思路。","现在的主流模型动辄支持几十万甚至上百万 token 上下文，「把整个知识库塞进 prompt 不就行了，还要 RAG 干嘛？」——这是 2026 年最常被问的问题。\n\n答案是：长上下文和 RAG 不是替代关系，而是各有成本与边界，选错会又贵又慢还更不准。\n\n## 背景：两种「让模型知道更多」的路\n\n**长上下文**是一次性把大量资料放进对话窗口，模型自己读。\n**RAG（检索增强生成）**是先根据用户问题，从知识库里搜出最相关的几段，只把这几段喂给模型。\n二者的核心差别在于：模型到底要「读全部」还是「读精华」。\n\n## 怎么选\n\n```mermaid\nflowchart TD\n    A[需要模型参考外部资料] --> B{资料是否全部相关且量可控?}\n    B -->|是, 且需整体理解| C[长上下文 直接塞]\n    B -->|否, 海量\u002F需精准定位| D[RAG 先检索再喂]\n    D --> E{结果要可溯源\u002F低成本?}\n    E -->|是| F[坚定用 RAG]\n    E -->|否| G[可混用: 检索+长上下文精读]\n```\n\n## 核心取舍\n\n- **成本**：长上下文按全部 token 计费，100 万字和 1000 字单价一样，烧钱极快；RAG 只付「检索到的几段」，便宜一两个数量级。\n- **准确率（信噪比）**：上下文越长，模型越容易在噪声里迷失、甚至「中间遗忘」（lost in the middle）。RAG 只给最相关片段，反而更准。\n- **实时性与新鲜度**：RAG 可以检索实时更新的库；长上下文里塞的是「提问那一刻」的快照，过期不管。\n- **可溯源**：RAG 天然返回引用来源，长上下文很难说清答案来自哪一句。\n\n## 一个最小可运行的例子\n\nRAG 的检索侧，常用向量数据库做语义搜索：\n\n```python\nhits = vector_db.search(embed(question), top_k=3)   # 用户提问 → 向量检索最相关的 3 段 → 拼进 prompt\ncontext = \"\\n\".join(h[\"text\"] for h in hits)\nprompt = f\"根据资料回答：\\n{context}\\n\\n问题：{question}\"\nanswer = model(prompt)\n```\n\n注意这里检索到的 `top_k=3` 片段，就是模型真正会读的全部，成本与噪声都被压到最低。\n\n## Tips\n\n- 资料少、要整体通读（如整份合同、一篇长文），直接用长上下文，省事。\n- 资料海量、要精准定位、要低成本，坚定用 RAG。\n- 需要答案可溯源、可审计，RAG 几乎是唯一选择。\n- 二者可混用：RAG 粗筛 + 长上下文对命中片段精读。\n- 别盲目追长上下文「偷懒」——多数生产场景，RAG 的性价比更高。","https:\u002F\u002Foxqtewbrpuiouqqjrvdv.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fpublic-media\u002F2026-07-20\u002F10f52f80-db7f-4a1d-861d-37514ea09646.jpg",[],[],{"id":71,"name":72,"slug":73,"description":74},"d6750616-07d9-4350-8485-1834c77be3d2","指南","guide","指导建议，仅供参考",[76,77,81,82],{"id":24,"name":25,"slug":26},{"id":78,"name":79,"slug":80},"4c2bbea6-eab7-40a8-8447-1de478ff7749","分析","analyse",{"id":32,"name":33,"slug":34},{"id":28,"name":29,"slug":30},73,"2026-07-10T00:00:00.000Z","2026-07-20T01:26:12.755Z","2026-07-20T01:12:58.458Z",{"id":88,"type":6,"title":89,"slug":90,"summary":91,"body":92,"coverUrl":93,"productScreenshots":94,"productLinks":95,"authorName":96,"authorUrl":97,"authorSubject":16,"category":98,"tags":99,"sourceLabel":35,"sourceName":35,"sourceUrl":35,"status":36,"seoTitle":35,"seoDescription":35,"canonicalUrl":35,"isFeatured":37,"sno":111,"sortOrder":39,"publishedAt":112,"updatedAt":113,"createdAt":114},"356aa99a-b365-43ef-96ae-f7e5117ec256","《我的世界》游戏模组开发指南：用AI构建你的第一个模组","mc-ai-coding","在整理在《我的世界》Java版本模组开发过程中的心得体会，系统性地介绍模组开发全流程","# 一、模组加载器\n《我的世界》模组加载器可分为两大类：\n- Fabric-轻量化，加载快\n- Forge\u002FNeoForge-高度集成，功能丰富\n\n从玩家数量来说，Forge和NeoForge的玩家数量大于Fabric，理论上来说更受欢迎（也可能是因为大部分整合包都选择使用Forge或NeoForge作为模组加载器）。\n## 1.1 Fabric加载器\n### 1.1.1 简介\nFabric加载器作为目前《我的世界》（版本>1.14）的主流加载器之一，模组库数量庞大，玩家数量稳定。部分复杂功能可能需要依赖外部模组。\n### 1.1.2 环境配置\nFabric加载器在配置环境时需要搭配正确版本的Gradle、Fabric Version、Fabric API 和 Fabric Loom。例如：对于Minecraft JE 1.20.1 Fabric版本，一般使用\n- Gradle 8.7\n- Fabric Version 0.18.3\n- Fabric API xxx\n- Fabric Loom 1.6-SNAPSHOT\n> 以上环境配置部分可详细参考[Fabric Wiki](https:\u002F\u002Fwiki.fabricmc.net\u002Fzh_cn:tutorial:setup)\n### 1.1.3 创建项目\n创建新项目时，推荐使用[Fabric官方模组模版生成器](https:\u002F\u002Ffabricmc.net\u002Fdevelop\u002Ftemplate\u002F)，按照需要设置模组信息：\n- Mod Name-模组显示的名称，不影响代码\n- Mod ID-模组标识符，嵌入代码中\n- Package Name-项目内部路径名，一般为“开发者.模组名”，也可以直接使用模组名（开发者可以作为项目“水印”\n> 推荐在Advanced Options中关闭Mojang Mappings\n## 1.2 Forge\u002FNeoForge加载器\n### 1.2.1 简介\nForge和NeoForge加载器作为目前市面上玩家数量最多的加载器，内置多种编程方法工具，在不依赖外部模组的情况下可以实现多种功能。\n### 1.2.2 环境配置\n一般情况下，1.20及以下版本使用Forge加载器，1.21及以上版本使用NeoForge加载器。其在配置时也有一定区别。在1.20\u002F1.21版本，使用Gradle 9.0和对应的Forge\u002FNeoForge版本。在官方网站可以下载完整的模版文件，一般不需要再过多调整。\n### 1.2.3 创建项目\n创建新项目时，推荐使用[Forge官方模组模版生成器](https:\u002F\u002Ffiles.minecraftforge.net\u002Fnet\u002Fminecraftforge\u002Fforge\u002F)\u002F[NeoForge官方模组模版生成器](https:\u002F\u002Fneoforged.net\u002F)。\n# 二、编程环境\n## 2.1 编辑器选择\n一般情况下，推荐使用[IntelliJ IDEA](https:\u002F\u002Fwww.jetbrains.com\u002Fzh-cn\u002Fidea\u002Fdownload\u002F?section=windows)，并安装[MinecraftDev插件](https:\u002F\u002Fplugins.jetbrains.com\u002Fplugin\u002F8327)（也可直接在编辑器设置中的插件市场下载并安装）。\n## 2.2 AI编程配置\n### 2.2.1 TRAE\n初次尝试推荐使用TRAE，在编辑器自带的插件市场即可下载安装，简单注册账号后即可使用。\n### 2.2.2 Claude Code\n对于有复杂需求或大型项目编程的项目，推荐使用Claude Code，同样可在插件市场找到。对于国内环境，推荐使用[火山引擎](https:\u002F\u002Fwww.volcengine.com\u002F)，具体配置操作详见[火山引擎官方指南](https:\u002F\u002Fwww.volcengine.com\u002Fdocs\u002F82379\u002F1928262?lang=zh)。\n## 2.3 环境配置操作\n我们可以粗略地将src文件夹内的文件当作项目文件，将src以外的部分当作环境文件。每当环境文件内容发生变化，都需要刷新Gradle，可点击代码栏右上角的刷新图标快速刷新，此时右下角会出现进度提示，若配置失败，将报错信息交给AI分析。\n# 三、模组项目结构介绍\n## 3.1 Fabric通用结构\n```\n{mod_name}\u002F\n├── build.gradle              # Gradle 构建脚本（依赖声明、任务配置）\n├── gradle.properties         # 版本属性与元数据\n├── settings.gradle           # Gradle 项目设置\n├── gradle\u002F\n│   └── wrapper\u002F              # Gradle Wrapper 配置\n├── src\u002F\n│   ├── main\u002F\n│   │   ├── java\u002F             # Java 源码根目录\n│   │   │   └── com\u002Fexample\u002Fmodid\u002F\n│   │   │       ├── {ModClass}.java          # 主初始化类\n│   │   │       ├── {ModClass}Client.java    # 客户端初始化类（可选）\n│   │   │       ├── item\u002F                    # 物品相关类\n│   │   │       ├── block\u002F                   # 方块相关类\n│   │   │       └── mixin\u002F                   # Mixin 类目录\n│   │   │           └── ExampleMixin.java\n│   │   └── resources\u002F\n│   │       ├── fabric.mod.json              # 模组元数据（必需）\n│   │       ├── {modid}.mixins.json          # Mixin 配置（如使用）\n│   │       └── assets\u002F{modid}\u002F\n│   │           ├── lang\u002F\n│   │           │   ├── en_us.json           # 英文本地化\n│   │           │   └── zh_cn.json           # 中文本地化\n│   │           ├── models\u002F\n│   │           │   ├── item\u002F                # 物品模型定义\n│   │           │   └── block\u002F               # 方块模型定义\n│   │           ├── textures\u002F\n│   │           │   ├── item\u002F                # 物品纹理\n│   │           │   └── block\u002F               # 方块纹理\n│   │           └── blockstates\u002F             # 方块状态定义\n│   └── client\u002Fjava\u002F          # 客户端专用源码（分离架构时）\n├── run\u002F                      # 开发环境运行目录（自动生成）\n└── build\u002F                    # 构建输出目录（自动生成）\n```\n## 3.2 Forge\u002FNeoForge通用结构\n```\n{mod_name}\u002F\n├── build.gradle                    # Gradle 构建脚本\n├── gradle.properties               # 版本属性配置\n├── settings.gradle                 # Gradle 项目设置\n├── gradle\u002F\n│   └── wrapper\u002F                    # Gradle Wrapper 配置\n├── src\u002F\n│   ├── main\u002F\n│   │   ├── java\u002F                   # Java 源码根目录\n│   │   │   └── com\u002Fexample\u002Fmodid\u002F\n│   │   │       ├── {ModClass}.java              # 主入口类（@Mod 注解）\n│   │   │       ├── client\u002F                      # 客户端专用代码\n│   │   │       ├── common\u002F                      # 通用代码（物品、方块等）\n│   │   │       │   ├── item\u002F\n│   │   │       │   ├── block\u002F\n│   │   │       │   └── blockentity\u002F\n│   │   │       └── datagen\u002F                     # 数据生成器（可选）\n│   │   └── resources\u002F\n│   │       ├── META-INF\u002F\n│   │       │   ├── mods.toml                    # Forge 元数据（1.13+）\n│   │       │   ├── neoforge.mods.toml           # NeoForge 元数据（1.20.1+）\n│   │       │   └── accesstransformer.cfg        # 访问转换器配置（可选）\n│   │       ├── pack.mcmeta                      # 资源包元数据\n│   │       ├── assets\u002F\n│   │       │   └── {modid}\u002F\n│   │       │       ├── blockstates\u002F             # 方块状态定义\n│   │       │       ├── lang\u002F                    # 本地化文件\n│   │       │       │   ├── en_us.json\n│   │       │       │   └── zh_cn.json\n│   │       │       ├── models\u002F\n│   │       │       │   ├── block\u002F               # 方块模型\n│   │       │       │   └── item\u002F                # 物品模型\n│   │       │       ├── textures\u002F\n│   │       │       │   ├── block\u002F               # 方块纹理\n│   │       │       │   └── item\u002F                # 物品纹理\n│   │       │       ├── sounds.json              # 音效定义\n│   │       │       └── shaders\u002F                 # 着色器（可选）\n│   │       └── data\u002F\n│   │           └── {modid}\u002F\n│   │               ├── recipes\u002F                 # 配方 JSON\n│   │               ├── loot_tables\u002F             # 战利品表\n│   │               │   └── blocks\u002F\n│   │               ├── tags\u002F                    # 数据标签\n│   │               ├── advancements\u002F            # 进度定义\n│   │               └── structures\u002F              # 结构模板（可选）\n│   ├── client\u002Fjava\u002F                # 客户端专用源码（分离架构）\n│   ├── test\u002Fjava\u002F                  # 测试代码\n│   └── generated\u002F                  # 数据生成输出目录\n├── run\u002F                            # 开发环境运行目录（自动生成）\n└── build\u002F                          # 构建输出目录（自动生成）\n```\n# 四、Vibe Coading\n使用模组模版模组生成器生成模版文件后，在代码编辑器打开模组项目文件夹。\n在侧边栏展开AI编程插件，信任项目，用自然语言描述需求，例如：“帮我构建一个我的世界模组，游戏版本为Java 1.21.1，使用Fabric加载器（详细信息见gradle.properties），我需要xxx。”\n# 五、测试与调试\n在生成所需代码后，在终端控制台输入指令进行测试：\n- 清理缓存\n```\n.\u002Fgradlew clean\n```\n- 构建模组文件\n```\n.\u002Fgradlew build\n```\n- 运行测试客户端\n```\n.\u002Fgradlew runclient\n```\n- 以上指令可组合使用，如：\n```\n.\u002Fgradlew clean build runclient\n```\n> 在控制台中可使用上下方向键切换历史输入指令，无需重复输入\n# 六、模组导出\n在运行.\u002F gradlew build指令后，项目文件中的build\u002Flib文件夹中会出现对应名称的.jar模组文件，即为最终的客户端模组文件。\n# 七、模组上传与分发\n## 7.1 平台选择\n目前主流的模组分发平台有MC百科、Modrinth和Curseforge三大平台，国内分发首选MC百科，Modrinth在国内外的接受程度都较高，Curerforge则主打国外受众。\n## 7.2 分发原则\n在Modrinth和Curseforge上传的模组可被整合为链接内置于整合包中，在玩家下载并导入启动器时从平台下载被链接的模组。\n如果允许整合包制作者随意使用模组，在模组简介务必表明分发原则（即在打包时确保整合包中使用链接而不是内置模组本体）。否则整合包的下载量将不会被计算到模组中。...","https:\u002F\u002Foxqtewbrpuiouqqjrvdv.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fpublic-media\u002F2026-07-16\u002Fca4f2822-9ed5-49d8-b804-bbd92739a9d5.png",[],[],"龙家轩","https:\u002F\u002Fweatheraintbad.com",{"id":71,"name":72,"slug":73,"description":74},[100,104,105,106,107],{"id":101,"name":102,"slug":103},"541aaa1f-7a45-4fd7-b0f4-8798d3cef066","《我的世界》","minecraft",{"id":28,"name":29,"slug":30},{"id":24,"name":25,"slug":26},{"id":32,"name":33,"slug":34},{"id":108,"name":109,"slug":110},"88d2bc27-0e0f-468a-b907-2991cb97b87b","人工智能","ai",30,"2026-02-07T00:00:00.000Z","2026-07-20T12:44:49.447Z","2026-07-16T11:26:54.204Z"]