• 论坛

导航

  • 主页
  • 样式指南
  • 入门
    • 概述
    • Mod的结构
    • Forge更新检查器
  • 概念
    • Sides
    • 资源
    • 注册表
    • Jar签名
  • 方块
    • 概述
    • 方块互动
  • 方块状态
    • 方块状态介绍
    • 方块状态JSON介绍
    • Forge方块状态JSON
      • 格式的总体结构
      • 子模型
  • TileEntity
    • 特殊渲染器
  • 物品
    • 主页
    • 战利品表
  • 事件
    • 基本用法
  • 网络
    • 主页
    • 概述
    • SimpleImpl
  • 数据储存
    • 能力系统
    • World Saved Data
    • 拓展实体属性
  • 工具
    • 矿物词典
  • 效果
    • 音效
  • 惯例
    • 版本命名
    • 文件位置
    • 加载阶段
  • 参与Forge开发
    • 入门
    • PR指南

Forge的方块状态

Forge有它自己的方块状态JSON格式来迎合mod开发者的需求。它引入了子模型(Submodel),子模型允许你能通过不同的部件构建最终的方块状态。你能够由不同的部件构建模型的标准(normal)方块状态,也能够根据方块的属性创建一个非常复杂的变种(variant)。

Attention

注意所有引用的模型和材质都是原版Minecraft里的。对于你自己的mod.你需要使用完整的路径! 例如: "mymod:blocks/blockTexture"。

你并不一定需要使用Forge的方块状态格式,你也可以使用原版的格式!

格式的总体结构

{
    "forge_marker": 1,
    "defaults": {
        "textures": {
            "all": "blocks/dirt"
        },
        "model": "cube_all",
        "uvlock": true
    },
    "variants": {
        "normal": [{

        }]
    }
}

这个json声明了一个简单的方块状态: 每一面都是泥土的材质。我们来仔细看看这个文件。

    "forge_marker": 1,

这个语句告诉游戏这个方块状态的json是Forge里的,而不是原版Minecraft的. 这里面的”1”是格式的版本,从而保证有一天格式改变后旧版本的方块状态json仍然可以被支持。目前只有这一个版本。

    "defaults": {
        "textures": {
            "all": "blocks/dirt"
        },
        "model": "cube_all",
        "uvlock": true
    }

这里的 defaults 部分包含所有变种的默认值。这些值可以被变种的值覆盖。defaults部分是可选的!你并不需要定义defaults,所以这一整块可以完全被省略。

    "variants": {
        "normal": [{

        }]
    }
这里定义了方块的所有变种。这个简单的泥土方块只有默认的标准(normal)变种。这个例子中它没有包含更多的信息。所有在 defaults 里定义的东西都可以放在这里。

例如:

    "normal": [{
        "textures": {
            "side": "blocks/cobblestone",
            "end": "blocks/dirt"
        },
        "model": "cube_column"
    }]

这个标准变种将会使用 cube_column 模型,使得圆石的材质在侧面,泥土的材质在顶部和底部。

子模型

为了展示子模型(Sub-Models)的使用,我们会创建一个有不同变种模型。每一个变种会使用子模型来创建一个不同的模型。 这个模型将会是一个压力板,根据状态的不同它将会加上不同的部件。

{
    "forge_marker": 1,
    "defaults": {
        "textures": {
            "texture": "blocks/planks_oak",
            "wall": "blocks/planks_oak"
        },
        "model": "pressure_plate_up",
        "uvlock": true
    },
    "variants": {
        // mossy是一个boolean值
        "mossy": {
            "true": {
                // 如果为true他将会把压力板材质从橡木木板改为苔石
                "textures": {
                    "texture": "blocks/cobblestone_mossy"
                }
            },
            "false": {
                // 什么都不改变。为了Minecraft的内部使用,这个条目必须要加上
            }
        },
        // pillarcount是一个判断我们有多少立柱的子模型的一个属性。范围是0-2
        "pillarcount": {
            0: {
                // 没有立柱。记住,这一条目必须要在这里
            },
            1: {
                // 如果这一条为true, 它将会添加墙的模型,并且和压力板的模型合并起来
                "submodel": "wall_n"
            },
            2: {
                "textures": {
                    "wall": "blocks/cobblestone"
                },
                "submodel": {
                    "pillar1": { "model": "wall_n" },
                    "pillar2": { "model": "wall_n", "y": 90 }
                }
            }
        }
    }
}

这个json里面的注释已经很清楚解释了每一部分的细节,但是下面会说一下它整体是怎么工作的: 代码中方块的定义有两个属性。一个是叫做”mossy”的boolean属性,另一个是叫做”pillarCount”的integer属性。但是注意json中的字符串是小写的(译注:注意pillarCount这一属性)。它必须是小写的否则将会无法找到。

我们没有定义说”这个属性的组合对应了模型X”,相反,我们说“这个属性的值影响了这个模型”。在这个例子当中它是非常明确的:

  • 如果mossy为true,压力板使用苔石的材质
  • 如果pillarCount值为1,它将会加上一个向北连接的墙。墙的默认材质是橡木木板
  • 如果pillarCount值为2,它将会加上两个墙,都向北连接。但是第二个墙会旋转90度。这展示了你并不需要为其创建另外的Forge系统模型。你只需要一个模型并且将其绕Y轴旋转。另外,墙的材质换成了圆石
  • 如果pillarCount值为0,没有墙会被加上

这是我们工作的结果:

The model in different variations

基于 MkDocs 使用自定义主题构建. 托管于 Read the Docs.
启用夜间模式