sapdon 3.2.2 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +255 -121
- package/doc/dev/architecture.md +418 -0
- package/doc/dev/cli.md +467 -0
- package/doc/dev/core.md +751 -0
- package/doc/dev/lr-paradigm.md +85 -0
- package/doc/dev/oc.md +582 -0
- package/doc/dev/workflow.md +257 -0
- package/doc/hello_sapdon/hello_sapdon.md +3 -3
- package/doc/user/api/biome.md +558 -0
- package/doc/user/api/block.md +1530 -0
- package/doc/user/api/entity.md +685 -0
- package/doc/user/api/extra.md +231 -0
- package/doc/user/api/item.md +1125 -0
- package/doc/user/api/neo-guidebook.md +409 -0
- package/doc/user/api/recipe.md +427 -0
- package/doc/user/api/sapdon-ui.md +185 -0
- package/doc/user/api/texture.md +181 -0
- package/doc/user/config/build-config.md +83 -0
- package/doc/user/config/mod-info.md +33 -0
- package/doc/user/faq.md +160 -0
- package/doc/user/quick-start.md +122 -0
- package/doc/user/tutorials/block.md +474 -0
- package/doc/user/tutorials/entity.md +356 -0
- package/doc/user/tutorials/item.md +449 -0
- package/doc/user/tutorials/neo-guidebook-experience.md +381 -0
- package/doc/user/tutorials/neo-guidebook.md +640 -0
- package/doc/user/tutorials/recipe.md +278 -0
- package/doc/user/tutorials/sapdon-ui.md +207 -0
- package/package.json +8 -3
- package/prod/cli/index.js +1 -1
- package/prod/cli/start.js +1 -1458
- package/prod/core/index.d.ts +4564 -2166
- package/prod/core/index.js +1 -59015
- package/prod/core/package.json +7 -0
- package/prod/oc/index.d.ts +350 -108
- package/prod/oc/index.js +1 -1
- package/prod/oc/package.json +7 -0
- package/prod/utils/index.d.ts +20 -9
- package/prod/utils/index.js +1 -1
- package/prod/utils/package.json +7 -0
- package/doc/BlockAPI.md +0 -145
- package/doc/api.md +0 -128
- package/doc/oc/index.md +0 -0
- package/doc/sapdon-ts.md +0 -64
- package/src/templates/js_sapdon/build.config +0 -23
- package/src/templates/js_sapdon/main.mjs +0 -4
- package/src/templates/js_sapdon/mod.info +0 -7
- package/src/templates/js_sapdon/pack_icon.png +0 -0
- package/src/templates/js_sapdon/package.json +0 -20
- package/src/templates/js_sapdon/res/animations/animation_item.animation.json +0 -34
- package/src/templates/js_sapdon/res/animations/large_item.animation.json +0 -27
- package/src/templates/js_sapdon/res/models/blocks/crop.geo.json +0 -48
- package/src/templates/js_sapdon/res/models/entity/animation/animation_item.geo.json +0 -26
- package/src/templates/js_sapdon/res/models/entity/animation/large_item.geo.json +0 -28
- package/src/templates/js_sapdon/res/textures/blocks/none.png +0 -0
- package/src/templates/js_sapdon/res/textures/blocks/test_log_oak.png +0 -0
- package/src/templates/js_sapdon/res/textures/blocks/test_log_top.png +0 -0
- package/src/templates/js_sapdon/res/textures/items/masterball.png +0 -0
- package/src/templates/js_sapdon/scripts/custom_components/cropComponent.js +0 -50
- package/src/templates/js_sapdon/scripts/custom_components/items/gui_book.js +0 -37
- package/src/templates/js_sapdon/scripts/custom_components/registry.js +0 -25
- package/src/templates/js_sapdon/scripts/index.js +0 -0
- package/src/templates/ts_sapdon/build.config +0 -23
- package/src/templates/ts_sapdon/main.ts +0 -11
- package/src/templates/ts_sapdon/mod.info +0 -7
- package/src/templates/ts_sapdon/pack_icon.png +0 -0
- package/src/templates/ts_sapdon/package.json +0 -20
- package/src/templates/ts_sapdon/res/models/blocks/crop.geo.json +0 -48
- package/src/templates/ts_sapdon/res/textures/blocks/test_log_oak.png +0 -0
- package/src/templates/ts_sapdon/res/textures/blocks/test_log_top.png +0 -0
- package/src/templates/ts_sapdon/res/textures/items/masterball.png +0 -0
- package/src/templates/ts_sapdon/scripts/components/cropComponent.ts +0 -44
- package/src/templates/ts_sapdon/scripts/components/items/guiBook.ts +0 -36
- package/src/templates/ts_sapdon/scripts/components/registry.ts +0 -24
- package/src/templates/ts_sapdon/scripts/index.ts +0 -7
- package/src/templates/ts_sapdon/tsconfig.json +0 -117
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# 纹理系统 API 参考
|
|
2
|
+
|
|
3
|
+
本文档涵盖 Sapdon 框架的纹理系统 API,包括物品纹理、方块纹理和翻书纹理(Flipbook Textures)。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## ItemTextureManager
|
|
8
|
+
|
|
9
|
+
物品纹理管理器,用于注册和管理物品纹理。所有方法均为静态方法。
|
|
10
|
+
|
|
11
|
+
### 方法
|
|
12
|
+
|
|
13
|
+
#### `ItemTextureManager.registerTexture(name, path)`
|
|
14
|
+
|
|
15
|
+
注册一个物品纹理。
|
|
16
|
+
|
|
17
|
+
| 参数 | 类型 | 说明 |
|
|
18
|
+
|------|------|------|
|
|
19
|
+
| `name` | `string` | 纹理名称,如 `"masterball"` |
|
|
20
|
+
| `path` | `string` | 纹理路径,如 `"textures/items/masterball"` |
|
|
21
|
+
|
|
22
|
+
```javascript
|
|
23
|
+
import { ItemTextureManager } from "@sapdon/core";
|
|
24
|
+
|
|
25
|
+
ItemTextureManager.registerTexture("masterball", "textures/items/masterball");
|
|
26
|
+
ItemTextureManager.registerTexture("ruby_sword", "textures/items/ruby_sword");
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
#### `ItemTextureManager.registerTextureData(name, data)`
|
|
30
|
+
|
|
31
|
+
注册一个带有完整数据结构的物品纹理,允许传入包含 `textures` 字段的对象。
|
|
32
|
+
|
|
33
|
+
| 参数 | 类型 | 说明 |
|
|
34
|
+
|------|------|------|
|
|
35
|
+
| `name` | `string` | 纹理名称 |
|
|
36
|
+
| `data` | `object` | 纹理数据对象,至少包含 `{ textures: string \| string[] }` |
|
|
37
|
+
|
|
38
|
+
```javascript
|
|
39
|
+
ItemTextureManager.registerTextureData("ruby_ingot", {
|
|
40
|
+
textures: "textures/items/ruby_ingot"
|
|
41
|
+
});
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
#### `ItemTextureManager.getItemTextures()`
|
|
45
|
+
|
|
46
|
+
返回所有已注册的物品纹理的键值对对象。等价于 `Object.fromEntries(item_texture_sets)`。
|
|
47
|
+
|
|
48
|
+
```javascript
|
|
49
|
+
const textures = ItemTextureManager.getItemTextures();
|
|
50
|
+
// 输出: { masterball: { textures: "textures/items/masterball" }, ... }
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
#### `ItemTextureManager.toObject()`
|
|
54
|
+
|
|
55
|
+
与 `getItemTextures()` 行为相同,返回当前所有已注册纹理的纯对象表示。
|
|
56
|
+
|
|
57
|
+
```javascript
|
|
58
|
+
const obj = ItemTextureManager.toObject();
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 自动注册
|
|
62
|
+
|
|
63
|
+
每次调用 `registerTexture` 或 `registerTextureData` 时,会自动调用 `GRegistry.register("item_texture", "resource", "textures/", this)`,将当前管理器注册到全局注册表中。当执行 `registry.submit()` 时,框架会调用 `toObject()` 获取最终数据并生成 JSON 文件。
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## TerrainTextureManager
|
|
68
|
+
|
|
69
|
+
方块纹理管理器,用于注册和管理方块(地形)纹理。API 与 `ItemTextureManager` 完全一致。
|
|
70
|
+
|
|
71
|
+
### 方法
|
|
72
|
+
|
|
73
|
+
#### `TerrainTextureManager.registerTexture(name, path)`
|
|
74
|
+
|
|
75
|
+
注册一个方块纹理。
|
|
76
|
+
|
|
77
|
+
```javascript
|
|
78
|
+
import { TerrainTextureManager } from "@sapdon/core";
|
|
79
|
+
|
|
80
|
+
TerrainTextureManager.registerTexture("ruby_block", "textures/blocks/ruby_block");
|
|
81
|
+
TerrainTextureManager.registerTexture("ruby_ore", "textures/blocks/ruby_ore");
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
#### `TerrainTextureManager.registerTextureData(name, data)`
|
|
85
|
+
|
|
86
|
+
注册一个带有完整数据结构的方块纹理。
|
|
87
|
+
|
|
88
|
+
```javascript
|
|
89
|
+
TerrainTextureManager.registerTextureData("sapdon_stone", {
|
|
90
|
+
textures: "textures/blocks/sapdon_stone"
|
|
91
|
+
});
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
#### `TerrainTextureManager.getTerrainTextures()`
|
|
95
|
+
|
|
96
|
+
返回所有已注册的方块纹理键值对对象。
|
|
97
|
+
|
|
98
|
+
#### `TerrainTextureManager.toObject()`
|
|
99
|
+
|
|
100
|
+
返回当前所有已注册方块纹理的纯对象表示。
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## FlipbookTextures
|
|
105
|
+
|
|
106
|
+
翻书纹理管理器,用于注册动画纹理(逐帧切换的纹理)。它是一个纯对象,不是类。
|
|
107
|
+
|
|
108
|
+
### 方法
|
|
109
|
+
|
|
110
|
+
#### `FlipbookTextures.registerFlipbookTexture(atlas_tile, texture, ticks_per_frame, options)`
|
|
111
|
+
|
|
112
|
+
注册一个翻书纹理。
|
|
113
|
+
|
|
114
|
+
| 参数 | 类型 | 说明 |
|
|
115
|
+
|------|------|------|
|
|
116
|
+
| `atlas_tile` | `string` | 对应的图块名称,与方块纹理名称对应 |
|
|
117
|
+
| `texture` | `string` | 翻书纹理路径 |
|
|
118
|
+
| `ticks_per_frame` | `number` | 每帧持续的 tick 数(20 ticks = 1 秒) |
|
|
119
|
+
| `options` | `object` | 可选参数,会被合并到纹理对象中 |
|
|
120
|
+
|
|
121
|
+
可选参数 `options` 包含的字段(对应 Minecraft 的 `flipbook_textures.json`):
|
|
122
|
+
|
|
123
|
+
| 字段 | 类型 | 说明 |
|
|
124
|
+
|------|------|------|
|
|
125
|
+
| `atlas_index` | `number` | 纹理图集中的索引 |
|
|
126
|
+
| `atlas_tile_variant` | `number` | 图块变体 |
|
|
127
|
+
| `replicate` | `number` | 复制次数 |
|
|
128
|
+
| `blend_frames` | `boolean` | 是否混合帧过渡 |
|
|
129
|
+
|
|
130
|
+
```javascript
|
|
131
|
+
import { FlipbookTextures } from "@sapdon/core";
|
|
132
|
+
|
|
133
|
+
FlipbookTextures.registerFlipbookTexture(
|
|
134
|
+
"sapdon_lamp",
|
|
135
|
+
"textures/blocks/sapdon_lamp_animated",
|
|
136
|
+
4,
|
|
137
|
+
{ blend_frames: true }
|
|
138
|
+
);
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
#### `FlipbookTextures.toObject()`
|
|
142
|
+
|
|
143
|
+
返回翻书纹理数组。
|
|
144
|
+
|
|
145
|
+
```javascript
|
|
146
|
+
const flipbookData = FlipbookTextures.toObject();
|
|
147
|
+
// 输出: [ { atlas_tile: "sapdon_lamp", flipbook_texture: "textures/blocks/sapdon_lamp_animated", ticks_per_frame: 4, blend_frames: true } ]
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 与 GRegistry 的集成
|
|
153
|
+
|
|
154
|
+
所有纹理管理器在调用注册方法时,会自动调用 `GRegistry.register()` 注册自身。构建时调用 `registry.submit()` 后,框架会遍历注册数据,调用每个管理器的 `toObject()` 方法获取最终 JSON 结构,然后写入对应的资源包文件。
|
|
155
|
+
|
|
156
|
+
典型流程:
|
|
157
|
+
|
|
158
|
+
```javascript
|
|
159
|
+
import { ItemTextureManager, TerrainTextureManager, FlipbookTextures } from "@sapdon/core";
|
|
160
|
+
import { registry } from "@sapdon/core";
|
|
161
|
+
|
|
162
|
+
// 注册纹理
|
|
163
|
+
ItemTextureManager.registerTexture("ruby_ingot", "textures/items/ruby_ingot");
|
|
164
|
+
TerrainTextureManager.registerTexture("ruby_block", "textures/blocks/ruby_block");
|
|
165
|
+
FlipbookTextures.registerFlipbookTexture("ruby_lamp", "textures/blocks/ruby_lamp_anim", 2);
|
|
166
|
+
|
|
167
|
+
// 提交注册数据,触发 JSON 生成
|
|
168
|
+
registry.submit();
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## 生成的 JSON 文件
|
|
174
|
+
|
|
175
|
+
构建完成后,框架会根据注册数据自动生成以下文件到资源包目录:
|
|
176
|
+
|
|
177
|
+
| 文件名 | 来源 | 示例 |
|
|
178
|
+
|--------|------|------|
|
|
179
|
+
| `textures/item_texture.json` | `ItemTextureManager` | `{ "resource_pack_name": "...", "texture_data": { "ruby_ingot": { "textures": "textures/items/ruby_ingot" } } }` |
|
|
180
|
+
| `textures/terrain_texture.json` | `TerrainTextureManager` | `{ "resource_pack_name": "...", "texture_data": { "ruby_block": { "textures": "textures/blocks/ruby_block" } } }` |
|
|
181
|
+
| `textures/flipbook_textures.json` | `FlipbookTextures` | `[ { "atlas_tile": "ruby_lamp", "flipbook_texture": "textures/blocks/ruby_lamp_anim", "ticks_per_frame": 2 } ]` |
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# build.config 配置参考
|
|
2
|
+
|
|
3
|
+
`build.config` 是项目的构建配置文件,位于项目根目录,支持 `//` 和 `/* */` 注释。
|
|
4
|
+
|
|
5
|
+
## 完整字段
|
|
6
|
+
|
|
7
|
+
```jsonc
|
|
8
|
+
{
|
|
9
|
+
"formatVersion": 2,
|
|
10
|
+
"buildOptions": {
|
|
11
|
+
"useHMR": true, // 是否启用热更新
|
|
12
|
+
"buildMode": "dev", // "dev" | "prod" | "debug"
|
|
13
|
+
"buildEntry": "main.ts", // Addon 构建入口文件
|
|
14
|
+
"useJs": false, // 是否使用 JavaScript
|
|
15
|
+
"scriptEntry": "scripts/main.ts", // Script API 入口
|
|
16
|
+
"scriptOutput": "scripts/index.js", // Script API 输出路径(相对于 buildDir)
|
|
17
|
+
"buildDir": "dev/", // 构建输出目录
|
|
18
|
+
"dependencies": [
|
|
19
|
+
{
|
|
20
|
+
"module_name": "@minecraft/server",
|
|
21
|
+
"version": "2.0.0"
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"resource": {
|
|
25
|
+
"path": "res/", // 资源文件目录
|
|
26
|
+
"resourceHints": true // 是否生成资源提示文件
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"versionType": "release" // "release" | "beta"
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 字段说明
|
|
34
|
+
|
|
35
|
+
### formatVersion
|
|
36
|
+
配置格式版本,当前为 `2`。v1 配置会在读取时自动迁移。
|
|
37
|
+
|
|
38
|
+
### buildMode
|
|
39
|
+
|
|
40
|
+
| 值 | 说明 |
|
|
41
|
+
|----|------|
|
|
42
|
+
| `dev` | **完整构建**:运行 `main.ts` → 根据代码生成所有 JSON → 打包脚本 → 同步到 Minecraft 目录。Script API 输出带 sourcemap,不压缩。 |
|
|
43
|
+
| `prod` | **生产构建**:运行 `main.ts` → 生成 JSON → 打包脚本(terser 压缩混淆)→ 同步。不生成 sourcemap。 |
|
|
44
|
+
| `debug` | **仅同步**:跳过 `main.ts` 执行和 JSON 生成,跳过脚本压缩,将已有 `dev/` 目录直接同步到 Minecraft 目录。适合直接编辑 JSON 文件测试时使用。 |
|
|
45
|
+
|
|
46
|
+
### buildEntry
|
|
47
|
+
构建入口文件路径(相对项目根目录)。文件中的 `registry.submit()` 会将注册数据提交到构建系统。
|
|
48
|
+
|
|
49
|
+
### scriptEntry / scriptOutput
|
|
50
|
+
- `scriptEntry` — Script API 源码入口,会打包为单个文件
|
|
51
|
+
- `scriptOutput` — 打包后的输出路径,相对于 `buildDir/<name>_BP/`
|
|
52
|
+
|
|
53
|
+
### buildDir
|
|
54
|
+
构建输出目录,内容结构:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
<buildDir>/
|
|
58
|
+
├── <projectName>_BP/ # 行为包
|
|
59
|
+
└── <projectName>_RP/ # 资源包
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### dependencies
|
|
63
|
+
manifest.json 中的依赖声明。常见模块:
|
|
64
|
+
|
|
65
|
+
| 模块名 | 说明 |
|
|
66
|
+
|--------|------|
|
|
67
|
+
| `@minecraft/server` | 核心 Script API |
|
|
68
|
+
| `@minecraft/server-ui` | 表单 UI API |
|
|
69
|
+
| `@minecraft/server-net` | 网络 API |
|
|
70
|
+
| `@minecraft/server-admin` | 管理 API |
|
|
71
|
+
|
|
72
|
+
### resource
|
|
73
|
+
- `path` — 资源文件夹路径,内容会复制到 RP 根目录
|
|
74
|
+
- `resourceHints` — 设为 `true` 时生成 `res.hint.ts`,提供类型安全的资源引用
|
|
75
|
+
|
|
76
|
+
### versionType
|
|
77
|
+
|
|
78
|
+
| 值 | Minecraft 路径 |
|
|
79
|
+
|----|---------------|
|
|
80
|
+
| `release` | `%USERPROFILE%/AppData/Roaming/Minecraft Bedrock/...` |
|
|
81
|
+
| `beta` | `%USERPROFILE%/AppData/Local/Packages/Microsoft.MinecraftWindowsBeta_.../LocalState/...` |
|
|
82
|
+
|
|
83
|
+
可通过环境变量 `MC_PATH` 或 `MC_BETA_PATH` 覆盖。
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# mod.info 配置参考
|
|
2
|
+
|
|
3
|
+
`mod.info` 位于项目根目录,定义模组的元数据,用于生成 manifest.json。
|
|
4
|
+
|
|
5
|
+
## 格式
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"name": "hello_sapdon",
|
|
10
|
+
"description": "我的第一个 Sapdon 模组",
|
|
11
|
+
"author": "YourName",
|
|
12
|
+
"version": "1.0.0",
|
|
13
|
+
"min_engine_version": "1.19.50"
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 字段说明
|
|
18
|
+
|
|
19
|
+
| 字段 | 说明 | 必填 |
|
|
20
|
+
|------|------|------|
|
|
21
|
+
| `name` | 模组名称,会被用作 `manifest.json` 中的名字和包目录名 | 是 |
|
|
22
|
+
| `description` | 模组描述 | 是 |
|
|
23
|
+
| `author` | 作者名 | 是 |
|
|
24
|
+
| `version` | 版本号,格式 `major.minor.patch` | 是 |
|
|
25
|
+
| `min_engine_version` | 最低游戏引擎版本 | 是 |
|
|
26
|
+
|
|
27
|
+
### version 格式
|
|
28
|
+
|
|
29
|
+
版本号必须是三位数字,用 `.` 分隔,如 `1.0.0`、`2.3.1`。
|
|
30
|
+
|
|
31
|
+
### min_engine_version
|
|
32
|
+
|
|
33
|
+
指定支持的最低 Minecraft 版本。例如 `1.19.50` 表示需要 1.19.50 及以上版本。
|
package/doc/user/faq.md
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# 常见问题 (FAQ)
|
|
2
|
+
|
|
3
|
+
## 1. 如何更新框架版本?
|
|
4
|
+
|
|
5
|
+
全局更新 sapdon CLI 和核心库:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm update -g sapdon
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
如果使用的是本地项目依赖,请在项目目录中执行:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm update sapdon
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 2. 如何添加依赖?
|
|
20
|
+
|
|
21
|
+
在项目根目录的 `build.config` 文件中配置 `dependencies` 字段:
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"dependencies": [
|
|
26
|
+
{
|
|
27
|
+
"module_name": "@minecraft/server",
|
|
28
|
+
"version": "1.8.0"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"module_name": "@minecraft/server-ui",
|
|
32
|
+
"version": "1.3.0"
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
构建时框架会自动将依赖注入到行为包的 `manifest.json` 中。
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 3. 构建输出在哪?
|
|
43
|
+
|
|
44
|
+
执行 `sapdon build <项目名>` 后,构建产物会输出到项目根目录的 `dev/` 文件夹中。该目录包含完整的资源包和行为包结构,可直接用于开发测试。
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 4. 如何同步到 Minecraft?
|
|
49
|
+
|
|
50
|
+
框架支持自动同步功能。构建完成后,产物会自动复制到 Minecraft 开发包目录(`com.mojang` 开发包文件夹)。前提是已正确配置开发包路径。
|
|
51
|
+
|
|
52
|
+
如果自动复制失败,可以手动将 `dev/` 目录下的资源包和行为包复制到 Minecraft 的开发包目录。
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 5. 如何切换 release/beta 版本?
|
|
57
|
+
|
|
58
|
+
在 `build.config` 中设置 `versionType` 字段:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"versionType": "release"
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
可选值:
|
|
67
|
+
|
|
68
|
+
| 值 | 说明 |
|
|
69
|
+
|-----|------|
|
|
70
|
+
| `"release"` | 正式版 |
|
|
71
|
+
| `"beta"` | beta 测试版 |
|
|
72
|
+
|
|
73
|
+
切换后会影响生成的 `manifest.json` 中的 `header.name` 后缀和 `min_engine_version` 等配置。
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 6. 如何覆盖 Minecraft 路径?
|
|
78
|
+
|
|
79
|
+
通过设置环境变量来指定 Minecraft 开发包目录:
|
|
80
|
+
|
|
81
|
+
| 环境变量 | 说明 |
|
|
82
|
+
|----------|------|
|
|
83
|
+
| `MC_PATH` | 正式版 Minecraft 开发包路径 |
|
|
84
|
+
| `MC_BETA_PATH` | Beta 版 Minecraft 开发包路径 |
|
|
85
|
+
|
|
86
|
+
示例(Windows PowerShell):
|
|
87
|
+
|
|
88
|
+
```powershell
|
|
89
|
+
$env:MC_PATH = "C:\Users\<用户名>\AppData\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
设置后,构建完成的包会自动同步到指定路径。
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 7. 构建报错 "tsc-alias not found"?
|
|
97
|
+
|
|
98
|
+
确保已安装项目依赖:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
npm install
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
如果使用了全局安装方式,可能需要重新安装:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
npm install -g sapdon
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
此错误通常是因为依赖未正确安装或 node_modules 目录不完整导致的。
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 8. 为什么实体/物品 JSON 没有生成?
|
|
115
|
+
|
|
116
|
+
常见原因:
|
|
117
|
+
|
|
118
|
+
1. **未调用 `registry.submit()`** — 在完成所有注册后必须显式调用 `registry.submit()` 来提交数据。
|
|
119
|
+
```javascript
|
|
120
|
+
import { registry } from "@sapdon/core";
|
|
121
|
+
registry.submit();
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
2. **`dataList` 为空** — 检查注册的模块是否正确调用了注册 API,确认数据是否已推入 `dataList`。
|
|
125
|
+
|
|
126
|
+
3. **注册时机不对** — 确保 `registry.submit()` 在所有 API 注册调用之后执行。
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 9. 热更新不生效?
|
|
131
|
+
|
|
132
|
+
检查 `build.config` 中是否启用了热更新:
|
|
133
|
+
|
|
134
|
+
```json
|
|
135
|
+
{
|
|
136
|
+
"useHMR": true
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
确保 `useHMR` 设置为 `true`。如果已启用但仍不生效,请检查:
|
|
141
|
+
|
|
142
|
+
- Minecraft 是否正在运行并加载了开发包
|
|
143
|
+
- 网络连接是否正常(HMR 通过 WebSocket 通信)
|
|
144
|
+
- 修改的文件是否在框架的监听范围内
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## 10. 如何手动运行 sapdon lib?
|
|
149
|
+
|
|
150
|
+
在项目目录下直接执行:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
sapdon lib
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
该命令会手动运行 Sapdon 的核心库逻辑,通常用于调试或在某些自动化流程中单独触发库的处理流程。
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
> 如有其他问题,请加入官方 QQ 群:`810904181`
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# 快速入门
|
|
2
|
+
|
|
3
|
+
## 环境要求
|
|
4
|
+
|
|
5
|
+
- Node.js 16+
|
|
6
|
+
- npm(随 Node.js 安装)
|
|
7
|
+
- Visual Studio Code(推荐)
|
|
8
|
+
|
|
9
|
+
## 安装 CLI
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install -g sapdon
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## 创建项目
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
sapdon create hello_sapdon
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
按提示填写项目信息:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
✔ Project Name: hello_sapdon
|
|
25
|
+
✔ Project Description: 我的第一个模组
|
|
26
|
+
✔ Author Name: YourName
|
|
27
|
+
✔ Project Version: 1.0.0
|
|
28
|
+
✔ Minimum Engine Version: 1.19.50
|
|
29
|
+
✔ Language:(js/ts) ts
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 项目结构
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
hello_sapdon/
|
|
36
|
+
├── main.ts # 构建入口——定义物品、实体等
|
|
37
|
+
├── build.config # 构建配置文件
|
|
38
|
+
├── mod.info # 模组元数据
|
|
39
|
+
├── tsconfig.json # TypeScript 配置
|
|
40
|
+
├── pack_icon.png # 模组图标
|
|
41
|
+
├── res/ # 资源文件(纹理、模型、音效)
|
|
42
|
+
└── scripts/
|
|
43
|
+
├── index.ts # 脚本入口——注册组件 + 游戏内逻辑
|
|
44
|
+
└── main.ts # 游戏主类
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 编写代码
|
|
48
|
+
|
|
49
|
+
打开 `main.ts`,编写以下代码:
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
import { ItemAPI, ItemCategory, registry, ItemComponent } from '@sapdon/core'
|
|
53
|
+
|
|
54
|
+
// 创建一个基础物品
|
|
55
|
+
const item = ItemAPI.createItem(
|
|
56
|
+
'hello_sapdon:my_item',
|
|
57
|
+
ItemCategory.Items,
|
|
58
|
+
'masterball'
|
|
59
|
+
)
|
|
60
|
+
item.addComponent(ItemComponent.setDisplayName('我的物品'))
|
|
61
|
+
|
|
62
|
+
// 提交所有注册数据
|
|
63
|
+
registry.submit()
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## 构建项目
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
cd hello_sapdon
|
|
70
|
+
sapdon build .
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 构建模式
|
|
74
|
+
|
|
75
|
+
`build.config` 中的 `buildMode` 控制构建行为:
|
|
76
|
+
|
|
77
|
+
| 模式 | 行为 |
|
|
78
|
+
|------|------|
|
|
79
|
+
| `dev`(默认) | 运行 `main.ts` → 根据代码生成所有 JSON → 打包脚本(不压缩)→ 同步到 Minecraft |
|
|
80
|
+
| `prod` | 运行 `main.ts` → 生成 JSON → 打包脚本(terser 压缩)→ 同步 |
|
|
81
|
+
| `debug` | 跳过 `main.ts`,跳过压缩,直接同步已有 `dev/` 目录到 Minecraft(适合直接编辑 JSON 测试) |
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# 使用 sapdon compile 以 production 模式构建(不启动热更新)
|
|
85
|
+
sapdon compile
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 打包为 .mcaddon
|
|
89
|
+
|
|
90
|
+
构建完成后,可将输出打包为 `.mcaddon` 文件,方便分发:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
sapdon pack
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
输出文件:`dev/<项目名>.mcaddon`
|
|
97
|
+
|
|
98
|
+
## 构建输出
|
|
99
|
+
|
|
100
|
+
构建完成后,`dev/` 目录下生成:
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
dev/
|
|
104
|
+
├── hello_sapdon_BP/ # 行为包
|
|
105
|
+
│ ├── manifest.json
|
|
106
|
+
│ ├── items/my_item.json
|
|
107
|
+
│ └── scripts/index.js
|
|
108
|
+
└── hello_sapdon_RP/ # 资源包
|
|
109
|
+
├── manifest.json
|
|
110
|
+
└── textures/item_texture.json
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
同时自动同步到 Minecraft 开发包目录,启动游戏即可看到你的模组。
|
|
114
|
+
|
|
115
|
+
## 下一步
|
|
116
|
+
|
|
117
|
+
- [物品教程](./tutorials/item.md) — 学习创建各类物品
|
|
118
|
+
- [实体教程](./tutorials/entity.md) — 学习创建实体
|
|
119
|
+
- [方块教程](./tutorials/block.md) — 学习创建方块
|
|
120
|
+
- [指南书教程](./tutorials/neo-guidebook.md) — API 用法
|
|
121
|
+
- [指南书实战经验](./tutorials/neo-guidebook-experience.md) — 接入流程与踩坑清单
|
|
122
|
+
- [API 参考](./api/item.md) — 完整的 API 文档
|