外观
氛围动效
外观
氛围动效
用 McItem、CraftingTable、Furnace 三个组件,可在文档里以原版 GUI 风格展示配方。支持有序合成、无序合成与熔炉烧炼三种模式,内置 581 个原版物品材质(MC Java 1.21.11),也支持自定义物品材质。
已注册物品的 id 与中文名见 已注册物品速查。
| 组件 | 用途 | 全局注册名 |
|---|---|---|
<McItem> | 单个物品槽(材质、数量、tooltip) | McItem |
<CraftingTable> | 3×3 工作台合成表 | CraftingTable |
<Furnace> | 熔炉烧炼界面 | Furnace |
三个组件已在主题中全局注册,Markdown 里直接写标签即可,不需要手动 import。
从 Minecraft Java 1.21.11 官方客户端提取 792 个物品材质 PNG,放在 public/mc-textures/item/ 目录。过滤掉动画帧与渲染覆盖层等无用文件后,注册表保留 581 个可用物品,每个物品带官方 zh_cn.json 的中文名称。
材质路径约定:
public/mc-textures/item/{id}.png组件里只传 id,即可自动匹配材质和中文名称。
把自定义材质 PNG 放进 public/mc-textures/item/,再通过 id 或 texture 引用:
public/mc-textures/item/my_custom_food.png<!-- 直接传 texture 路径 -->
<McItem name="培根" texture="/mc-textures/item/my_custom_food.png" />
<!-- 放在任意 public 子目录 -->
<McItem name="草莓蛋糕" texture="/images/food/strawberry_cake.png" />在 mc-textures.ts 中添加自定义物品:
export const mcTextures: Record<string, McItemData> = {
// ... 原版物品 ...
bacon: {
name: '培根',
texture: '/mc-textures/item/bacon.png',
},
strawberry_cake: {
name: '草莓蛋糕',
texture: '/images/food/strawberry_cake.png',
},
}添加后即可通过 id 引用:
<McItem id="bacon" />
<McItem id="strawberry_cake" :count="3" />材质规格
image-rendering: pixelated 像素化渲染,放大不模糊| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
id | String | 无 | 注册表物品 id(如 "wheat"),自动匹配材质和中文名 |
name | String | 无 | 物品名称,显示在 hover tooltip,覆盖注册表 |
texture | String | 无 | 材质图片路径,覆盖注册表 |
count | Number/String | 0 | 堆叠数量,大于 1 时显示右下角角标 |
size | 'sm' | 'md' | 'lg' | 'md' | 槽位尺寸:32px / 48px / 64px |
tooltip | Boolean | true | 是否显示 hover tooltip |
texture(图片材质) → name 首字(文字回退)材质加载失败时自动回退到物品名首字符,不会出现裂图。

<McItem id="wheat" />
<McItem name="培根" texture="/mc-textures/item/cooked_porkchop.png" />
3<McItem id="bread" :count="3" />


<McItem id="diamond" size="sm" />
<McItem id="diamond" size="md" />
<McItem id="diamond" size="lg" />| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
shaped | Boolean | false | 是否为有序合成 |
grid | Array | [] | 有序模式:3×3 二维数组,元素为物品对象或 null |
ingredients | Array | [] | 无序模式:材料列表,按顺序填入 3×3 网格 |
result | Object | null | 合成结果物品对象 |
showShapelessBadge | Boolean | true | 无序模式是否显示「无序」徽标 |
size | 'sm' | 'md' | 'lg' | 'md' | 槽位尺寸 |
每个格子可以传以下字段的任意组合:
{
id: 'wheat', // 可选 — 查注册表,自动获取材质与中文名
name: '小麦', // 可选 — 覆盖注册表名称
texture: '/xx.png', // 可选 — 覆盖注册表材质
count: 3 // 可选 — 堆叠数量
}



<CraftingTable
shaped
:grid="[
[{id:'wheat'}, {id:'wheat'}, {id:'wheat'}],
[null, null, null],
[null, null, null]
]"
:result="{id:'bread'}"
/>









<CraftingTable
shaped
:grid="[
[{id:'milk_bucket'}, {id:'milk_bucket'}, {id:'milk_bucket'}],
[{id:'sugar'}, {id:'egg'}, {id:'sugar'}],
[{id:'wheat'}, {id:'wheat'}, {id:'wheat'}]
]"
:result="{id:'cake'}"
/>

<CraftingTable
:ingredients="[
{id:'brown_mushroom'},
{id:'red_mushroom'},
{id:'bowl'}
]"
:result="{id:'mushroom_stew'}"
/>







<CraftingTable
shaped
:grid="[
[{id:'cooked_porkchop'}, null, {id:'cooked_porkchop'}],
[{id:'cooked_porkchop'}, {id:'sugar'}, {id:'cooked_porkchop'}],
[{id:'cooked_porkchop'}, null, {id:'cooked_porkchop'}]
]"
:result="{name:'蜜汁火腿', texture:'/mc-textures/item/cooked_porkchop.png'}"
/>









<CraftingTable
shaped
size="lg"
:grid="[
[{id:'gold_ingot'}, {id:'gold_ingot'}, {id:'gold_ingot'}],
[{id:'gold_ingot'}, {id:'apple'}, {id:'gold_ingot'}],
[{id:'gold_ingot'}, {id:'gold_ingot'}, {id:'gold_ingot'}]
]"
:result="{id:'golden_apple'}"
/>


<CraftingTable
shaped
size="sm"
:grid="[
[{id:'wheat'}, {id:'wheat'}],
[null, null]
]"
:result="{id:'bread'}"
/>| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
input | Object | null | 输入物品 |
result | Object | null | 烧炼结果 |
fuel | Object | null | 燃料物品 |
size | 'sm' | 'md' | 'lg' | 'md' | 槽位尺寸 |
animated | Boolean | true | 是否启用火焰动画 |


<Furnace :input="{id:'beef'}" :result="{id:'cooked_beef'}" />


<Furnace
:input="{id:'cod'}"
:result="{id:'cooked_cod'}"
:fuel="{id:'coal'}"
/>


<Furnace :input="{id:'potato'}" :result="{id:'baked_potato'}" :fuel="{id:'charcoal'}" />
<Furnace
:input="{id:'sand', name:'沙子'}"
:result="{id:'glass_bottle', name:'玻璃'}"
:animated="false"
/>组件已全局注册,在任意 .md 文件中直接写标签即可:
### 培根
<CraftingTable
:ingredients="[
{id:'cooked_porkchop'},
{name:'菜刀', texture:'/mc-textures/item/iron_sword.png'}
]"
:result="{name:'培根', texture:'/mc-textures/item/cooked_porkchop.png'}"
/>写法建议
:prop="value" 绑定,这是 Vue 动态 prop。size="lg" 等价于 :size="'lg'"。null 表示空格子,即有序合成中留空的位置。name 和 texture,不必注册。添加新的原版物品或自定义物品到注册表,编辑 mc-textures.ts:
export const mcTextures: Record<string, McItemData> = {
// ... 已有物品 ...
bacon: {
name: '培根',
texture: '/mc-textures/item/bacon.png',
},
}添加后即可在任意组件中通过 id="bacon" 引用。
backdrop-filter: blur() 与半透明背景融合深色主题。image-rendering: pixelated 确保材质放大后不模糊。:deep(.dark) 选择器自动调整配色。opacity 过渡。transform: scaleY/scaleX 模拟燃烧,GPU 加速。prefers-reduced-motion 偏好。hover: none)隐藏 tooltip,避免误触。inline-flex 布局确保窄屏不溢出。--mc-item-size 统一控制。loading="lazy" 原生懒加载。transform 与 opacity,不触发 layout 与 paint。will-change 标记动画元素。scoped,无全局 CSS 污染。| 文件 | 说明 |
|---|---|
.vitepress/theme/components/vue/McItem.vue | 物品槽组件 |
.vitepress/theme/components/vue/CraftingTable.vue | 工作台组件 |
.vitepress/theme/components/vue/Furnace.vue | 熔炉组件 |
.vitepress/theme/data/mc-textures.ts | 物品材质注册表(581 个物品) |
public/mc-textures/item/ | 原版物品材质 PNG 文件(792 个) |
.vitepress/theme/index.ts | 组件全局注册 |
套件按可扩展架构设计。要支持高炉、烟熏炉、切石机等配方类型,参照 Furnace.vue 新增同类组件即可。